From 0566d49cf034ae534a1194f0cef484378933799f Mon Sep 17 00:00:00 2001 From: bsp2 Date: Sun, 10 Mar 2019 14:56:45 +0100 Subject: [PATCH] fix "Save as" and "Revert" keyboard shortcuts --- dep/lglw/lglw.h | 3 +++ dep/lglw/lglw_linux.c | 11 +++++++++++ dep/lglw/lglw_windows.c | 13 +++++++++++++ src/app/RackScene.cpp | 6 ++++++ src/app/Toolbar.cpp | 2 +- 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/dep/lglw/lglw.h b/dep/lglw/lglw.h index 53833c2c..cc2927ba 100644 --- a/dep/lglw/lglw.h +++ b/dep/lglw/lglw.h @@ -236,6 +236,9 @@ void lglw_keyboard_callback_set (lglw_t _lglw, lglw_keyboard_fxn_t _cbk); // Get current key modifier state uint32_t lglw_keyboard_get_modifiers (lglw_t _lglw); +// Clear current key modifier state (workaround for stuck-modifier-after-dialog issue) +void lglw_keyboard_clear_modifiers (lglw_t _lglw); + // Get current mouse button state uint32_t lglw_mouse_get_buttons (lglw_t _lglw); diff --git a/dep/lglw/lglw_linux.c b/dep/lglw/lglw_linux.c index 700f59c6..31ce074a 100644 --- a/dep/lglw/lglw_linux.c +++ b/dep/lglw/lglw_linux.c @@ -1722,6 +1722,17 @@ uint32_t lglw_keyboard_get_modifiers(lglw_t _lglw) { } +// ---------------------------------------------------------------------------- lglw_keyboard_clear_modifiers +void lglw_keyboard_clear_modifiers(lglw_t _lglw) { + LGLW(_lglw); + + if(NULL != lglw) + { + lglw->keyboard.kmod_state = 0; + } +} + + // ---------------------------------------------------------------------------- lglw_touchkeyboard_show void lglw_touchkeyboard_show(lglw_t _lglw, lglw_bool_t _bEnable) { LGLW(_lglw); diff --git a/dep/lglw/lglw_windows.c b/dep/lglw/lglw_windows.c index 228e5575..0f75c797 100644 --- a/dep/lglw/lglw_windows.c +++ b/dep/lglw/lglw_windows.c @@ -25,6 +25,7 @@ * ---- * ---- created: 04Aug2018 * ---- changed: 05Aug2018, 06Aug2018, 07Aug2018, 08Aug2018, 09Aug2018, 18Aug2018, 07Mar2019 + * ---- 10Mar2019 * ---- * ---- * ---- @@ -782,6 +783,18 @@ uint32_t lglw_keyboard_get_modifiers(lglw_t _lglw) { } +// ---------------------------------------------------------------------------- lglw_keyboard_clear_modifiers +void lglw_keyboard_clear_modifiers(lglw_t _lglw) { + LGLW(_lglw); + + if(NULL != lglw) + { + lglw->keyboard.kmod_state = 0; + } +} + + + // ---------------------------------------------------------------------------- loc_touchkeyboard_get_rect #if 0 static lglw_bool_t loc_touchkeyboard_get_rect(RECT *rect) { diff --git a/src/app/RackScene.cpp b/src/app/RackScene.cpp index a3ddf274..25f7a4bd 100644 --- a/src/app/RackScene.cpp +++ b/src/app/RackScene.cpp @@ -79,21 +79,27 @@ void RackScene::onHoverKey(EventHoverKey &e) { } break; case 'o'/*GLFW_KEY_O*/: + case 'O'/*GLFW_KEY_O*/: if (windowIsModPressed() && !windowIsShiftPressed()) { + lglw_keyboard_clear_modifiers(global_ui->window.lglw); // workaround for stuck modifier keys global_ui->app.gRackWidget->openDialog(); e.consumed = true; } if (windowIsModPressed() && windowIsShiftPressed()) { + lglw_keyboard_clear_modifiers(global_ui->window.lglw); // workaround for stuck modifier keys global_ui->app.gRackWidget->revert(); e.consumed = true; } break; case 's'/*GLFW_KEY_S*/: + case 'S'/*GLFW_KEY_S*/: if (windowIsModPressed() && !windowIsShiftPressed()) { + lglw_keyboard_clear_modifiers(global_ui->window.lglw); // workaround for stuck modifier keys global_ui->app.gRackWidget->saveDialog(); e.consumed = true; } if (windowIsModPressed() && windowIsShiftPressed()) { + lglw_keyboard_clear_modifiers(global_ui->window.lglw); // workaround for stuck modifier keys global_ui->app.gRackWidget->saveAsDialog(); e.consumed = true; } diff --git a/src/app/Toolbar.cpp b/src/app/Toolbar.cpp index 99f00d73..a1591b20 100644 --- a/src/app/Toolbar.cpp +++ b/src/app/Toolbar.cpp @@ -90,7 +90,7 @@ struct SaveAsButton : TooltipIconButton { struct RevertButton : TooltipIconButton { RevertButton() { setSVG(SVG::load(assetGlobal("res/icons/noun_1084369_cc.svg"))); - tooltipText = "Revert"; + tooltipText = "Revert (" WINDOW_MOD_KEY_NAME "+Shift+O)"; } void onAction(EventAction &e) override { global_ui->app.gRackWidget->revert();