[Libreoffice-commits] core.git: 2 commits - vcl/unx
Caolán McNamara (via logerrit)
logerrit at kemper.freedesktop.org
Thu May 13 12:55:27 UTC 2021
vcl/unx/gtk3/gtkinst.cxx | 432 ++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 407 insertions(+), 25 deletions(-)
New commits:
commit fb7cb76df84c7f5c5adbef20a4ddf9b5ed4af24d
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Thu May 13 12:39:50 2021 +0100
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Thu May 13 14:54:55 2021 +0200
gtk4: get word count dialog visible
Change-Id: I96d061198c54f623c366916f78655b716e1a2698
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115550
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index afadbd7d80e5..09b4807a0126 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -7491,6 +7491,7 @@ public:
}
}
};
+#endif
void update_attr_list(PangoAttrList* pAttrList, const vcl::Font& rFont)
{
@@ -7573,6 +7574,7 @@ void set_font(GtkLabel* pLabel, const vcl::Font& rFont)
pango_attr_list_unref(pAttrList);
}
+#if !GTK_CHECK_VERSION(4, 0, 0)
class GtkInstanceButton : public GtkInstanceContainer, public virtual weld::Button
{
private:
@@ -9987,7 +9989,12 @@ namespace
break;
}
}
+}
+#endif
+
+namespace
+{
gboolean filter_pango_attrs(PangoAttribute *attr, gpointer data)
{
PangoAttrType* pFilterAttrs = static_cast<PangoAttrType*>(data);
@@ -9999,6 +10006,12 @@ namespace
}
return false;
}
+}
+
+#if !GTK_CHECK_VERSION(4, 0, 0)
+
+namespace
+{
class GtkInstanceEntry : public GtkInstanceWidget, public virtual weld::Entry
{
@@ -14013,6 +14026,11 @@ public:
}
};
+}
+#endif
+
+namespace {
+
class GtkInstanceLabel : public GtkInstanceWidget, public virtual weld::Label
{
private:
@@ -14113,7 +14131,6 @@ public:
};
}
-#endif
std::unique_ptr<weld::Label> GtkInstanceFrame::weld_label_widget() const
{
@@ -17537,7 +17554,10 @@ void ConvertTree(const Reference<css::xml::dom::XNode>& xNode)
css::uno::Reference<css::xml::dom::XNode> xName = xMap->getNamedItem("name");
OUString sName(xName->getNodeValue().replace('_', '-'));
if (sName == "type-hint" || sName == "skip-taskbar-hint" ||
- sName == "can-default" || sName == "has-default")
+ sName == "can-default" || sName == "has-default" ||
+ sName == "border-width" || sName == "layout-style" ||
+ sName == "has-focus" || sName == "no-show-all" ||
+ sName == "ignore-hidden")
{
xRemoveList.push_back(xChild);
}
@@ -17551,6 +17571,8 @@ void ConvertTree(const Reference<css::xml::dom::XNode>& xNode)
OUString sName(xName->getNodeValue());
if (sName == "vbox")
xName->setNodeValue("content_area");
+ else if (sName == "accessible")
+ xRemoveList.push_back(xChild); // Yikes!, what's the replacement for this going to be
}
}
else if (xChild->getNodeName() == "object")
@@ -17562,32 +17584,59 @@ void ConvertTree(const Reference<css::xml::dom::XNode>& xNode)
xClass->setNodeValue("GtkBox");
}
else if (xChild->getNodeName() == "packing")
- xRemoveList.push_back(xChild);
-
-#if 0
- css::xml::dom::NodeType eChildType = xChild->getNodeType();
- switch ( eChildType )
{
- case css::xml::dom::NodeType_ATTRIBUTE_NODE:
- case css::xml::dom::NodeType_ELEMENT_NODE:
- case css::xml::dom::NodeType_TEXT_NODE:
- }
-#endif
+ // remove "packing" and if its grid packing insert a replacement "layout" into
+ // the associated "object"
+ auto xDoc = xChild->getOwnerDocument();
+ css::uno::Reference<css::xml::dom::XElement> xNew = xDoc->createElement("layout");
-#if 0
- if ( xChild->hasAttributes() )
- {
- Reference< css::xml::dom::XNamedNodeMap > xMap = xChild->getAttributes();
- if ( xMap.is() )
+ bool bGridPacking = false;
+
+ // iterate over all children and append them to the new element
+ for (css::uno::Reference<css::xml::dom::XNode> xCurrent = xChild->getFirstChild();
+ xCurrent.is();
+ xCurrent = xChild->getFirstChild())
+ {
+ css::uno::Reference<css::xml::dom::XNamedNodeMap> xMap = xCurrent->getAttributes();
+ if (xMap.is())
+ {
+ css::uno::Reference<css::xml::dom::XNode> xName = xMap->getNamedItem("name");
+ OUString sName(xName->getNodeValue().replace('_', '-'));
+ if (sName == "left-attach")
+ {
+ xName->setNodeValue("column");
+ bGridPacking = true;
+ }
+ if (sName == "top-attach")
+ {
+ xName->setNodeValue("row");
+ bGridPacking = true;
+ }
+ }
+ xNew->appendChild(xChild->removeChild(xCurrent));
+ }
+
+ if (bGridPacking)
{
- sal_Int32 j, nMapLen = xMap->getLength();
- for ( j = 0; j < nMapLen; ++j )
+ // go back to parent and find the object child and insert this "layout" as a
+ // new child of the object
+ auto xParent = xChild->getParentNode();
+ auto xInsertIn = xParent->getFirstChild();
+ for (css::uno::Reference<css::xml::dom::XNode> xObjectCandidate = xParent->getFirstChild();
+ xObjectCandidate.is();
+ xObjectCandidate = xObjectCandidate->getNextSibling())
{
- Reference< css::xml::dom::XNode > xAttr = xMap->item(j);
+ if (xObjectCandidate->getNodeName() == "object")
+ {
+ xObjectCandidate->appendChild(xNew);
+ break;
+ }
}
}
+
+ xRemoveList.push_back(xChild);
}
-#endif
+
if (!xChild->hasChildNodes())
continue;
ConvertTree(xChild);
@@ -18477,16 +18526,11 @@ public:
virtual std::unique_ptr<weld::Label> weld_label(const OString &id) override
{
-#if !GTK_CHECK_VERSION(4, 0, 0)
GtkLabel* pLabel = GTK_LABEL(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pLabel)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pLabel));
return std::make_unique<GtkInstanceLabel>(pLabel, this, false);
-#else
- (void)id;
- return nullptr;
-#endif
}
virtual std::unique_ptr<weld::TextView> weld_text_view(const OString &id) override
@@ -18654,8 +18698,12 @@ void GtkInstanceWidget::help_hierarchy_foreach(const std::function<bool(const OS
weld::Builder* GtkInstance::CreateBuilder(weld::Widget* pParent, const OUString& rUIRoot, const OUString& rUIFile)
{
#if GTK_CHECK_VERSION(4, 0, 0)
- if (rUIFile != "svt/ui/javadisableddialog.ui")
+ if (rUIFile != "svt/ui/javadisableddialog.ui" &&
+ rUIFile != "modules/swriter/ui/wordcount.ui")
+ {
+ SAL_WARN( "vcl.gtk", rUIFile);
return SalInstance::CreateBuilder(pParent, rUIRoot, rUIFile);
+ }
#endif
GtkInstanceWidget* pParentWidget = dynamic_cast<GtkInstanceWidget*>(pParent);
if (pParent && !pParentWidget) //remove when complete
commit 8ccabd1c4e7263b3eb28eebed3d4fcc184b477e0
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Wed May 12 17:32:26 2021 +0100
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Thu May 13 14:54:36 2021 +0200
gtk4: add a mechanism to support reusing the same .uis for gtk3 and gtk4
well, a base so experiment on anyway
gtk4-builder-tool simplify --3to4 isn't sufficient to do what we need
Change-Id: Ic5f5be90f9b9775eadecc7eaa6881c75cc2041ef
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115549
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index d76344d7c64d..afadbd7d80e5 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -44,11 +44,8 @@
#if !GTK_CHECK_VERSION(4, 0, 0)
#include "a11y/atkwrapper.hxx"
#endif
-#include <com/sun/star/lang/IllegalArgumentException.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/io/TempFile.hpp>
#include <com/sun/star/datatransfer/XTransferable.hpp>
#include <com/sun/star/datatransfer/clipboard/XClipboard.hpp>
#include <com/sun/star/datatransfer/clipboard/XClipboardEx.hpp>
@@ -57,6 +54,14 @@
#include <com/sun/star/datatransfer/clipboard/XFlushableClipboard.hpp>
#include <com/sun/star/datatransfer/clipboard/XSystemClipboard.hpp>
#include <com/sun/star/datatransfer/dnd/DNDConstants.hpp>
+#include <com/sun/star/lang/IllegalArgumentException.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XSingleServiceFactory.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/xml/dom/DocumentBuilder.hpp>
+#include <com/sun/star/xml/sax/Writer.hpp>
+#include <com/sun/star/xml/sax/XSAXSerializable.hpp>
#include <comphelper/lok.hxx>
#include <comphelper/processfactory.hxx>
#include <comphelper/sequence.hxx>
@@ -3606,7 +3611,6 @@ namespace
return OUStringToOString(rStr.replaceFirst("~", "_"), RTL_TEXTENCODING_UTF8);
}
-#if !GTK_CHECK_VERSION(4, 0, 0)
OUString get_label(GtkLabel* pLabel)
{
const gchar* pStr = gtk_label_get_label(pLabel);
@@ -3628,7 +3632,6 @@ namespace
{
gtk_button_set_label(pButton, MapToGtkAccelerator(rText).getStr());
}
-#endif
OUString get_title(GtkWindow* pWindow)
{
@@ -17315,12 +17318,19 @@ public:
}
};
+}
+
+#endif
+
+namespace {
+
gboolean signalTooltipQuery(GtkWidget* pWidget, gint /*x*/, gint /*y*/,
gboolean /*keyboard_mode*/, GtkTooltip *tooltip)
{
const ImplSVHelpData& aHelpData = ImplGetSVHelpData();
if (aHelpData.mbBalloonHelp) // extended tips
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
// by default use accessible description
AtkObject* pAtkObject = gtk_widget_get_accessible(pWidget);
const char* pDesc = pAtkObject ? atk_object_get_description(pAtkObject) : nullptr;
@@ -17329,6 +17339,7 @@ public:
gtk_tooltip_set_text(tooltip, pDesc);
return true;
}
+#endif
// fallback to the mechanism which needs help installed
OString sHelpId = ::get_help_id(pWidget);
@@ -17354,6 +17365,12 @@ public:
return false;
}
+}
+
+#if !GTK_CHECK_VERSION(4, 0, 0)
+
+namespace {
+
class GtkInstancePopover : public GtkInstanceContainer, public virtual weld::Popover
{
private:
@@ -17477,6 +17494,11 @@ void ensure_disable_ctrl_page_up_down_bindings()
}
}
+}
+#endif
+
+namespace {
+
bool IsAllowedBuiltInIcon(std::u16string_view iconName)
{
// limit the named icons to those known by VclBuilder
@@ -17484,11 +17506,155 @@ bool IsAllowedBuiltInIcon(std::u16string_view iconName)
}
}
+
+namespace {
+
+#if GTK_CHECK_VERSION(4, 0, 0)
+void ConvertTree(const Reference<css::xml::dom::XNode>& xNode)
+{
+ css::uno::Reference<css::xml::dom::XNodeList> xNodeList = xNode->getChildNodes();
+ if (!xNodeList.is())
+ return;
+ std::vector<css::uno::Reference<css::xml::dom::XNode>> xRemoveList;
+ sal_Int32 nNodeCount = xNodeList->getLength();
+ for (sal_Int32 i = 0; i < nNodeCount; ++i)
+ {
+ css::uno::Reference<css::xml::dom::XNode> xChild = xNodeList->item(i);
+
+ if (xChild->getNodeName() == "requires")
+ {
+ css::uno::Reference<css::xml::dom::XNamedNodeMap> xMap = xChild->getAttributes();
+ css::uno::Reference<css::xml::dom::XNode> xLib = xMap->getNamedItem("lib");
+ assert(xLib->getNodeValue() == "gtk+");
+ xLib->setNodeValue("gtk");
+ css::uno::Reference<css::xml::dom::XNode> xVersion = xMap->getNamedItem("version");
+ assert(xVersion->getNodeValue() == "3.20");
+ xVersion->setNodeValue("4.0");
+ }
+ else if (xChild->getNodeName() == "property")
+ {
+ css::uno::Reference<css::xml::dom::XNamedNodeMap> xMap = xChild->getAttributes();
+ css::uno::Reference<css::xml::dom::XNode> xName = xMap->getNamedItem("name");
+ OUString sName(xName->getNodeValue().replace('_', '-'));
+ if (sName == "type-hint" || sName == "skip-taskbar-hint" ||
+ sName == "can-default" || sName == "has-default")
+ {
+ xRemoveList.push_back(xChild);
+ }
+ }
+ else if (xChild->getNodeName() == "child")
+ {
+ css::uno::Reference<css::xml::dom::XNamedNodeMap> xMap = xChild->getAttributes();
+ css::uno::Reference<css::xml::dom::XNode> xName = xMap->getNamedItem("internal-child");
+ if (xName)
+ {
+ OUString sName(xName->getNodeValue());
+ if (sName == "vbox")
+ xName->setNodeValue("content_area");
+ }
+ }
+ else if (xChild->getNodeName() == "object")
+ {
+ css::uno::Reference<css::xml::dom::XNamedNodeMap> xMap = xChild->getAttributes();
+ css::uno::Reference<css::xml::dom::XNode> xClass = xMap->getNamedItem("class");
+ OUString sClass(xClass->getNodeValue());
+ if (sClass == "GtkButtonBox")
+ xClass->setNodeValue("GtkBox");
+ }
+ else if (xChild->getNodeName() == "packing")
+ xRemoveList.push_back(xChild);
+
+#if 0
+ css::xml::dom::NodeType eChildType = xChild->getNodeType();
+ switch ( eChildType )
+ {
+ case css::xml::dom::NodeType_ATTRIBUTE_NODE:
+ case css::xml::dom::NodeType_ELEMENT_NODE:
+ case css::xml::dom::NodeType_TEXT_NODE:
+ }
#endif
-#if !GTK_CHECK_VERSION(4, 0, 0)
+#if 0
+ if ( xChild->hasAttributes() )
+ {
+ Reference< css::xml::dom::XNamedNodeMap > xMap = xChild->getAttributes();
+ if ( xMap.is() )
+ {
+ sal_Int32 j, nMapLen = xMap->getLength();
+ for ( j = 0; j < nMapLen; ++j )
+ {
+ Reference< css::xml::dom::XNode > xAttr = xMap->item(j);
+ }
+ }
+ }
+#endif
+ if (!xChild->hasChildNodes())
+ continue;
+ ConvertTree(xChild);
+ }
+ for (auto& xRemove : xRemoveList)
+ xNode->removeChild(xRemove);
+}
+#endif
-namespace {
+void load_ui_file(GtkBuilder* pBuilder, const OUString& rUri)
+{
+ GError *err = nullptr;
+
+#if GTK_CHECK_VERSION(4, 0, 0)
+ // load the xml
+ css::uno::Reference<css::uno::XComponentContext> xContext = ::comphelper::getProcessComponentContext();
+ css::uno::Reference<css::xml::dom::XDocumentBuilder> xBuilder = xml::dom::DocumentBuilder::create(xContext);
+ css::uno::Reference<css::xml::dom::XDocument> xDocument = xBuilder->parseURI(rUri);
+
+ // convert it from gtk3 to gtk4
+ ConvertTree(xDocument);
+
+ css::uno::Reference<css::beans::XPropertySet> xTempFile(io::TempFile::create(xContext), css::uno::UNO_QUERY);
+ css::uno::Reference<css::io::XStream> xTempStream(xTempFile, css::uno::UNO_QUERY_THROW);
+ xTempFile->setPropertyValue("RemoveFile", css::uno::makeAny(false));
+
+ // serialize it back to xml
+ css::uno::Reference<css::xml::sax::XSAXSerializable> xSerializer(xDocument, css::uno::UNO_QUERY);
+ css::uno::Reference<css::xml::sax::XWriter> xWriter = css::xml::sax::Writer::create(xContext);
+ css::uno::Reference<css::io::XOutputStream> xTempOut = xTempStream->getOutputStream();
+ xWriter->setOutputStream(xTempOut);
+ xSerializer->serialize(css::uno::Reference<css::xml::sax::XDocumentHandler>(xWriter, css::uno::UNO_QUERY_THROW),
+ css::uno::Sequence<css::beans::StringPair>());
+
+ // feed it to GtkBuilder
+ css::uno::Reference<css::io::XSeekable> xTempSeek(xTempStream, css::uno::UNO_QUERY_THROW);
+ xTempSeek->seek(0);
+ auto xInput = xTempStream->getInputStream();
+ css::uno::Sequence<sal_Int8> bytes;
+ sal_Int32 nToRead = xInput->available();
+ while (true)
+ {
+ sal_Int32 nRead = xInput->readBytes(bytes, std::max<sal_Int32>(nToRead, 4096));
+ if (!nRead)
+ break;
+ auto rc = gtk_builder_add_from_string(pBuilder, reinterpret_cast<const gchar*>(bytes.getArray()), nRead, &err);
+ if (!rc)
+ {
+ SAL_WARN( "vcl.gtk", "GtkInstanceBuilder: error when calling gtk_builder_add_from_string: " << err->message);
+ g_error_free(err);
+ }
+ assert(rc && "could not load UI file");
+ // in the real world the first loop has read the entire file because its all 'available' without blocking
+ }
+#else
+ OUString aPath;
+ osl::FileBase::getSystemPathFromFileURL(rUri, aPath);
+ auto rc = gtk_builder_add_from_file(pBuilder, OUStringToOString(aPath, RTL_TEXTENCODING_UTF8).getStr(), &err);
+
+ if (!rc)
+ {
+ SAL_WARN( "vcl.gtk", "GtkInstanceBuilder: error when calling gtk_builder_add_from_file: " << err->message);
+ g_error_free(err);
+ }
+ assert(rc && "could not load UI file");
+#endif
+}
class GtkInstanceBuilder : public weld::Builder
{
@@ -17535,6 +17701,7 @@ private:
}
}
}
+#if !GTK_CHECK_VERSION(4, 0, 0)
else if (GTK_IS_TOOL_BUTTON(pWidget))
{
GtkToolButton* pToolButton = GTK_TOOL_BUTTON(pWidget);
@@ -17560,9 +17727,14 @@ private:
gtk_widget_set_tooltip_text(pWidget, label);
}
}
+#endif
//set helpids
+#if !GTK_CHECK_VERSION(4, 0, 0)
const gchar* pStr = gtk_buildable_get_name(GTK_BUILDABLE(pWidget));
+#else
+ const gchar* pStr = gtk_buildable_get_buildable_id(GTK_BUILDABLE(pWidget));
+#endif
size_t nLen = pStr ? strlen(pStr) : 0;
if (nLen)
{
@@ -17722,8 +17894,10 @@ public:
, m_bAllowCycleFocusOut(bAllowCycleFocusOut)
{
OUString sHelpRoot(rUIFile);
+#if !GTK_CHECK_VERSION(4, 0, 0)
ensure_intercept_drawing_area_accessibility();
ensure_disable_ctrl_page_up_down_bindings();
+#endif
sal_Int32 nIdx = sHelpRoot.lastIndexOf('.');
if (nIdx != -1)
@@ -17734,18 +17908,11 @@ public:
m_aUILang = Application::GetSettings().GetUILanguageTag().getBcp47();
OUString aUri(rUIRoot + rUIFile);
- OUString aPath;
- osl::FileBase::getSystemPathFromFileURL(aUri, aPath);
+
m_pBuilder = gtk_builder_new();
m_nNotifySignalId = g_signal_connect_data(G_OBJECT(m_pBuilder), "notify", G_CALLBACK(signalNotify), this, nullptr, G_CONNECT_AFTER);
- GError *err = nullptr;
- auto rc = gtk_builder_add_from_file(m_pBuilder, OUStringToOString(aPath, RTL_TEXTENCODING_UTF8).getStr(), &err);
- if (!rc)
- {
- SAL_WARN( "vcl.gtk", "GtkInstanceBuilder: error when calling gtk_builder_add_from_file: " << err->message);
- g_error_free(err);
- }
- assert(rc && "could not load UI file");
+
+ load_ui_file(m_pBuilder, aUri);
m_pObjectList = gtk_builder_get_objects(m_pBuilder);
g_slist_foreach(m_pObjectList, postprocess, this);
@@ -17868,6 +18035,7 @@ public:
virtual std::unique_ptr<weld::Window> create_screenshot_window() override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkWidget* pTopLevel = nullptr;
for (GSList* l = m_pObjectList; l; l = g_slist_next(l))
@@ -17902,6 +18070,9 @@ public:
if (m_pParentWidget)
gtk_window_set_transient_for(pDialog, GTK_WINDOW(widget_get_root(m_pParentWidget)));
return std::make_unique<GtkInstanceDialog>(pDialog, this, true);
+#else
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::Widget> weld_widget(const OString &id) override
@@ -17915,78 +18086,120 @@ public:
virtual std::unique_ptr<weld::Container> weld_container(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkContainer* pContainer = GTK_CONTAINER(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pContainer)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pContainer));
return std::make_unique<GtkInstanceContainer>(pContainer, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::Box> weld_box(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkBox* pBox = GTK_BOX(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pBox)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pBox));
return std::make_unique<GtkInstanceBox>(pBox, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::Paned> weld_paned(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkPaned* pPaned = GTK_PANED(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pPaned)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pPaned));
return std::make_unique<GtkInstancePaned>(pPaned, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::Frame> weld_frame(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkFrame* pFrame = GTK_FRAME(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pFrame)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pFrame));
return std::make_unique<GtkInstanceFrame>(pFrame, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::ScrolledWindow> weld_scrolled_window(const OString &id, bool bUserManagedScrolling = false) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkScrolledWindow* pScrolledWindow = GTK_SCROLLED_WINDOW(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pScrolledWindow)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pScrolledWindow));
return std::make_unique<GtkInstanceScrolledWindow>(pScrolledWindow, this, false, bUserManagedScrolling);
+#else
+ (void)id;
+ (void)bUserManagedScrolling;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::Notebook> weld_notebook(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkNotebook* pNotebook = GTK_NOTEBOOK(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pNotebook)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pNotebook));
return std::make_unique<GtkInstanceNotebook>(pNotebook, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::Button> weld_button(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkButton* pButton = GTK_BUTTON(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pButton)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pButton));
return std::make_unique<GtkInstanceButton>(pButton, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::MenuButton> weld_menu_button(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkMenuButton* pButton = GTK_MENU_BUTTON(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pButton)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pButton));
return std::make_unique<GtkInstanceMenuButton>(pButton, nullptr, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::MenuToggleButton> weld_menu_toggle_button(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkMenuButton* pButton = GTK_MENU_BUTTON(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pButton)
return nullptr;
@@ -17994,105 +18207,164 @@ public:
// gtk doesn't come with exactly the same concept
GtkBuilder* pMenuToggleButton = makeMenuToggleButtonBuilder();
return std::make_unique<GtkInstanceMenuToggleButton>(pMenuToggleButton, pButton, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::LinkButton> weld_link_button(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkLinkButton* pButton = GTK_LINK_BUTTON(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pButton)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pButton));
return std::make_unique<GtkInstanceLinkButton>(pButton, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::ToggleButton> weld_toggle_button(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkToggleButton* pToggleButton = GTK_TOGGLE_BUTTON(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pToggleButton)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pToggleButton));
return std::make_unique<GtkInstanceToggleButton>(pToggleButton, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::RadioButton> weld_radio_button(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkRadioButton* pRadioButton = GTK_RADIO_BUTTON(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pRadioButton)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pRadioButton));
return std::make_unique<GtkInstanceRadioButton>(pRadioButton, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::CheckButton> weld_check_button(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkCheckButton* pCheckButton = GTK_CHECK_BUTTON(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pCheckButton)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pCheckButton));
return std::make_unique<GtkInstanceCheckButton>(pCheckButton, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::Scale> weld_scale(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkScale* pScale = GTK_SCALE(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pScale)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pScale));
return std::make_unique<GtkInstanceScale>(pScale, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::ProgressBar> weld_progress_bar(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkProgressBar* pProgressBar = GTK_PROGRESS_BAR(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pProgressBar)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pProgressBar));
return std::make_unique<GtkInstanceProgressBar>(pProgressBar, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::Spinner> weld_spinner(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkSpinner* pSpinner = GTK_SPINNER(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pSpinner)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pSpinner));
return std::make_unique<GtkInstanceSpinner>(pSpinner, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::Image> weld_image(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkImage* pImage = GTK_IMAGE(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pImage)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pImage));
return std::make_unique<GtkInstanceImage>(pImage, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::Calendar> weld_calendar(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkCalendar* pCalendar = GTK_CALENDAR(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pCalendar)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pCalendar));
return std::make_unique<GtkInstanceCalendar>(pCalendar, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::Entry> weld_entry(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkEntry* pEntry = GTK_ENTRY(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pEntry)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pEntry));
return std::make_unique<GtkInstanceEntry>(pEntry, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::SpinButton> weld_spin_button(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkSpinButton* pSpinButton = GTK_SPIN_BUTTON(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pSpinButton)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pSpinButton));
return std::make_unique<GtkInstanceSpinButton>(pSpinButton, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::MetricSpinButton> weld_metric_spin_button(const OString& id, FieldUnit eUnit) override
@@ -18102,15 +18374,21 @@ public:
virtual std::unique_ptr<weld::FormattedSpinButton> weld_formatted_spin_button(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkSpinButton* pSpinButton = GTK_SPIN_BUTTON(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pSpinButton)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pSpinButton));
return std::make_unique<GtkInstanceFormattedSpinButton>(pSpinButton, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::ComboBox> weld_combo_box(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkComboBox* pComboBox = GTK_COMBO_BOX(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pComboBox)
return nullptr;
@@ -18145,28 +18423,43 @@ public:
*/
GtkBuilder* pComboBuilder = makeComboBoxBuilder();
return std::make_unique<GtkInstanceComboBox>(pComboBuilder, pComboBox, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::TreeView> weld_tree_view(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkTreeView* pTreeView = GTK_TREE_VIEW(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pTreeView)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pTreeView));
return std::make_unique<GtkInstanceTreeView>(pTreeView, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::IconView> weld_icon_view(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkIconView* pIconView = GTK_ICON_VIEW(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pIconView)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pIconView));
return std::make_unique<GtkInstanceIconView>(pIconView, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::EntryTreeView> weld_entry_tree_view(const OString& containerid, const OString& entryid, const OString& treeviewid) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkContainer* pContainer = GTK_CONTAINER(gtk_builder_get_object(m_pBuilder, containerid.getStr()));
if (!pContainer)
return nullptr;
@@ -18174,68 +18467,110 @@ public:
return std::make_unique<GtkInstanceEntryTreeView>(pContainer, this, false,
weld_entry(entryid),
weld_tree_view(treeviewid));
+#else
+ (void)containerid;
+ (void)entryid;
+ (void)treeviewid;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::Label> weld_label(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkLabel* pLabel = GTK_LABEL(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pLabel)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pLabel));
return std::make_unique<GtkInstanceLabel>(pLabel, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::TextView> weld_text_view(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkTextView* pTextView = GTK_TEXT_VIEW(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pTextView)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pTextView));
return std::make_unique<GtkInstanceTextView>(pTextView, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::Expander> weld_expander(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkExpander* pExpander = GTK_EXPANDER(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pExpander)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pExpander));
return std::make_unique<GtkInstanceExpander>(pExpander, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::DrawingArea> weld_drawing_area(const OString &id, const a11yref& rA11y,
FactoryFunction /*pUITestFactoryFunction*/, void* /*pUserData*/) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkDrawingArea* pDrawingArea = GTK_DRAWING_AREA(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pDrawingArea)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pDrawingArea));
return std::make_unique<GtkInstanceDrawingArea>(pDrawingArea, this, rA11y, false);
+#else
+ (void)id;
+ (void)rA11y;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::Menu> weld_menu(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkMenu* pMenu = GTK_MENU(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pMenu)
return nullptr;
return std::make_unique<GtkInstanceMenu>(pMenu, true);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::Popover> weld_popover(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkPopover* pPopover = GTK_POPOVER(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pPopover)
return nullptr;
return std::make_unique<GtkInstancePopover>(pPopover, this, true);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::Toolbar> weld_toolbar(const OString &id) override
{
+#if !GTK_CHECK_VERSION(4, 0, 0)
GtkToolbar* pToolbar = GTK_TOOLBAR(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pToolbar)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pToolbar));
return std::make_unique<GtkInstanceToolbar>(pToolbar, this, false);
+#else
+ (void)id;
+ return nullptr;
+#endif
}
virtual std::unique_ptr<weld::SizeGroup> create_size_group() override
@@ -18245,7 +18580,6 @@ public:
};
}
-#endif
void GtkInstanceWindow::help()
{
@@ -18319,15 +18653,15 @@ void GtkInstanceWidget::help_hierarchy_foreach(const std::function<bool(const OS
weld::Builder* GtkInstance::CreateBuilder(weld::Widget* pParent, const OUString& rUIRoot, const OUString& rUIFile)
{
-#if !GTK_CHECK_VERSION(4, 0, 0)
+#if GTK_CHECK_VERSION(4, 0, 0)
+ if (rUIFile != "svt/ui/javadisableddialog.ui")
+ return SalInstance::CreateBuilder(pParent, rUIRoot, rUIFile);
+#endif
GtkInstanceWidget* pParentWidget = dynamic_cast<GtkInstanceWidget*>(pParent);
if (pParent && !pParentWidget) //remove when complete
return SalInstance::CreateBuilder(pParent, rUIRoot, rUIFile);
GtkWidget* pBuilderParent = pParentWidget ? pParentWidget->getWidget() : nullptr;
return new GtkInstanceBuilder(pBuilderParent, rUIRoot, rUIFile, nullptr, true);
-#else
- return SalInstance::CreateBuilder(pParent, rUIRoot, rUIFile);
-#endif
}
#if !GTK_CHECK_VERSION(4, 0, 0)
More information about the Libreoffice-commits
mailing list