From a01a423c91b3a4309759bc8985296abcc87dd2a8 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 8 Oct 2015 18:44:13 +0200 Subject: [PATCH] nitpicker: allow refocus during global key ops --- repos/os/src/server/nitpicker/mode.h | 15 ++++++++++++++- repos/os/src/server/nitpicker/user_state.h | 5 ----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/repos/os/src/server/nitpicker/mode.h b/repos/os/src/server/nitpicker/mode.h index 3bb6bb735..02b9be8d8 100644 --- a/repos/os/src/server/nitpicker/mode.h +++ b/repos/os/src/server/nitpicker/mode.h @@ -30,6 +30,13 @@ class Mode Session *_next_focused_session = nullptr; + protected: + + /* + * True while a global key sequence is processed + */ + bool _global_key_sequence = false; + public: virtual ~Mode() { } @@ -64,7 +71,13 @@ class Mode */ void apply_pending_focus_change() { - if (key_is_pressed()) + /* + * Defer focus changes to a point where no drag operation is in + * flight because otherwise, the involved sessions would obtain + * inconsistent press and release events. However, focus changes + * during global key sequences are fine. + */ + if (key_is_pressed() && !_global_key_sequence) return; if (_focused_session != _next_focused_session) diff --git a/repos/os/src/server/nitpicker/user_state.h b/repos/os/src/server/nitpicker/user_state.h index 2316e43d1..f8cc4303c 100644 --- a/repos/os/src/server/nitpicker/user_state.h +++ b/repos/os/src/server/nitpicker/user_state.h @@ -46,11 +46,6 @@ class User_state : public Mode, public View_stack */ Session *_input_receiver = nullptr; - /* - * True while a global key sequence is processed - */ - bool _global_key_sequence = false; - void _update_all(); public: