mirror of
https://github.com/X11Libre/xserver.git
synced 2026-09-28 21:33:09 +00:00
Merge remote-tracking branch 'whot/for-keith'
This commit is contained in:
commit
15bbdc103b
6 changed files with 87 additions and 23 deletions
|
|
@ -1228,6 +1228,7 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type,
|
|||
*
|
||||
* @param events The pointer to the event list to fill the events
|
||||
* @param dev The device to generate the events for
|
||||
* @param type The real type of the event
|
||||
* @param axis The axis number to generate events for
|
||||
* @param mask State before this event in absolute coords
|
||||
* @param[in,out] last Last scroll state posted in absolute coords (modified
|
||||
|
|
@ -1239,6 +1240,7 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type,
|
|||
static int
|
||||
emulate_scroll_button_events(InternalEvent *events,
|
||||
DeviceIntPtr dev,
|
||||
int type,
|
||||
int axis,
|
||||
const ValuatorMask *mask,
|
||||
ValuatorMask *last,
|
||||
|
|
@ -1251,6 +1253,7 @@ emulate_scroll_button_events(InternalEvent *events,
|
|||
int num_events = 0;
|
||||
double total;
|
||||
int b;
|
||||
int flags = 0;
|
||||
|
||||
if (dev->valuator->axes[axis].scroll.type == SCROLL_TYPE_NONE)
|
||||
return 0;
|
||||
|
|
@ -1261,6 +1264,9 @@ emulate_scroll_button_events(InternalEvent *events,
|
|||
ax = &dev->valuator->axes[axis];
|
||||
incr = ax->scroll.increment;
|
||||
|
||||
if (type != ButtonPress && type != ButtonRelease)
|
||||
flags |= POINTER_EMULATED;
|
||||
|
||||
if (!valuator_mask_isset(last, axis))
|
||||
valuator_mask_set_double(last, axis, 0);
|
||||
|
||||
|
|
@ -1288,14 +1294,20 @@ emulate_scroll_button_events(InternalEvent *events,
|
|||
*/
|
||||
if (num_events + 4 < max_events)
|
||||
{
|
||||
nev_tmp = fill_pointer_events(events, dev, ButtonPress, b, ms,
|
||||
POINTER_EMULATED, NULL);
|
||||
events += nev_tmp;
|
||||
num_events += nev_tmp;
|
||||
nev_tmp = fill_pointer_events(events, dev, ButtonRelease, b, ms,
|
||||
POINTER_EMULATED, NULL);
|
||||
events += nev_tmp;
|
||||
num_events += nev_tmp;
|
||||
if (type != ButtonRelease)
|
||||
{
|
||||
nev_tmp = fill_pointer_events(events, dev, ButtonPress, b, ms,
|
||||
flags, NULL);
|
||||
events += nev_tmp;
|
||||
num_events += nev_tmp;
|
||||
}
|
||||
if (type != ButtonPress)
|
||||
{
|
||||
nev_tmp = fill_pointer_events(events, dev, ButtonRelease, b, ms,
|
||||
flags, NULL);
|
||||
events += nev_tmp;
|
||||
num_events += nev_tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1340,6 +1352,7 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type,
|
|||
ValuatorMask mask;
|
||||
ValuatorMask scroll;
|
||||
int i;
|
||||
int realtype = type;
|
||||
|
||||
/* refuse events from disabled devices */
|
||||
if (!pDev->enabled)
|
||||
|
|
@ -1392,6 +1405,7 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type,
|
|||
valuator_mask_set_double(&mask, axis, val);
|
||||
type = MotionNotify;
|
||||
buttons = 0;
|
||||
flags |= POINTER_EMULATED;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1411,7 +1425,7 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type,
|
|||
|
||||
valuator_mask_set_double(&scroll, i, pDev->last.valuators[i]);
|
||||
|
||||
nev_tmp = emulate_scroll_button_events(events, pDev, i, &scroll,
|
||||
nev_tmp = emulate_scroll_button_events(events, pDev, realtype, i, &scroll,
|
||||
pDev->last.scroll, ms,
|
||||
GetMaximumEventsNum() - num_events);
|
||||
events += nev_tmp;
|
||||
|
|
|
|||
|
|
@ -538,6 +538,42 @@ valuator_mask_get(const ValuatorMask *mask, int valuator)
|
|||
return trunc(valuator_mask_get_double(mask, valuator));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set value to the requested valuator. If the mask bit is set for this
|
||||
* valuator, value contains the requested valuator value and TRUE is
|
||||
* returned.
|
||||
* If the mask bit is not set for this valuator, value is unchanged and
|
||||
* FALSE is returned.
|
||||
*/
|
||||
Bool
|
||||
valuator_mask_fetch_double(const ValuatorMask *mask, int valuator, double *value)
|
||||
{
|
||||
if (valuator_mask_isset(mask, valuator))
|
||||
{
|
||||
*value = valuator_mask_get_double(mask, valuator);
|
||||
return TRUE;
|
||||
} else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set value to the requested valuator. If the mask bit is set for this
|
||||
* valuator, value contains the requested valuator value and TRUE is
|
||||
* returned.
|
||||
* If the mask bit is not set for this valuator, value is unchanged and
|
||||
* FALSE is returned.
|
||||
*/
|
||||
Bool
|
||||
valuator_mask_fetch(const ValuatorMask *mask, int valuator, int *value)
|
||||
{
|
||||
if (valuator_mask_isset(mask, valuator))
|
||||
{
|
||||
*value = valuator_mask_get(mask, valuator);
|
||||
return TRUE;
|
||||
} else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the valuator from the mask.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in a new issue