[gtk+] wayland-device: Upgrade to v4 of seat



commit 61f0ed80a1fb91bb356e8083672044b851ffdb3e
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Fri Jul 25 09:37:06 2014 -0400

    wayland-device: Upgrade to v4 of seat
    
    Get our keyboard repeat info from the server.

 gdk/wayland/gdkdevice-wayland.c  |   51 +++++++++++++++++++++++++++++++------
 gdk/wayland/gdkdisplay-wayland.c |    2 +-
 2 files changed, 43 insertions(+), 10 deletions(-)
---
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index 96c5ebf..5e99e2e 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -82,6 +82,9 @@ struct _GdkWaylandDeviceData
   uint32_t button_press_serial;
   GdkWindow *pointer_grab_window;
   uint32_t pointer_grab_time;
+  gboolean have_server_repeat;
+  uint32_t server_repeat_rate;
+  uint32_t server_repeat_delay;
   guint32 repeat_timer;
   guint32 repeat_key;
   guint32 repeat_count;
@@ -1111,19 +1114,35 @@ get_key_repeat (GdkWaylandDeviceData *device,
 {
   gboolean repeat;
 
-  GSettings *keyboard_settings = get_keyboard_settings (device);
-
-  if (keyboard_settings)
+  if (device->have_server_repeat)
     {
-      repeat = g_settings_get_boolean (keyboard_settings, "repeat");
-      *delay = g_settings_get_uint (keyboard_settings, "delay");
-      *interval = g_settings_get_uint (keyboard_settings, "repeat-interval");
+      if (device->server_repeat_rate > 0)
+        {
+          repeat = TRUE;
+          *delay = device->server_repeat_delay;
+          *interval = (1000 / device->server_repeat_rate);
+        }
+      else
+        {
+          repeat = FALSE;
+        }
     }
   else
     {
-      repeat = TRUE;
-      *delay = 400;
-      *interval = 80;
+      GSettings *keyboard_settings = get_keyboard_settings (device);
+
+      if (keyboard_settings)
+        {
+          repeat = g_settings_get_boolean (keyboard_settings, "repeat");
+          *delay = g_settings_get_uint (keyboard_settings, "delay");
+          *interval = g_settings_get_uint (keyboard_settings, "repeat-interval");
+        }
+      else
+        {
+          repeat = TRUE;
+          *delay = 400;
+          *interval = 80;
+        }
     }
 
   return repeat;
@@ -1270,6 +1289,19 @@ keyboard_handle_modifiers (void               *data,
     g_signal_emit_by_name (keymap, "direction-changed");
 }
 
+static void
+keyboard_handle_repeat_info (void               *data,
+                             struct wl_keyboard *keyboard,
+                             uint32_t            rate,
+                             uint32_t            delay)
+{
+  GdkWaylandDeviceData *device = data;
+
+  device->have_server_repeat = TRUE;
+  device->server_repeat_rate = rate;
+  device->server_repeat_delay = delay;
+}
+
 static GdkWaylandTouchData *
 _device_manager_add_touch (GdkWaylandDeviceData *device,
                            uint32_t              id,
@@ -1452,6 +1484,7 @@ static const struct wl_keyboard_listener keyboard_listener = {
   keyboard_handle_leave,
   keyboard_handle_key,
   keyboard_handle_modifiers,
+  keyboard_handle_repeat_info,
 };
 
 static const struct wl_touch_listener touch_listener = {
diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c
index e8c03e3..1d62160 100644
--- a/gdk/wayland/gdkdisplay-wayland.c
+++ b/gdk/wayland/gdkdisplay-wayland.c
@@ -171,7 +171,7 @@ gdk_registry_handle_global(void *data, struct wl_registry *registry, uint32_t id
       wl_registry_bind(display_wayland->wl_registry, id, &wl_output_interface, MIN (version, 2));
     _gdk_wayland_screen_add_output(display_wayland->screen, id, output, MIN (version, 2));
   } else if (strcmp(interface, "wl_seat") == 0) {
-    seat = wl_registry_bind(display_wayland->wl_registry, id, &wl_seat_interface, 3);
+    seat = wl_registry_bind(display_wayland->wl_registry, id, &wl_seat_interface, 4);
     _gdk_wayland_device_manager_add_seat (gdk_display->device_manager, id, seat);
   } else if (strcmp(interface, "wl_data_device_manager") == 0) {
       display_wayland->data_device_manager =


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