diff options
-rw-r--r-- | vcl/inc/unx/gtk/gtkframe.hxx | 2 | ||||
-rw-r--r-- | vcl/inc/unx/gtk/gtksalmenu.hxx | 2 | ||||
-rw-r--r-- | vcl/unx/gtk/gtksalframe.cxx | 2 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkframe.cxx | 49 |
4 files changed, 35 insertions, 20 deletions
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx index fcd3d73e7e24..280ded7736a1 100644 --- a/vcl/inc/unx/gtk/gtkframe.hxx +++ b/vcl/inc/unx/gtk/gtkframe.hxx @@ -47,6 +47,8 @@ #include <list> #include <vector> +#include <config_vclplug.h> + #include "headless/svpgdi.hxx" class GtkSalGraphics; diff --git a/vcl/inc/unx/gtk/gtksalmenu.hxx b/vcl/inc/unx/gtk/gtksalmenu.hxx index 18a2b4d27959..cc0193cfa66e 100644 --- a/vcl/inc/unx/gtk/gtksalmenu.hxx +++ b/vcl/inc/unx/gtk/gtksalmenu.hxx @@ -10,6 +10,8 @@ #ifndef INCLUDED_VCL_INC_UNX_GTK_GTKSALMENU_HXX #define INCLUDED_VCL_INC_UNX_GTK_GTKSALMENU_HXX +#include <config_vclplug.h> + #include <vector> #ifdef ENABLE_GIO #include <gio/gio.h> diff --git a/vcl/unx/gtk/gtksalframe.cxx b/vcl/unx/gtk/gtksalframe.cxx index 435b28b000ed..789f7f28a9e6 100644 --- a/vcl/unx/gtk/gtksalframe.cxx +++ b/vcl/unx/gtk/gtksalframe.cxx @@ -39,6 +39,8 @@ #include <vcl/settings.hxx> #include <vcl/opengl/OpenGLHelper.hxx> +#include <config_vclplug.h> + #include <unx/x11/xlimits.hxx> #if defined(ENABLE_DBUS) && defined(ENABLE_GIO) # include <unx/gtk/gtksalmenu.hxx> diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx index c1d7f6e673ea..dff9c90e05cd 100644 --- a/vcl/unx/gtk3/gtk3gtkframe.cxx +++ b/vcl/unx/gtk3/gtk3gtkframe.cxx @@ -38,6 +38,8 @@ #include <vcl/window.hxx> #include <vcl/settings.hxx> +#include <config_vclplug.h> + #if defined(ENABLE_DBUS) && defined(ENABLE_GIO) # include <unx/gtk/gtksalmenu.hxx> #endif @@ -485,13 +487,6 @@ GtkSalFrame::GtkSalFrame( SystemParentData* pSysData ) #ifdef ENABLE_GMENU_INTEGRATION -static void -gdk_x11_window_set_utf8_property (GdkWindow * /*window*/, - const gchar * /*name*/, - const gchar * /*value*/) -{ -} - // AppMenu watch functions. static void ObjectDestroyedNotify( gpointer data ) @@ -610,7 +605,7 @@ gboolean ensure_dbus_setup( gpointer data ) GActionGroup* pActionGroup = reinterpret_cast<GActionGroup*>(g_lo_action_group_new( static_cast< gpointer >( pSalFrame ) )); // Generate menu paths. - ::Window windowId = GDK_WINDOW_XID( gdkWindow ); + sal_uIntPtr windowId = pSalFrame->GetNativeWindowHandle(pSalFrame->getWindow()); gchar* aDBusWindowPath = g_strdup_printf( "/org/libreoffice/window/%lu", windowId ); gchar* aDBusMenubarPath = g_strdup_printf( "/org/libreoffice/window/%lu/menus/menubar", windowId ); @@ -618,12 +613,32 @@ gboolean ensure_dbus_setup( gpointer data ) g_object_set_data_full( G_OBJECT( gdkWindow ), "g-lo-menubar", pMenuModel, ObjectDestroyedNotify ); g_object_set_data_full( G_OBJECT( gdkWindow ), "g-lo-action-group", pActionGroup, ObjectDestroyedNotify ); - gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_APPLICATION_ID", "org.libreoffice" ); - gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_UNIQUE_BUS_NAME", g_dbus_connection_get_unique_name( pSessionBus ) ); - gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_APPLICATION_OBJECT_PATH", "/org/libreoffice" ); - gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_WINDOW_OBJECT_PATH", aDBusWindowPath ); - gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_MENUBAR_OBJECT_PATH", aDBusMenubarPath ); - + GdkDisplay *pDisplay = pSalFrame->getGdkDisplay(); + // fdo#70885 we don't want app menu under Unity + const bool bDesktopIsUnity = (SalGetDesktopEnvironment() == "UNITY"); +#if defined(GDK_WINDOWING_X11) + if (GDK_IS_X11_DISPLAY(pDisplay)) + { + gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_APPLICATION_ID", "org.libreoffice" ); + if (!bDesktopIsUnity) + gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_APP_MENU_OBJECT_PATH", "/org/libreoffice/menus/appmenu" ); + gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_MENUBAR_OBJECT_PATH", aDBusMenubarPath ); + gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_WINDOW_OBJECT_PATH", aDBusWindowPath ); + gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_APPLICATION_OBJECT_PATH", "/org/libreoffice" ); + gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_UNIQUE_BUS_NAME", g_dbus_connection_get_unique_name( pSessionBus ) ); + } +#endif +#if defined(GDK_WINDOWING_WAYLAND) + if (GDK_IS_WAYLAND_DISPLAY(pDisplay)) + { + gdk_wayland_window_set_dbus_properties_libgtk_only(gdkWindow, "org.libreoffice", + "/org/libreoffice/menus/appmenu", + !bDesktopIsUnity ? aDBusMenubarPath : nullptr, + aDBusWindowPath, + "/org/libreoffice", + g_dbus_connection_get_unique_name( pSessionBus )); + } +#endif // Publish the menu model and the action group. SAL_INFO("vcl.unity", "exporting menu model at " << pMenuModel << " for window " << windowId); pSalFrame->m_nMenuExportId = g_dbus_connection_export_menu_model (pSessionBus, aDBusMenubarPath, pMenuModel, nullptr); @@ -631,12 +646,6 @@ gboolean ensure_dbus_setup( gpointer data ) pSalFrame->m_nActionGroupExportId = g_dbus_connection_export_action_group( pSessionBus, aDBusWindowPath, pActionGroup, nullptr); pSalFrame->m_nHudAwarenessId = hud_awareness_register( pSessionBus, aDBusMenubarPath, hud_activated, pSalFrame, nullptr, nullptr ); - // fdo#70885 we don't want app menu under Unity - bool bDesktopIsUnity = (SalGetDesktopEnvironment() == "UNITY"); - - if (!bDesktopIsUnity) - gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_APP_MENU_OBJECT_PATH", "/org/libreoffice/menus/appmenu" ); - //app menu, to-do translations, block normal menus when active, honor use appmenu settings ResMgr* pMgr = ImplGetResMgr(); if( pMgr && !bDesktopIsUnity ) |