Unity 8
uinput.h
1 /*
2  * Copyright (C) 2015 Canonical Ltd.
3  *
4  * This program is free software: you can redistribute it and/or modify it
5  * under the terms of the GNU General Public License version 3, as published
6  * by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranties of
10  * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11  * PURPOSE. See the GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License along
14  * with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 
17 
18 #ifndef UINPUT_H
19 #define UINPUT_H
20 
21 #include <QObject>
22 #include <QFile>
23 
24 #include <linux/uinput.h>
25 
26 
27 class UInput : public QObject
28 {
29  Q_OBJECT
30  Q_ENUMS(Button)
31 
32 public:
33  enum Button {
34  ButtonLeft,
35  ButtonRight,
36  ButtonMiddle
37  };
38 
39  explicit UInput(QObject *parent = nullptr);
40  ~UInput();
41 
42  Q_INVOKABLE void createMouse();
43  Q_INVOKABLE void removeMouse();
44 
45  Q_INVOKABLE void moveMouse(int dx, int dy);
46  Q_INVOKABLE void pressMouse(Button button);
47  Q_INVOKABLE void releaseMouse(Button button);
48  Q_INVOKABLE void scrollMouse(int dh, int dv);
49 
50 private:
51  void injectMouse(Button button, int down);
52 
53 private:
54  QFile m_uinput;
55  uinput_user_dev m_uinput_mouse_dev;
56  QByteArray m_devName;
57 
58  bool m_mouseCreated = false;
59 };
60 
61 #endif // UINPUT_H