diff --git a/gdk/wayland/gdkapplaunchcontext-wayland.c b/gdk/wayland/gdkapplaunchcontext-wayland.c index b69cc31fce50625b2781a6ea78d94a53b8d6c024..f18c13e6b4d356e23518ac0bc539026518e66ba2 100644 --- a/gdk/wayland/gdkapplaunchcontext-wayland.c +++ b/gdk/wayland/gdkapplaunchcontext-wayland.c @@ -35,7 +35,20 @@ gdk_wayland_app_launch_context_get_startup_notify_id (GAppLaunchContext *context GAppInfo *info, GList *files) { - return NULL; + GdkWaylandDisplay *display; + gchar *id = NULL; + + g_object_get (context, "display", &display, NULL); + + if (display->gtk_shell_version >= 3) + { + id = g_uuid_string_random (); + gtk_shell1_notify_launch (display->gtk_shell, id); + } + + g_object_unref (display); + + return id; } static void diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c index 1e00f292d8e8be6a835459fbe2a8654201416054..be74c93e0afba103f5be17d73de420b8cef9b9b5 100644 --- a/gdk/wayland/gdkdisplay-wayland.c +++ b/gdk/wayland/gdkdisplay-wayland.c @@ -83,7 +83,7 @@ #define MIN_SYSTEM_BELL_DELAY_MS 20 -#define GTK_SHELL1_VERSION 2 +#define GTK_SHELL1_VERSION 3 static void _gdk_wayland_display_load_cursor_theme (GdkWaylandDisplay *display_wayland); diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c index 91e01e1d90e5789855b29f44b3f2db92228e5673..70f1044d9bd5085da8b813d1ed6c813d214a5501 100644 --- a/gdk/wayland/gdkwindow-wayland.c +++ b/gdk/wayland/gdkwindow-wayland.c @@ -3532,14 +3532,20 @@ gdk_wayland_window_focus (GdkWindow *window, if (!impl->display_server.gtk_surface) return; - /* We didn't have an event to fetch a time from, meaning we have nothing valid - * to send. This should rather be translated to a 'needs-attention' request or - * something. - */ if (timestamp == GDK_CURRENT_TIME) - return; + { + GdkWaylandDisplay *display_wayland = + GDK_WAYLAND_DISPLAY (gdk_window_get_display (window)); - gtk_surface1_present (impl->display_server.gtk_surface, timestamp); + if (display_wayland->gtk_shell_version >= 3) + { + gtk_surface1_request_focus (impl->display_server.gtk_surface, + display_wayland->startup_notification_id); + g_clear_pointer (&display_wayland->startup_notification_id, g_free); + } + } + else + gtk_surface1_present (impl->display_server.gtk_surface, timestamp); } static void diff --git a/gdk/wayland/protocol/gtk-shell.xml b/gdk/wayland/protocol/gtk-shell.xml index 8191fa9cfbaa506a02c40b37e961d7b1ca32b747..fb91940b3090f140871b18bf50ccf7959f60325e 100644 --- a/gdk/wayland/protocol/gtk-shell.xml +++ b/gdk/wayland/protocol/gtk-shell.xml @@ -1,6 +1,6 @@ - + gtk_shell is a protocol extension providing additional features for clients implementing it. @@ -28,9 +28,14 @@ + + + + + - + @@ -72,6 +77,11 @@ + + + + +