1 /* This file is part of Clementine.
2    Copyright 2010, David Sansome <me@davidsansome.com>
3 
4    Clementine is free software: you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation, either version 3 of the License, or
7    (at your option) any later version.
8 
9    Clementine is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13 
14    You should have received a copy of the GNU General Public License
15    along with Clementine.  If not, see <http://www.gnu.org/licenses/>.
16 */
17 
18 #ifndef GLOBALSHORTCUTGRABBER_H
19 #define GLOBALSHORTCUTGRABBER_H
20 
21 #include <QDialog>
22 
23 class MacMonitorWrapper;
24 class Ui_GlobalShortcutGrabber;
25 
26 #ifdef __OBJC__
27 @class NSEvent;
28 #else
29 class NSEvent;
30 #endif
31 
32 class GlobalShortcutGrabber : public QDialog {
33   Q_OBJECT
34 
35  public:
36   GlobalShortcutGrabber(QWidget* parent = nullptr);
37   ~GlobalShortcutGrabber();
38 
39   QKeySequence GetKey(const QString& name);
40 
41  protected:
42   bool event(QEvent*);
43   void showEvent(QShowEvent*);
44   void hideEvent(QHideEvent*);
45   void grabKeyboard();
46   void releaseKeyboard();
47 
48  private:
49   void UpdateText();
50   void SetupMacEventHandler();
51   void TeardownMacEventHandler();
52   bool HandleMacEvent(NSEvent*);
53 
54   Ui_GlobalShortcutGrabber* ui_;
55   QKeySequence ret_;
56 
57   QList<int> modifier_keys_;
58 
59   MacMonitorWrapper* wrapper_;
60 };
61 
62 #endif  // GLOBALSHORTCUTGRABBER_H
63