Skip to content

Commit ac4a61d

Browse files
Fix "Ambiguous shortcut overload"
1 parent 063e8e9 commit ac4a61d

File tree

1 file changed

+49
-3
lines changed

1 file changed

+49
-3
lines changed

src/ImageViewer/src/GUI/MainWindow_p.h

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include <QMenu>
3333
#include <QActionGroup>
3434
#include <QStyleFactory>
35+
#include <QShortcutEvent>
3536

3637
#include "Utils/MenuUtils.h"
3738
#include "Utils/ObjectsUtils.h"
@@ -54,6 +55,24 @@ struct MainWindow::UI
5455
bool toolBarButtonsHasDarkTheme;
5556
bool menuActionsHasDarkTheme;
5657

58+
class ActionsEventFilter : public QObject
59+
{
60+
public:
61+
ActionsEventFilter(QObject *parent = NULL)
62+
: QObject(parent)
63+
{}
64+
65+
protected:
66+
bool eventFilter(QObject *o, QEvent *e)
67+
{
68+
if(e->type() != QEvent::Shortcut)
69+
return QObject::eventFilter(o, e);
70+
qobject_cast<QAction*>(o)->activate(QAction::Trigger);
71+
return true;
72+
}
73+
};
74+
ActionsEventFilter *actionsEventFilter;
75+
5776
QFrame *centralWidget;
5877
ImageViewerWidget *imageViewerWidget;
5978
AdjustableFrame *toolbar;
@@ -113,6 +132,7 @@ struct MainWindow::UI
113132
, isSlideShowMode(false)
114133
, toolBarButtonsHasDarkTheme(false)
115134
, menuActionsHasDarkTheme(false)
135+
, actionsEventFilter(new ActionsEventFilter(mainWindow))
116136
, CONSTRUCT_OBJECT(centralWidget, QFrame, (mainWindow))
117137
, CONSTRUCT_OBJECT(imageViewerWidget, ImageViewerWidget, (centralWidget))
118138
, CONSTRUCT_OBJECT(toolbar, AdjustableFrame, (centralWidget))
@@ -278,13 +298,13 @@ struct MainWindow::UI
278298
actionDeleteFile->setMenuRole(QAction::NoRole);
279299

280300
menuView->addAction(actionZoomOut);
281-
actionZoomOut->setShortcuts(QList<QKeySequence>() << createAnyModifierShortcuts(Qt::Key_Minus) << createAnyModifierShortcuts(Qt::Key_Underscore));
301+
actionZoomOut->setShortcuts(createAnyModifierConjugatedShortcuts(Qt::Key_Minus, Qt::Key_Underscore));
282302
actionZoomOut->setMenuRole(QAction::NoRole);
283303
menuView->addAction(actionZoomIn);
284-
actionZoomIn->setShortcuts(QList<QKeySequence>() << createAnyModifierShortcuts(Qt::Key_Plus) << createAnyModifierShortcuts(Qt::Key_Equal));
304+
actionZoomIn->setShortcuts(createAnyModifierConjugatedShortcuts(Qt::Key_Plus, Qt::Key_Equal));
285305
actionZoomIn->setMenuRole(QAction::NoRole);
286306
menuView->addAction(actionZoomReset);
287-
actionZoomReset->setShortcuts(QList<QKeySequence>() << createAnyModifierShortcuts(Qt::Key_0) << createAnyModifierShortcuts(Qt::Key_BracketLeft));
307+
actionZoomReset->setShortcuts(createAnyModifierConjugatedShortcuts(Qt::Key_0, Qt::Key_BracketLeft));
288308
actionZoomReset->setMenuRole(QAction::NoRole);
289309
menuView->addAction(actionZoomFitToWindow);
290310
actionZoomFitToWindow->setShortcuts(createAnyModifierShortcuts(Qt::Key_F));
@@ -523,6 +543,7 @@ struct MainWindow::UI
523543
{
524544
QAction *action = new QAction(widget);
525545
widget->addAction(action);
546+
action->installEventFilter(actionsEventFilter);
526547
return action;
527548
}
528549

@@ -539,9 +560,11 @@ struct MainWindow::UI
539560
<< Qt::SHIFT + Qt::ALT
540561
<< Qt::META + Qt::CTRL
541562
<< Qt::META + Qt::ALT
563+
<< Qt::CTRL + Qt::ALT
542564
<< Qt::SHIFT + Qt::META + Qt::CTRL
543565
<< Qt::SHIFT + Qt::META + Qt::ALT
544566
<< Qt::SHIFT + Qt::CTRL + Qt::ALT
567+
<< Qt::META + Qt::CTRL + Qt::ALT
545568
<< Qt::SHIFT + Qt::META + Qt::CTRL + Qt::ALT;
546569
QList<QKeySequence> result;
547570
result.append(key + defaultModifier);
@@ -554,6 +577,29 @@ struct MainWindow::UI
554577
return result;
555578
}
556579

580+
QList<QKeySequence> createAnyModifierConjugatedShortcuts(Qt::Key master, Qt::Key slave, int defaultModifier = 0)
581+
{
582+
static const QList<int> modifiers = QList<int>()
583+
<< 0
584+
<< Qt::META
585+
<< Qt::CTRL
586+
<< Qt::ALT
587+
<< Qt::META + Qt::CTRL
588+
<< Qt::META + Qt::ALT
589+
<< Qt::CTRL + Qt::ALT
590+
<< Qt::META + Qt::CTRL + Qt::ALT;
591+
QList<QKeySequence> result;
592+
result.append(master + defaultModifier);
593+
for(QList<int>::ConstIterator it = modifiers.constBegin(); it != modifiers.constEnd(); ++it)
594+
{
595+
const int modifier = *it;
596+
if(modifier != defaultModifier)
597+
result.append(master + modifier);
598+
result.append(slave + modifier);
599+
}
600+
return result;
601+
}
602+
557603
void updateDockMenu()
558604
{
559605
#if defined (Q_OS_MAC)

0 commit comments

Comments
 (0)