Commit Graph

397 Commits

Author SHA1 Message Date
Peter Hutterer
9ccc9ab6f2 dix: don't call CloseDevice on VCP/VCK separately. 2007-10-16 12:04:48 +09:30
Peter Hutterer
e4fd981b48 dix: check for isMaster before calling DeviceCursorCleanup. 2007-10-16 12:04:40 +09:30
Peter Hutterer
7503d13407 dix: don't check VCK and VCP separately when looking for device ids.
Both are part of the device list again, so we cover them there.
2007-10-16 12:04:30 +09:30
Peter Hutterer
032e906711 dix: Remove GetPairedPointer, GetPairedKeyboard in favour of GetPairedDevice. 2007-10-16 11:57:42 +09:30
Peter Hutterer
3e07e73fef dix: remove pairing/attachment from InitAndStartDevices.
If we enabled in the correct order, this has all been done already.
2007-10-16 11:34:29 +09:30
Peter Hutterer
38baac71bd dix: Set bidirectional pairing, don't allow pairing with already paired devs. 2007-10-16 11:30:59 +09:30
Peter Hutterer
70efd3d06a dix: fix up Activate/Enable/Disable device.
Set isMaster for VCP/VCK.
Init sprites for master pointer devices.
Pair master kbds with master pointers (1:1 pairing!).
Attach other devices to VCP/VCK.
2007-10-16 11:30:32 +09:30
Peter Hutterer
bd7d5255ce dix: add AttachDevice, needed to attach a slave device to a master device.
For now, we don't allow attaching slaves to other slaves, and we don't allow
pairing slaves with other slaves.
Pairing is for master keyboard->master pointer only.
Attaching is for slave device->master device only.
2007-10-16 11:18:31 +09:30
Peter Hutterer
be1565f6b8 dix: Set core devices to ProcessOtherEvents, set sendCore and XKB.
Even the virtual core devices should send through ProcessOtherEvents.
2007-10-16 11:05:34 +09:30
Peter Hutterer
042e16458b dix: change a few inputInfo.keyboard over to PickKeyboard() 2007-10-09 23:07:51 +09:30
Peter Hutterer
d42909b23a dix: when disabling a device, make sure all paired devices are re-paired.
We re-pair them with the VCP, not a real device! If we would do otherwise,
somebody may change our keyboard focus and thus get us typing where we don't
want to type.
2007-10-05 13:04:10 +09:30
Peter Hutterer
ff2351246d dix: When pairing, only check for access right if client is set.
If the pairing client is not set, then the pairing is initiated internally
(e.g. when a new keyboard device is configured). In this case we _must_ pair
regardless of who is the pairing client.
2007-10-05 12:19:40 +09:30
Peter Hutterer
1eebb03a31 dix: ignore passive grab if the client already has a grab on the device.
In some cases a button press may activate a passive core grab. If the client
owning the passive grab already has a core grab on another device, don't
actually activate it. Otherwise the client gets two simultaneous passive
core grabs, and may never ungrab the device again (only if the other grab uses
GrabModeSync).

Reproducable: fire up gnome-session, open up gnome-terminal. Click with the
ClientPointer onto the window decoration, then click with another pointer onto
an application icon in the panel. Drag the icon out, release the button and
voila - you just lost your second mouse.
2007-10-03 15:18:17 +09:30
Peter Hutterer
0b48506782 dix: send NotifyGrab/NotifyUngrab focus events regardless of semaphore state.
This is just papering over a problem. The whole focus system needs to be
revised.
2007-10-03 14:22:55 +09:30
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
f965a5f345 dix: Ignore devices when deleting passive core grabs. 2007-10-02 16:20:27 +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
de06a47d4a dix: GetMaximumEventsNum() needs to return 3 + MAX_VALUATOR_EVENTS.
Raw events can be generated for pointer events, so 2 + MVE isn't enough.
2007-09-27 11:45:03 +09:30
Peter Hutterer
8b508f5d6b dix: unify ErrorFs. prepend all with [dix]. 2007-09-26 15:19:53 +09:30
Peter Hutterer
394f3c1dbe dix: GetPointerEvents: remove unused variable compiler warning. 2007-09-26 15:19:37 +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
5d9f6cf51b dix: cosmetic change. Remove "pointer" variable, might as well use pDev. 2007-09-24 12:38:11 +09:30
Peter Hutterer
1c25c46f3d dix: fix compiler warnings about unused variables. 2007-09-24 12:37:33 +09:30
Peter Hutterer
68e0c4988e dix: fix "possible use of uninitialized variable" warning.
The device passed through to UnrealizeCursor isn't used anyway, so setting it
to NULL is enough.
2007-09-24 12:21:05 +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
72b347e681 dix: Enabling devices must not overwrite existing sprites/pairing.
EnableDevices is (amongst others )called after a VT switch. We must not create
a new sprite or re-pair the device, otherwise we lose the input device setup
that we had before the VT switch.

