[Libreoffice-commits] core.git: vcl/inc vcl/unx

Caolán McNamara caolanm at redhat.com
Fri Feb 19 08:30:02 UTC 2016


 vcl/inc/unx/gtk/gtkframe.hxx   |    2 +
 vcl/inc/unx/gtk/gtksalmenu.hxx |    2 +
 vcl/unx/gtk/gtksalframe.cxx    |    2 +
 vcl/unx/gtk3/gtk3gtkframe.cxx  |   49 ++++++++++++++++++++++++-----------------
 4 files changed, 35 insertions(+), 20 deletions(-)

New commits:
commit 59d978389721c780b1df5e54b833fe75576dd034
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Feb 18 21:00:57 2016 +0000

    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 at libreoffice.org>
    Tested-by: Caolán McNamara <caolanm at redhat.com>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
index fcd3d73..280ded7 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 18a2b4d..cc0193c 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 435b28b..789f7f2 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 c1d7f6e..dff9c90 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 )


More information about the Libreoffice-commits mailing list