summaryrefslogtreecommitdiffstats
path: root/unix/xserver/hw/vnc
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2013-04-09 14:59:31 +0000
committerPierre Ossman <ossman@cendio.se>2013-04-09 14:59:31 +0000
commitcde21d8590e0f21b61de744c2f746bfbe80530c7 (patch)
tree10862c7a35fe3f54c8b90836ad690edebe66fcd7 /unix/xserver/hw/vnc
parent3e4e1865de17bca4eb64b6dd72e8b08819b6c611 (diff)
downloadtigervnc-cde21d8590e0f21b61de744c2f746bfbe80530c7.tar.gz
tigervnc-cde21d8590e0f21b61de744c2f746bfbe80530c7.zip
Make sure InputDevice::InitInputDevice() gets called early in
the startup process so our devices are visible and available right away. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@5069 3789f03b-4d11-0410-bbf8-ca57d06f2519
Diffstat (limited to 'unix/xserver/hw/vnc')
-rw-r--r--unix/xserver/hw/vnc/Input.cc8
-rw-r--r--unix/xserver/hw/vnc/Input.h8
-rw-r--r--unix/xserver/hw/vnc/XserverDesktop.cc6
3 files changed, 12 insertions, 10 deletions
diff --git a/unix/xserver/hw/vnc/Input.cc b/unix/xserver/hw/vnc/Input.cc
index c8b892a2..f2c8bee6 100644
--- a/unix/xserver/hw/vnc/Input.cc
+++ b/unix/xserver/hw/vnc/Input.cc
@@ -160,8 +160,6 @@ void InputDevice::PointerButtonAction(int buttonMask)
ValuatorMask mask;
#endif
- initInputDevice();
-
for (i = 0; i < BUTTONS; i++) {
if ((buttonMask ^ oldButtonMask) & (1 << i)) {
int action = (buttonMask & (1<<i)) ?
@@ -199,8 +197,6 @@ void InputDevice::PointerMove(const rfb::Point &pos)
if (pos.equals(cursorPos))
return;
- initInputDevice();
-
valuators[0] = pos.x;
valuators[1] = pos.y;
#if XORG < 110
@@ -287,7 +283,7 @@ static int pointerProc(DeviceIntPtr pDevice, int onoff)
return Success;
}
-void InputDevice::initInputDevice(void)
+void InputDevice::InitInputDevice(void)
{
#if XORG >= 17
int ret;
@@ -612,8 +608,6 @@ void InputDevice::keyEvent(rdr::U32 keysym, bool down)
KeybdCtrl ctrl;
#endif
- initInputDevice();
-
/*
* Since we are checking the current state to determine if we need
* to fake modifiers, we must make sure that everything put on the
diff --git a/unix/xserver/hw/vnc/Input.h b/unix/xserver/hw/vnc/Input.h
index dbc78f88..fb01bced 100644
--- a/unix/xserver/hw/vnc/Input.h
+++ b/unix/xserver/hw/vnc/Input.h
@@ -55,17 +55,19 @@ public:
void KeyboardPress(rdr::U32 keysym) { keyEvent(keysym, true); }
void KeyboardRelease(rdr::U32 keysym) { keyEvent(keysym, false); }
-private:
+
/*
* Init input device. This cannot be done in the constructor
* because constructor is called during X server extensions
* initialization. Devices must be initialized after core
* pointer/keyboard initialization which is actually after extesions
* initialization. Check InitExtensions(), InitCoreDevices() and
- * InitInput() calls in dix/main.c
+ * InitInput() calls in dix/main.c. Instead it is called from
+ * XserverDesktop at an appropriate time.
*/
- void initInputDevice(void);
+ void InitInputDevice(void);
+private:
void keyEvent(rdr::U32 keysym, bool down);
rfb::VNCServerST *server;
diff --git a/unix/xserver/hw/vnc/XserverDesktop.cc b/unix/xserver/hw/vnc/XserverDesktop.cc
index e777bd30..3ef6f251 100644
--- a/unix/xserver/hw/vnc/XserverDesktop.cc
+++ b/unix/xserver/hw/vnc/XserverDesktop.cc
@@ -576,6 +576,12 @@ static struct timeval XserverDesktopTimeout;
void XserverDesktop::blockHandler(fd_set* fds, OSTimePtr timeout)
{
+ // We don't have a good callback for when we can init input devices[1],
+ // so we abuse the fact that this routine will be called first thing
+ // once the dix is done initialising.
+ // [1] Technically Xvnc has InitInput(), but libvnc.so has nothing.
+ inputDevice->InitInputDevice();
+
try {
int nextTimeout;