[gtk+] wayland: Respect keymap repeat information



commit a70acc03c59fa369540b3110dcfef3541ced83aa
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Mar 23 17:09:38 2013 -0400

    wayland: Respect keymap repeat information
    
    xkb has a function to tell us whether a key should be repeated
    or not. Lets use that information.

 gdk/wayland/gdkdevice-wayland.c  |    5 +++++
 gdk/wayland/gdkprivate-wayland.h |    1 +
 2 files changed, 6 insertions(+), 0 deletions(-)
---
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index f485269..91056ae 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -963,12 +963,14 @@ deliver_key_event(GdkWaylandDeviceData *device,
 {
   GdkEvent *event;
   struct xkb_state *xkb_state;
+  struct xkb_keymap *xkb_keymap;
   GdkKeymap *keymap;
   xkb_keysym_t sym;
   guint delay, interval;
 
   keymap = device->keymap;
   xkb_state = _gdk_wayland_keymap_get_xkb_state (keymap);
+  xkb_keymap = _gdk_wayland_keymap_get_xkb_keymap (keymap);
 
   sym = xkb_state_key_get_one_sym (xkb_state, key);
 
@@ -996,6 +998,9 @@ deliver_key_event(GdkWaylandDeviceData *device,
                        event->key.hardware_keycode, event->key.keyval,
                        event->key.string, event->key.state));
 
+  if (!xkb_keymap_key_repeats (xkb_keymap, key))
+    return FALSE;
+
   if (!get_key_repeat (device, &delay, &interval))
     return FALSE;
 
diff --git a/gdk/wayland/gdkprivate-wayland.h b/gdk/wayland/gdkprivate-wayland.h
index c083396..0b7f5b5 100644
--- a/gdk/wayland/gdkprivate-wayland.h
+++ b/gdk/wayland/gdkprivate-wayland.h
@@ -52,6 +52,7 @@ GdkKeymap *_gdk_wayland_keymap_new (void);
 GdkKeymap *_gdk_wayland_keymap_new_from_fd (uint32_t format,
                                             uint32_t fd, uint32_t size);
 struct xkb_state *_gdk_wayland_keymap_get_xkb_state (GdkKeymap *keymap);
+struct xkb_keymap *_gdk_wayland_keymap_get_xkb_keymap (GdkKeymap *keymap);
 
 void       _gdk_wayland_display_finalize_cursors (GdkWaylandDisplay *display);
 void       _gdk_wayland_display_update_cursors (GdkWaylandDisplay      *display,


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