File indexing completed on 2024-05-05 05:35:25
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 void Mnemonics::setMode(int mode) 0020 { 0021 switch (mode) { 0022 case StyleConfigData::MN_NEVER: 0023 qApp->removeEventFilter(this); 0024 setEnabled(false); 0025 break; 0026 0027 default: 0028 case StyleConfigData::MN_ALWAYS: 0029 qApp->removeEventFilter(this); 0030 setEnabled(true); 0031 break; 0032 0033 case StyleConfigData::MN_AUTO: 0034 qApp->removeEventFilter(this); 0035 qApp->installEventFilter(this); 0036 setEnabled(false); 0037 break; 0038 } 0039 0040 return; 0041 } 0042 0043 //____________________________________________________ 0044 bool Mnemonics::eventFilter(QObject *, QEvent *event) 0045 { 0046 switch (event->type()) { 0047 case QEvent::KeyPress: 0048 if (static_cast<QKeyEvent *>(event)->key() == Qt::Key_Alt) { 0049 setEnabled(true); 0050 } 0051 break; 0052 0053 case QEvent::KeyRelease: 0054 if (static_cast<QKeyEvent *>(event)->key() == Qt::Key_Alt) { 0055 setEnabled(false); 0056 } 0057 break; 0058 0059 case QEvent::ApplicationStateChange: { 0060 setEnabled(false); 0061 } break; 0062 0063 default: 0064 break; 0065 } 0066 0067 return false; 0068 } 0069 0070 //____________________________________________________ 0071 void Mnemonics::setEnabled(bool value) 0072 { 0073 if (_enabled == value) 0074 return; 0075 0076 _enabled = value; 0077 0078 // update all top level widgets 0079 const auto topWidgets = qApp->topLevelWidgets(); 0080 for (QWidget *widget : topWidgets) { 0081 widget->update(); 0082 } 0083 } 0084 }