Commit Graph

185 Commits

Author SHA1 Message Date
Peter Hutterer
05106ac983 dix: change Enter/Leave semaphore handling to accommodate for NotifyGrab.
This is a half-assed attempt at getting rid of some enter-leave problems. When
a grab is activated, the events didn't get sent before, leading to interesting
results. This commit papers over it but doesn't actually fix it properly. The
whole enter/leave (focusin/out) structure needs to be ripped out and changed
for multiple devices.
2007-10-03 11:33:10 +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
be466d8df8 dix: GetPairedKeyboard() always returns a valid keyboard (VCK if necessary).
We need it unconditionally in a few places, and the rest checked for NULL and
then set it to VCK anyway. So, fixing up all callers to appreciate the defined
return value.
2007-09-28 09:28:39 +09:30
Peter Hutterer
53434edc3d dix: take paired keyboard instead of VCK (CoreProcessPointerEvents) 2007-09-28 09:28:28 +09:30
Peter Hutterer
8b508f5d6b dix: unify ErrorFs. prepend all with [dix]. 2007-09-26 15:19:53 +09:30
Peter Hutterer
b2a4883bd8 dix: add comments to PlayReleasedEvents()
Also stick another warning in, more changes needed for XGE if panoramix is
active.
2007-09-26 09:20:11 +09:30
Peter Hutterer
275dc77c29 dix: add comments to ComputeFreezes() and syncEvents struct. 2007-09-26 09:14:50 +09:30
Peter Hutterer
1c25c46f3d dix: fix compiler warnings about unused variables. 2007-09-24 12:37:33 +09:30
Peter Hutterer
b484451eab dix: don't try to access "time" field for GenericEvents in PlayReleasedEvent.
GenericEvents can't be parsed to keyButtonPointer, and there's no guarantee
that it has a time field anyway. PlayReleasedEvent needs to store the millis
when we know it (core events, XI event) and just re-use them for GenericEvents.

Yes, this is a hack. But it looks like the time has zero significance anyway.
2007-09-24 12:20:45 +09:30
Peter Hutterer
1c38eac442 dix: fix comment for DeliverDeviceEvents.
DDE is not always called, grabbed or focused devices go through
Deliver{Grabbed|Focus}Event first.

Thanks to Eamon Walsh for spotting it.
2007-09-24 12:15:53 +09:30
Peter Hutterer
06188ce90d dix: Make EnqueueEvent aware of GenericEvents.
GenericEvents can be > sizeof(xEvents), so we need to make sure we're
allocating and copying enough memory for the event.
2007-09-24 12:15:12 +09:30
Peter Hutterer
8840829ab9 dix: don't compress motion events from different devices (EventEnqueue) 2007-09-24 12:02:26 +09:30
Peter Hutterer
5ee409794e dix: add XI event support to FixKeyState.
FixKeyState needs to be able to handle XI events, otherwise we get "impossible
keyboard events" on server zaps and other special key combos.
2007-09-06 18:52:02 +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
88a9828ef9 dix: Only check device events for possible ACLs.
We shouldn't be able to restrict events like Expose, etc. with device based
ACLs. So we just ignore all non-input events when checking for permissions.
2007-08-23 18:02:10 +09:30
Peter Hutterer
2c1431a76e dix: ProcChangeActivePointerGrab: make sure variable is initialised.
Thanks to Ben Close for spotting it.
2007-08-20 10:06:13 +09:30
Peter Hutterer
14d0397cde dix: ProcUngrabKeyboard: make sure grab is initialized.
This should fix the random segfaults with ProcUngrabKeyboard.

Thanks to David Nolden for spotting it.
2007-08-15 22:12:29 +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
Peter Hutterer
b1272eefd9 Fix typo from last commit. Oh well. 2007-08-08 15:00:02 +09:30
Peter Hutterer
c02128532e dix: Allow flexible devices for passive core grabs.
A passive core grab doesn't specify the device, and is thus created with the
ClientPointer as device.  When this grab is activated later, don't actually
activate the grab on the grab device, but rather change the device to the one
that caused the grab to activate. Same procedure for keyboards.

Makes core apps _A LOT_ more useable and reduces the need to set the
ClientPointer.

