[gtk+/wip/garnacho/wayland-startup-notification: 2/2] wayland: Implement gtk_shell.set_startup_id
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/garnacho/wayland-startup-notification: 2/2] wayland: Implement gtk_shell.set_startup_id
- Date: Sat, 6 Feb 2016 14:40:37 +0000 (UTC)
commit a631faa9b17df2501379b7825656013f8b1999ec
Author: Carlos Garnacho <carlosg gnome org>
Date: Sat Feb 6 15:07:52 2016 +0100
wayland: Implement gtk_shell.set_startup_id
Fetch the DESKTOP_STARTUP_ID envvar at the same point it's done
for the X11 backend, and notify the startup ID gotten on
notify_startup_complete().
gdk/wayland/gdkdisplay-wayland.c | 39 ++++++++++++++++++++++++++++++++++++++
gdk/wayland/gdkprivate-wayland.h | 2 +-
2 files changed, 40 insertions(+), 1 deletions(-)
---
diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c
index f200800..8ca545a 100644
--- a/gdk/wayland/gdkdisplay-wayland.c
+++ b/gdk/wayland/gdkdisplay-wayland.c
@@ -547,6 +547,30 @@ gdk_wayland_display_flush (GdkDisplay *display)
wl_display_flush (GDK_WAYLAND_DISPLAY (display)->wl_display);
}
+static void
+gdk_wayland_display_make_default (GdkDisplay *display)
+{
+ GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display);
+ const gchar *startup_id;
+
+ g_free (display_wayland->startup_notification_id);
+ display_wayland->startup_notification_id = NULL;
+
+ startup_id = g_getenv ("DESKTOP_STARTUP_ID");
+ if (startup_id && *startup_id != '\0')
+ {
+ if (!g_utf8_validate (startup_id, -1, NULL))
+ g_warning ("DESKTOP_STARTUP_ID contains invalid UTF-8");
+ else
+ display_wayland->startup_notification_id = g_strdup (startup_id);
+
+ /* Clear the environment variable so it won't be inherited by
+ * child processes and confuse things.
+ */
+ g_unsetenv ("DESKTOP_STARTUP_ID");
+ }
+}
+
static gboolean
gdk_wayland_display_has_pending (GdkDisplay *display)
{
@@ -639,6 +663,20 @@ static void
gdk_wayland_display_notify_startup_complete (GdkDisplay *display,
const gchar *startup_id)
{
+ GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display);
+ gchar *free_this = NULL;
+
+ if (startup_id == NULL)
+ {
+ startup_id = free_this = display_wayland->startup_notification_id;
+ display_wayland->startup_notification_id = NULL;
+
+ if (startup_id == NULL)
+ return;
+ }
+
+ gtk_shell_set_startup_id (display_wayland->gtk_shell, startup_id);
+ g_free (free_this);
}
static GdkKeymap *
@@ -691,6 +729,7 @@ gdk_wayland_display_class_init (GdkWaylandDisplayClass *class)
display_class->beep = gdk_wayland_display_beep;
display_class->sync = gdk_wayland_display_sync;
display_class->flush = gdk_wayland_display_flush;
+ display_class->make_default = gdk_wayland_display_make_default;
display_class->has_pending = gdk_wayland_display_has_pending;
display_class->queue_events = _gdk_wayland_display_queue_events;
display_class->get_default_group = gdk_wayland_display_get_default_group;
diff --git a/gdk/wayland/gdkprivate-wayland.h b/gdk/wayland/gdkprivate-wayland.h
index 9e51517..15b6f3b 100644
--- a/gdk/wayland/gdkprivate-wayland.h
+++ b/gdk/wayland/gdkprivate-wayland.h
@@ -43,7 +43,7 @@
#define WL_SURFACE_HAS_BUFFER_SCALE 3
#define WL_POINTER_HAS_FRAME 5
-#define SUPPORTED_GTK_SHELL_VERSION 2
+#define SUPPORTED_GTK_SHELL_VERSION 3
#define GDK_WINDOW_IS_WAYLAND(win) (GDK_IS_WINDOW_IMPL_WAYLAND (((GdkWindow *)win)->impl))
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]