This requires the devices to be in exactly the same order as before
the VT switch. Removing a device while on a different VT is probably a bad
idea.
2007-09-07 14:31:19 +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
49dbe9a757 dix: close virtual core devices after other devices.
If a device is paired with the VCP, deleting the VCP before the device will
segfault the server when the sprite should get updated.
2007-09-06 17:27:28 +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
c4fff05083 Revert "Input: Fix stuck modifiers (bug #11683)"
This reverts commit 6b055e5d97.

MPX relies on the XI event being delivered before the core event. Device grabs
break, amongst other things. I guess stuck modifiers need to be fixed some
other way.

Conflicts:

        dix/getevents.c
2007-09-05 16:19:45 +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
a0b87f87fb dix: check for core event to determine if grab is a core grab (CreateGrab).
Checking for VCP/VCK is simply not a safe way to check if a grab is a core grab.
2007-08-07 10:49:33 +09:30
Daniel Stone
1ace9770fe Build system: Non-dtrace distcheck hacks
automake 1.10 really wants foo.c for foo.O, so give it some dummy files to
deal with if it really needs them.
2007-08-01 08:10:38 +03:00
Daniel Stone
6b055e5d97 Input: Fix stuck modifiers (bug #11683)
Disclaimer: It's 6:51am.  I'm trying to be as understandable as possible.

What was happening previously was this:
 * Press Alt
 * Extended event generated and processed: state is now Alt down once
 * Core event generated
   - keyboard switched: inherited state is Alt down once
   - event processed: Alt down twice
 * Release Alt
 * Extended event generated and processed: state is now null
 * Core event generated and processed: Alt down once

If we switch the order:
 * Press Alt
 * Core event generated:
  - keyboard switched: inherited state is null
  - event processed: Alt down once
 * Extended event generated and processed: state is now Alt down once
 * Release Alt
 * Core event generated and processed: state is now null
 * Extended event generated and processed: state is now null

When we carry over the previous state, it needs to be the _previous_ state
(state and modifiersPerKey), assuming that we're going to catch now-core
events for any of these.  For example, if Ctrl is held down as we pivot, we
need to carry Ctrl over with a count of one, for which an extended + core
release will then clear.  Carrying over the union of the previous state _and
the state resulting from the immediate action_ was what broke things.
2007-08-01 06:55:36 +03:00
Daniel Stone
1150969b82 Convert all my license statements to the standard form
Convert all my license statements to the standard, accepted form:
cf. <20070717142307.GD13478@fooishbar.org>
    http://lists.freedesktop.org/archives/xorg/2007-July/026451.html

keithp's license on configure.ac changed with his verbal permission.
2007-08-01 01:53:31 +03:00
Daniel Stone
8658f5d923 Hotplug: Add HAL support
Add support for HAL-based hotplugging, in which we just get the list of
input devices and properties from HAL.  Requires an FDI which is not yet
in mainline HAL.
2007-08-01 01:53:31 +03:00
Daniel Stone
4d238c5c67 Input: GetPointerEvents: Deny events from devices without valuators
For some reason, my keyboard has 25 mouse buttons, but zero valuators.  This
causes GPE to blow up spectacularly, trying to get (and set) co-ordinates from
devices without valuators.  For now, just prevent this from ever happening,
and whack a dirty great FIXME in.
2007-08-01 01:53:31 +03:00
Daniel Stone
0afeb0241a DIX: Clean up null root cursor handling
Move the null root cursor handling out of main() and into CreateRootCursor.
2007-08-01 01:53:31 +03:00