Only applies to core grabs!
2007-08-08 13:10:00 +09:30
Peter Hutterer
b8abeaf74e dix: get the paired keyboard for a passive grab (ProcGrabButton).
Taking the VCK is only correct if no physical device is connected, and even
then it's not really a good idea.
2007-08-07 12:32:46 +09:30
Peter Hutterer
ffdf8f3e45 DeliverEventsToWindow: ensure that genericMask has a defined value. 2007-07-10 19:11:30 +09:30
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
Peter Hutterer
62efc3951a DeliverGrabbedEvent: stop segfault when gemask == NULL. 2007-07-10 10:09:44 +09:30
Peter Hutterer
3312e4dd5e Call CheckMotion for all core events.
We need to do this to update the sprites x/y coordinate before we assemble a
button event. Absolute devices may send a buttonEvent with valuators attached.
If we don't update the sprite before assembling the event, the valuators are
lost and the button press is delivered to the previous position of the device.
Doesn't have any effect on relative devices.
2007-07-10 10:09:37 +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
Tiago Vignatti
d73835efda More janitor work. Remove 'defined but not used' warnings from kdrive and some minor cosmetic. 2007-06-27 03:34:13 -03:00
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
1f97a76476 Merge branch 'master' into mpx
Conflicts:

	dix/devices.c
	hw/xfree86/common/xf86Xinput.c
	hw/xfree86/loader/xf86sym.c
	mi/mieq.c
2007-06-19 17:20:52 +09:30
Peter Hutterer
9e257029c7 Add implicitGrab field to GrabInfoRec.
Is set when passive grab is implicit as result of a ButtonPress event. If this
is the case, we need to store the XI mask as well as the core mask to ensure
delivery of XI events during the grab's lifetime.

Remove all core grabs on other devices when client issues a GrabPointer or
GrabKeyboard request. Let's assume that the client really only wants one
device to interact, so this seems like a reasonable solution.
2007-06-19 11:28:07 +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
Peter Hutterer
182ab3a3d5 Fix up comments for event.c 2007-05-30 17:44:31 +09:30
Luo Jie
1f48995d66 Fix build of composite, dix, and randr when Xinerama is disabled. 2007-05-24 11:20:59 -07:00
Peter Hutterer
d0e8f47409 Change GrabDevice's parameter name back to "coreGrab".
Was changed during a global search/replace for
5c680e9493.

Otherwise people like me introduce bugs (e.g. in
333bab4b23)
2007-05-21 13:06:21 +09:30
Peter Hutterer
0b4db74922 Squish the flags into the upper bits of the mode field for EnterLeave events.
This way we have enough space for the detail field.
2007-05-17 18:00:07 +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
a8c56372ba Revert "Allow events to grabWindows event if the device is not grabbed."
This reverts commit 339b73e710.
Allowing those events can lead to race conditions.

Conflicts:

	dix/events.c
2007-05-15 10:24:22 +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
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
0214d0b96a Start devices after windows are initialized.
This fixes the hotplug segfault introduced with the multihead changes and
cleans up the code a bit as well.
2007-05-01 15:49:41 +09:30
Peter Hutterer
11d0e2109b Correct enterleave semaphore value for root window. 2007-05-01 14:16:36 +09:30
Peter Hutterer
325380adb2 Check and re-set paired devices when initializing sprites.
If we don't do this, a device that is paired before a sprite has been
initialized for the paired device will not actually get the right sprite and
segfault the server on focus events. Happens for the VCK.
2007-05-01 11:02:05 +09:30
Peter Hutterer
5e43910929 Add GenericEvent extension to Xext.
This adds (unconditional) support for the GE extension. Anything from now on
that sends events in MPX will have to use the GE extension. No GE, no MPX
events. GE is not actually used yet from anywhere with this commit.

You will need to update x11proto, xextproto, libX11, libXext and xcb to the
matching xge branches. Things will _NOT_ work without the updated protocol
headers and libraries.
2007-04-30 12:57:42 +09:30
Peter Hutterer
f28eea0647 Merge branch 'master' into mpx
Conflicts:

	dix/devices.c
	dix/events.c
2007-04-27 16:34:36 +09:30