[gtk+] wayland: Add request focus support via gtk_shell



commit 8fb7f50028eb3729161448b7228f69b673a93b45
Author: Jonas Ådahl <jadahl gmail com>
Date:   Tue Mar 8 17:03:06 2016 +0800

    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(+), 0 deletions(-)
---
diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c
index bf2dcd0..707b2dc 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 aa9993d..2e750ea 100644
--- a/gdk/wayland/protocol/gtk-shell.xml
+++ b/gdk/wayland/protocol/gtk-shell.xml
@@ -42,6 +42,10 @@
 
     <request name="set_modal"/>
     <request name="unset_modal"/>
+
+    <request name="present">
+      <arg name="time" type="uint"/>
+    </request>
   </interface>
 
 </protocol>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]