File indexing completed on 2024-04-28 05:26:22

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