summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2021-06-03 11:14:09 +0100
committerCaolán McNamara <caolanm@redhat.com>2021-06-03 15:44:17 +0200
commit8da12900319696519564d4ae3764d063e94901f8 (patch)
tree3579b89a1dfa0e44dec84037f2220329f3004641 /vcl
parent8d98dd8b3896c14af057e90e3a327172a9262e03 (diff)
gtk4: get basic menubutton popovers working
Change-Id: Id205761521d9eda50bb858d86e7235e273691568 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116666 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/unx/gtk3/gtkinst.cxx23
1 files changed, 15 insertions, 8 deletions
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index c469a06010ec..128b63450be9 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -9611,7 +9611,11 @@ public:
GtkInstanceWidget* pPopoverWidget = dynamic_cast<GtkInstanceWidget*>(pPopover);
m_pPopover = pPopoverWidget ? pPopoverWidget->getWidget() : nullptr;
-#if !GTK_CHECK_VERSION(4, 0, 0)
+#if GTK_CHECK_VERSION(4, 0, 0)
+ gtk_menu_button_set_popover(m_pMenuButton, m_pPopover);
+ return;
+#else
+
#if defined(GDK_WINDOWING_X11)
if (!m_pMenuHack)
{
@@ -9631,9 +9635,7 @@ public:
}
}
#endif
-#endif
-#if !GTK_CHECK_VERSION(4, 0, 0)
if (m_pMenuHack)
{
GtkWidget* pPlaceHolder = gtk_popover_new(GTK_WIDGET(m_pMenuButton));
@@ -9650,18 +9652,14 @@ public:
gtk_menu_button_set_popover(m_pMenuButton, pPlaceHolder);
}
else
-#endif
{
gtk_menu_button_set_popover(m_pMenuButton, m_pPopover);
if (m_pPopover)
{
-#if !GTK_CHECK_VERSION(4, 0, 0)
gtk_widget_show_all(m_pPopover);
-#else
- gtk_popover_popup(GTK_POPOVER(m_pPopover));
-#endif
}
}
+#endif
}
void set_menu(weld::Menu* pMenu);
@@ -21637,6 +21635,15 @@ ConvertResult Convert3To4(const Reference<css::xml::dom::XNode>& xNode)
{
xClass->setNodeValue("GtkPicture");
}
+ else if (sClass == "GtkPopover" && !bHasVisible)
+ {
+ auto xVisible = CreateProperty(xDoc, "visible", "False");
+ auto xFirstChild = xChild->getFirstChild();
+ if (xFirstChild.is())
+ xChild->insertBefore(xVisible, xFirstChild);
+ else
+ xChild->appendChild(xVisible);
+ }
}
xChild = xNextChild;