summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-02-18 21:00:57 +0000
committerCaolán McNamara <caolanm@redhat.com>2016-02-19 08:29:35 +0000
commit59d978389721c780b1df5e54b833fe75576dd034 (patch)
treec83367930f63369ae4362f01893605efe932cbd6
parent7073d20627ccfcdd705b53f9d8bc4b58fab9e82a (diff)
gtk3: get app menu working again under gtk3
and have a stab at getting it working under wayland Change-Id: I57592acc4b7ea4a55296541ab4b3bf0c8fd98c5b Reviewed-on: https://gerrit.libreoffice.org/22491 Tested-by: Jenkins <ci@libreoffice.org> Tested-by: Caolán McNamara <caolanm@redhat.com> Reviewed-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--vcl/inc/unx/gtk/gtkframe.hxx2
-rw-r--r--vcl/inc/unx/gtk/gtksalmenu.hxx2
-rw-r--r--vcl/unx/gtk/gtksalframe.cxx2
-rw-r--r--vcl/unx/gtk3/gtk3gtkframe.cxx49
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 )