From f058349ae6b31424751ea6b3d773bb5d6dae07d5 Mon Sep 17 00:00:00 2001 From: Adam Tkac Date: Wed, 10 Mar 2010 17:38:52 +0100 Subject: [PATCH 1/2] Merge KeyboardDevice and PointerDevice classes. --- unix/xserver/hw/vnc/Input.cc | 79 +++++++++++++++------------------ unix/xserver/hw/vnc/Input.h | 40 +++++++---------- unix/xserver/hw/vnc/XserverDesktop.cc | 16 +++---- unix/xserver/hw/vnc/XserverDesktop.h | 3 +- 4 files changed, 61 insertions(+), 77 deletions(-) diff --git a/unix/xserver/hw/vnc/Input.cc b/unix/xserver/hw/vnc/Input.cc index 0596c64..3b60a5f 100644 --- a/unix/xserver/hw/vnc/Input.cc +++ b/unix/xserver/hw/vnc/Input.cc @@ -116,21 +116,27 @@ static void enqueueEvents(DeviceIntPtr dev, int n) } } -/* Pointer device methods */ - -PointerDevice::PointerDevice(rfb::VNCServerST *_server) +InputDevice::InputDevice(rfb::VNCServerST *_server) : server(_server), oldButtonMask(0) { - dev = AddInputDevice( + pointerDev = AddInputDevice( +#if XORG >= 16 + serverClient, +#endif + pointerProc, TRUE); + RegisterPointerDevice(pointerDev); + + keyboardDev = AddInputDevice( #if XORG >= 16 - serverClient, + serverClient, #endif - pointerProc, TRUE); - RegisterPointerDevice(dev); + keyboardProc, TRUE); + RegisterKeyboardDevice(keyboardDev); + initEventq(); } -void PointerDevice::ButtonAction(int buttonMask) +void InputDevice::PointerButtonAction(int buttonMask) { int i, n; @@ -138,9 +144,9 @@ void PointerDevice::ButtonAction(int buttonMask) if ((buttonMask ^ oldButtonMask) & (1 << i)) { int action = (buttonMask & (1<= 16 - serverClient, -#endif - keyboardProc, TRUE); - RegisterKeyboardDevice(dev); - initEventq(); -} - #define IS_PRESSED(keyc, keycode) \ ((keyc)->down[(keycode) >> 3] & (1 << ((keycode) & 7))) @@ -458,7 +451,7 @@ static struct altKeysym_t { #define FREE_MAPS #endif -void KeyboardDevice::keyEvent(rdr::U32 keysym, bool down) +void InputDevice::keyEvent(rdr::U32 keysym, bool down) { DeviceIntPtr master; KeyClassPtr keyc; @@ -484,16 +477,16 @@ void KeyboardDevice::keyEvent(rdr::U32 keysym, bool down) } #if XORG >= 17 - keyc = dev->u.master->key; + keyc = keyboardDev->u.master->key; - keymap = XkbGetCoreMap(dev); + keymap = XkbGetCoreMap(keyboardDev); if (!keymap) { vlog.error("VNC keyboard device has no map"); return; } - if (generate_modkeymap(serverClient, dev, &modmap, &maxKeysPerMod) - != Success) { + if (generate_modkeymap(serverClient, keyboardDev, &modmap, + &maxKeysPerMod) != Success) { vlog.error("generate_modkeymap failed"); xfree(keymap->map); xfree(keymap); @@ -502,7 +495,7 @@ void KeyboardDevice::keyEvent(rdr::U32 keysym, bool down) state = XkbStateFieldFromRec(&keyc->xkbInfo->state); #else - keyc = dev->key; + keyc = keyboardDev->key; state = keyc->state; maxKeysPerMod = keyc->maxKeysPerModifier; keymap = &keyc->curKeySyms; @@ -587,24 +580,24 @@ ModeSwitchFound: #if XORG == 15 master = inputInfo.keyboard; #else - master = dev->u.master; + master = keyboardDev->u.master; #endif void *slave = dixLookupPrivate(&master->devPrivates, CoreDevicePrivateKey); - if (dev == slave) { + if (keyboardDev == slave) { dixSetPrivate(&master->devPrivates, CoreDevicePrivateKey, NULL); #if XORG == 15 - SwitchCoreKeyboard(dev); + SwitchCoreKeyboard(keyboardDev); #else - CopyKeyClass(dev, master); + CopyKeyClass(keyboardDev, master); #endif } #else /* XORG < 17 */ - XkbApplyMappingChange(dev, keymap, minKeyCode, + XkbApplyMappingChange(keyboardDev, keymap, minKeyCode, maxKeyCode - minKeyCode + 1, NULL, serverClient); - XkbCopyDeviceKeymap(dev->u.master, dev); + XkbCopyDeviceKeymap(keyboardDev->u.master, keyboardDev); #endif /* XORG < 17 */ break; } @@ -632,8 +625,8 @@ ModeSwitchFound: } } - ModifierState shift(dev, ShiftMapIndex); - ModifierState modeSwitch(dev, modeSwitchMapIndex); + ModifierState shift(keyboardDev, ShiftMapIndex); + ModifierState modeSwitch(keyboardDev, modeSwitchMapIndex); if (down) { if (col & 1) shift.press(); @@ -649,8 +642,8 @@ ModeSwitchFound: vlog.debug("keycode %d %s", kc, down ? "down" : "up"); action = down ? KeyPress : KeyRelease; - n = GetKeyboardEvents(eventq, dev, action, kc); - enqueueEvents(dev, n); + n = GetKeyboardEvents(eventq, keyboardDev, action, kc); + enqueueEvents(keyboardDev, n); /* * When faking a modifier we are putting a keycode (which can diff --git a/unix/xserver/hw/vnc/Input.h b/unix/xserver/hw/vnc/Input.h index 1bfec92..8987085 100644 --- a/unix/xserver/hw/vnc/Input.h +++ b/unix/xserver/hw/vnc/Input.h @@ -1,5 +1,6 @@ /* Copyright (C) 2009 TightVNC Team - * Copyright (C) 2009 Red Hat, Inc. + * Copyright (C) 2009, 2010 Red Hat, Inc. + * Copyright (C) 2009, 2010 TigerVNC Team * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,44 +32,37 @@ extern "C" { #include "input.h" }; -/* Represents pointer device. */ -class PointerDevice { +/* Represents input device (keyboard + pointer) */ +class InputDevice { public: - /* Create new PointerDevice instance. */ - PointerDevice(rfb::VNCServerST *_server); + /* Create new InputDevice instance */ + InputDevice(rfb::VNCServerST *_server); /* * Press or release buttons. Relationship between buttonMask and * buttons is specified in RFB protocol. */ - void ButtonAction(int buttonMask); + void PointerButtonAction(int buttonMask); /* Move pointer to target location (point coords are absolute). */ - void Move(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 clients. + * won't be visible to VNC clients. */ - void Sync(void); + void PointerSync(void); + + void KeyboardPress(rdr::U32 keysym) { keyEvent(keysym, true); } + void KeyboardRelease(rdr::U32 keysym) { keyEvent(keysym, false); } private: + void keyEvent(rdr::U32 keysym, bool down); + rfb::VNCServerST *server; - DeviceIntPtr dev; + DeviceIntPtr keyboardDev; + DeviceIntPtr pointerDev; int oldButtonMask; rfb::Point cursorPos, oldCursorPos; }; -/* Represents keyboard device. */ -class KeyboardDevice { -public: - /* Create new Keyboard device instance. */ - KeyboardDevice(void); - - void Press(rdr::U32 keysym) { keyEvent(keysym, true); } - void Release(rdr::U32 keysym) { keyEvent(keysym, false); } -private: - void keyEvent(rdr::U32 keysym, bool down); - DeviceIntPtr dev; -}; - #endif diff --git a/unix/xserver/hw/vnc/XserverDesktop.cc b/unix/xserver/hw/vnc/XserverDesktop.cc index ce8f66b..5971077 100644 --- a/unix/xserver/hw/vnc/XserverDesktop.cc +++ b/unix/xserver/hw/vnc/XserverDesktop.cc @@ -164,8 +164,7 @@ XserverDesktop::XserverDesktop(ScreenPtr pScreen_, if (httpListener) httpServer = new FileHTTPServer(this); - pointerDevice = new PointerDevice(server); - keyboardDevice = new KeyboardDevice(); + inputDevice = new InputDevice(server); } XserverDesktop::~XserverDesktop() @@ -174,8 +173,7 @@ XserverDesktop::~XserverDesktop() delete [] data; TimerFree(deferredUpdateTimer); TimerFree(dummyTimer); - delete pointerDevice; - delete keyboardDevice; + delete inputDevice; delete httpServer; delete server; } @@ -586,7 +584,7 @@ void XserverDesktop::wakeupHandler(fd_set* fds, int nfds) } } - pointerDevice->Sync(); + inputDevice->PointerSync(); } int timeout = server->checkTimeouts(); @@ -645,8 +643,8 @@ void XserverDesktop::approveConnection(void* opaqueId, bool accept, void XserverDesktop::pointerEvent(const Point& pos, int buttonMask) { - pointerDevice->Move(pos); - pointerDevice->ButtonAction(buttonMask); + inputDevice->PointerMove(pos); + inputDevice->PointerButtonAction(buttonMask); } void XserverDesktop::clientCutText(const char* str, int len) @@ -807,7 +805,7 @@ void XserverDesktop::lookup(int index, int* r, int* g, int* b) void XserverDesktop::keyEvent(rdr::U32 keysym, bool down) { if (down) - keyboardDevice->Press(keysym); + inputDevice->KeyboardPress(keysym); else - keyboardDevice->Release(keysym); + inputDevice->KeyboardRelease(keysym); } diff --git a/unix/xserver/hw/vnc/XserverDesktop.h b/unix/xserver/hw/vnc/XserverDesktop.h index 6e4f609..1c03705 100644 --- a/unix/xserver/hw/vnc/XserverDesktop.h +++ b/unix/xserver/hw/vnc/XserverDesktop.h @@ -122,8 +122,7 @@ private: pointer arg); void deferUpdate(); ScreenPtr pScreen; - PointerDevice *pointerDevice; - KeyboardDevice *keyboardDevice; + InputDevice *inputDevice; OsTimerPtr deferredUpdateTimer, dummyTimer; rfb::VNCServerST* server; rfb::HTTPServer* httpServer; -- 1.7.0.1