[gtk+/composite-templates] wayland: wl_shell_surface_set_popup requires a valid seat and serial



commit dc78959838c5e4f6fc89872320e727cbbc02231c
Author: Rob Bradford <rob linux intel com>
Date:   Wed Jul 11 19:18:37 2012 +0100

    wayland: wl_shell_surface_set_popup requires a valid seat and serial
    
    If we don't have our own grab then get the grab from the parent.

 gdk/wayland/gdkwindow-wayland.c |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletions(-)
---
diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c
index f1530eb..f1b7975 100644
--- a/gdk/wayland/gdkwindow-wayland.c
+++ b/gdk/wayland/gdkwindow-wayland.c
@@ -626,6 +626,8 @@ gdk_wayland_window_map (GdkWindow *window)
 {
   GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
   GdkWindowImplWayland *parent;
+  GdkWaylandDisplay *wayland_display =
+    GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
 
   if (!impl->mapped)
     {
@@ -637,12 +639,21 @@ gdk_wayland_window_map (GdkWindow *window)
               impl->hint & GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU ||
               impl->hint & GDK_WINDOW_TYPE_HINT_COMBO)
             {
+              struct wl_seat *grab_input_seat = NULL;
+
               /* Use the device that was used for the grab as the device for
                * the popup window setup - so this relies on GTK+ taking the
                * grab before showing the popup window.
                */
+              if (impl->grab_input_seat)
+                grab_input_seat = impl->grab_input_seat;
+
+              if (!grab_input_seat)
+                grab_input_seat = parent->grab_input_seat;
+
               wl_shell_surface_set_popup (impl->shell_surface,
-                                          parent->grab_input_seat, parent->grab_time,
+                                          grab_input_seat,
+                                          _gdk_wayland_display_get_serial (wayland_display),
                                           parent->surface,
                                           window->x, window->y, 0);
             } else {



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