[gtk+] wayland: restore support for the application menu
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] wayland: restore support for the application menu
- Date: Tue, 3 Sep 2013 15:04:08 +0000 (UTC)
commit ed9f55d521ac7f2168172497b500d762be3f0184
Author: Giovanni Campagna <gcampagn redhat com>
Date: Fri Aug 30 13:56:45 2013 +0200
wayland: restore support for the application menu
If the compositor supports the gtk-shell interface, use it to
export the application ID, dbus name and paths that can be used
for the application menu.
https://bugzilla.gnome.org/show_bug.cgi?id=707129
gdk/wayland/gdkwaylandwindow.h | 9 +++++++++
gdk/wayland/gdkwindow-wayland.c | 30 ++++++++++++++++++++++++++++++
gtk/gtkapplicationwindow.c | 27 +++++++++++++++++++++++++--
3 files changed, 64 insertions(+), 2 deletions(-)
---
diff --git a/gdk/wayland/gdkwaylandwindow.h b/gdk/wayland/gdkwaylandwindow.h
index 9619a66..1821feb 100644
--- a/gdk/wayland/gdkwaylandwindow.h
+++ b/gdk/wayland/gdkwaylandwindow.h
@@ -53,6 +53,15 @@ struct wl_shell_surface *gdk_wayland_window_get_wl_shell_surface (GdkWindow *win
GDK_AVAILABLE_IN_ALL
void gdk_wayland_window_set_use_custom_surface (GdkWindow *window);
+GDK_AVAILABLE_IN_3_10
+void gdk_wayland_window_set_dbus_properties_libgtk_only (GdkWindow *window,
+ const char *application_id,
+ const char *app_menu_path,
+ const char *menubar_path,
+ const char *window_object_path,
+ const char
*application_object_path,
+ const char *unique_bus_name);
+
G_END_DECLS
#endif /* __GDK_WAYLAND_WINDOW_H__ */
diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c
index 0fcad36..633ca83 100644
--- a/gdk/wayland/gdkwindow-wayland.c
+++ b/gdk/wayland/gdkwindow-wayland.c
@@ -2289,3 +2289,33 @@ gdk_wayland_window_set_use_custom_surface (GdkWindow *window)
impl->use_custom_surface = TRUE;
}
+
+void
+gdk_wayland_window_set_dbus_properties_libgtk_only (GdkWindow *window,
+ const char *application_id,
+ const char *app_menu_path,
+ const char *menubar_path,
+ const char *window_object_path,
+ const char *application_object_path,
+ const char *unique_bus_name)
+{
+ GdkWindowImplWayland *impl;
+
+ g_return_if_fail (GDK_IS_WAYLAND_WINDOW (window));
+
+ impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
+
+ if (!impl->surface)
+ gdk_wayland_window_create_surface (window);
+
+ if (impl->gtk_surface == NULL)
+ return;
+
+ gtk_surface_set_dbus_properties (impl->gtk_surface,
+ application_id,
+ app_menu_path,
+ menubar_path,
+ window_object_path,
+ application_object_path,
+ unique_bus_name);
+}
diff --git a/gtk/gtkapplicationwindow.c b/gtk/gtkapplicationwindow.c
index 7797eb8..5d931be 100644
--- a/gtk/gtkapplicationwindow.c
+++ b/gtk/gtkapplicationwindow.c
@@ -34,6 +34,9 @@
#ifdef GDK_WINDOWING_X11
#include <gdk/x11/gdkx.h>
#endif
+#ifdef GDK_WINDOWING_WAYLAND
+#include <gdk/wayland/gdkwayland.h>
+#endif
#ifdef HAVE_GIO_UNIX
#include <gio/gdesktopappinfo.h>
@@ -865,8 +868,28 @@ gtk_application_window_real_map (GtkWidget *widget)
if (window->priv->menubar)
gtk_widget_map (window->priv->menubar);
- GTK_WIDGET_CLASS (gtk_application_window_parent_class)
- ->map (widget);
+#ifdef GDK_WINDOWING_WAYLAND
+ {
+ GdkWindow *gdkwindow;
+ GtkApplication *application;
+
+ application = gtk_window_get_application (GTK_WINDOW (window));
+ gdkwindow = gtk_widget_get_window (widget);
+
+ if (GDK_IS_WAYLAND_WINDOW (gdkwindow) && window->priv->session)
+ {
+ gdk_wayland_window_set_dbus_properties_libgtk_only (gdkwindow,
+ g_application_get_application_id (G_APPLICATION
(application)),
+ gtk_application_get_app_menu_object_path
(application),
+ gtk_application_get_menubar_object_path
(application),
+ window->priv->object_path,
+ g_application_get_dbus_object_path (G_APPLICATION
(application)),
+ g_dbus_connection_get_unique_name
(window->priv->session));
+ }
+ }
+#endif
+
+ GTK_WIDGET_CLASS (gtk_application_window_parent_class)->map (widget);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]