[Libreoffice-commits] core.git: vcl/unx
Caolán McNamara (via logerrit)
logerrit at kemper.freedesktop.org
Fri May 1 07:29:04 UTC 2020
vcl/unx/gtk3/gtk3gtkinst.cxx | 24 ++++++++++++++++++++----
1 file changed, 20 insertions(+), 4 deletions(-)
New commits:
commit b3a548a1b3155abad5f134955a6bda8ec133b032
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Thu Apr 30 21:02:04 2020 +0100
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Fri May 1 09:28:28 2020 +0200
Related: tdf#132540 keep placeholder popover on same side as menu
Change-Id: I344dde9e04496612641bca502e7aac53506f920a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93232
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index c9ef82ec8657..cce6c4e6eefd 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -6884,7 +6884,7 @@ void do_ungrab(GtkWidget* pWidget)
gdk_device_ungrab(pKeyboard, nCurrentTime);
}
-void show_menu_older_gtk(GtkWidget* pMenuButton, GtkWindow* pMenu)
+GtkPositionType show_menu_older_gtk(GtkWidget* pMenuButton, GtkWindow* pMenu)
{
//place the toplevel just below its launcher button
GtkWidget* pToplevel = gtk_widget_get_toplevel(pMenuButton);
@@ -6921,6 +6921,8 @@ void show_menu_older_gtk(GtkWidget* pMenuButton, GtkWindow* pMenu)
x = 0;
}
+ GtkPositionType ePosUsed = GTK_POS_BOTTOM;
+
gint endy = y + nMenuHeight;
gint nMissingBelow = endy - aWorkArea.Bottom();
if (nMissingBelow > 0)
@@ -6935,14 +6937,20 @@ void show_menu_older_gtk(GtkWidget* pMenuButton, GtkWindow* pMenu)
{
nMenuHeight -= nMissingAbove;
y = aWorkArea.Top();
+ ePosUsed = GTK_POS_TOP;
}
gtk_widget_set_size_request(GTK_WIDGET(pMenu), nMenuWidth, nMenuHeight);
}
else
+ {
y = nNewY;
+ ePosUsed = GTK_POS_TOP;
+ }
}
gtk_window_move(pMenu, x, y);
+
+ return ePosUsed;
}
bool show_menu_newer_gtk(GtkWidget* pComboBox, GtkWindow* pMenu)
@@ -6991,8 +6999,12 @@ bool show_menu_newer_gtk(GtkWidget* pComboBox, GtkWindow* pMenu)
return true;
}
-void show_menu(GtkWidget* pMenuButton, GtkWindow* pMenu)
+GtkPositionType show_menu(GtkWidget* pMenuButton, GtkWindow* pMenu)
{
+ // we only use ePosUsed in the replacement-for-X-popover case of a
+ // MenuButton, so we only need it when show_menu_older_gtk is used
+ GtkPositionType ePosUsed = GTK_POS_BOTTOM;
+
// tdf#120764 It isn't allowed under wayland to have two visible popups that share
// the same top level parent. The problem is that since gtk 3.24 tooltips are also
// implemented as popups, which means that we cannot show any popup if there is a
@@ -7009,10 +7021,12 @@ void show_menu(GtkWidget* pMenuButton, GtkWindow* pMenu)
// try with gdk_window_move_to_rect, but if that's not available, try without
if (!show_menu_newer_gtk(pMenuButton, pMenu))
- show_menu_older_gtk(pMenuButton, pMenu);
+ ePosUsed = show_menu_older_gtk(pMenuButton, pMenu);
gtk_widget_show_all(GTK_WIDGET(pMenu));
gtk_widget_grab_focus(GTK_WIDGET(pMenu));
do_grab(GTK_WIDGET(pMenu));
+
+ return ePosUsed;
}
class GtkInstanceMenuButton : public GtkInstanceToggleButton, public MenuHelper, public virtual weld::MenuButton
@@ -7073,7 +7087,9 @@ private:
gtk_container_add(GTK_CONTAINER(m_pMenuHack), pChild);
g_object_unref(pChild);
- show_menu(GTK_WIDGET(m_pMenuButton), m_pMenuHack);
+ GtkPositionType ePosUsed = show_menu(GTK_WIDGET(m_pMenuButton), m_pMenuHack);
+ // tdf#132540 keep the placeholder popover on this same side as the replacement menu
+ gtk_popover_set_position(gtk_menu_button_get_popover(m_pMenuButton), ePosUsed);
}
}
More information about the Libreoffice-commits
mailing list