提交 412fbfce 编写于 作者: J jp9000

UI: Make shortcut filter not filter dialog keys

With dialog boxes, the keys Enter and Escape are important for
accepting/rejecting the dialog.
上级 5fc21edc
......@@ -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;
......
......@@ -21,6 +21,7 @@
#include "qt-wrappers.hpp"
#include "display-helpers.hpp"
#include <QKeyEvent>
#include <QCloseEvent>
#include <QScreen>
#include <QWindow>
......
......@@ -89,6 +89,7 @@ protected:
{
return filter(obj, event);
}
private:
EventFilterFunc filter;
};
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册