[Spice-devel] [spice-gtk][PATCH] session: Get the lock modifiers from GdkKeymap
Fabiano FidĂȘncio
fidencio at redhat.com
Tue Apr 14 04:47:37 PDT 2015
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
More information about the Spice-devel
mailing list