From f3f8d328ef14b3e454b5612dfc4c02c71130f92d Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Mon, 29 Mar 2021 12:32:55 +0300 Subject: Fixed: Keyboard shortcuts stop working Menus can't be disabled or otherwise their items can't be triggered any more. Hidden menus are still supposed to receive key events. IssueID #224 --- src/ui/keys.c | 1 + src/ui/util.c | 4 ++-- src/ui/widget.c | 16 ++++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/ui/keys.c b/src/ui/keys.c index 456ca928..ecf65995 100644 --- a/src/ui/keys.c +++ b/src/ui/keys.c @@ -426,6 +426,7 @@ iBool processEvent_Keys(const SDL_Event *ev) { iKeys *d = &keys_; if (ev->type == SDL_KEYDOWN || ev->type == SDL_KEYUP) { const iBinding *bind = find_Keys_(d, ev->key.keysym.sym, keyMods_Sym(ev->key.keysym.mod)); + printf("[Keys] bind: %p\n", bind); fflush(stdout); if (bind) { if (ev->type == SDL_KEYUP) { if (bind->flags & argRelease_BindFlag) { diff --git a/src/ui/util.c b/src/ui/util.c index 2996bfd5..64b32bad 100644 --- a/src/ui/util.c +++ b/src/ui/util.c @@ -618,7 +618,7 @@ void openMenuFlags_Widget(iWidget *d, iInt2 coord, iBool postCommands) { } /* Menu closes when commands are emitted, so handle any pending ones beforehand. */ processEvents_App(postedEventsOnly_AppEventMode); - setFlags_Widget(d, hidden_WidgetFlag | disabled_WidgetFlag, iFalse); + setFlags_Widget(d, hidden_WidgetFlag, iFalse); setFlags_Widget(d, commandOnMouseMiss_WidgetFlag, iTrue); raise_Widget(d); setFlags_Widget(findChild_Widget(d, "menu.cancel"), disabled_WidgetFlag, iFalse); @@ -700,7 +700,7 @@ void openMenuFlags_Widget(iWidget *d, iInt2 coord, iBool postCommands) { } void closeMenu_Widget(iWidget *d) { - setFlags_Widget(d, hidden_WidgetFlag | disabled_WidgetFlag, iTrue); + setFlags_Widget(d, hidden_WidgetFlag, iTrue); setFlags_Widget(findChild_Widget(d, "menu.cancel"), disabled_WidgetFlag, iTrue); postRefresh_App(); postCommand_Widget(d, "menu.closed"); diff --git a/src/ui/widget.c b/src/ui/widget.c index 23891999..e19a9482 100644 --- a/src/ui/widget.c +++ b/src/ui/widget.c @@ -661,6 +661,14 @@ iBool dispatchEvent_Widget(iWidget *d, const SDL_Event *ev) { iReverseForEach(PtrArray, i, rootData_.onTop) { iWidget *widget = *i.value; if (isVisible_Widget(widget) && dispatchEvent_Widget(widget, ev)) { +#if 0 + if (ev->type == SDL_KEYDOWN) { + printf("[%p] %s:'%s' (on top) ate the key\n", + widget, class_Widget(widget)->name, + cstr_String(id_Widget(widget))); + fflush(stdout); + } +#endif #if 0 if (ev->type == SDL_MOUSEMOTION) { printf("[%p] %s:'%s' (on top) ate the motion\n", @@ -700,6 +708,14 @@ iBool dispatchEvent_Widget(iWidget *d, const SDL_Event *ev) { continue; } if (dispatchEvent_Widget(child, ev)) { +#if 0 + if (ev->type == SDL_KEYDOWN) { + printf("[%p] %s:'%s' ate the key\n", + child, class_Widget(child)->name, + cstr_String(id_Widget(child))); + fflush(stdout); + } +#endif #if 0 if (ev->type == SDL_MOUSEMOTION) { printf("[%p] %s:'%s' (on top) ate the motion\n", -- cgit v1.2.3