Skip to content

Commit dd6b347

Browse files
committed
fix x11 c bool define for c++ usage ; add screen bounds check on mac osx
1 parent ad2f299 commit dd6b347

File tree

4 files changed

+38
-30
lines changed

4 files changed

+38
-30
lines changed

XInputSimulator/xinputsimulatorimpllinux.cpp

Lines changed: 15 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
#ifdef __linux__
1919

20+
#include <unistd.h> //usleep
21+
2022
#include "xinputsimulatorimpllinux.h"
2123
#include "notimplementedexception.h"
2224
#include <iostream>
@@ -25,6 +27,8 @@
2527
#include <stdio.h>
2628
#include <cstring>
2729

30+
31+
2832
XInputSimulatorImplLinux::XInputSimulatorImplLinux()
2933
{
3034
if((display = XOpenDisplay(NULL)) == NULL) {
@@ -33,6 +37,13 @@ XInputSimulatorImplLinux::XInputSimulatorImplLinux()
3337
}
3438

3539
root = DefaultRootWindow(display);
40+
41+
Screen* pscr = DefaultScreenOfDisplay( display );
42+
43+
this->displayX = pscr->width;
44+
this->displayY = pscr->height;
45+
46+
//XCloseDisplay( pdsp );
3647
}
3748

3849
void XInputSimulatorImplLinux::initMouseEvent(int button)
@@ -77,27 +88,20 @@ void XInputSimulatorImplLinux::mouseMoveRelative(int x, int y)
7788

7889
void XInputSimulatorImplLinux::mouseDown(int button)
7990
{
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);
8592
XFlush(display);
8693
}
8794

8895
void XInputSimulatorImplLinux::mouseUp(int button)
8996
{
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);
9598
XFlush(display);
9699
}
97100

98101
void XInputSimulatorImplLinux::mouseClick(int button)
99102
{
100103
this->mouseDown(button);
104+
usleep(100);
101105
this->mouseUp(button);
102106
}
103107
//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)
141145

142146
void XInputSimulatorImplLinux::keyDown(int key)
143147
{
144-
//throw NotImplementedException();
145148
XTestFakeKeyEvent(display, key, True, 0);
146149
XFlush(display);
147150
}
148151

149152
void XInputSimulatorImplLinux::keyUp(int key)
150153
{
151-
//throw NotImplementedException();
152154
XTestFakeKeyEvent(display, key, False, 0);
153155
XFlush(display);
154156
}
155157

156158
void XInputSimulatorImplLinux::keyClick(int key)
157159
{
158160
std::cout << "key click: " << key << std::endl;
159-
//throw NotImplementedException();
161+
160162
this->keyDown(key);
161163
this->keyUp(key);
162164
}
@@ -165,31 +167,15 @@ int XInputSimulatorImplLinux::charToKeyCode(char key_char)
165167
{
166168
std::cout << "cchar: " << (int)key_char << std::endl;
167169

168-
//throw NotImplementedException();
169-
170-
// KeySym sym = XStringToKeysym(&key_char);
171-
172-
// std::cout << "sym: " << sym << std::endl;
173-
174170
int keyCode = XKeysymToKeycode(display, key_char);
175171
std::cout << "ccode: " << keyCode << std::endl;
176172

177173
return keyCode;
178174
}
179175
void XInputSimulatorImplLinux::keySequence(const std::string &sequence)
180176
{
181-
//throw NotImplementedException();
182-
183177
std::cout << "key seq: " << sequence << std::endl;
184178

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
193179
for(const char c : sequence) {
194180
std::cout << "cahr: " << c << std::endl;
195181
int keyCode = this->charToKeyCode(c);

XInputSimulator/xinputsimulatorimpllinux.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
#include <X11/keysym.h>
2626
#include <X11/extensions/XTest.h>
2727

28+
#undef Bool //fix C #define Bool int in C++ Qt moc from x11
29+
2830
#include "xinputsimulatorimpl.h"
2931

3032
class XInputSimulatorImplLinux : public XInputSimulatorImpl
@@ -34,6 +36,9 @@ class XInputSimulatorImplLinux : public XInputSimulatorImpl
3436
Window root;
3537
XEvent event;
3638

39+
size_t displayX;
40+
size_t displayY;
41+
3742
void initMouseEvent(int button);
3843

3944
public:

XInputSimulator/xinputsimulatorimplmacos.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,21 @@
2929
#include "xinputsimulatorimplmacos.h"
3030
#include "notimplementedexception.h"
3131

32+
#include <QDebug>
3233

3334

3435
XInputSimulatorImplMacOs::XInputSimulatorImplMacOs()
3536
{
3637
//TODO
3738
//this->initCurrentMousePosition();
38-
39+
std::cout << "constructor " << std::endl;
3940
this->currentX = 500;
4041
this->currentY = 500;
42+
43+
CGDirectDisplayID displayID = CGMainDisplayID();
44+
45+
this->displayX = CGDisplayPixelsWide(displayID);
46+
this->displayY = CGDisplayPixelsHigh(displayID);
4147
}
4248

4349
//void XInputSimulatorImplMacOs::initMouseEvent(int button)
@@ -53,6 +59,8 @@ void XInputSimulatorImplMacOs::initCurrentMousePosition()
5359
void XInputSimulatorImplMacOs::mouseMoveTo(int x, int y)
5460
{
5561

62+
//TODO screen check see moveRelative
63+
5664
CGEventRef mouseEv = CGEventCreateMouseEvent(
5765
NULL, kCGEventMouseMoved,
5866
CGPointMake(x, y),
@@ -73,6 +81,12 @@ void XInputSimulatorImplMacOs::mouseMoveRelative(int x, int y)
7381
int newX = this->currentX + x;
7482
int newY = this->currentY + y;
7583

84+
if(newX < 0 || newX > this->displayX || newY < 0 || newY > this->displayY )
85+
{
86+
std::cout << "mouse moved beyound screensize." << endl;
87+
return;
88+
}
89+
7690
std::cout << "newx: " << newX << " newy: " << newY << std::endl;
7791

7892
CGEventRef mouseEv = CGEventCreateMouseEvent(

XInputSimulator/xinputsimulatorimplmacos.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ class XInputSimulatorImplMacOs : public XInputSimulatorImpl
2929
int currentX;
3030
int currentY;
3131

32+
size_t displayX;
33+
size_t displayY;
34+
3235
void initCurrentMousePosition();
3336

3437
public:

0 commit comments

Comments
 (0)