Commit Graph

108 Commits

Author SHA1 Message Date
Peter Hutterer
6dcde0e9c1 Xi: set master device's id in ListDevices Reply. 2007-10-19 11:28:50 +09:30
Peter Hutterer
cfcc6e14b9 Xi: return all master devices as type IsXPointer/Keyboard when listing devs.
Slave devices are reported as IsXExtensionPointer/Keyboard.
2007-10-19 11:28:44 +09:30
Peter Hutterer
ae9fc10ade Xi: don't send core events for slave devices. 2007-10-17 10:41:04 +09:30
Peter Hutterer
e9f149fb56 Fix up detritus from removing GetPairedPointer/Keyboard. 2007-10-16 14:24:20 +09:30
Peter Hutterer
113011221a Xi, xfree86: Remove leftovers of the XI wrapper code. 2007-10-01 21:42:01 +09:30
Peter Hutterer
a511c445de Remove generation of core events, long live XI!
Let the drivers only generate XI events and put those into the event queue.
When processing events, generate core events as needed. This fixes a number of
problems with XKB and the DIX in general.

The previous approach was to put core events and XI events as separate events
into the event queue. When being processed, the server had no knowledge of
them coming from the same device state change. Anything that would then change
the state of the device accordingly was in danger of changing it twice,
leading to some funny (i.e. not funny at all) results.

Emulating core events while processing XI events fixes this, there is only one
path that actually changes the device state now. Although we have to be
careful when replaying events from synced devices, otherwise we may lose
events.

Note: XI has precedence over core for passive grabs, but core events are
delivered to the client first.

This removes the wrapping added in 340911d724
2007-09-28 18:46:41 +09:30
Peter Hutterer
3342b5ad47 Xi: fix the wrapper code for processInputProc wrapping.
Followup to [1].
If a core grab causes the device to freeze, it overwrites the processInputProc
of the device. [1] would then overwrite this while unwrapping, the device
does not thaw anymore.
Changing this to only re-wrap if the processInputProc hasn't been changed
during the event handling.

[1] 340911d724
2007-09-26 18:03:21 +09:30
Peter Hutterer
55fd50273e Xi: unify ErrorFs. Prefix all with [Xi]. 2007-09-26 15:15:34 +09:30
Peter Hutterer
340911d724 Wrap core event handling through ProcessOtherEvents.
When processing events from the EQ, _always_ call the processInputProc of the
matching device. For XI devices, this proc is wrapped in three layers.
Core event handling is wrapped by XI event handling, which is wrapped by XKB.
A core event now passes through XKB -> XI -> DIX.

This gets rid of a sync'd grab problem: with the previous code, core events
did disappear during a sync'd device grab on account of mieqProcessInputEvents
calling the processInputProc of the VCP/VCK instead of the actual device. This
lead to the event being processed as normal instead of being enqueued for
later replaying.
2007-09-26 15:12:49 +09:30
Peter Hutterer
03680a384a dix: don't change the device struct while processing core events.
The device state needs to be changed while processing the XI event. Core
events are always processed after XI, so by then the device is already set up
properly. However, we now rely on DeviceButtonMotionMask to be equal to
ButtonMotionMask. It already is, but stick a big fat warning in so nobody
attempts to change it.

This commit disables XKB for the VCK, thus essentially for all devices.
Temporarily anyway.
2007-09-06 15:43:47 +09:30
Peter Hutterer
f367285fd5 Merge branch 'master' into mpx
Conflicts:

	Xi/exevents.c
	dix/devices.c
	dix/getevents.c
	include/dix.h
	mi/mieq.c
2007-08-12 15:31:10 +09:30
Daniel Stone
cd8e99e56e Input: Don't enable devices when we open them
Thanks to Xi's braindead design, it's otherwise impossible to query input
devices without enabling them.  Hurrah.
2007-08-01 03:33:06 +03:00
Peter Hutterer
9809715afa Change CheckMotion to ignore non-pointer events but acknowledge XI events.
Call CheckMotion from ProcessOtherEvents() to make sure absolute XI events
update the sprite before an event is sent.
2007-07-10 10:09:50 +09:30
Paulo Ricardo Zanoni
c1a6841a64 ProcX{Change|Query}WindowAccess: change device list from char* to XID*. 2007-07-10 10:08:44 +09:30
Peter Hutterer
5ccc09b182 Use the same struct for generic event masks throughout the code.
Renaming those structs too.

