diff --git a/doomsday/libappfw/src/widgets/dialogwidget.cpp b/doomsday/libappfw/src/widgets/dialogwidget.cpp index fecfabef6d..af0ae7e5b4 100644 --- a/doomsday/libappfw/src/widgets/dialogwidget.cpp +++ b/doomsday/libappfw/src/widgets/dialogwidget.cpp @@ -560,7 +560,7 @@ bool DialogWidget::handleEvent(Event const &event) if(d->modality == Modal) { // The event should already have been handled by the children. - if((event.isKeyDown() && !(event.as().qtKey() == Qt::Key_Shift)) || + if((event.isKeyDown() && !event.as().isModifier()) || (event.type() == Event::MouseButton && event.as().state() == MouseEvent::Pressed && !hitTest(event))) diff --git a/doomsday/libappfw/src/widgets/lineeditwidget.cpp b/doomsday/libappfw/src/widgets/lineeditwidget.cpp index c944bfb535..7b66e2ea86 100644 --- a/doomsday/libappfw/src/widgets/lineeditwidget.cpp +++ b/doomsday/libappfw/src/widgets/lineeditwidget.cpp @@ -423,6 +423,12 @@ bool LineEditWidget::handleEvent(Event const &event) { KeyEvent const &key = event.as(); + if(key.isModifier()) + { + // Don't eat modifier keys; the bindings system needs them. + return false; + } + /* if(key.qtKey() == Qt::Key_Shift) { // Shift is not eaten so that Shift-Tilde can produce ~. @@ -434,8 +440,8 @@ bool LineEditWidget::handleEvent(Event const &event) key.qtKey() == Qt::Key_Meta) { // Modifier keys alone will be eaten when focused. - return true; - } + return false; + }*/ if(d->signalOnEnter && (key.qtKey() == Qt::Key_Enter || key.qtKey() == Qt::Key_Return)) { diff --git a/doomsday/libgui/include/de/gui/keyevent.h b/doomsday/libgui/include/de/gui/keyevent.h index 0d8329bd6f..6c9ae5e147 100644 --- a/doomsday/libgui/include/de/gui/keyevent.h +++ b/doomsday/libgui/include/de/gui/keyevent.h @@ -64,6 +64,7 @@ class LIBGUI_PUBLIC KeyEvent : public de::Event inline int nativeCode() const { return _nativeCode; } inline de::String const &text() const { return _text; } inline Modifiers modifiers() const { return _mods; } + bool isModifier() const; /** * Translates a Qt key code to a Doomsday key code (see ddkey.h). diff --git a/doomsday/libgui/src/keyevent.cpp b/doomsday/libgui/src/keyevent.cpp index b74562ded0..e4ff747fb5 100644 --- a/doomsday/libgui/src/keyevent.cpp +++ b/doomsday/libgui/src/keyevent.cpp @@ -430,4 +430,10 @@ KeyEvent::State KeyEvent::state() const } } +bool KeyEvent::isModifier() const +{ + return _qtKey == Qt::Key_Shift || _qtKey == Qt::Key_Control || + _qtKey == Qt::Key_Alt || _qtKey == Qt::Key_Meta; +} + } // namespace de