summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrediano Ziglio <fziglio@redhat.com>2016-09-07 11:56:36 +0100
committerFrediano Ziglio <fziglio@redhat.com>2016-09-07 13:13:25 +0100
commit73cd553fb0fbd213b64d72f8b4289ed8a17fc6c0 (patch)
tree92fbd14380d37c2cfb9aa7133ab0e926de6877b2
parentdc7552620596135c7aea6cbbf86915bc6682112c (diff)
Ignore modifiers messages if no modifiers changed
This avoid keep sending modifiers changes if guest is not synchronising the changes. I consider this as an improving as this avoids client to try again and again to force synchronisation however this does not prevent every unwanted keystroke insertion which possibly can be a real problem on some configurations. For instance if guest do not handle caps lock as the client do if client uses another modifiers (as num lock) this can force inserting virtual caps keypress. Signed-off-by: Frediano Ziglio <fziglio@redhat.com> Acked-by: Marc-André Lureau <mlureau@redhat.com>
-rw-r--r--src/channel-inputs.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/channel-inputs.c b/src/channel-inputs.c
index 7572bff..f79bc38 100644
--- a/src/channel-inputs.c
+++ b/src/channel-inputs.c
@@ -242,8 +242,10 @@ static void inputs_handle_modifiers(SpiceChannel *channel, SpiceMsgIn *in)
SpiceInputsChannelPrivate *c = SPICE_INPUTS_CHANNEL(channel)->priv;
SpiceMsgInputsKeyModifiers *modifiers = spice_msg_in_parsed(in);
- c->modifiers = modifiers->modifiers;
- g_coroutine_signal_emit(channel, signals[SPICE_INPUTS_MODIFIERS], 0);
+ if (c->modifiers != modifiers->modifiers) {
+ c->modifiers = modifiers->modifiers;
+ g_coroutine_signal_emit(channel, signals[SPICE_INPUTS_MODIFIERS], 0);
+ }
}
/* coroutine context */