Previously grabs were using a different struct than windows, which was
reasonably stupid.
2007-07-06 15:43:08 +09:30
Peter Hutterer
c1a16bdcfe Add 'evfill' field to GEExtensions.
We need this to allow extensions to fill in extra data for an event before it
is sent to the client. This is probably to be used like
FillUpEventsFromWindow().
2007-07-01 09:14:18 +09:30
Peter Hutterer
08779c62ba Reset grab->next to NULL when we're creating a grab.
This is definitely necessary in CheckDeviceGrabAndHintWindow (thanks to Paulo
Zanoni for spotting it). We're resetting it everywhere else too, just to be
save.
2007-06-27 11:58:20 +09:30
Peter Hutterer
8396bf7c8b Init genericMasks to 0, make sure list is NULL terminated. 2007-06-27 11:58:04 +09:30
Peter Hutterer
87564543d9 Only decrement buttonsDown when the button count is greater than 0.
Device drivers flush their buttons on device init and cause a button down
event to be generated. If we unconditionally decrease the buttons, we won't be
able to ever get a passive device grab.

Format documentation for CheckDeviceGrabs to make it readable.
(cherry picked from commit 3e894974cd)

Conflicts:

	Xi/exevents.c
2007-06-25 09:35:30 +09:30
Peter Hutterer
5dee64fc99 Add a few comments to ProcXGrabDevice. 2007-06-19 11:31:22 +09:30
Peter Hutterer
3e894974cd Only decrement buttonsDown when the button count is greater than 0.
Device drivers flush their buttons on device init and cause a button down
event to be generated. If we unconditionally decrease the buttons, we won't be
able to ever get a passive device grab.

Format documentation for CheckDeviceGrabs to make it readable.
2007-06-15 17:16:16 +09:30
Peter Hutterer
26b21157cf Add a deviceMask to the GrabRec and don't interfere with passiveGrabs.
This quickfixes event delivery problems with XI events when a grab was on.
deviceMask is only used when the grab was from a ButtonPress to preserve
potential XI event masks.

This is not an ideal solution but it works until I have time to work on
PassiveGrabs.
2007-05-31 17:05:14 +09:30
Paulo Ricardo Zanoni
b5db863945 Allow value None for windows when setting ClientPointer.
We need this for clients that need to set the ClientPointer but don't have a
window on display yet. If used, it will set the device as the ClientPointer
for the requesting client.
2007-05-30 16:15:15 +09:30
Peter Hutterer
167e1773de Remove unused include "gestr.h" 2007-05-21 10:45:10 +09:30
Peter Hutterer
333bab4b23 Clean up, correct some comments.
Send event type down with the RawEvents.
2007-05-17 17:59:02 +09:30
Peter Hutterer
81fc6a128b Add ungrab support to ExtendedGrabDeviceRequest handling.
Polish the code a bit.
2007-05-14 18:12:56 +09:30
Peter Hutterer
5c680e9493 Remove double-grab option. We only want one grab per device. 2007-05-14 12:34:53 +09:30
Peter Hutterer
4dc973f08c Add ExtendedGrabDevice handling.
Add XGE handling in DeliverGrabbedEvent.

We can now grab something selecting XGE events, but the current code is a
bit messy and doesn't work too well yet.
2007-05-14 10:42:03 +09:30
Peter Hutterer
c03d9a7217 Cleaning up a bit.
Register correct event in EventSwapVector.
Fix up event swap for GE events, register XI's swap function at GE.
2007-05-02 18:16:40 +09:30
Peter Hutterer
e6fd4a24eb Add handling for FakeDeviceEvent request.
Fix a stupid bug from last commit, mask names were wrong.
2007-05-02 17:49:20 +09:30
Peter Hutterer
af25720598 Add missing files for ProcXiSelectEvent.
Should have been a part of 5e43910929. Oh well.
2007-05-02 13:51:16 +09:30
Peter Hutterer
58c0fd2927 Adjust EQ to support long events.
Add RawDeviceEvent (pointers only for now).

This commit changes the event queue to use EventLists instead of xEvent
arrays. Only EQ is affected, event delivery still uses xEvent* (look for
comment in mieqProcessInputEvent).

RawDeviceEvents deliver driver information to the client, without clipping or
acceleration.
2007-05-02 13:50:09 +09:30
Peter Hutterer
8b42ba64e1 Send PointerKeyboardPairingChangedNotifyEvent using XGE.
Needs updated inputproto and libXi.
2007-05-01 12:12:58 +09:30
Paulo Ricardo Zanoni
82f97e1c0c Enable event delivery for multiple heads.
Requires moving the spriteTrace into the DeviceIntRec and adjusting a few
functions to take in device argument, most notably XYToWindow().

Cursor rendering on the second screen is busted.
2007-04-26 15:58:50 +09:30
Peter Hutterer
d4dad6f84f Merge branch 'master' into mpx
Conflicts:

	configure.ac
	dix/events.c
	hw/xfree86/common/xf86Xinput.c
2007-04-12 11:11:03 +09:30
Remigiusz Marcinkiewicz
aecbc71214 Input: Allow a pointer to a device to be returned in NIDR
Allow a pointer to the first device added to be returned, so we know which
device(s) were added by the NIDR call.
2007-04-11 00:38:16 +03:00
Magnus Vigerlöf
82962bbae2 Input: Add DeleteInputDeviceRequest
Add DIDR, which asks the DDX to remove a device, analogous to
NewInputDeviceRequest.  Only implemented for XFree86 at the moment.
2007-04-10 23:58:20 +03:00
Peter Hutterer
9b0b340668 Make GrabDevice differ between core grabs and device grabs. 2007-04-03 15:06:26 +09:30
Peter Hutterer
e8777a91f3 Merge branch 'master' into mpx
Conflicts:

	Xi/closedev.c
	Xi/exevents.c
	Xi/extinit.c
	Xi/listdev.c
	dix/window.c
	hw/xfree86/common/xf86Xinput.c
	include/extinit.h
	mi/mipointer.c
2007-04-02 15:36:26 +09:30
Peter Hutterer
a12054757d Xi: fix ProcXListInputDevices to include the virtual core devices. 2007-04-02 11:20:44 +09:30
Peter Hutterer
63d8f01819 dix: Fix wrong cursor refcount.
Calloc cursor struct to ensure devPrivates are zeroed out and don't
        increase the refcnt for devices automatically when allocating a new
        cursor. Use new DeviceIsPointerType() to detect if device is a pointer
        _before_ device has been activated and can thus be identified and set
        up grab functions accordingly. This way we can increase the refcnt
        when we get a pointer grab.
2007-03-30 14:59:43 +09:30
Peter Hutterer
307d2b57bb Xi: remove 'register' keywords. 2007-03-29 15:23:41 +09:30
Adam Jackson
e88fa75c9b Static cleanup on Xi/ 2007-03-25 21:18:39 -04:00
Adam Jackson
9a0f25de7c Static cleanups, dead code deletion. 2007-03-25 12:27:01 -04:00
Peter Hutterer
5f9c10e8da Clean up DeviceIntPtr, prepare for Server 1.4 ABI. Move sprite-related
information into a new SpriteInfoRec, remove isMPDev flag.
2007-03-25 15:00:03 +09:30
Peter Hutterer
f8cd19bd16 Xi: add GetClientPointer and GetPointerPairing requests.
dix:    use PickKeyboard for ProcSetInputFocus and ProcGetInputFocus instead
        of the core keyboard.
2007-03-22 17:47:01 +10:30
Peter Hutterer
65b0eb60b0 Xi: move IsPointerDevice into dix.
dix:    IsPointerDevice and IsKeyboardDevice, use same ways to identify type
        of device as XI does for the XListInputDevices reply.
        Autopair each non-pointer device with VCP when activating, pair with
        real device after activation.
        Don't return non-keyboard devices when calling GetPairedKeyboard or
        PickKeyboard, otherwise we segfault for 'evdev brain'.
2007-03-16 15:52:24 +10:30
Peter Hutterer
ce9409aceb dix: Get the state from the paired device and the real device to fill the
state field in the event, rather than using the virtual devices.
        ProcessPointerEvent: name argument "device" instead of "other".
        Add GetPairedKeyboard().
2007-03-13 19:16:56 +10:30
Peter Hutterer
07806f4081 Xi: Add SetClientPointer request handling. 2007-03-09 15:45:25 +10:30
Peter Hutterer
ceca5670fe dix: Each device needs to differ between a core grab and an XI grab,
otherwise a Xi grab may overwrite or release a core grab.
        Replace grab and associates with coreGrab and deviceGrab structures,
        adjust rest of dix/Xi/etc to compile.

xfree86: Don't check for core devices, we'll have the virtual ones anyway.
         If we check, the first mouse device is duplicated and sends
         double events.
2007-03-08 17:17:23 +10:30