From 236c69d6034b152598ce35abaf3559b0eaa89c12 Mon Sep 17 00:00:00 2001 From: marha Date: Tue, 17 Nov 2009 15:45:56 +0000 Subject: Solved endless loop problem when moving the cursor between 2 screens together with +xinerama. (The problem was worse when screen 1 was left to screen 0) --- xorg-server/dix/events.c | 5 ++++- xorg-server/include/eventstr.h | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/xorg-server/dix/events.c b/xorg-server/dix/events.c index d070a4c6f..8f26bd618 100644 --- a/xorg-server/dix/events.c +++ b/xorg-server/dix/events.c @@ -779,7 +779,10 @@ CheckPhysLimits( { #ifdef PANORAMIX if (!noPanoramiXExtension) - XineramaSetCursorPosition (pDev, new.x, new.y, generateEvents); + { + if (pScreen && ((new.x != pSprite->hotPhys.x) || (new.y != pSprite->hotPhys.y))) + XineramaSetCursorPosition (pDev, new.x, new.y, generateEvents); + } else #endif { diff --git a/xorg-server/include/eventstr.h b/xorg-server/include/eventstr.h index 0d5b1c62a..884dd5d90 100644 --- a/xorg-server/include/eventstr.h +++ b/xorg-server/include/eventstr.h @@ -95,15 +95,15 @@ struct _DeviceEvent uint32_t button; /**< Button number */ uint32_t key; /**< Key code */ } detail; - uint16_t root_x; /**< Pos relative to root window in integral data */ + int16_t root_x; /**< Pos relative to root window in integral data */ float root_x_frac; /**< Pos relative to root window in frac part */ - uint16_t root_y; /**< Pos relative to root window in integral part */ + int16_t root_y; /**< Pos relative to root window in integral part */ float root_y_frac; /**< Pos relative to root window in frac part */ uint8_t buttons[(MAX_BUTTONS + 7)/8]; /**< Button mask */ struct { uint8_t mask[(MAX_VALUATORS + 7)/8]; /**< Valuator mask */ uint8_t mode[(MAX_VALUATORS + 7)/8]; /**< Valuator mode (Abs or Rel)*/ - uint32_t data[MAX_VALUATORS]; /**< Valuator data */ + int32_t data[MAX_VALUATORS]; /**< Valuator data */ int32_t data_frac[MAX_VALUATORS]; /**< Fractional part for data */ } valuators; struct { -- cgit v1.2.3