refactor: sendevent to hide X11 deps, rename and move enums
This commit is contained in:
81
src/axis.cpp
81
src/axis.cpp
@ -1,7 +1,7 @@
|
|||||||
#include <QX11Info>
|
|
||||||
#include "axis.h"
|
#include "axis.h"
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
#include "time.h"
|
#include "time.h"
|
||||||
|
|
||||||
#define sqr(a) ((a)*(a))
|
#define sqr(a) ((a)*(a))
|
||||||
#define cub(a) ((a)*(a)*(a))
|
#define cub(a) ((a)*(a)*(a))
|
||||||
#define clamp(a, a_low, a_high) \
|
#define clamp(a, a_low, a_high) \
|
||||||
@ -69,7 +69,7 @@ bool Axis::read( QTextStream &stream ) {
|
|||||||
++it;
|
++it;
|
||||||
if (it == words.end()) return false;
|
if (it == words.end()) return false;
|
||||||
val = (*it).toInt(&ok);
|
val = (*it).toInt(&ok);
|
||||||
if (ok && val >= 0 && val <= power_function) transferCurve = val;
|
if (ok && val >= 0 && val <= PowerFunction) transferCurve = val;
|
||||||
else return false;
|
else return false;
|
||||||
}
|
}
|
||||||
else if (*it == "sens") {
|
else if (*it == "sens") {
|
||||||
@ -127,16 +127,16 @@ bool Axis::read( QTextStream &stream ) {
|
|||||||
throttle = -1;
|
throttle = -1;
|
||||||
}
|
}
|
||||||
else if (*it == "mouse+v") {
|
else if (*it == "mouse+v") {
|
||||||
mode = mousepv;
|
mode = MousePosVert;
|
||||||
}
|
}
|
||||||
else if (*it == "mouse-v") {
|
else if (*it == "mouse-v") {
|
||||||
mode = mousenv;
|
mode = MouseNegVert;
|
||||||
}
|
}
|
||||||
else if (*it == "mouse+h") {
|
else if (*it == "mouse+h") {
|
||||||
mode = mouseph;
|
mode = MousePosHor;
|
||||||
}
|
}
|
||||||
else if (*it == "mouse-h") {
|
else if (*it == "mouse-h") {
|
||||||
mode = mousenh;
|
mode = MouseNegHor;
|
||||||
}
|
}
|
||||||
//we ignore unrecognized words to be friendly and allow for additions to
|
//we ignore unrecognized words to be friendly and allow for additions to
|
||||||
//the format in later versions. Note, this means that typos will not get
|
//the format in later versions. Note, this means that typos will not get
|
||||||
@ -162,25 +162,25 @@ void Axis::write( QTextStream &stream ) {
|
|||||||
else if (throttle < 0) stream << "throttle-, ";
|
else if (throttle < 0) stream << "throttle-, ";
|
||||||
if (dZone != DZONE) stream << "dZone " << dZone << ", ";
|
if (dZone != DZONE) stream << "dZone " << dZone << ", ";
|
||||||
if (xZone != XZONE) stream << "xZone " << xZone << ", ";
|
if (xZone != XZONE) stream << "xZone " << xZone << ", ";
|
||||||
if (mode == keybd) {
|
if (mode == Keyboard) {
|
||||||
stream
|
stream
|
||||||
<< (puseMouse ? "+mouse " : "+key ") << pkeycode << ", "
|
<< (puseMouse ? "+mouse " : "+key ") << pkeycode << ", "
|
||||||
<< (nuseMouse ? "-mouse " : "-key ") << nkeycode << "\n";
|
<< (nuseMouse ? "-mouse " : "-key ") << nkeycode << "\n";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (gradient) stream << "maxSpeed " << maxSpeed << ", ";
|
if (gradient) stream << "maxSpeed " << maxSpeed << ", ";
|
||||||
if (transferCurve != quadratic)
|
if (transferCurve != Quadratic)
|
||||||
stream << "tCurve " << transferCurve << ", ";
|
stream << "tCurve " << transferCurve << ", ";
|
||||||
if (sensitivity != 1.0F)
|
if (sensitivity != 1.0F)
|
||||||
stream << "sens " << sensitivity << ", ";
|
stream << "sens " << sensitivity << ", ";
|
||||||
stream << "mouse";
|
stream << "mouse";
|
||||||
if (mode == mousepv)
|
if (mode == MousePosVert)
|
||||||
stream << "+v\n";
|
stream << "+v\n";
|
||||||
else if (mode == mousenv)
|
else if (mode == MouseNegVert)
|
||||||
stream << "-v\n";
|
stream << "-v\n";
|
||||||
else if (mode == mouseph)
|
else if (mode == MousePosHor)
|
||||||
stream << "+h\n";
|
stream << "+h\n";
|
||||||
else if (mode == mousenh)
|
else if (mode == MouseNegHor)
|
||||||
stream << "-h\n";
|
stream << "-h\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -238,12 +238,12 @@ void Axis::toDefault() {
|
|||||||
gradient = false;
|
gradient = false;
|
||||||
throttle = 0;
|
throttle = 0;
|
||||||
maxSpeed = 100;
|
maxSpeed = 100;
|
||||||
transferCurve = quadratic;
|
transferCurve = Quadratic;
|
||||||
sensitivity = 1.0F;
|
sensitivity = 1.0F;
|
||||||
dZone = DZONE;
|
dZone = DZONE;
|
||||||
tick = 0;
|
tick = 0;
|
||||||
xZone = XZONE;
|
xZone = XZONE;
|
||||||
mode = keybd;
|
mode = Keyboard;
|
||||||
pkeycode = 0;
|
pkeycode = 0;
|
||||||
nkeycode = 0;
|
nkeycode = 0;
|
||||||
puseMouse = false;
|
puseMouse = false;
|
||||||
@ -259,7 +259,7 @@ bool Axis::isDefault() {
|
|||||||
(maxSpeed == 100) &&
|
(maxSpeed == 100) &&
|
||||||
(dZone == DZONE) &&
|
(dZone == DZONE) &&
|
||||||
(xZone == XZONE) &&
|
(xZone == XZONE) &&
|
||||||
(mode == keybd) &&
|
(mode == Keyboard) &&
|
||||||
(pkeycode == 0) &&
|
(pkeycode == 0) &&
|
||||||
(nkeycode == 0) &&
|
(nkeycode == 0) &&
|
||||||
(puseMouse == false) &&
|
(puseMouse == false) &&
|
||||||
@ -279,7 +279,7 @@ bool Axis::inDeadZone( int val ) {
|
|||||||
|
|
||||||
QString Axis::status() {
|
QString Axis::status() {
|
||||||
QString result = getName() + " : [";
|
QString result = getName() + " : [";
|
||||||
if (mode == keybd) {
|
if (mode == Keyboard) {
|
||||||
if (throttle == 0) {
|
if (throttle == 0) {
|
||||||
if (puseMouse != nuseMouse) {
|
if (puseMouse != nuseMouse) {
|
||||||
result += "KEYBOARD/MOUSE";
|
result += "KEYBOARD/MOUSE";
|
||||||
@ -312,7 +312,7 @@ void Axis::setKey(bool positive, int value) {
|
|||||||
|
|
||||||
void Axis::timerTick( int tick ) {
|
void Axis::timerTick( int tick ) {
|
||||||
if (isOn) {
|
if (isOn) {
|
||||||
if (mode == keybd) {
|
if (mode == Keyboard) {
|
||||||
if (tick % FREQ == 0)
|
if (tick % FREQ == 0)
|
||||||
{
|
{
|
||||||
if (duration == FREQ)
|
if (duration == FREQ)
|
||||||
@ -342,8 +342,8 @@ void Axis::adjustGradient() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Axis::move( bool press ) {
|
void Axis::move( bool press ) {
|
||||||
xevent e;
|
FakeEvent e;
|
||||||
if (mode == keybd) {
|
if (mode == Keyboard) {
|
||||||
//prevent KeyPress-KeyPress and KeyRelease-KeyRelease pairs.
|
//prevent KeyPress-KeyPress and KeyRelease-KeyRelease pairs.
|
||||||
//this would only happen in odd circumstances involving the setup
|
//this would only happen in odd circumstances involving the setup
|
||||||
//dialog being open and blocking events from happening.
|
//dialog being open and blocking events from happening.
|
||||||
@ -351,14 +351,13 @@ void Axis::move( bool press ) {
|
|||||||
isDown = press;
|
isDown = press;
|
||||||
bool useMouse = (state > 0)?puseMouse:nuseMouse;
|
bool useMouse = (state > 0)?puseMouse:nuseMouse;
|
||||||
if (press) {
|
if (press) {
|
||||||
e.type = useMouse?BPRESS:KPRESS;
|
e.type = useMouse ? FakeEvent::MouseDown : FakeEvent::KeyDown;
|
||||||
downkey = (state > 0)?pkeycode:nkeycode;
|
downkey = (state > 0)?pkeycode:nkeycode;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
e.type = useMouse?BREL:KREL;
|
e.type = useMouse ? FakeEvent::MouseUp : FakeEvent::KeyUp;
|
||||||
}
|
}
|
||||||
e.value1 = downkey;
|
e.keycode = downkey;
|
||||||
e.value2 = 0;
|
|
||||||
}
|
}
|
||||||
//if using the mouse
|
//if using the mouse
|
||||||
else if (press) {
|
else if (press) {
|
||||||
@ -374,19 +373,19 @@ void Axis::move( bool press ) {
|
|||||||
const float u = inverseRange * (absState - dZone);
|
const float u = inverseRange * (absState - dZone);
|
||||||
|
|
||||||
switch(transferCurve) {
|
switch(transferCurve) {
|
||||||
case quadratic:
|
case Quadratic:
|
||||||
fdist = sqr(u);
|
fdist = sqr(u);
|
||||||
break;
|
break;
|
||||||
case cubic:
|
case Cubic:
|
||||||
fdist = cub(u);
|
fdist = cub(u);
|
||||||
break;
|
break;
|
||||||
case quadratic_extreme:
|
case QuadraticExtreme:
|
||||||
fdist = sqr(u);
|
fdist = sqr(u);
|
||||||
if(u >= 0.95F) {
|
if(u >= 0.95F) {
|
||||||
fdist *= 1.5F;
|
fdist *= 1.5F;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case power_function:
|
case PowerFunction:
|
||||||
fdist = clamp(powf(u, 1.0F / clamp(
|
fdist = clamp(powf(u, 1.0F / clamp(
|
||||||
sensitivity, 1e-8F, 1e+3F)), 0.0F, 1.0F);
|
sensitivity, 1e-8F, 1e+3F)), 0.0F, 1.0F);
|
||||||
break;
|
break;
|
||||||
@ -405,24 +404,24 @@ void Axis::move( bool press ) {
|
|||||||
//if not gradient, always go full speed.
|
//if not gradient, always go full speed.
|
||||||
else dist = maxSpeed;
|
else dist = maxSpeed;
|
||||||
|
|
||||||
e.type = WARP;
|
e.type = FakeEvent::MouseMove;
|
||||||
if (mode == mousepv) {
|
if (mode == MousePosVert) {
|
||||||
e.value1 = 0;
|
e.move.x = 0;
|
||||||
e.value2 = dist;
|
e.move.y = dist;
|
||||||
}
|
}
|
||||||
else if (mode == mousenv) {
|
else if (mode == MouseNegVert) {
|
||||||
e.value1 = 0;
|
e.move.x = 0;
|
||||||
e.value2 = -dist;
|
e.move.y = -dist;
|
||||||
}
|
}
|
||||||
else if (mode == mouseph) {
|
else if (mode == MousePosHor) {
|
||||||
e.value1 = dist;
|
e.move.x = dist;
|
||||||
e.value2 = 0;
|
e.move.y = 0;
|
||||||
}
|
}
|
||||||
else if (mode == mousenh) {
|
else if (mode == MouseNegHor) {
|
||||||
e.value1 = -dist;
|
e.move.x = -dist;
|
||||||
e.value2 = 0;
|
e.move.y = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//actually create the event
|
//actually create the event
|
||||||
sendevent(QX11Info::display(), e);
|
sendevent(e);
|
||||||
}
|
}
|
||||||
|
12
src/axis.h
12
src/axis.h
@ -16,14 +16,16 @@
|
|||||||
#define DZONE 3000
|
#define DZONE 3000
|
||||||
#define XZONE 30000
|
#define XZONE 30000
|
||||||
|
|
||||||
//each axis can create a key press or move the mouse in one of four directions.
|
|
||||||
enum AxisMode {keybd, mousepv, mousenv, mouseph, mousenh};
|
|
||||||
enum TransferCurve {linear, quadratic, cubic, quadratic_extreme,
|
|
||||||
power_function};
|
|
||||||
|
|
||||||
//represents one joystick axis
|
//represents one joystick axis
|
||||||
class Axis : public QObject {
|
class Axis : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
//each axis can create a key press or move the mouse in one of four directions.
|
||||||
|
enum Mode {Keyboard, MousePosVert, MouseNegVert, MousePosHor, MouseNegHor};
|
||||||
|
enum TransferCurve {Linear, Quadratic, Cubic, QuadraticExtreme,
|
||||||
|
PowerFunction};
|
||||||
|
|
||||||
//so AxisEdit can manipulate fields directly.
|
//so AxisEdit can manipulate fields directly.
|
||||||
friend class AxisEdit;
|
friend class AxisEdit;
|
||||||
public:
|
public:
|
||||||
@ -80,7 +82,7 @@ class Axis : public QObject {
|
|||||||
int dZone;//-32767 .. 32767
|
int dZone;//-32767 .. 32767
|
||||||
int xZone;//-32767 .. 32767
|
int xZone;//-32767 .. 32767
|
||||||
double sumDist;
|
double sumDist;
|
||||||
AxisMode mode;
|
Mode mode;
|
||||||
//positive keycode
|
//positive keycode
|
||||||
int pkeycode;
|
int pkeycode;
|
||||||
//negative keycode
|
//negative keycode
|
||||||
|
@ -29,20 +29,20 @@ AxisEdit::AxisEdit( Axis* ax )
|
|||||||
v2->addWidget(CGradient);
|
v2->addWidget(CGradient);
|
||||||
|
|
||||||
CMode = new QComboBox(this);
|
CMode = new QComboBox(this);
|
||||||
CMode->insertItem((int)keybd, QString("Keyboard/Mouse Button"), Qt::DisplayRole);
|
CMode->insertItem((int) Axis::Keyboard, QString("Keyboard/Mouse Button"), Qt::DisplayRole);
|
||||||
CMode->insertItem((int) mousepv,QString("Mouse (Vert.)"),Qt::DisplayRole);
|
CMode->insertItem((int) Axis::MousePosVert,QString("Mouse (Vert.)"),Qt::DisplayRole);
|
||||||
CMode->insertItem((int) mousenv, QString("Mouse (Vert. Rev.)"), Qt::DisplayRole);
|
CMode->insertItem((int) Axis::MouseNegVert, QString("Mouse (Vert. Rev.)"), Qt::DisplayRole);
|
||||||
CMode->insertItem((int) mouseph, "Mouse (Hor.)", Qt::DisplayRole);
|
CMode->insertItem((int) Axis::MousePosHor, "Mouse (Hor.)", Qt::DisplayRole);
|
||||||
CMode->insertItem((int)mousenh, QString("Mouse (Hor. Rev.)"), Qt::DisplayRole);
|
CMode->insertItem((int) Axis::MouseNegHor, QString("Mouse (Hor. Rev.)"), Qt::DisplayRole);
|
||||||
CMode->setCurrentIndex( axis->mode );
|
CMode->setCurrentIndex( axis->mode );
|
||||||
connect(CMode, SIGNAL(activated(int)), this, SLOT( CModeChanged( int )));
|
connect(CMode, SIGNAL(activated(int)), this, SLOT( CModeChanged( int )));
|
||||||
v2->addWidget(CMode);
|
v2->addWidget(CMode);
|
||||||
CTransferCurve = new QComboBox(this);
|
CTransferCurve = new QComboBox(this);
|
||||||
CTransferCurve->insertItem(linear, QString("Linear"), Qt::DisplayRole);
|
CTransferCurve->insertItem(Axis::Linear, QString("Linear"), Qt::DisplayRole);
|
||||||
CTransferCurve->insertItem(quadratic, QString("Quadratic"),Qt::DisplayRole );
|
CTransferCurve->insertItem(Axis::Quadratic, QString("Quadratic"),Qt::DisplayRole );
|
||||||
CTransferCurve->insertItem(cubic, QString("Cubic"),Qt::DisplayRole );
|
CTransferCurve->insertItem(Axis::Cubic, QString("Cubic"),Qt::DisplayRole );
|
||||||
CTransferCurve->insertItem(quadratic_extreme, QString("Quadratic Extreme"), Qt::DisplayRole);
|
CTransferCurve->insertItem(Axis::QuadraticExtreme, QString("Quadratic Extreme"), Qt::DisplayRole);
|
||||||
CTransferCurve->insertItem(power_function, QString("Power Function"), Qt::DisplayRole);
|
CTransferCurve->insertItem(Axis::PowerFunction, QString("Power Function"), Qt::DisplayRole);
|
||||||
CTransferCurve->setCurrentIndex( axis->transferCurve );
|
CTransferCurve->setCurrentIndex( axis->transferCurve );
|
||||||
CTransferCurve->setEnabled(axis->gradient);
|
CTransferCurve->setEnabled(axis->gradient);
|
||||||
connect(CTransferCurve, SIGNAL(activated(int)), this, SLOT( CTransferCurveChanged( int )));
|
connect(CTransferCurve, SIGNAL(activated(int)), this, SLOT( CTransferCurveChanged( int )));
|
||||||
@ -132,7 +132,7 @@ void AxisEdit::CGradientChanged( bool on ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AxisEdit::CModeChanged( int index ) {
|
void AxisEdit::CModeChanged( int index ) {
|
||||||
if (index == keybd) {
|
if (index == Axis::Keyboard) {
|
||||||
MouseBox->setEnabled(false);
|
MouseBox->setEnabled(false);
|
||||||
KeyBox->setEnabled(true);
|
KeyBox->setEnabled(true);
|
||||||
}
|
}
|
||||||
@ -147,7 +147,7 @@ void AxisEdit::CModeChanged( int index ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AxisEdit::CTransferCurveChanged( int index ) {
|
void AxisEdit::CTransferCurveChanged( int index ) {
|
||||||
if (index == power_function) {
|
if (index == Axis::PowerFunction) {
|
||||||
LSensitivity->setEnabled(true);
|
LSensitivity->setEnabled(true);
|
||||||
SSensitivity->setEnabled(true);
|
SSensitivity->setEnabled(true);
|
||||||
}
|
}
|
||||||
@ -178,12 +178,12 @@ void AxisEdit::CThrottleChanged( int index ) {
|
|||||||
void AxisEdit::accept() {
|
void AxisEdit::accept() {
|
||||||
axis->gradient = CGradient->isChecked();
|
axis->gradient = CGradient->isChecked();
|
||||||
axis->maxSpeed = SSpeed->value();
|
axis->maxSpeed = SSpeed->value();
|
||||||
axis->transferCurve = (TransferCurve)CTransferCurve->currentIndex();
|
axis->transferCurve = (Axis::TransferCurve)CTransferCurve->currentIndex();
|
||||||
axis->sensitivity = SSensitivity->value();
|
axis->sensitivity = SSensitivity->value();
|
||||||
axis->throttle = CThrottle->currentIndex() - 1;
|
axis->throttle = CThrottle->currentIndex() - 1;
|
||||||
axis->dZone = Slider->deadZone();
|
axis->dZone = Slider->deadZone();
|
||||||
axis->xZone = Slider->xZone();
|
axis->xZone = Slider->xZone();
|
||||||
axis->mode = (AxisMode) CMode->currentIndex();
|
axis->mode = (Axis::Mode) CMode->currentIndex();
|
||||||
axis->pkeycode = BPos->getValue();
|
axis->pkeycode = BPos->getValue();
|
||||||
axis->nkeycode = BNeg->getValue();
|
axis->nkeycode = BNeg->getValue();
|
||||||
axis->puseMouse = BPos->choseMouse();
|
axis->puseMouse = BPos->choseMouse();
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
#include <QX11Info>
|
|
||||||
#include "button.h"
|
#include "button.h"
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
|
|
||||||
@ -154,15 +153,14 @@ void Button::timerTick( int tick ) {
|
|||||||
void Button::click( bool press ) {
|
void Button::click( bool press ) {
|
||||||
if (isDown == press) return;
|
if (isDown == press) return;
|
||||||
isDown = press;
|
isDown = press;
|
||||||
xevent click;
|
FakeEvent click;
|
||||||
//determine which of the four possible events we're sending.
|
//determine which of the four possible events we're sending.
|
||||||
if (press) click.type = useMouse?BPRESS:KPRESS;
|
if (press) click.type = useMouse ? FakeEvent::MouseDown : FakeEvent::KeyDown;
|
||||||
else click.type = useMouse?BREL:KREL;
|
else click.type = useMouse ? FakeEvent::MouseUp : FakeEvent::KeyUp;
|
||||||
//set up the event,
|
//set up the event,
|
||||||
click.value1 = keycode;
|
click.keycode = keycode;
|
||||||
click.value2 = 0;
|
|
||||||
//and send it.
|
//and send it.
|
||||||
sendevent( QX11Info::display(), click );
|
sendevent(click);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Button::timerCalled() {
|
void Button::timerCalled() {
|
||||||
|
@ -1,21 +1,35 @@
|
|||||||
|
#include <QX11Info>
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
|
|
||||||
//this should be initialized by main.cpp as soon as the program starts.
|
|
||||||
Display *display = 0;
|
|
||||||
|
|
||||||
//actually creates an XWindows event :)
|
//actually creates an XWindows event :)
|
||||||
void sendevent(Display* display, const xevent &e ) {
|
void sendevent(const FakeEvent &e) {
|
||||||
if (e.value1 == 0 && e.value2 == 0) return;
|
Display* display = QX11Info::display();
|
||||||
if (e.type == WARP) {
|
|
||||||
XTestFakeRelativeMotionEvent(display, e.value1, e.value2, 0);
|
switch (e.type) {
|
||||||
}
|
case FakeEvent::MouseMove:
|
||||||
else {
|
if (e.move.x == 0 && e.move.y == 0) return;
|
||||||
if (e.type == KREL || e.type == KPRESS) {
|
XTestFakeRelativeMotionEvent(display, e.move.x, e.move.y, 0);
|
||||||
XTestFakeKeyEvent(display, e.value1, (e.type == KPRESS), 0);
|
break;
|
||||||
}
|
|
||||||
else if (e.type == BREL || e.type == BPRESS) {
|
case FakeEvent::KeyUp:
|
||||||
XTestFakeButtonEvent(display, e.value1, (e.type == BPRESS), 0);
|
if (e.keycode == 0) return;
|
||||||
}
|
XTestFakeKeyEvent(display, e.keycode, false, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FakeEvent::KeyDown:
|
||||||
|
if (e.keycode == 0) return;
|
||||||
|
XTestFakeKeyEvent(display, e.keycode, true, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FakeEvent::MouseUp:
|
||||||
|
if (e.keycode == 0) return;
|
||||||
|
XTestFakeButtonEvent(display, e.keycode, false, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FakeEvent::MouseDown:
|
||||||
|
if (e.keycode == 0) return;
|
||||||
|
XTestFakeButtonEvent(display, e.keycode, true, 0);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
XFlush(display);
|
XFlush(display);
|
||||||
}
|
}
|
||||||
|
19
src/event.h
19
src/event.h
@ -4,18 +4,23 @@
|
|||||||
//for the functions we need to generate keypresses / mouse actions
|
//for the functions we need to generate keypresses / mouse actions
|
||||||
#include <X11/extensions/XTest.h>
|
#include <X11/extensions/XTest.h>
|
||||||
|
|
||||||
|
//a simplified event structure that can handle buttons and mouse movements
|
||||||
|
struct FakeEvent {
|
||||||
//types of events QJoyPad can create.
|
//types of events QJoyPad can create.
|
||||||
//KeyRelease, KeyPress, ButtonRelease, ButtonPress, and MouseMove
|
//KeyRelease, KeyPress, ButtonRelease, ButtonPress, and MouseMove
|
||||||
enum eventType {KREL, KPRESS, BREL, BPRESS, WARP};
|
enum EventType {KeyUp, KeyDown, MouseUp, MouseDown, MouseMove};
|
||||||
|
|
||||||
|
EventType type;
|
||||||
|
union {
|
||||||
|
int keycode;
|
||||||
|
|
||||||
//a simplified event structure that can handle buttons and mouse movements
|
struct {
|
||||||
struct xevent {
|
int x;
|
||||||
eventType type;
|
int y;
|
||||||
int value1; //button, keycode, or x
|
} move;
|
||||||
int value2; //y
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
void sendevent( Display* display, const xevent& e );
|
void sendevent(const FakeEvent& e);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user