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

} }
#endif /* XORG < 111 */ #endif /* XORG < 111 */


InputDevice::InputDevice(rfb::VNCServerST *_server)
: server(_server), initialized(false), oldButtonMask(0)
InputDevice::InputDevice()
: initialized(false), oldButtonMask(0)
{ {
int i; int i;


cursorPos = 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) static int pointerProc(DeviceIntPtr pDevice, int onoff)

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



#include <list> #include <list>


#include <rfb/VNCServerST.h>
#include <rdr/types.h>
#include <rfb/Rect.h>


extern "C" { extern "C" {
#include "input.h" #include "input.h"
/* The Xorg headers define macros that wreak havoc with STL */
#undef max
}; };


#include "xorg-version.h" #include "xorg-version.h"
class InputDevice { class InputDevice {
public: public:
/* Create new InputDevice instance */ /* Create new InputDevice instance */
InputDevice(rfb::VNCServerST *_server);
InputDevice();


/* /*
* Press or release buttons. Relationship between buttonMask and * Press or release buttons. Relationship between buttonMask and
/* Move pointer to target location (point coords are absolute). */ /* Move pointer to target location (point coords are absolute). */
void PointerMove(const rfb::Point &point); 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 KeyboardPress(rdr::U32 keysym) { keyEvent(keysym, true); }
void KeyboardRelease(rdr::U32 keysym) { keyEvent(keysym, false); } void KeyboardRelease(rdr::U32 keysym) { keyEvent(keysym, false); }


#endif #endif


private: private:
rfb::VNCServerST *server;
bool initialized; bool initialized;
DeviceIntPtr keyboardDev; DeviceIntPtr keyboardDev;
DeviceIntPtr pointerDev; DeviceIntPtr pointerDev;


int oldButtonMask; int oldButtonMask;
rfb::Point cursorPos, oldCursorPos;
rfb::Point cursorPos;


KeySym pressedKeys[256]; KeySym pressedKeys[256];
}; };

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

} }
} }


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 // Then let the timers do some processing. Rescheduling is done in

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

typedef std::map<RROutputPtr, rdr::U32> OutputIdMap; typedef std::map<RROutputPtr, rdr::U32> OutputIdMap;
OutputIdMap outputIdMap; OutputIdMap outputIdMap;
#endif #endif

rfb::Point oldCursorPos;
}; };
#endif #endif

Loading…
Cancel
Save