[PATCH spice-gtk 1/2] spice-gtk-session: Add sync modifiers property

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

 



It will help in cases where syncing modifiers keys is complicated:
 * not working leds for modifiers keys
 * different keyboard layout on the guest side
---
 src/spice-gtk-session.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/src/spice-gtk-session.c b/src/spice-gtk-session.c
index 27623f0..bbcbeeb 100644
--- a/src/spice-gtk-session.c
+++ b/src/spice-gtk-session.c
@@ -65,6 +65,7 @@ struct _SpiceGtkSessionPrivate {
     gboolean                pointer_grabbed;
     gboolean                keyboard_has_focus;
     gboolean                mouse_has_pointer;
+    gboolean                sync_modifiers;
 };
 
 /**
@@ -118,6 +119,7 @@ enum {
     PROP_AUTO_CLIPBOARD,
     PROP_AUTO_USBREDIR,
     PROP_POINTER_GRABBED,
+    PROP_SYNC_MODIFIERS,
 };
 
 static guint32 get_keyboard_lock_modifiers(void)
@@ -185,6 +187,11 @@ static void spice_gtk_session_sync_keyboard_modifiers_for_channel(SpiceGtkSessio
 
     g_return_if_fail(SPICE_IS_INPUTS_CHANNEL(inputs));
 
+    if (SPICE_IS_GTK_SESSION(self) && !self->priv->sync_modifiers) {
+        SPICE_DEBUG("Syncing modifiers is disabled");
+        return;
+    }
+
     g_object_get(inputs, "key-modifiers", &guest_modifiers, NULL);
     client_modifiers = get_keyboard_lock_modifiers();
 
@@ -332,6 +339,9 @@ static void spice_gtk_session_get_property(GObject    *gobject,
     case PROP_POINTER_GRABBED:
         g_value_set_boolean(value, s->pointer_grabbed);
         break;
+    case PROP_SYNC_MODIFIERS:
+        g_value_set_boolean(value, s->sync_modifiers);
+        break;
     default:
 	G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec);
 	break;
@@ -379,6 +389,9 @@ static void spice_gtk_session_set_property(GObject      *gobject,
         }
         break;
     }
+    case PROP_SYNC_MODIFIERS:
+        s->sync_modifiers = g_value_get_boolean(value);
+        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec);
         break;
@@ -467,6 +480,23 @@ static void spice_gtk_session_class_init(SpiceGtkSessionClass *klass)
                               G_PARAM_READABLE |
                               G_PARAM_STATIC_STRINGS));
 
+    /**
+     * SpiceGtkSession:sync-modifiers:
+     *
+     * Automatically sync modifiers (Caps, Num and Scroll locks) with the guest.
+     *
+     * Since: 0.32
+     **/
+    g_object_class_install_property
+        (gobject_class, PROP_SYNC_MODIFIERS,
+         g_param_spec_boolean("sync-modifiers",
+                              "Sync modifiers",
+                              "Automatically sync modifiers",
+                              TRUE,
+                              G_PARAM_READWRITE |
+                              G_PARAM_CONSTRUCT |
+                              G_PARAM_STATIC_STRINGS));
+
     g_type_class_add_private(klass, sizeof(SpiceGtkSessionPrivate));
 }
 
-- 
2.8.2

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]