From 194684ac4d6e2cee598e7e93d514e4f656d1dc80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaakko=20Ker=C3=A4nen?= Date: Thu, 17 Apr 2014 15:34:06 +0300 Subject: [PATCH] Fixed|Input|Bindings: Activate "console" bcontext when console has focus Otherwise key modifiers might fire the gun, etc. when typing in the console. --- doomsday/client/include/ui/widgetactions.h | 6 ++++++ .../client/include/ui/widgets/consolecommandwidget.h | 2 ++ doomsday/client/src/ui/widgetactions.cpp | 8 ++++++++ .../client/src/ui/widgets/consolecommandwidget.cpp | 12 ++++++++++++ 4 files changed, 28 insertions(+) diff --git a/doomsday/client/include/ui/widgetactions.h b/doomsday/client/include/ui/widgetactions.h index 801fffda6a..cb8bc9d76c 100644 --- a/doomsday/client/include/ui/widgetactions.h +++ b/doomsday/client/include/ui/widgetactions.h @@ -73,6 +73,12 @@ class WidgetActions */ void trackInput(de::Event const &event); + void activateContext(de::String const &context, bool yes = true); + + void deactivateContext(de::String const &context) { + activateContext(context, false); + } + private: DENG2_PRIVATE(d) }; diff --git a/doomsday/client/include/ui/widgets/consolecommandwidget.h b/doomsday/client/include/ui/widgets/consolecommandwidget.h index 3825fa9bbd..ef05ff23af 100644 --- a/doomsday/client/include/ui/widgets/consolecommandwidget.h +++ b/doomsday/client/include/ui/widgets/consolecommandwidget.h @@ -36,6 +36,8 @@ class ConsoleCommandWidget : public de::CommandWidget ConsoleCommandWidget(de::String const &name = ""); // Events. + void focusGained(); + void focusLost(); bool handleEvent(de::Event const &event); protected: diff --git a/doomsday/client/src/ui/widgetactions.cpp b/doomsday/client/src/ui/widgetactions.cpp index 7af34e1b41..4c3bbfdb11 100644 --- a/doomsday/client/src/ui/widgetactions.cpp +++ b/doomsday/client/src/ui/widgetactions.cpp @@ -81,3 +81,11 @@ void WidgetActions::trackInput(Event const &event) DD_ConvertEvent(event, &ddev); I_TrackInput(&ddev); } + +void WidgetActions::activateContext(String const &context, bool yes) +{ + if(bcontext_t *bc = B_ContextByName(context.toLatin1())) + { + B_ActivateContext(bc, yes); + } +} diff --git a/doomsday/client/src/ui/widgets/consolecommandwidget.cpp b/doomsday/client/src/ui/widgets/consolecommandwidget.cpp index 2d30bda1f2..34cb41df37 100644 --- a/doomsday/client/src/ui/widgets/consolecommandwidget.cpp +++ b/doomsday/client/src/ui/widgets/consolecommandwidget.cpp @@ -64,6 +64,18 @@ ConsoleCommandWidget::ConsoleCommandWidget(String const &name) d->updateLexicon(); } +void ConsoleCommandWidget::focusGained() +{ + CommandWidget::focusGained(); + ClientApp::widgetActions().activateContext("console"); +} + +void ConsoleCommandWidget::focusLost() +{ + CommandWidget::focusLost(); + ClientApp::widgetActions().deactivateContext("console"); +} + bool ConsoleCommandWidget::handleEvent(Event const &event) { if(isDisabled()) return false;