diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2010-07-06 09:16:42 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2010-07-07 13:29:46 +1000 |
commit | a1afe172559aff010e886cfc2a7a922d4a06c697 (patch) | |
tree | 70027358759d780fb8b94f6bf689e864fe0aa879 /Xi | |
parent | 32473d6bf38c95b2d6d5ddbf583a1e801c6605e4 (diff) |
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@who-t.net>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
Diffstat (limited to 'Xi')
-rw-r--r-- | Xi/exevents.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/Xi/exevents.c b/Xi/exevents.c index df13190a8..e990aeb7e 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]) |