From 8fb7f50028eb3729161448b7228f69b673a93b45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Tue, 8 Mar 2016 17:03:06 +0800 Subject: [PATCH] wayland: Add request focus support via gtk_shell A gtk_surface.present request was added to gtk_surface which takes timestamp from some input event, and uses that timestamp to figure out whether the window can be presented or not. If we don't have a timestamp, we should just give up instead of making up our own, otherwise we might steal someones focus. https://bugzilla.gnome.org/show_bug.cgi?id=763037 --- gdk/wayland/gdkwindow-wayland.c | 13 +++++++++++++ gdk/wayland/protocol/gtk-shell.xml | 4 ++++ 2 files changed, 17 insertions(+) diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c index bf2dcd0068..707b2dcb43 100644 --- a/gdk/wayland/gdkwindow-wayland.c +++ b/gdk/wayland/gdkwindow-wayland.c @@ -2093,6 +2093,19 @@ static void gdk_wayland_window_focus (GdkWindow *window, guint32 timestamp) { + GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl); + + 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; + + 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 aa9993d66c..2e750ea0f1 100644 --- a/gdk/wayland/protocol/gtk-shell.xml +++ b/gdk/wayland/protocol/gtk-shell.xml @@ -42,6 +42,10 @@ + + + +