Merge remote branch 'whot/for-keith'

This commit is contained in:
Keith Packard 2010-12-06 19:45:11 -08:00
commit 01e9fa7da3
8 changed files with 49 additions and 33 deletions

View File

@ -870,8 +870,10 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
continue; continue;
if (!sd->button) if (!sd->button)
continue; continue;
if (button_is_down(sd, key, BUTTON_PROCESSED)) for (i = 1; i <= sd->button->numButtons; i++)
return DONT_PROCESS; if (sd->button->map[i] == key &&
button_is_down(sd, i, BUTTON_PROCESSED))
return DONT_PROCESS;
} }
} }
set_button_up(device, key, BUTTON_PROCESSED); set_button_up(device, key, BUTTON_PROCESSED);

View File

@ -326,14 +326,6 @@ countValuators(DeviceEvent *ev, int *first)
{ {
if (BitIsOn(ev->valuators.mask, i)) if (BitIsOn(ev->valuators.mask, i))
{ {
/* Assume mode of first_valuator matches XI1 device mode. Stop when the
* event mode changes since XI1 can't handle mixed mode devices.
*/
if (first_valuator > -1 &&
BitIsOn(ev->valuators.mode, i) !=
BitIsOn(ev->valuators.mode, first_valuator))
break;
if (first_valuator == -1) if (first_valuator == -1)
first_valuator = i; first_valuator = i;
last_valuator = i; last_valuator = i;

View File

@ -1458,14 +1458,15 @@ configInputDevices(XF86ConfLayoutPtr layout, serverLayoutPtr servlayoutp)
irp = layout->lay_input_lst; irp = layout->lay_input_lst;
count = 0; count = 0;
while (irp) { while (irp) {
indp[count] = xnfalloc(sizeof(InputInfoRec)); indp[count] = xf86AllocateInput();
if (!configInput(indp[count], irp->iref_inputdev, X_CONFIG)) { if (!configInput(indp[count], irp->iref_inputdev, X_CONFIG)) {
while(count--) while(count--)
free(indp[count]); free(indp[count]);
free(indp); free(indp);
return FALSE; return FALSE;
} }
indp[count]->options = irp->iref_option_lst; indp[count]->options = xf86OptionListMerge(indp[count]->options,
irp->iref_option_lst);
count++; count++;
irp = (XF86ConfInputrefPtr)irp->list.next; irp = (XF86ConfInputrefPtr)irp->list.next;
} }

View File

@ -280,7 +280,8 @@ void
xf86ProcessCommonOptions(InputInfoPtr pInfo, xf86ProcessCommonOptions(InputInfoPtr pInfo,
pointer list) pointer list)
{ {
if (!xf86SetBoolOption(list, "AlwaysCore", 1) || if (xf86SetBoolOption(list, "Floating", 0) ||
!xf86SetBoolOption(list, "AlwaysCore", 1) ||
!xf86SetBoolOption(list, "SendCoreEvents", 1) || !xf86SetBoolOption(list, "SendCoreEvents", 1) ||
!xf86SetBoolOption(list, "CorePointer", 1) || !xf86SetBoolOption(list, "CorePointer", 1) ||
!xf86SetBoolOption(list, "CoreKeyboard", 1)) { !xf86SetBoolOption(list, "CoreKeyboard", 1)) {
@ -652,7 +653,7 @@ IgnoreInputClass(const InputInfoPtr idev, const InputAttributes *attrs)
return ignore; return ignore;
} }
static InputInfoPtr InputInfoPtr
xf86AllocateInput(void) xf86AllocateInput(void)
{ {
InputInfoPtr pInfo; InputInfoPtr pInfo;

View File

@ -155,6 +155,7 @@ extern _X_EXPORT void xf86DisableDevice(DeviceIntPtr dev, Bool panic);
extern _X_EXPORT void xf86EnableDevice(DeviceIntPtr dev); extern _X_EXPORT void xf86EnableDevice(DeviceIntPtr dev);
/* not exported */ /* not exported */
int xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr *pdev, BOOL is_auto); int xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr *pdev, BOOL is_auto);
InputInfoPtr xf86AllocateInput(void);
/* xf86Helper.c */ /* xf86Helper.c */
extern _X_EXPORT void xf86AddInputDriver(InputDriverPtr driver, pointer module, int flags); extern _X_EXPORT void xf86AddInputDriver(InputDriverPtr driver, pointer module, int flags);

View File

@ -243,6 +243,7 @@ DemandLoad O I ??
Device S I Device file name Device S I Device file name
DeviceName S I Input device name DeviceName S I Input device name
FlowControl S I Serial flow control ("xon", "none") FlowControl S I Serial flow control ("xon", "none")
Floating B I Device initialised as floating
HistorySize I I ?? HistorySize I I ??
MaxX I I Maximum X coordinate MaxX I I Maximum X coordinate
MaxY I I Maximum Y coordinate MaxY I I Maximum Y coordinate

View File

@ -904,30 +904,42 @@ the server. This affects implied layouts as well as explicit layouts
specified in the configuration and/or on the command line. specified in the configuration and/or on the command line.
.TP 7 .TP 7
.BI "Option \*qCorePointer\*q" .BI "Option \*qCorePointer\*q"
Deprecated, use Deprecated, see
.B SendCoreEvents .B Floating
instead.
.TP 7 .TP 7
.BI "Option \*qCoreKeyboard\*q" .BI "Option \*qCoreKeyboard\*q"
Deprecated, use Deprecated, see
.B SendCoreEvents .B Floating
instead.
.TP 7 .TP 7
.BI "Option \*qAlwaysCore\*q \*q" boolean \*q .BI "Option \*qAlwaysCore\*q \*q" boolean \*q
.B Deprecated, see
Deprecated, use .B Floating
.B SendCoreEvents
instead.
.TP 7 .TP 7
.BI "Option \*qSendCoreEvents\*q \*q" boolean \*q .BI "Option \*qSendCoreEvents\*q \*q" boolean \*q
Both of these options are equivalent, and when enabled cause the Deprecated, see
input device to report core events through the master device. They are .B Floating
enabled by default. Any device configured to send core events will be
attached to the virtual core pointer or keyboard and control the cursor by .TP 7
default. Devices with .BI "Option \*qFloating\*q \*q" boolean \*q
.B SendCoreEvents When enabled, the input device is set up floating and does not
disabled will be \*qfloating\*q and only accessible by clients employing the report events through any master device or control a cursor. The device is
X Input extension. This option controls the startup behavior only, a device only available to clients using the X Input Extension API. This option is
disabled by default.
The options
.B CorePointer,
.B CoreKeyboard,
.B AlwaysCore,
and
.B SendCoreEvents,
are the inverse of option
.B Floating
(i.e.
.B SendCoreEvents \*qon\*q
is equivalent to
.B Floating \*qoff\*q
).
This option controls the startup behavior only, a device
may be reattached or set floating at runtime. may be reattached or set floating at runtime.
.PP .PP
For pointing devices, the following options control how the pointer For pointing devices, the following options control how the pointer

View File

@ -320,6 +320,7 @@ CopyGetMasterEvent(DeviceIntPtr sdev,
{ {
DeviceIntPtr mdev; DeviceIntPtr mdev;
int len = original->any.length; int len = original->any.length;
int type = original->any.type;
CHECKEVENT(original); CHECKEVENT(original);
@ -327,7 +328,12 @@ CopyGetMasterEvent(DeviceIntPtr sdev,
if (!sdev || !sdev->u.master) if (!sdev || !sdev->u.master)
return NULL; return NULL;
switch(original->any.type) #if XFreeXDGA
if (type == ET_DGAEvent)
type = original->dga_event.subtype;
#endif
switch(type)
{ {
case ET_KeyPress: case ET_KeyPress:
case ET_KeyRelease: case ET_KeyRelease: