File indexing completed on 2024-05-19 09:27:57

0001 //////////////////////////////////////////////////////////////////////////////
0002 // oxygenmnemonics.cpp
0003 // enable/disable mnemonics display
0004 // -------------------
0005 //
0006 // SPDX-FileCopyrightText: 2011 Hugo Pereira Da Costa <hugo.pereira@free.fr>
0007 //
0008 // SPDX-License-Identifier: LGPL-2.0-only
0009 //////////////////////////////////////////////////////////////////////////////
0010 
0011 #include "oxygenmnemonics.h"
0012 
0013 #include <QKeyEvent>
0014 #include <QWidget>
0015 
0016 namespace Oxygen
0017 {
0018 
0019 //____________________________________________________
0020 void Mnemonics::setMode(int mode)
0021 {
0022     switch (mode) {
0023     case StyleConfigData::MN_NEVER:
0024         qApp->removeEventFilter(this);
0025         setEnabled(false);
0026         break;
0027 
0028     default:
0029     case StyleConfigData::MN_ALWAYS:
0030         qApp->removeEventFilter(this);
0031         setEnabled(true);
0032         break;
0033 
0034     case StyleConfigData::MN_AUTO:
0035         qApp->removeEventFilter(this);
0036         qApp->installEventFilter(this);
0037         setEnabled(false);
0038         break;
0039     }
0040 
0041     return;
0042 }
0043 
0044 //____________________________________________________
0045 bool Mnemonics::eventFilter(QObject *, QEvent *event)
0046 {
0047     switch (event->type()) {
0048     case QEvent::KeyPress:
0049         if (static_cast<QKeyEvent *>(event)->key() == Qt::Key_Alt) {
0050             setEnabled(true);
0051         }
0052         break;
0053 
0054     case QEvent::KeyRelease:
0055         if (static_cast<QKeyEvent *>(event)->key() == Qt::Key_Alt) {
0056             setEnabled(false);
0057         }
0058         break;
0059 
0060     case QEvent::ApplicationStateChange: {
0061         setEnabled(false);
0062     } break;
0063 
0064     default:
0065         break;
0066     }
0067 
0068     return false;
0069 }
0070 
0071 //____________________________________________________
0072 void Mnemonics::setEnabled(bool value)
0073 {
0074     if (_enabled == value)
0075         return;
0076 
0077     _enabled = value;
0078 
0079     // update all top level widgets
0080     const auto topWidgets = qApp->topLevelWidgets();
0081     for (QWidget *widget : topWidgets) {
0082         widget->update();
0083     }
0084 }
0085 }