| @@ -32,9 +32,7 @@ struct MenuOverlay : OpaqueWidget { | |||||
| OpaqueWidget::onHoverKey(e); | OpaqueWidget::onHoverKey(e); | ||||
| if (e.target == this && e.action == GLFW_PRESS && e.key == GLFW_KEY_ESCAPE) { | if (e.target == this && e.action == GLFW_PRESS && e.key == GLFW_KEY_ESCAPE) { | ||||
| e.target = this; | |||||
| requestedDelete = true; | requestedDelete = true; | ||||
| return; | |||||
| } | } | ||||
| } | } | ||||
| }; | }; | ||||
| @@ -142,10 +142,6 @@ struct ScrollWidget : OpaqueWidget { | |||||
| offset = offset.minus(e.scrollDelta); | offset = offset.minus(e.scrollDelta); | ||||
| e.target = this; | e.target = this; | ||||
| } | } | ||||
| void onHoverKey(event::HoverKey &e) override { | |||||
| OpaqueWidget::onHoverKey(e); | |||||
| } | |||||
| }; | }; | ||||
| @@ -510,46 +510,46 @@ void SearchModuleField::onChange(event::Change &e) { | |||||
| } | } | ||||
| void SearchModuleField::onSelectKey(event::SelectKey &e) { | void SearchModuleField::onSelectKey(event::SelectKey &e) { | ||||
| switch (e.key) { | |||||
| case GLFW_KEY_ESCAPE: { | |||||
| MenuOverlay *overlay = getAncestorOfType<MenuOverlay>(); | |||||
| overlay->requestedDelete = true; | |||||
| e.target = this; | |||||
| return; | |||||
| } break; | |||||
| case GLFW_KEY_UP: { | |||||
| moduleBrowser->moduleList->incrementSelection(-1); | |||||
| moduleBrowser->moduleList->scrollSelected(); | |||||
| e.target = this; | |||||
| } break; | |||||
| case GLFW_KEY_DOWN: { | |||||
| moduleBrowser->moduleList->incrementSelection(1); | |||||
| moduleBrowser->moduleList->scrollSelected(); | |||||
| e.target = this; | |||||
| } break; | |||||
| case GLFW_KEY_PAGE_UP: { | |||||
| moduleBrowser->moduleList->incrementSelection(-5); | |||||
| moduleBrowser->moduleList->scrollSelected(); | |||||
| e.target = this; | |||||
| } break; | |||||
| case GLFW_KEY_PAGE_DOWN: { | |||||
| moduleBrowser->moduleList->incrementSelection(5); | |||||
| moduleBrowser->moduleList->scrollSelected(); | |||||
| e.target = this; | |||||
| } break; | |||||
| case GLFW_KEY_ENTER: { | |||||
| BrowserListItem *item = moduleBrowser->moduleList->getSelectedItem(); | |||||
| if (item) { | |||||
| item->doAction(); | |||||
| if (e.action == GLFW_PRESS) { | |||||
| switch (e.key) { | |||||
| case GLFW_KEY_ESCAPE: { | |||||
| MenuOverlay *overlay = getAncestorOfType<MenuOverlay>(); | |||||
| overlay->requestedDelete = true; | |||||
| e.target = this; | e.target = this; | ||||
| return; | return; | ||||
| } | |||||
| } break; | |||||
| } break; | |||||
| case GLFW_KEY_UP: { | |||||
| moduleBrowser->moduleList->incrementSelection(-1); | |||||
| moduleBrowser->moduleList->scrollSelected(); | |||||
| e.target = this; | |||||
| } break; | |||||
| case GLFW_KEY_DOWN: { | |||||
| moduleBrowser->moduleList->incrementSelection(1); | |||||
| moduleBrowser->moduleList->scrollSelected(); | |||||
| e.target = this; | |||||
| } break; | |||||
| case GLFW_KEY_PAGE_UP: { | |||||
| moduleBrowser->moduleList->incrementSelection(-5); | |||||
| moduleBrowser->moduleList->scrollSelected(); | |||||
| e.target = this; | |||||
| } break; | |||||
| case GLFW_KEY_PAGE_DOWN: { | |||||
| moduleBrowser->moduleList->incrementSelection(5); | |||||
| moduleBrowser->moduleList->scrollSelected(); | |||||
| e.target = this; | |||||
| } break; | |||||
| case GLFW_KEY_ENTER: { | |||||
| BrowserListItem *item = moduleBrowser->moduleList->getSelectedItem(); | |||||
| if (item) { | |||||
| item->doAction(); | |||||
| e.target = this; | |||||
| } | |||||
| } break; | |||||
| } | |||||
| } | } | ||||
| if (!e.target) { | |||||
| if (!e.target) | |||||
| TextField::onSelectKey(e); | TextField::onSelectKey(e); | ||||
| } | |||||
| } | } | ||||
| // Global functions | // Global functions | ||||
| @@ -318,52 +318,49 @@ void ModuleWidget::onButton(event::Button &e) { | |||||
| } | } | ||||
| void ModuleWidget::onHoverKey(event::HoverKey &e) { | void ModuleWidget::onHoverKey(event::HoverKey &e) { | ||||
| switch (e.key) { | |||||
| case GLFW_KEY_I: { | |||||
| if (context()->window->isModPressed() && !context()->window->isShiftPressed()) { | |||||
| reset(); | |||||
| e.target = this; | |||||
| return; | |||||
| } | |||||
| } break; | |||||
| case GLFW_KEY_R: { | |||||
| if (context()->window->isModPressed() && !context()->window->isShiftPressed()) { | |||||
| randomize(); | |||||
| e.target = this; | |||||
| return; | |||||
| } | |||||
| } break; | |||||
| case GLFW_KEY_C: { | |||||
| if (context()->window->isModPressed() && !context()->window->isShiftPressed()) { | |||||
| copyClipboard(); | |||||
| e.target = this; | |||||
| return; | |||||
| } | |||||
| } break; | |||||
| case GLFW_KEY_V: { | |||||
| if (context()->window->isModPressed() && !context()->window->isShiftPressed()) { | |||||
| pasteClipboard(); | |||||
| e.target = this; | |||||
| return; | |||||
| } | |||||
| } break; | |||||
| case GLFW_KEY_D: { | |||||
| if (context()->window->isModPressed() && !context()->window->isShiftPressed()) { | |||||
| context()->scene->rackWidget->cloneModule(this); | |||||
| e.target = this; | |||||
| return; | |||||
| } | |||||
| } break; | |||||
| case GLFW_KEY_U: { | |||||
| if (context()->window->isModPressed() && !context()->window->isShiftPressed()) { | |||||
| disconnect(); | |||||
| e.target = this; | |||||
| return; | |||||
| } | |||||
| } break; | |||||
| } | |||||
| OpaqueWidget::onHoverKey(e); | |||||
| if (e.action == GLFW_PRESS) { | |||||
| switch (e.key) { | |||||
| case GLFW_KEY_I: { | |||||
| if (context()->window->isModPressed() && !context()->window->isShiftPressed()) { | |||||
| reset(); | |||||
| e.target = this; | |||||
| } | |||||
| } break; | |||||
| case GLFW_KEY_R: { | |||||
| if (context()->window->isModPressed() && !context()->window->isShiftPressed()) { | |||||
| randomize(); | |||||
| e.target = this; | |||||
| } | |||||
| } break; | |||||
| case GLFW_KEY_C: { | |||||
| if (context()->window->isModPressed() && !context()->window->isShiftPressed()) { | |||||
| copyClipboard(); | |||||
| e.target = this; | |||||
| } | |||||
| } break; | |||||
| case GLFW_KEY_V: { | |||||
| if (context()->window->isModPressed() && !context()->window->isShiftPressed()) { | |||||
| pasteClipboard(); | |||||
| e.target = this; | |||||
| } | |||||
| } break; | |||||
| case GLFW_KEY_D: { | |||||
| if (context()->window->isModPressed() && !context()->window->isShiftPressed()) { | |||||
| context()->scene->rackWidget->cloneModule(this); | |||||
| e.target = this; | |||||
| } | |||||
| } break; | |||||
| case GLFW_KEY_U: { | |||||
| if (context()->window->isModPressed() && !context()->window->isShiftPressed()) { | |||||
| disconnect(); | |||||
| e.target = this; | |||||
| } | |||||
| } break; | |||||
| } | |||||
| } | |||||
| if (!e.target) | |||||
| OpaqueWidget::onHoverKey(e); | |||||
| } | } | ||||
| void ModuleWidget::onDragStart(event::DragStart &e) { | void ModuleWidget::onDragStart(event::DragStart &e) { | ||||
| @@ -5,6 +5,7 @@ | |||||
| #include "app/ModuleBrowser.hpp" | #include "app/ModuleBrowser.hpp" | ||||
| #include "app/RackScrollWidget.hpp" | #include "app/RackScrollWidget.hpp" | ||||
| #include "context.hpp" | #include "context.hpp" | ||||
| #include "logger.hpp" | |||||
| #include <thread> | #include <thread> | ||||
| @@ -67,9 +68,7 @@ void Scene::draw(NVGcontext *vg) { | |||||
| } | } | ||||
| void Scene::onHoverKey(event::HoverKey &e) { | void Scene::onHoverKey(event::HoverKey &e) { | ||||
| OpaqueWidget::onHoverKey(e); | |||||
| if (!e.target) { | |||||
| if (e.action == GLFW_PRESS) { | |||||
| switch (e.key) { | switch (e.key) { | ||||
| case GLFW_KEY_N: { | case GLFW_KEY_N: { | ||||
| if (context()->window->isModPressed() && !context()->window->isShiftPressed()) { | if (context()->window->isModPressed() && !context()->window->isShiftPressed()) { | ||||
| @@ -116,9 +115,13 @@ void Scene::onHoverKey(event::HoverKey &e) { | |||||
| } break; | } break; | ||||
| case GLFW_KEY_F11: { | case GLFW_KEY_F11: { | ||||
| context()->window->setFullScreen(!context()->window->isFullScreen()); | context()->window->setFullScreen(!context()->window->isFullScreen()); | ||||
| e.target = this; | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| if (!e.target) | |||||
| OpaqueWidget::onHoverKey(e); | |||||
| } | } | ||||
| void Scene::onPathDrop(event::PathDrop &e) { | void Scene::onPathDrop(event::PathDrop &e) { | ||||