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