diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2010-11-01 23:45:43 +0100 |
---|---|---|
committer | Alon Levy <alevy@redhat.com> | 2010-12-30 12:08:31 +0200 |
commit | d66c1904f984bcb1f4a5d9e24811636cdda0c2e1 (patch) | |
tree | 1e03324777732852fb85dead9468d65f047a0725 /client/inputs_channel.cpp | |
parent | 3c4633500466914e33d577582803a9258b95b984 (diff) | |
download | spice-d66c1904f984bcb1f4a5d9e24811636cdda0c2e1.tar.gz spice-d66c1904f984bcb1f4a5d9e24811636cdda0c2e1.tar.xz spice-d66c1904f984bcb1f4a5d9e24811636cdda0c2e1.zip |
client inputs: stop blinking keyboard when out of focus
We could introduce another boolean to prevent changes, or just reuse
_active_modifiers_event = true to prevent further update.
Additionaly this patch restore the keyboard state when focusing out,
which is fine when dealing with full remote desktop, but should be
reconsidered if/when SPICE supports remote windows managed by client
window manager for instance, imho.
Diffstat (limited to 'client/inputs_channel.cpp')
-rw-r--r-- | client/inputs_channel.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/client/inputs_channel.cpp b/client/inputs_channel.cpp index 9ff5479f..c5275800 100644 --- a/client/inputs_channel.cpp +++ b/client/inputs_channel.cpp @@ -404,10 +404,14 @@ void InputsChannel::set_local_modifiers() void InputsChannel::on_focus_in() { + Lock lock(_update_modifiers_lock); + _active_modifiers_event = false; + _on_focus_modifiers = Platform::get_keyboard_lock_modifiers(); + #ifdef SYNC_REMOTE_MODIFIERS Message* message = new Message(SPICE_MSGC_INPUTS_KEY_MODIFIERS); SpiceMsgcKeyModifiers modifiers; - modifiers.modifiers = Platform::get_keyboard_lock_modifiers(); + modifiers.modifiers = _on_focus_modifiers; _marshallers->msgc_inputs_key_modifiers(message->marshaller(), &modifiers); post_message(message); #else @@ -415,6 +419,14 @@ void InputsChannel::on_focus_in() #endif } +void InputsChannel::on_focus_out() +{ + Lock lock(_update_modifiers_lock); + _active_modifiers_event = true; + _modifiers = _on_focus_modifiers; + set_local_modifiers(); +} + void InputsChannel::init_scan_code(int index) { ASSERT((index & 0x80) == 0); |