Move modifier key tracking out from the screen system

This commit is contained in:
Henrik Rydgård committed 2026-06-16 10:57:55 +02:00
1 parent 84ca42271b
commit 5ab3d6042b
5 files changed
+74 -59

No files matched your search

-42
View File
@@ -130,52 +130,10 @@ bool UIScreen::UnsyncKey(const KeyInput &key) {
}
}
// Track modifier keys.
if (key.flags & KeyInputFlags::DOWN) {
switch (key.keyCode) {
case NKCODE_CTRL_LEFT: modifiersPressed_ |= Modifier::LCTRL; break;
case NKCODE_CTRL_RIGHT: modifiersPressed_ |= Modifier::RCTRL; break;
case NKCODE_SHIFT_LEFT: modifiersPressed_ |= Modifier::LSHIFT; break;
case NKCODE_SHIFT_RIGHT: modifiersPressed_ |= Modifier::RSHIFT; break;
case NKCODE_ALT_LEFT: modifiersPressed_ |= Modifier::LALT; break;
case NKCODE_ALT_RIGHT: modifiersPressed_ |= Modifier::RALT; break;
case NKCODE_META_LEFT: modifiersPressed_ |= Modifier::LMETA; break;
case NKCODE_META_RIGHT: modifiersPressed_ |= Modifier::RMETA; break;
default:
break;
}
}
if (key.flags & KeyInputFlags::UP) {
switch (key.keyCode) {
case NKCODE_CTRL_LEFT: modifiersPressed_ &= ~Modifier::LCTRL; break;
case NKCODE_CTRL_RIGHT: modifiersPressed_ &= ~Modifier::RCTRL; break;
case NKCODE_SHIFT_LEFT: modifiersPressed_ &= ~Modifier::LSHIFT; break;
case NKCODE_SHIFT_RIGHT: modifiersPressed_ &= ~Modifier::RSHIFT; break;
case NKCODE_ALT_LEFT: modifiersPressed_ &= ~Modifier::LALT; break;
case NKCODE_ALT_RIGHT: modifiersPressed_ &= ~Modifier::RALT; break;
case NKCODE_META_LEFT: modifiersPressed_ &= ~Modifier::LMETA; break;
case NKCODE_META_RIGHT: modifiersPressed_ &= ~Modifier::RMETA; break;
default:
break;
}
}
QueuedEvent ev{};
ev.type = QueuedEventType::KEY;
ev.key = key;
if (modifiersPressed_ & (Modifier::LCTRL | Modifier::RCTRL)) {
ev.key.flags |= KeyInputFlags::MOD_CTRL;
}
if (modifiersPressed_ & (Modifier::LSHIFT | Modifier::RSHIFT)) {
ev.key.flags |= KeyInputFlags::MOD_SHIFT;
}
if (modifiersPressed_ & (Modifier::LALT | Modifier::RALT)) {
ev.key.flags |= KeyInputFlags::MOD_ALT;
}
if (modifiersPressed_ & (Modifier::LMETA | Modifier::RMETA)) {
ev.key.flags |= KeyInputFlags::MOD_META;
}
std::lock_guard<std::mutex> guard(eventQueueLock_);
eventQueue_.push_back(ev);
return retval;
+2 -16
View File
@@ -32,19 +32,6 @@ struct QueuedEvent {
};
};
enum class Modifier {
NONE = 0,
LCTRL = 1,
RCTRL = 2,
LSHIFT = 4,
RSHIFT = 8,
LALT = 16,
RALT = 32,
LMETA = 64,
RMETA = 128,
};
ENUM_CLASS_BITOPS(Modifier);
class UIScreen : public Screen {
public:
UIScreen();
@@ -76,9 +63,10 @@ public:
virtual void focusChanged(ScreenFocusChange focusChange) override {
Screen::focusChanged(focusChange);
modifiersPressed_ = Modifier::NONE;
}
virtual bool AllowKeyboardNavigation() const { return true; }
protected:
virtual void CreateViews() = 0;
@@ -108,8 +96,6 @@ protected:
private:
std::mutex eventQueueLock_;
std::deque<QueuedEvent> eventQueue_;
Modifier modifiersPressed_{};
};
class UIDialogScreen : public UIScreen {