A cleaner way to get the lock modifiers, without depend on the platform/backend used (as X or Wayland), is get them through GdkKeymap (and its _get{caps,num,scroll}_lock_state() functions). Unfortunately, get_scroll_lock_state() will only be present for Gtk+ 3.18.0 and when it becomes the minimal required version we can easily drop the old code. --- Depends on https://bugzilla.gnome.org/show_bug.cgi?id=747844 --- gtk/spice-gtk-session.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gtk/spice-gtk-session.c b/gtk/spice-gtk-session.c index de01358..0937434 100644 --- a/gtk/spice-gtk-session.c +++ b/gtk/spice-gtk-session.c @@ -122,6 +122,21 @@ enum { static guint32 get_keyboard_lock_modifiers(void) { guint32 modifiers = 0; +#if GTK_CHECK_VERSION(3,18,0) + GdkKeymap *keyboard = gdk_keymap_get_default(); + + if (gdk_keymap_get_caps_lock_state(keyboard)) { + modifiers |= SPICE_INPUTS_CAPS_LOCK; + } + + if (gdk_keymap_get_num_lock_state(keyboard)) { + modifiers |= SPICE_INPUTS_NUM_LOCK; + } + + if (gdk_keymap_get_scroll_lock_state(keyboard)) { + modifiers |= SPICE_INPUTS_SCROLL_LOCK; + } +#else #if HAVE_X11_XKBLIB_H Display *x_display = NULL; XKeyboardState keyboard_state; @@ -157,6 +172,7 @@ static guint32 get_keyboard_lock_modifiers(void) #else g_warning("get_keyboard_lock_modifiers not implemented"); #endif // HAVE_X11_XKBLIB_H +#endif // GTK_CHECK_VERSION(3,18,0) return modifiers; } -- 2.3.5 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel