summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2010-12-06 19:45:11 -0800
committerKeith Packard <keithp@keithp.com>2010-12-06 19:45:11 -0800
commit01e9fa7da389fc7ab834b4234b8484514144b7f4 (patch)
treef2c60c60c1ab97092b4a49250334477edde27acc
parent79870dbf72d463cf9efea1b3e61d1d5759df27b5 (diff)
parent68a1b0de95f71f74835c6c0f002699fcdccbb268 (diff)
Merge remote branch 'whot/for-keith'
-rw-r--r--Xi/exevents.c6
-rw-r--r--dix/eventconvert.c8
-rw-r--r--hw/xfree86/common/xf86Config.c5
-rw-r--r--hw/xfree86/common/xf86Xinput.c5
-rw-r--r--hw/xfree86/common/xf86Xinput.h1
-rw-r--r--hw/xfree86/doc/devel/Registry1
-rw-r--r--hw/xfree86/doc/man/xorg.conf.man.pre48
-rw-r--r--mi/mieq.c8
8 files changed, 49 insertions, 33 deletions
diff --git a/Xi/exevents.c b/Xi/exevents.c
index d57265ede..8615fd456 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -870,8 +870,10 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
continue;
if (!sd->button)
continue;
- if (button_is_down(sd, key, BUTTON_PROCESSED))
- return DONT_PROCESS;
+ for (i = 1; i <= sd->button->numButtons; i++)
+ if (sd->button->map[i] == key &&
+ button_is_down(sd, i, BUTTON_PROCESSED))
+ return DONT_PROCESS;
}
}
set_button_up(device, key, BUTTON_PROCESSED);
diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index dd17898b7..7b894f016 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -326,14 +326,6 @@ countValuators(DeviceEvent *ev, int *first)
{
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)
first_valuator = i;
last_valuator = i;
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 5800700db..ae9592e24 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -1458,14 +1458,15 @@ configInputDevices(XF86ConfLayoutPtr layout, serverLayoutPtr servlayoutp)
irp = layout->lay_input_lst;
count = 0;
while (irp) {
- indp[count] = xnfalloc(sizeof(InputInfoRec));
+ indp[count] = xf86AllocateInput();
if (!configInput(indp[count], irp->iref_inputdev, X_CONFIG)) {
while(count--)
free(indp[count]);
free(indp);
return FALSE;
}
- indp[count]->options = irp->iref_option_lst;
+ indp[count]->options = xf86OptionListMerge(indp[count]->options,
+ irp->iref_option_lst);
count++;
irp = (XF86ConfInputrefPtr)irp->list.next;
}
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index 81bb7070d..c2cf4382c 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -280,7 +280,8 @@ void
xf86ProcessCommonOptions(InputInfoPtr pInfo,
pointer list)
{
- if (!xf86SetBoolOption(list, "AlwaysCore", 1) ||
+ if (xf86SetBoolOption(list, "Floating", 0) ||
+ !xf86SetBoolOption(list, "AlwaysCore", 1) ||
!xf86SetBoolOption(list, "SendCoreEvents", 1) ||
!xf86SetBoolOption(list, "CorePointer", 1) ||
!xf86SetBoolOption(list, "CoreKeyboard", 1)) {
@@ -652,7 +653,7 @@ IgnoreInputClass(const InputInfoPtr idev, const InputAttributes *attrs)
return ignore;
}
-static InputInfoPtr
+InputInfoPtr
xf86AllocateInput(void)
{
InputInfoPtr pInfo;
diff --git a/hw/xfree86/common/xf86Xinput.h b/hw/xfree86/common/xf86Xinput.h
index 3a1711697..1b0b16f04 100644
--- a/hw/xfree86/common/xf86Xinput.h
+++ b/hw/xfree86/common/xf86Xinput.h
@@ -155,6 +155,7 @@ extern _X_EXPORT void xf86DisableDevice(DeviceIntPtr dev, Bool panic);
extern _X_EXPORT void xf86EnableDevice(DeviceIntPtr dev);
/* not exported */
int xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr *pdev, BOOL is_auto);
+InputInfoPtr xf86AllocateInput(void);
/* xf86Helper.c */
extern _X_EXPORT void xf86AddInputDriver(InputDriverPtr driver, pointer module, int flags);
diff --git a/hw/xfree86/doc/devel/Registry b/hw/xfree86/doc/devel/Registry
index e09228b04..48e24a2f4 100644
--- a/hw/xfree86/doc/devel/Registry
+++ b/hw/xfree86/doc/devel/Registry
@@ -243,6 +243,7 @@ DemandLoad O I ??
Device S I Device file name
DeviceName S I Input device name
FlowControl S I Serial flow control ("xon", "none")
+Floating B I Device initialised as floating
HistorySize I I ??
MaxX I I Maximum X coordinate
MaxY I I Maximum Y coordinate
diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
index ba876c094..e3fd0eadf 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -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.
.TP 7
.BI "Option \*qCorePointer\*q"
-Deprecated, use
-.B SendCoreEvents
-instead.
+Deprecated, see
+.B Floating
.TP 7
.BI "Option \*qCoreKeyboard\*q"
-Deprecated, use
-.B SendCoreEvents
-instead.
+Deprecated, see
+.B Floating
.TP 7
.BI "Option \*qAlwaysCore\*q \*q" boolean \*q
-.B
-Deprecated, use
-.B SendCoreEvents
-instead.
+Deprecated, see
+.B Floating
.TP 7
.BI "Option \*qSendCoreEvents\*q \*q" boolean \*q
-Both of these options are equivalent, and when enabled cause the
-input device to report core events through the master device. They are
-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
-default. Devices with
-.B SendCoreEvents
-disabled will be \*qfloating\*q and only accessible by clients employing the
-X Input extension. This option controls the startup behavior only, a device
+Deprecated, see
+.B Floating
+
+.TP 7
+.BI "Option \*qFloating\*q \*q" boolean \*q
+When enabled, the input device is set up floating and does not
+report events through any master device or control a cursor. The device is
+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.
.PP
For pointing devices, the following options control how the pointer
diff --git a/mi/mieq.c b/mi/mieq.c
index d1441e285..01da52a6c 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -320,6 +320,7 @@ CopyGetMasterEvent(DeviceIntPtr sdev,
{
DeviceIntPtr mdev;
int len = original->any.length;
+ int type = original->any.type;
CHECKEVENT(original);
@@ -327,7 +328,12 @@ CopyGetMasterEvent(DeviceIntPtr sdev,
if (!sdev || !sdev->u.master)
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_KeyRelease: