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 }