Browse Source

Let XserverDesktop handle syncing cursor position

This makes InputDevice cleaner and just a glue layer for Xorg
input devices.
tags/v1.3.90
Pierre Ossman 10 years ago
parent
commit
91313d8b65

+ 4
- 8
unix/xserver/hw/vnc/Input.cc View File

@@ -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)

+ 9
- 9
unix/xserver/hw/vnc/Input.h View File

@@ -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];
};

+ 5
- 1
unix/xserver/hw/vnc/XserverDesktop.cc View File

@@ -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

+ 2
- 0
unix/xserver/hw/vnc/XserverDesktop.h View File

@@ -153,5 +153,7 @@ private:
typedef std::map<RROutputPtr, rdr::U32> OutputIdMap;
OutputIdMap outputIdMap;
#endif

rfb::Point oldCursorPos;
};
#endif

Loading…
Cancel
Save