xserver: Branch 'master' - 8 commits

Keith Packard keithp at kemper.freedesktop.org
Tue Jul 6 20:58:21 PDT 2010


 Xi/exevents.c                  |   27 ++++++++++------------
 dix/events.c                   |   12 ++--------
 dix/getevents.c                |   49 +++++++++++++++++++++++++++++++++--------
 hw/dmx/input/atKeynames.h      |    2 -
 hw/kdrive/ephyr/ephyr.c        |    8 ------
 hw/xfree86/common/xf86Events.c |    4 ---
 hw/xnest/Keyboard.c            |    8 ------
 hw/xwin/winkeynames.h          |    1 
 include/input.h                |    9 +++++--
 mi/mipointer.c                 |   24 ++++----------------
 10 files changed, 70 insertions(+), 74 deletions(-)

New commits:
commit 2307ab5bc9365ebbe04568edb7c7620a23689b70
Merge: c65280c... fd4f505...
Author: Keith Packard <keithp at keithp.com>
Date:   Tue Jul 6 23:54:54 2010 -0400

    Merge remote branch 'whot/for-keith'

commit fd4f5059f08165a726071dc9f1ca877038292f6f
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Jul 6 09:19:09 2010 +1000

    dix: purge leftover manual key down bit setting.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/dix/events.c b/dix/events.c
