summaryrefslogtreecommitdiffstats
path: root/client/inputs_channel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'client/inputs_channel.cpp')
-rw-r--r--client/inputs_channel.cpp14
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);