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