index e1c3d0a..07f7b1f 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -3937,13 +3937,7 @@ DeliverGrabbedEvent(InternalEvent *event, DeviceIntPtr thisDev,
 void
 FixKeyState (DeviceEvent *event, DeviceIntPtr keybd)
 {
-    int             key, bit;
-    BYTE   *kptr;
-    KeyClassPtr keyc = keybd->key;
-
-    key = event->detail.key;
-    kptr = &keyc->down[key >> 3];
-    bit = 1 << (key & 7);
+    int key = event->detail.key;
 
     if (event->type == ET_KeyPress) {
 	DebugF("FixKeyState: Key %d %s\n",key,
@@ -3951,9 +3945,9 @@ FixKeyState (DeviceEvent *event, DeviceIntPtr keybd)
     }
 
     if (event->type == ET_KeyPress)
-	    *kptr |= bit;
+        set_key_down(keybd, key, KEY_PROCESSED);
     else if (event->type == ET_KeyRelease)
-	    *kptr &= ~bit;
+        set_key_up(keybd, key, KEY_PROCESSED);
     else
         FatalError("Impossible keyboard event");
 }
diff --git a/hw/dmx/input/atKeynames.h b/hw/dmx/input/atKeynames.h
index e632ca2..6aea1ed 100644
--- a/hw/dmx/input/atKeynames.h
+++ b/hw/dmx/input/atKeynames.h
@@ -66,8 +66,6 @@
 #define KanaMask	Mod4Mask
 #define ScrollLockMask	Mod5Mask
 
-#define KeyPressed(k) (keyc->postdown[k >> 3] & (1 << (k & 7)))
-
 /*
  * NOTE: The AT/MF keyboards can generate (via the 8042) two (MF: three)
  *       sets of scancodes. Set3 can only be generated by a MF keyboard.
diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c
index bd7deed..8096a24 100644
--- a/hw/kdrive/ephyr/ephyr.c
+++ b/hw/kdrive/ephyr/ephyr.c
@@ -776,13 +776,7 @@ ephyrUpdateModifierState(unsigned int state)
 
       for (key = 0; key < MAP_LENGTH; key++)
         if (keyc->xkbInfo->desc->map->modmap[key] & mask) {
-          int bit;
-          BYTE *kptr;
-
-          kptr = &keyc->down[key >> 3];
-          bit = 1 << (key & 7);
-
-          if (*kptr & bit)
+          if (key_is_down(pDev, key, KEY_PROCESSED))
 	        KdEnqueueKeyboardEvent (ephyrKbd, key, TRUE);
 
           if (--count == 0)
diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
index 2ff77c6..2e82848 100644
--- a/hw/xfree86/common/xf86Events.c
+++ b/hw/xfree86/common/xf86Events.c
@@ -372,8 +372,6 @@ xf86PrintBacktrace(void)
     xorg_backtrace();
 }
 
-#define KeyPressed(k) (keyc->postdown[k >> 3] & (1 << (k & 7)))
-
 static void
 xf86ReleaseKeys(DeviceIntPtr pDev)
 {
@@ -399,7 +397,7 @@ xf86ReleaseKeys(DeviceIntPtr pDev)
     for (i = keyc->xkbInfo->desc->min_key_code;
          i < keyc->xkbInfo->desc->max_key_code;
          i++) {
-        if (KeyPressed(i)) {
+        if (key_is_down(pDev, i, KEY_POSTED)) {
             sigstate = xf86BlockSIGIO ();
             nevents = GetKeyboardEvents(xf86Events, pDev, KeyRelease, i);
             for (j = 0; j < nevents; j++)
diff --git a/hw/xnest/Keyboard.c b/hw/xnest/Keyboard.c
index 570866b..ec629dc 100644
--- a/hw/xnest/Keyboard.c
+++ b/hw/xnest/Keyboard.c
@@ -231,13 +231,7 @@ xnestUpdateModifierState(unsigned int state)
 
       for (key = 0; key < MAP_LENGTH; key++)
 	if (keyc->xkbInfo->desc->map->modmap[key] & mask) {
-	  int bit;
-	  BYTE *kptr;
-
-	  kptr = &keyc->down[key >> 3];
-	  bit = 1 << (key & 7);
-
-	  if (*kptr & bit)
+	  if (key_is_down(pDev, key, KEY_PROCESSED))
 	    xnestQueueKeyEvent(KeyRelease, key);
 
 	  if (--count == 0)
diff --git a/hw/xwin/winkeynames.h b/hw/xwin/winkeynames.h
index 7c16337..3d59383 100644
--- a/hw/xwin/winkeynames.h
+++ b/hw/xwin/winkeynames.h
@@ -38,7 +38,6 @@
 #define KanaMask	Mod4Mask
 #define ScrollLockMask	Mod5Mask
 
-#define KeyPressed(k) (keyc->down[k >> 3] & (1 << (k & 7)))
 #define ModifierDown(k) ((keyc->state & (k)) == (k))
 
 /*
commit a1afe172559aff010e886cfc2a7a922d4a06c697
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Jul 6 09:16:42 2010 +1000

    dix: add aux. functions for button_is_down, set_button_down, set_button_up.
    
    Same as the matching key functions. Buttons, like keys, can have two states
    for down/up - one posted, one processed. Posted is set during event
    generation (usually in the signal handler). Processed is set during event
    processing when the event queue is emptied and events are being delivered to
    the client.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index df13190..e990aeb 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -747,7 +747,6 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
     KeyClassPtr k       = NULL;
     ButtonClassPtr b    = NULL;
     ValuatorClassPtr v  = NULL;
-    BYTE *kptr          = NULL;
 
     /* This event is always the first we get, before the actual events with
      * the data. However, the way how the DDX is set up, "device" will
@@ -835,10 +834,10 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
         if (!b)
             return DONT_PROCESS;
 
-        kptr = &b->down[key >> 3];
-        if ((*kptr & bit) != 0)
+        if (button_is_down(device, key, BUTTON_PROCESSED))
             return DONT_PROCESS;
-        *kptr |= bit;
+
+        set_button_down(device, key, BUTTON_PROCESSED);
 	if (device->valuator)
 	    device->valuator->motionHintWindow = NullWindow;
         if (!b->map[key])
@@ -858,8 +857,7 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
         if (!b)
             return DONT_PROCESS;
 
-        kptr = &b->down[key>>3];
-        if (!(*kptr & bit))
+        if (!button_is_down(device, key, BUTTON_PROCESSED))
             return DONT_PROCESS;
         if (IsMaster(device)) {
             DeviceIntPtr sd;
@@ -874,11 +872,11 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
                     continue;
                 if (!sd->button)
                     continue;
-                if ((sd->button->down[key>>3] & bit) != 0)
+                if (button_is_down(sd, key, BUTTON_PROCESSED))
                     return DONT_PROCESS;
             }
         }
-        *kptr &= ~bit;
+        set_button_up(device, key, BUTTON_PROCESSED);
 	if (device->valuator)
 	    device->valuator->motionHintWindow = NullWindow;
         if (!b->map[key])
diff --git a/dix/getevents.c b/dix/getevents.c
index 1d505e5..a9b6e82 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -91,6 +91,37 @@ GetMotionHistorySize(void)
 }
 
 void
+set_button_down(DeviceIntPtr pDev, int button, int type)
+{
+    if (type == BUTTON_PROCESSED)
+        SetBit(pDev->button->down, button);
+    else
+        SetBit(pDev->button->postdown, button);
+}
+
+void
+set_button_up(DeviceIntPtr pDev, int button, int type)
+{
+    if (type == BUTTON_PROCESSED)
+        ClearBit(pDev->button->down, button);
+    else
+        ClearBit(pDev->button->postdown, button);
+}
+
+Bool
+button_is_down(DeviceIntPtr pDev, int button, int type)
+{
+    int ret = 0;
+
+    if (type & BUTTON_PROCESSED)
+        ret |= !!BitIsOn(pDev->button->down, button);
+    if (type & BUTTON_POSTED)
+        ret |= !!BitIsOn(pDev->button->postdown, button);
+
+    return ret;
+}
+
+void
 set_key_down(DeviceIntPtr pDev, int key_code, int type)
 {
     if (type == KEY_PROCESSED)
@@ -1123,11 +1154,11 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons,
     else {
         if (type == ButtonPress) {
             event->type = ET_ButtonPress;
-            pDev->button->postdown[buttons >> 3] |= (1 << (buttons & 7));
+            set_button_down(pDev, buttons, BUTTON_POSTED);
         }
         else if (type == ButtonRelease) {
             event->type = ET_ButtonRelease;
-            pDev->button->postdown[buttons >> 3] &= ~(1 << (buttons & 7));
+            set_button_up(pDev, buttons, BUTTON_POSTED);
         }
         event->detail.button = buttons;
     }
diff --git a/include/input.h b/include/input.h
index 0a08ea4..55b1537 100644
--- a/include/input.h
+++ b/include/input.h
@@ -228,14 +228,19 @@ typedef struct _InputAttributes {
 #define ATTR_TOUCHPAD (1<<4)
 #define ATTR_TOUCHSCREEN (1<<5)
 
-/* Key has been run through all input processing and events sent to clients. */
+/* Key/Button has been run through all input processing and events sent to clients. */
 #define KEY_PROCESSED 1
-/* Key has not been fully processed, no events have been sent. */
+#define BUTTON_PROCESSED 1
+/* Key/Button has not been fully processed, no events have been sent. */
 #define KEY_POSTED 2
+#define BUTTON_POSTED 2
 
 extern void set_key_down(DeviceIntPtr pDev, int key_code, int type);
 extern void set_key_up(DeviceIntPtr pDev, int key_code, int type);
 extern int key_is_down(DeviceIntPtr pDev, int key_code, int type);
+extern void set_button_down(DeviceIntPtr pDev, int button, int type);
+extern void set_button_up(DeviceIntPtr pDev, int button, int type);
+extern int button_is_down(DeviceIntPtr pDev, int button, int type);
 
 extern void InitCoreDevices(void);
 extern void InitXTestDevices(void);
commit 32473d6bf38c95b2d6d5ddbf583a1e801c6605e4
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Jul 6 08:56:12 2010 +1000

    dix: use BitIsOn/SetBit/ClearBit macros for set_key_down helpers.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/dix/getevents.c b/dix/getevents.c
index 2eacdfe..1d505e5 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -94,18 +94,18 @@ void
 set_key_down(DeviceIntPtr pDev, int key_code, int type)
 {
     if (type == KEY_PROCESSED)
-        pDev->key->down[key_code >> 3] |= (1 << (key_code & 7));
+        SetBit(pDev->key->down, key_code);
     else
-        pDev->key->postdown[key_code >> 3] |= (1 << (key_code & 7));
+        SetBit(pDev->key->postdown, key_code);
 }
 
 void
 set_key_up(DeviceIntPtr pDev, int key_code, int type)
 {
     if (type == KEY_PROCESSED)
-        pDev->key->down[key_code >> 3] &= ~(1 << (key_code & 7));
+        ClearBit(pDev->key->down, key_code);
     else
-        pDev->key->postdown[key_code >> 3] &= ~(1 << (key_code & 7));
+        ClearBit(pDev->key->postdown, key_code);
 }
 
 Bool
@@ -114,9 +114,9 @@ key_is_down(DeviceIntPtr pDev, int key_code, int type)
     int ret = 0;
 
     if (type & KEY_PROCESSED)
-        ret |= !!(pDev->key->down[key_code >> 3] & (1 << (key_code & 7)));
+        ret |= !!BitIsOn(pDev->key->down, key_code);
     if (type & KEY_POSTED)
-        ret |= !!(pDev->key->postdown[key_code >> 3] & (1 << (key_code & 7)));
+        ret |= !!BitIsOn(pDev->key->postdown, key_code);
 
     return ret;
 }
commit c18442908080c9833dfd6bb2ff367945d1892421
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Jul 5 16:47:57 2010 +1000

    Xi: use set_key_up/down instead of manual bit handling.
    
    We have the wrappers, use them.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index de24b4c..df13190 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -814,23 +814,22 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
         if (!k)
             return DONT_PROCESS;
 
-	kptr = &k->down[key >> 3];
-        /* don't allow ddx to generate multiple downs, but repeats are okay */
-	if ((*kptr & bit) && !event->key_repeat)
+	/* don't allow ddx to generate multiple downs, but repeats are okay */
+	if (key_is_down(device, key, KEY_PROCESSED) && !event->key_repeat)
 	    return DONT_PROCESS;
+
 	if (device->valuator)
 	    device->valuator->motionHintWindow = NullWindow;
-	*kptr |= bit;
+	set_key_down(device, key, KEY_PROCESSED);
     } else if (event->type == ET_KeyRelease) {
         if (!k)
             return DONT_PROCESS;
 
-	kptr = &k->down[key >> 3];
-	if (!(*kptr & bit))	/* guard against duplicates */
+	if (!key_is_down(device, key, KEY_PROCESSED))	/* guard against duplicates */
 	    return DONT_PROCESS;
 	if (device->valuator)
 	    device->valuator->motionHintWindow = NullWindow;
-	*kptr &= ~bit;
+	set_key_up(device, key, KEY_PROCESSED);
     } else if (event->type == ET_ButtonPress) {
         Mask mask;
         if (!b)
commit 10442ce02b5be7f82b373bee1939e2b523e291d9
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Jul 5 16:54:48 2010 +1000

    dix: treat flags as flags, not as value in key_is_down.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/dix/getevents.c b/dix/getevents.c
index f9d65e9..2eacdfe 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -115,7 +115,7 @@ key_is_down(DeviceIntPtr pDev, int key_code, int type)
 
     if (type & KEY_PROCESSED)
         ret |= !!(pDev->key->down[key_code >> 3] & (1 << (key_code & 7)));
-    else if (type & KEY_POSTED)
+    if (type & KEY_POSTED)
         ret |= !!(pDev->key->postdown[key_code >> 3] & (1 << (key_code & 7)));
 
     return ret;
commit b46ffd25d3f211e91c67bc618ecbd58257939388
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Jul 2 15:25:14 2010 +1000

    mi: rename miPointerMoved to miPointerMoveNoEvent.
    
    Having miPointerMove and miPointerMoved is confusing, especially since both
    do the same thing bar the event delivery. Also, miPointerMove calls
    miPointerMoved which indicates some confusion in the temporal alignment of
    cause and effect.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Acked-by: Tiago Vignatti <tiago.vignatti at nokia.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>

diff --git a/mi/mipointer.c b/mi/mipointer.c
index 7efcebb..d8aaf8c 100644
--- a/mi/mipointer.c
+++ b/mi/mipointer.c
@@ -73,7 +73,7 @@ static void miPointerMove(DeviceIntPtr pDev, ScreenPtr pScreen,
 static Bool miPointerDeviceInitialize(DeviceIntPtr pDev, ScreenPtr pScreen);
 static void miPointerDeviceCleanup(DeviceIntPtr pDev,
                                    ScreenPtr pScreen);
-static void miPointerMoved (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y);
+static void miPointerMoveNoEvent (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y);
 
 static EventList* events; /* for WarpPointer MotionNotifies */
 
@@ -308,7 +308,7 @@ miPointerWarpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
     if (GenerateEvent)
 	miPointerMove (pDev, pScreen, x, y);
     else
-        miPointerMoved(pDev, pScreen, x, y);
+        miPointerMoveNoEvent(pDev, pScreen, x, y);
 
     /* Don't call USFS if we use Xinerama, otherwise the root window is
      * updated to the second screen, and we never receive any events.
@@ -456,7 +456,7 @@ miPointerSetWaitForUpdate(ScreenPtr pScreen, Bool wait)
 
 /* Move the pointer on the current screen,  and update the sprite. */
 static void
-miPointerMoved (DeviceIntPtr pDev, ScreenPtr pScreen,
+miPointerMoveNoEvent (DeviceIntPtr pDev, ScreenPtr pScreen,
                 int x, int y)
 {
     miPointerPtr pPointer;
@@ -532,7 +532,7 @@ miPointerSetPosition(DeviceIntPtr pDev, int *x, int *y)
             pPointer->pScreen == pScreen) 
         return;
 
-    miPointerMoved(pDev, pScreen, *x, *y);
+    miPointerMoveNoEvent(pDev, pScreen, *x, *y);
 }
 
 void
@@ -554,7 +554,7 @@ miPointerMove (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
     int i, nevents;
     int valuators[2];
 
-    miPointerMoved(pDev, pScreen, x, y);
+    miPointerMoveNoEvent(pDev, pScreen, x, y);
 
     /* generate motion notify */
     valuators[0] = x;
commit dbd621705a5211540b353af81c4af83c297b74dc
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Jul 2 14:22:03 2010 +1000

    mi: De-duplicate some code in mipointer.c
    
    miPointerMoved already has the same code.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Keith Packard <keithp at keithp.com>

diff --git a/mi/mipointer.c b/mi/mipointer.c
index 9936a01..7efcebb 100644
--- a/mi/mipointer.c
+++ b/mi/mipointer.c
@@ -73,6 +73,7 @@ static void miPointerMove(DeviceIntPtr pDev, ScreenPtr pScreen,
 static Bool miPointerDeviceInitialize(DeviceIntPtr pDev, ScreenPtr pScreen);
 static void miPointerDeviceCleanup(DeviceIntPtr pDev,
                                    ScreenPtr pScreen);
+static void miPointerMoved (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y);
 
 static EventList* events; /* for WarpPointer MotionNotifies */
 
@@ -305,24 +306,9 @@ miPointerWarpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
     }
 
     if (GenerateEvent)
-    {
 	miPointerMove (pDev, pScreen, x, y);
-    }
     else
-    {
-	/* everything from miPointerMove except the event and history */
-
-    	if (!pScreenPriv->waitForUpdate && pScreen == pPointer->pSpriteScreen)
-    	{
-	    pPointer->devx = x;
-	    pPointer->devy = y;
-	    if(pPointer->pCursor && !pPointer->pCursor->bits->emptyMask)
-		(*pScreenPriv->spriteFuncs->MoveCursor) (pDev, pScreen, x, y);
-    	}
-	pPointer->x = x;
-	pPointer->y = y;
-	pPointer->pScreen = pScreen;
-    }
+        miPointerMoved(pDev, pScreen, x, y);
 
     /* Don't call USFS if we use Xinerama, otherwise the root window is
      * updated to the second screen, and we never receive any events.


More information about the xorg-commit mailing list