vcl/unx/gtk3/gtksalmenu.cxx | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-)
New commits: commit 18b27b017ea8221b33f7e169f7725d3b9fc13c53 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Mon May 10 20:12:30 2021 +0100 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Tue May 11 09:42:39 2021 +0200 gtk4: get context menus working Change-Id: I14fe637ce3539196cffba90851f57193afc9b76b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115359 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/vcl/unx/gtk3/gtksalmenu.cxx b/vcl/unx/gtk3/gtksalmenu.cxx index b965880cfbcb..5f9b20effbbf 100644 --- a/vcl/unx/gtk3/gtksalmenu.cxx +++ b/vcl/unx/gtk3/gtksalmenu.cxx @@ -456,6 +456,25 @@ bool GtkSalMenu::ShowNativePopupMenu(FloatingWindow* pWin, const tools::Rectangl // don't allow any more to appear until menu is dismissed mpFrame->BlockTooltip(); +#if GTK_CHECK_VERSION(4, 0, 0) + tools::Rectangle aFloatRect = FloatingWindow::ImplConvertToAbsPos(xParent, rRect); + aFloatRect.Move(-mpFrame->maGeometry.nX, -mpFrame->maGeometry.nY); + GdkRectangle rect {static_cast<int>(aFloatRect.Left()), static_cast<int>(aFloatRect.Top()), + static_cast<int>(aFloatRect.GetWidth()), static_cast<int>(aFloatRect.GetHeight())}; + + gtk_popover_set_pointing_to(GTK_POPOVER(pWidget), &rect); + + if (nFlags & FloatWinPopupFlags::Left) + gtk_popover_set_position(GTK_POPOVER(pWidget), GTK_POS_LEFT); + else if (nFlags & FloatWinPopupFlags::Up) + gtk_popover_set_position(GTK_POPOVER(pWidget), GTK_POS_TOP); + else if (nFlags & FloatWinPopupFlags::Right) + gtk_popover_set_position(GTK_POPOVER(pWidget), GTK_POS_RIGHT); + else + gtk_popover_set_position(GTK_POPOVER(pWidget), GTK_POS_BOTTOM); + + gtk_popover_popup(GTK_POPOVER(pWidget)); +#else #if GTK_CHECK_VERSION(3,22,0) if (gtk_check_version(3, 22, 0) == nullptr) { @@ -464,7 +483,6 @@ bool GtkSalMenu::ShowNativePopupMenu(FloatingWindow* pWin, const tools::Rectangl GdkRectangle rect {static_cast<int>(aFloatRect.Left()), static_cast<int>(aFloatRect.Top()), static_cast<int>(aFloatRect.GetWidth()), static_cast<int>(aFloatRect.GetHeight())}; -#if !GTK_CHECK_VERSION(4, 0, 0) GdkGravity rect_anchor = GDK_GRAVITY_SOUTH_WEST, menu_anchor = GDK_GRAVITY_NORTH_WEST; if (nFlags & FloatWinPopupFlags::Left) @@ -484,17 +502,10 @@ bool GtkSalMenu::ShowNativePopupMenu(FloatingWindow* pWin, const tools::Rectangl GdkWindow* gdkWindow = gtk_widget_get_window(mpFrame->getMouseEventWidget()); gtk_menu_popup_at_rect(GTK_MENU(pWidget), gdkWindow, &rect, rect_anchor, menu_anchor, nullptr); -#else - gtk_popover_set_pointing_to(GTK_POPOVER(pWidget), &rect); - (void)nFlags; - //TODO use gtk_popover_set_position - gtk_popover_popup(GTK_POPOVER(pWidget)); -#endif } else #endif { -#if !GTK_CHECK_VERSION(4, 0, 0) guint nButton; guint32 nTime; @@ -521,8 +532,8 @@ bool GtkSalMenu::ShowNativePopupMenu(FloatingWindow* pWin, const tools::Rectangl gtk_menu_popup(GTK_MENU(pWidget), nullptr, nullptr, MenuPositionFunc, &aPos, nButton, nTime); -#endif } +#endif if (g_main_loop_is_running(pLoop)) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits