UI: Make shortcut filter not filter dialog keys

With dialog boxes, the keys Enter and Escape are important for
accepting/rejecting the dialog.
This commit is contained in:
jp9000 2015-06-29 13:26:08 -07:00
parent 5fc21edc1f
commit 412fbfce82
3 changed files with 13 additions and 4 deletions

View file

@ -53,7 +53,7 @@ static bool portable_mode = false;
QObject *CreateShortcutFilter()
{
return new OBSEventFilter([](QObject *, QEvent *event)
return new OBSEventFilter([](QObject *obj, QEvent *event)
{
auto mouse_event = [](QMouseEvent &event)
{
@ -108,8 +108,10 @@ QObject *CreateShortcutFilter()
return true;
};
auto key_event = [](QKeyEvent *event)
auto key_event = [&](QKeyEvent *event)
{
QDialog *dialog = qobject_cast<QDialog*>(obj);
obs_key_combination_t hotkey = {0, OBS_KEY_NONE};
bool pressed = event->type() == QEvent::KeyPress;
@ -128,6 +130,11 @@ QObject *CreateShortcutFilter()
break;
#endif
case Qt::Key_Enter:
case Qt::Key_Escape:
case Qt::Key_Return:
if (dialog && pressed)
return false;
default:
hotkey.key = obs_key_from_virtual_key(
event->nativeVirtualKey());
@ -137,6 +144,7 @@ QObject *CreateShortcutFilter()
event->modifiers());
obs_hotkey_inject_event(hotkey, pressed);
return true;
};
switch (event->type()) {
@ -148,8 +156,7 @@ QObject *CreateShortcutFilter()
case QEvent::Wheel:*/
case QEvent::KeyPress:
case QEvent::KeyRelease:
key_event(static_cast<QKeyEvent*>(event));
return true;
return key_event(static_cast<QKeyEvent*>(event));
default:
return false;

View file

@ -21,6 +21,7 @@
#include "qt-wrappers.hpp"
#include "display-helpers.hpp"
#include <QKeyEvent>
#include <QCloseEvent>
#include <QScreen>
#include <QWindow>

View file

@ -89,6 +89,7 @@ protected:
{
return filter(obj, event);
}
private:
EventFilterFunc filter;
};