This makes InputDevice cleaner and just a glue layer for Xorg input devices.tags/v1.3.90
@@ -116,8 +116,8 @@ static void enqueueEvents(DeviceIntPtr dev, int n) | |||
} | |||
#endif /* XORG < 111 */ | |||
InputDevice::InputDevice(rfb::VNCServerST *_server) | |||
: server(_server), initialized(false), oldButtonMask(0) | |||
InputDevice::InputDevice() | |||
: initialized(false), oldButtonMask(0) | |||
{ | |||
int i; | |||
@@ -195,13 +195,9 @@ void InputDevice::PointerMove(const rfb::Point &pos) | |||
cursorPos = pos; | |||
} | |||
void InputDevice::PointerSync(void) | |||
const rfb::Point &InputDevice::getPointerPos(void) | |||
{ | |||
if (cursorPos.equals(oldCursorPos)) | |||
return; | |||
oldCursorPos = cursorPos; | |||
server->setCursorPos(cursorPos); | |||
return cursorPos; | |||
} | |||
static int pointerProc(DeviceIntPtr pDevice, int onoff) |
@@ -29,10 +29,13 @@ | |||
#include <list> | |||
#include <rfb/VNCServerST.h> | |||
#include <rdr/types.h> | |||
#include <rfb/Rect.h> | |||
extern "C" { | |||
#include "input.h" | |||
/* The Xorg headers define macros that wreak havoc with STL */ | |||
#undef max | |||
}; | |||
#include "xorg-version.h" | |||
@@ -41,7 +44,7 @@ extern "C" { | |||
class InputDevice { | |||
public: | |||
/* Create new InputDevice instance */ | |||
InputDevice(rfb::VNCServerST *_server); | |||
InputDevice(); | |||
/* | |||
* Press or release buttons. Relationship between buttonMask and | |||
@@ -52,12 +55,10 @@ public: | |||
/* Move pointer to target location (point coords are absolute). */ | |||
void PointerMove(const rfb::Point &point); | |||
/* | |||
* Send pointer position to clients. If not called then Move() calls | |||
* won't be visible to VNC clients. | |||
*/ | |||
void PointerSync(void); | |||
/* Get current known location of the pointer */ | |||
const rfb::Point &getPointerPos(void); | |||
/* Press or release one or more keys to get the given symbol */ | |||
void KeyboardPress(rdr::U32 keysym) { keyEvent(keysym, true); } | |||
void KeyboardRelease(rdr::U32 keysym) { keyEvent(keysym, false); } | |||
@@ -103,13 +104,12 @@ private: | |||
#endif | |||
private: | |||
rfb::VNCServerST *server; | |||
bool initialized; | |||
DeviceIntPtr keyboardDev; | |||
DeviceIntPtr pointerDev; | |||
int oldButtonMask; | |||
rfb::Point cursorPos, oldCursorPos; | |||
rfb::Point cursorPos; | |||
KeySym pressedKeys[256]; | |||
}; |
@@ -689,7 +689,11 @@ void XserverDesktop::wakeupHandler(fd_set* fds, int nfds) | |||
} | |||
} | |||
inputDevice->PointerSync(); | |||
// We are responsible for propagating mouse movement between clients | |||
if (!oldCursorPos.equals(inputDevice->getPointerPos())) { | |||
oldCursorPos = inputDevice->getPointerPos(); | |||
server->setCursorPos(oldCursorPos); | |||
} | |||
} | |||
// Then let the timers do some processing. Rescheduling is done in |
@@ -153,5 +153,7 @@ private: | |||
typedef std::map<RROutputPtr, rdr::U32> OutputIdMap; | |||
OutputIdMap outputIdMap; | |||
#endif | |||
rfb::Point oldCursorPos; | |||
}; | |||
#endif |