Merge remote-tracking branch 'whot/for-keith'
This commit is contained in:
commit
b51a1bd276
|
@ -393,6 +393,8 @@ ScreenSaverFreeSuspend(pointer value, XID id)
|
||||||
UpdateCurrentTimeIf();
|
UpdateCurrentTimeIf();
|
||||||
nt_list_for_each_entry(dev, inputInfo.devices, next)
|
nt_list_for_each_entry(dev, inputInfo.devices, next)
|
||||||
lastDeviceEventTime[dev->id] = currentTime;
|
lastDeviceEventTime[dev->id] = currentTime;
|
||||||
|
lastDeviceEventTime[XIAllDevices] = currentTime;
|
||||||
|
lastDeviceEventTime[XIAllMasterDevices] = currentTime;
|
||||||
SetScreenSaverTimer();
|
SetScreenSaverTimer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1066,24 +1066,14 @@ ActivateEarlyAccept(DeviceIntPtr dev, TouchPointInfoPtr ti)
|
||||||
static void
|
static void
|
||||||
EmitTouchEnd(DeviceIntPtr dev, TouchPointInfoPtr ti, int flags, XID resource)
|
EmitTouchEnd(DeviceIntPtr dev, TouchPointInfoPtr ti, int flags, XID resource)
|
||||||
{
|
{
|
||||||
InternalEvent *tel = InitEventList(GetMaximumEventsNum());
|
InternalEvent event;
|
||||||
ValuatorMask *mask = valuator_mask_new(2);
|
|
||||||
int i, nev;
|
|
||||||
|
|
||||||
valuator_mask_set_double(mask, 0,
|
|
||||||
valuator_mask_get_double(ti->valuators, 0));
|
|
||||||
valuator_mask_set_double(mask, 1,
|
|
||||||
valuator_mask_get_double(ti->valuators, 1));
|
|
||||||
|
|
||||||
flags |= TOUCH_CLIENT_ID;
|
flags |= TOUCH_CLIENT_ID;
|
||||||
if (ti->emulate_pointer)
|
if (ti->emulate_pointer)
|
||||||
flags |= TOUCH_POINTER_EMULATED;
|
flags |= TOUCH_POINTER_EMULATED;
|
||||||
nev = GetTouchEvents(tel, dev, ti->client_id, XI_TouchEnd, flags, mask);
|
TouchDeliverDeviceClassesChangedEvent(ti, GetTimeInMillis(), resource);
|
||||||
for (i = 0; i < nev; i++)
|
GetDixTouchEnd(&event, dev, ti, flags);
|
||||||
DeliverTouchEvents(dev, ti, tel + i, resource);
|
DeliverTouchEvents(dev, ti, &event, resource);
|
||||||
|
|
||||||
valuator_mask_free(&mask);
|
|
||||||
FreeEventList(tel, GetMaximumEventsNum());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
117
dix/getevents.c
117
dix/getevents.c
|
@ -1833,10 +1833,7 @@ GetTouchEvents(InternalEvent *events, DeviceIntPtr dev, uint32_t ddx_touchid,
|
||||||
int i;
|
int i;
|
||||||
int num_events = 0;
|
int num_events = 0;
|
||||||
RawDeviceEvent *raw;
|
RawDeviceEvent *raw;
|
||||||
union touch {
|
DDXTouchPointInfoPtr ti;
|
||||||
TouchPointInfoPtr dix_ti;
|
|
||||||
DDXTouchPointInfoPtr ti;
|
|
||||||
} touchpoint;
|
|
||||||
int need_rawevent = TRUE;
|
int need_rawevent = TRUE;
|
||||||
Bool emulate_pointer = FALSE;
|
Bool emulate_pointer = FALSE;
|
||||||
int client_id = 0;
|
int client_id = 0;
|
||||||
|
@ -1855,37 +1852,15 @@ GetTouchEvents(InternalEvent *events, DeviceIntPtr dev, uint32_t ddx_touchid,
|
||||||
|
|
||||||
/* Find and/or create the DDX touch info */
|
/* Find and/or create the DDX touch info */
|
||||||
|
|
||||||
if (flags & TOUCH_CLIENT_ID) { /* A DIX-submitted TouchEnd */
|
ti = TouchFindByDDXID(dev, ddx_touchid, (type == XI_TouchBegin));
|
||||||
touchpoint.dix_ti = TouchFindByClientID(dev, ddx_touchid);
|
if (!ti) {
|
||||||
BUG_RETURN_VAL(!touchpoint.dix_ti, 0);
|
ErrorFSigSafe("[dix] %s: unable to %s touch point %u\n", dev->name,
|
||||||
|
type == XI_TouchBegin ? "begin" : "find", ddx_touchid);
|
||||||
if (!mask_in ||
|
return 0;
|
||||||
!valuator_mask_isset(mask_in, 0) ||
|
|
||||||
!valuator_mask_isset(mask_in, 1)) {
|
|
||||||
ErrorF
|
|
||||||
("[dix] dix-submitted events must have x/y valuator information.\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
need_rawevent = FALSE;
|
|
||||||
client_id = touchpoint.dix_ti->client_id;
|
|
||||||
}
|
}
|
||||||
else { /* a DDX-submitted touch */
|
client_id = ti->client_id;
|
||||||
|
|
||||||
touchpoint.ti =
|
emulate_pointer = ti->emulate_pointer;
|
||||||
TouchFindByDDXID(dev, ddx_touchid, (type == XI_TouchBegin));
|
|
||||||
if (!touchpoint.ti) {
|
|
||||||
ErrorFSigSafe("[dix] %s: unable to %s touch point %u\n", dev->name,
|
|
||||||
type == XI_TouchBegin ? "begin" : "find", ddx_touchid);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
client_id = touchpoint.ti->client_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(flags & TOUCH_CLIENT_ID))
|
|
||||||
emulate_pointer = touchpoint.ti->emulate_pointer;
|
|
||||||
else
|
|
||||||
emulate_pointer = ! !(flags & TOUCH_POINTER_EMULATED);
|
|
||||||
|
|
||||||
if (!IsMaster(dev))
|
if (!IsMaster(dev))
|
||||||
events =
|
events =
|
||||||
|
@ -1905,11 +1880,6 @@ GetTouchEvents(InternalEvent *events, DeviceIntPtr dev, uint32_t ddx_touchid,
|
||||||
num_events++;
|
num_events++;
|
||||||
|
|
||||||
init_device_event(event, dev, ms);
|
init_device_event(event, dev, ms);
|
||||||
/* if submitted for master device, get the sourceid from there */
|
|
||||||
if (flags & TOUCH_CLIENT_ID) {
|
|
||||||
event->sourceid = touchpoint.dix_ti->sourceid;
|
|
||||||
/* TOUCH_CLIENT_ID implies norawevent */
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case XI_TouchBegin:
|
case XI_TouchBegin:
|
||||||
|
@ -1934,38 +1904,30 @@ GetTouchEvents(InternalEvent *events, DeviceIntPtr dev, uint32_t ddx_touchid,
|
||||||
event->type = ET_TouchEnd;
|
event->type = ET_TouchEnd;
|
||||||
/* We can end the DDX touch here, since we don't use the active
|
/* We can end the DDX touch here, since we don't use the active
|
||||||
* field below */
|
* field below */
|
||||||
if (!(flags & TOUCH_CLIENT_ID))
|
TouchEndDDXTouch(dev, ti);
|
||||||
TouchEndDDXTouch(dev, touchpoint.ti);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (t->mode == XIDirectTouch && !(flags & TOUCH_CLIENT_ID)) {
|
|
||||||
if (!valuator_mask_isset(&mask, 0))
|
|
||||||
valuator_mask_set_double(&mask, 0,
|
|
||||||
valuator_mask_get_double(touchpoint.ti->
|
|
||||||
valuators, 0));
|
|
||||||
if (!valuator_mask_isset(&mask, 1))
|
|
||||||
valuator_mask_set_double(&mask, 1,
|
|
||||||
valuator_mask_get_double(touchpoint.ti->
|
|
||||||
valuators, 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get our screen event co-ordinates (root_x/root_y/event_x/event_y):
|
/* Get our screen event co-ordinates (root_x/root_y/event_x/event_y):
|
||||||
* these come from the touchpoint in Absolute mode, or the sprite in
|
* these come from the touchpoint in Absolute mode, or the sprite in
|
||||||
* Relative. */
|
* Relative. */
|
||||||
if (t->mode == XIDirectTouch) {
|
if (t->mode == XIDirectTouch) {
|
||||||
transformAbsolute(dev, &mask);
|
for (i = 0; i < max(valuator_mask_size(&mask), 2); i++) {
|
||||||
|
double val;
|
||||||
|
|
||||||
if (!(flags & TOUCH_CLIENT_ID)) {
|
if (valuator_mask_fetch_double(&mask, i, &val))
|
||||||
for (i = 0; i < valuator_mask_size(&mask); i++) {
|
valuator_mask_set_double(ti->valuators, i, val);
|
||||||
double val;
|
/* If the device doesn't post new X and Y axis values,
|
||||||
|
* use the last values posted.
|
||||||
if (valuator_mask_fetch_double(&mask, i, &val))
|
*/
|
||||||
valuator_mask_set_double(touchpoint.ti->valuators, i, val);
|
else if (i < 2 &&
|
||||||
}
|
valuator_mask_fetch_double(ti->valuators, i, &val))
|
||||||
|
valuator_mask_set_double(&mask, i, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
transformAbsolute(dev, &mask);
|
||||||
clipAbsolute(dev, &mask);
|
clipAbsolute(dev, &mask);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1994,6 +1956,14 @@ GetTouchEvents(InternalEvent *events, DeviceIntPtr dev, uint32_t ddx_touchid,
|
||||||
if (emulate_pointer)
|
if (emulate_pointer)
|
||||||
storeLastValuators(dev, &mask, 0, 1, devx, devy);
|
storeLastValuators(dev, &mask, 0, 1, devx, devy);
|
||||||
|
|
||||||
|
/* Update the MD's co-ordinates, which are always in desktop space. */
|
||||||
|
if (emulate_pointer && !IsMaster(dev) && !IsFloating(dev)) {
|
||||||
|
DeviceIntPtr master = GetMaster(dev, MASTER_POINTER);
|
||||||
|
|
||||||
|
master->last.valuators[0] = screenx;
|
||||||
|
master->last.valuators[1] = screeny;
|
||||||
|
}
|
||||||
|
|
||||||
event->root = scr->root->drawable.id;
|
event->root = scr->root->drawable.id;
|
||||||
|
|
||||||
event_set_root_coordinates(event, screenx, screeny);
|
event_set_root_coordinates(event, screenx, screeny);
|
||||||
|
@ -2014,6 +1984,37 @@ GetTouchEvents(InternalEvent *events, DeviceIntPtr dev, uint32_t ddx_touchid,
|
||||||
return num_events;
|
return num_events;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
GetDixTouchEnd(InternalEvent *ievent, DeviceIntPtr dev, TouchPointInfoPtr ti,
|
||||||
|
uint32_t flags)
|
||||||
|
{
|
||||||
|
ScreenPtr scr = dev->spriteInfo->sprite->hotPhys.pScreen;
|
||||||
|
DeviceEvent *event = &ievent->device_event;
|
||||||
|
CARD32 ms = GetTimeInMillis();
|
||||||
|
|
||||||
|
BUG_WARN(!dev->enabled);
|
||||||
|
|
||||||
|
init_device_event(event, dev, ms);
|
||||||
|
|
||||||
|
event->sourceid = ti->sourceid;
|
||||||
|
event->type = ET_TouchEnd;
|
||||||
|
|
||||||
|
event->root = scr->root->drawable.id;
|
||||||
|
|
||||||
|
/* Get screen event coordinates from the sprite. Is this really the best
|
||||||
|
* we can do? */
|
||||||
|
event_set_root_coordinates(event,
|
||||||
|
dev->last.valuators[0],
|
||||||
|
dev->last.valuators[1]);
|
||||||
|
event->touchid = ti->client_id;
|
||||||
|
event->flags = flags;
|
||||||
|
|
||||||
|
if (flags & TOUCH_POINTER_EMULATED) {
|
||||||
|
event->flags |= TOUCH_POINTER_EMULATED;
|
||||||
|
event->detail.button = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Synthesize a single motion event for the core pointer.
|
* Synthesize a single motion event for the core pointer.
|
||||||
*
|
*
|
||||||
|
|
|
@ -910,11 +910,7 @@ input_option_set_value(InputOption *opt, const char *value)
|
||||||
double
|
double
|
||||||
fp1616_to_double(FP1616 in)
|
fp1616_to_double(FP1616 in)
|
||||||
{
|
{
|
||||||
double ret;
|
return pixman_fixed_to_double(in);
|
||||||
|
|
||||||
ret = (double) (in >> 16);
|
|
||||||
ret += (double) (in & 0xffff) * (1.0 / (1UL << 16)); /* Optimized: ldexp((double)(in & 0xffff), -16); */
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double
|
double
|
||||||
|
@ -930,20 +926,7 @@ fp3232_to_double(FP3232 in)
|
||||||
FP1616
|
FP1616
|
||||||
double_to_fp1616(double in)
|
double_to_fp1616(double in)
|
||||||
{
|
{
|
||||||
FP1616 ret;
|
return pixman_double_to_fixed(in);
|
||||||
int32_t integral;
|
|
||||||
double tmp;
|
|
||||||
uint32_t frac_d;
|
|
||||||
|
|
||||||
tmp = floor(in);
|
|
||||||
integral = (int32_t) tmp;
|
|
||||||
|
|
||||||
tmp = (in - integral) * (1UL << 16); /* Optimized: ldexp(in - integral, 16) */
|
|
||||||
frac_d = (uint16_t) tmp;
|
|
||||||
|
|
||||||
ret = integral << 16;
|
|
||||||
ret |= frac_d & 0xffff;
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FP3232
|
FP3232
|
||||||
|
|
61
dix/touch.c
61
dix/touch.c
|
@ -463,45 +463,14 @@ TouchEventHistoryPush(TouchPointInfoPtr ti, const DeviceEvent *ev)
|
||||||
void
|
void
|
||||||
TouchEventHistoryReplay(TouchPointInfoPtr ti, DeviceIntPtr dev, XID resource)
|
TouchEventHistoryReplay(TouchPointInfoPtr ti, DeviceIntPtr dev, XID resource)
|
||||||
{
|
{
|
||||||
InternalEvent *tel;
|
int i;
|
||||||
ValuatorMask *mask;
|
|
||||||
int i, nev;
|
|
||||||
int flags;
|
|
||||||
|
|
||||||
if (!ti->history)
|
if (!ti->history)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
tel = InitEventList(GetMaximumEventsNum());
|
TouchDeliverDeviceClassesChangedEvent(ti, ti->history[0].time, resource);
|
||||||
mask = valuator_mask_new(0);
|
|
||||||
|
|
||||||
valuator_mask_set_double(mask, 0, ti->history[0].valuators.data[0]);
|
for (i = 0; i < ti->history_elements; i++) {
|
||||||
valuator_mask_set_double(mask, 1, ti->history[0].valuators.data[1]);
|
|
||||||
|
|
||||||
flags = TOUCH_CLIENT_ID | TOUCH_REPLAYING;
|
|
||||||
if (ti->emulate_pointer)
|
|
||||||
flags |= TOUCH_POINTER_EMULATED;
|
|
||||||
/* Generate events based on a fake touch begin event to get DCCE events if
|
|
||||||
* needed */
|
|
||||||
/* FIXME: This needs to be cleaned up */
|
|
||||||
nev = GetTouchEvents(tel, dev, ti->client_id, XI_TouchBegin, flags, mask);
|
|
||||||
for (i = 0; i < nev; i++) {
|
|
||||||
/* Send saved touch begin event */
|
|
||||||
if (tel[i].any.type == ET_TouchBegin) {
|
|
||||||
DeviceEvent *ev = &ti->history[0];
|
|
||||||
ev->flags |= TOUCH_REPLAYING;
|
|
||||||
DeliverTouchEvents(dev, ti, (InternalEvent*)ev, resource);
|
|
||||||
}
|
|
||||||
else {/* Send DCCE event */
|
|
||||||
tel[i].any.time = ti->history[0].time;
|
|
||||||
DeliverTouchEvents(dev, ti, tel + i, resource);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
valuator_mask_free(&mask);
|
|
||||||
FreeEventList(tel, GetMaximumEventsNum());
|
|
||||||
|
|
||||||
/* First event was TouchBegin, already replayed that one */
|
|
||||||
for (i = 1; i < ti->history_elements; i++) {
|
|
||||||
DeviceEvent *ev = &ti->history[i];
|
DeviceEvent *ev = &ti->history[i];
|
||||||
|
|
||||||
ev->flags |= TOUCH_REPLAYING;
|
ev->flags |= TOUCH_REPLAYING;
|
||||||
|
@ -509,6 +478,30 @@ TouchEventHistoryReplay(TouchPointInfoPtr ti, DeviceIntPtr dev, XID resource)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TouchDeliverDeviceClassesChangedEvent(TouchPointInfoPtr ti, Time time,
|
||||||
|
XID resource)
|
||||||
|
{
|
||||||
|
DeviceIntPtr dev;
|
||||||
|
int num_events = 0;
|
||||||
|
InternalEvent dcce;
|
||||||
|
|
||||||
|
dixLookupDevice(&dev, ti->sourceid, serverClient, DixWriteAccess);
|
||||||
|
|
||||||
|
if (!dev)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* UpdateFromMaster generates at most one event */
|
||||||
|
UpdateFromMaster(&dcce, dev, DEVCHANGE_POINTER_EVENT, &num_events);
|
||||||
|
BUG_WARN(num_events > 1);
|
||||||
|
|
||||||
|
if (num_events) {
|
||||||
|
dcce.any.time = time;
|
||||||
|
/* FIXME: This doesn't do anything */
|
||||||
|
dev->public.processInputProc(&dcce, dev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
TouchBuildDependentSpriteTrace(DeviceIntPtr dev, SpritePtr sprite)
|
TouchBuildDependentSpriteTrace(DeviceIntPtr dev, SpritePtr sprite)
|
||||||
{
|
{
|
||||||
|
|
|
@ -3095,6 +3095,8 @@ dixSaveScreens(ClientPtr client, int on, int mode)
|
||||||
UpdateCurrentTimeIf();
|
UpdateCurrentTimeIf();
|
||||||
nt_list_for_each_entry(dev, inputInfo.devices, next)
|
nt_list_for_each_entry(dev, inputInfo.devices, next)
|
||||||
lastDeviceEventTime[dev->id] = currentTime;
|
lastDeviceEventTime[dev->id] = currentTime;
|
||||||
|
lastDeviceEventTime[XIAllDevices] = currentTime;
|
||||||
|
lastDeviceEventTime[XIAllMasterDevices] = currentTime;
|
||||||
}
|
}
|
||||||
SetScreenSaverTimer();
|
SetScreenSaverTimer();
|
||||||
}
|
}
|
||||||
|
|
|
@ -346,6 +346,8 @@ dmxComputeScreenOrigins(void)
|
||||||
screenInfo.screens[i]->y -= minY;
|
screenInfo.screens[i]->y -= minY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
update_desktop_dimensions();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Recompute origin information in the #dmxScreens list. This is
|
/** Recompute origin information in the #dmxScreens list. This is
|
||||||
|
|
|
@ -465,6 +465,11 @@ extern int GetTouchOwnershipEvents(InternalEvent *events,
|
||||||
TouchPointInfoPtr ti,
|
TouchPointInfoPtr ti,
|
||||||
uint8_t mode, XID resource, uint32_t flags);
|
uint8_t mode, XID resource, uint32_t flags);
|
||||||
|
|
||||||
|
extern void GetDixTouchEnd(InternalEvent *ievent,
|
||||||
|
DeviceIntPtr dev,
|
||||||
|
TouchPointInfoPtr ti,
|
||||||
|
uint32_t flags);
|
||||||
|
|
||||||
extern _X_EXPORT int GetProximityEvents(InternalEvent *events,
|
extern _X_EXPORT int GetProximityEvents(InternalEvent *events,
|
||||||
DeviceIntPtr pDev,
|
DeviceIntPtr pDev,
|
||||||
int type, const ValuatorMask *mask);
|
int type, const ValuatorMask *mask);
|
||||||
|
@ -580,6 +585,8 @@ extern int TouchListenerAcceptReject(DeviceIntPtr dev, TouchPointInfoPtr ti,
|
||||||
extern int TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode,
|
extern int TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode,
|
||||||
uint32_t touchid, Window grab_window, XID *error);
|
uint32_t touchid, Window grab_window, XID *error);
|
||||||
extern void TouchEndPhysicallyActiveTouches(DeviceIntPtr dev);
|
extern void TouchEndPhysicallyActiveTouches(DeviceIntPtr dev);
|
||||||
|
extern void TouchDeliverDeviceClassesChangedEvent(TouchPointInfoPtr ti,
|
||||||
|
Time time, XID resource);
|
||||||
|
|
||||||
/* misc event helpers */
|
/* misc event helpers */
|
||||||
extern Mask GetEventMask(DeviceIntPtr dev, xEvent *ev, InputClientsPtr clients);
|
extern Mask GetEventMask(DeviceIntPtr dev, xEvent *ev, InputClientsPtr clients);
|
||||||
|
|
|
@ -331,7 +331,7 @@ typedef struct _DDXTouchPointInfo {
|
||||||
uint32_t ddx_id; /* touch ID given by the DDX */
|
uint32_t ddx_id; /* touch ID given by the DDX */
|
||||||
Bool emulate_pointer;
|
Bool emulate_pointer;
|
||||||
|
|
||||||
ValuatorMask *valuators; /* last recorded axis values */
|
ValuatorMask *valuators; /* last axis values as posted, pre-transform */
|
||||||
} DDXTouchPointInfoRec;
|
} DDXTouchPointInfoRec;
|
||||||
|
|
||||||
typedef struct _TouchClassRec {
|
typedef struct _TouchClassRec {
|
||||||
|
|
|
@ -171,6 +171,7 @@ typedef struct _XkbSrvInfo {
|
||||||
KeyCode mouseKey;
|
KeyCode mouseKey;
|
||||||
KeyCode inactiveKey;
|
KeyCode inactiveKey;
|
||||||
KeyCode slowKey;
|
KeyCode slowKey;
|
||||||
|
KeyCode slowKeyEnableKey;
|
||||||
KeyCode repeatKey;
|
KeyCode repeatKey;
|
||||||
CARD8 krgTimerActive;
|
CARD8 krgTimerActive;
|
||||||
CARD8 beepType;
|
CARD8 beepType;
|
||||||
|
|
|
@ -1093,7 +1093,11 @@ barrier_is_blocking(const struct PointerBarrier * barrier,
|
||||||
if (dir & BarrierNegativeX && x1 == (barrier->x1 - 1))
|
if (dir & BarrierNegativeX && x1 == (barrier->x1 - 1))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
/* startpoint adjacent to barrier, moving towards -> block */
|
/* startpoint adjacent to barrier, moving towards -> block */
|
||||||
if (x1 == barrier->x1 && y1 >= barrier->y1 && y1 <= barrier->y2) {
|
if (dir & BarrierPositiveX && x1 == (barrier->x1 - 1) && y1 >= barrier->y1 && y1 <= barrier->y2) {
|
||||||
|
*distance = 0;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
if (dir & BarrierNegativeX && x1 == barrier->x1 && y1 >= barrier->y1 && y1 <= barrier->y2) {
|
||||||
*distance = 0;
|
*distance = 0;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1105,7 +1109,11 @@ barrier_is_blocking(const struct PointerBarrier * barrier,
|
||||||
if (dir & BarrierNegativeY && y1 == (barrier->y1 - 1))
|
if (dir & BarrierNegativeY && y1 == (barrier->y1 - 1))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
/* startpoint adjacent to barrier, moving towards -> block */
|
/* startpoint adjacent to barrier, moving towards -> block */
|
||||||
if (y1 == barrier->y1 && x1 >= barrier->x1 && x1 <= barrier->x2) {
|
if (dir & BarrierPositiveY && y1 == (barrier->y1 - 1) && x1 >= barrier->x1 && x1 <= barrier->x2) {
|
||||||
|
*distance = 0;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
if (dir & BarrierNegativeY && y1 == barrier->y1 && x1 >= barrier->x1 && x1 <= barrier->x2) {
|
||||||
*distance = 0;
|
*distance = 0;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -291,8 +291,8 @@ AccessXKRGExpire(OsTimerPtr timer, CARD32 now, pointer arg)
|
||||||
return 4000;
|
return 4000;
|
||||||
}
|
}
|
||||||
xkbi->krgTimerActive = _OFF_TIMER;
|
xkbi->krgTimerActive = _OFF_TIMER;
|
||||||
cn.keycode = 0;
|
cn.keycode = xkbi->slowKeyEnableKey;
|
||||||
cn.eventType = 0;
|
cn.eventType = KeyPress;
|
||||||
cn.requestMajor = 0;
|
cn.requestMajor = 0;
|
||||||
cn.requestMinor = 0;
|
cn.requestMinor = 0;
|
||||||
if (xkbi->desc->ctrls->enabled_ctrls & XkbSlowKeysMask) {
|
if (xkbi->desc->ctrls->enabled_ctrls & XkbSlowKeysMask) {
|
||||||
|
@ -304,6 +304,7 @@ AccessXKRGExpire(OsTimerPtr timer, CARD32 now, pointer arg)
|
||||||
LogMessage(X_INFO, "XKB SlowKeys are now enabled. Hold shift to disable.\n");
|
LogMessage(X_INFO, "XKB SlowKeys are now enabled. Hold shift to disable.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xkbi->slowKeyEnableKey = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -462,6 +463,7 @@ AccessXFilterPressEvent(DeviceEvent *event, DeviceIntPtr keybd)
|
||||||
if (ctrls->enabled_ctrls & XkbAccessXKeysMask) {
|
if (ctrls->enabled_ctrls & XkbAccessXKeysMask) {
|
||||||
/* check for magic sequences */
|
/* check for magic sequences */
|
||||||
if ((sym[0] == XK_Shift_R) || (sym[0] == XK_Shift_L)) {
|
if ((sym[0] == XK_Shift_R) || (sym[0] == XK_Shift_L)) {
|
||||||
|
xkbi->slowKeyEnableKey = key;
|
||||||
if (XkbAX_NeedFeedback(ctrls, XkbAX_SlowWarnFBMask)) {
|
if (XkbAX_NeedFeedback(ctrls, XkbAX_SlowWarnFBMask)) {
|
||||||
xkbi->krgTimerActive = _KRG_WARN_TIMER;
|
xkbi->krgTimerActive = _KRG_WARN_TIMER;
|
||||||
xkbi->krgTimer = TimerSet(xkbi->krgTimer, 0, 4000,
|
xkbi->krgTimer = TimerSet(xkbi->krgTimer, 0, 4000,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user