17
17
18
18
#ifdef __linux__
19
19
20
+ #include < unistd.h> // usleep
21
+
20
22
#include " xinputsimulatorimpllinux.h"
21
23
#include " notimplementedexception.h"
22
24
#include < iostream>
25
27
#include < stdio.h>
26
28
#include < cstring>
27
29
30
+
31
+
28
32
XInputSimulatorImplLinux::XInputSimulatorImplLinux ()
29
33
{
30
34
if ((display = XOpenDisplay (NULL )) == NULL ) {
@@ -33,6 +37,13 @@ XInputSimulatorImplLinux::XInputSimulatorImplLinux()
33
37
}
34
38
35
39
root = DefaultRootWindow (display);
40
+
41
+ Screen* pscr = DefaultScreenOfDisplay ( display );
42
+
43
+ this ->displayX = pscr->width ;
44
+ this ->displayY = pscr->height ;
45
+
46
+ // XCloseDisplay( pdsp );
36
47
}
37
48
38
49
void XInputSimulatorImplLinux::initMouseEvent (int button)
@@ -77,27 +88,20 @@ void XInputSimulatorImplLinux::mouseMoveRelative(int x, int y)
77
88
78
89
void XInputSimulatorImplLinux::mouseDown (int button)
79
90
{
80
- this ->initMouseEvent (button);
81
-
82
- event.type = ButtonPress;
83
- if (XSendEvent (display, PointerWindow, True, ButtonPressMask, &event) == 0 )
84
- std::cout << " Error to send the event!\n " ;
91
+ XTestFakeButtonEvent (display, button, true , CurrentTime);
85
92
XFlush (display);
86
93
}
87
94
88
95
void XInputSimulatorImplLinux::mouseUp (int button)
89
96
{
90
- this ->initMouseEvent (button);
91
-
92
- event.type = ButtonRelease;
93
- if (XSendEvent (display, PointerWindow, True, ButtonReleaseMask, &event) == 0 )
94
- std::cout << " Error to send the event!\n " ;
97
+ XTestFakeButtonEvent (display, button, false , CurrentTime);
95
98
XFlush (display);
96
99
}
97
100
98
101
void XInputSimulatorImplLinux::mouseClick (int button)
99
102
{
100
103
this ->mouseDown (button);
104
+ usleep (100 );
101
105
this ->mouseUp (button);
102
106
}
103
107
// kajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjfkajsdölfkjasdölfkjasldökfjaölsdkjfalsdkjfalskdjfaldskjf
@@ -141,22 +145,20 @@ void XInputSimulatorImplLinux::mouseScrollY(int length)
141
145
142
146
void XInputSimulatorImplLinux::keyDown (int key)
143
147
{
144
- // throw NotImplementedException();
145
148
XTestFakeKeyEvent (display, key, True, 0 );
146
149
XFlush (display);
147
150
}
148
151
149
152
void XInputSimulatorImplLinux::keyUp (int key)
150
153
{
151
- // throw NotImplementedException();
152
154
XTestFakeKeyEvent (display, key, False, 0 );
153
155
XFlush (display);
154
156
}
155
157
156
158
void XInputSimulatorImplLinux::keyClick (int key)
157
159
{
158
160
std::cout << " key click: " << key << std::endl;
159
- // throw NotImplementedException();
161
+
160
162
this ->keyDown (key);
161
163
this ->keyUp (key);
162
164
}
@@ -165,31 +167,15 @@ int XInputSimulatorImplLinux::charToKeyCode(char key_char)
165
167
{
166
168
std::cout << " cchar: " << (int )key_char << std::endl;
167
169
168
- // throw NotImplementedException();
169
-
170
- // KeySym sym = XStringToKeysym(&key_char);
171
-
172
- // std::cout << "sym: " << sym << std::endl;
173
-
174
170
int keyCode = XKeysymToKeycode (display, key_char);
175
171
std::cout << " ccode: " << keyCode << std::endl;
176
172
177
173
return keyCode;
178
174
}
179
175
void XInputSimulatorImplLinux::keySequence (const std::string &sequence)
180
176
{
181
- // throw NotImplementedException();
182
-
183
177
std::cout << " key seq: " << sequence << std::endl;
184
178
185
- // c++11 training
186
- // for(auto it = sequence.begin(); it != sequence.end(); ++it) {
187
- // std::cout << "key org: " << (int)(*it) << std::endl;
188
- // int keyCode = this->charToKeyCode(*it);
189
- // std::cout << "key code: " << keyCode << std::endl;
190
- // this->keyClick(keyCode);
191
- // }
192
- // c++11 better
193
179
for (const char c : sequence) {
194
180
std::cout << " cahr: " << c << std::endl;
195
181
int keyCode = this ->charToKeyCode (c);
0 commit comments