dix: move focus handling into enterleave.c.

This commit moves the focus handling from events.c into enterleave.c and
implements a model similar to the core enter/leave model.
For a full description of the model, see:
http://lists.freedesktop.org/archives/xorg/2008-December/041740.html

This commit also gets rid of the focusinout array in the WindowRec, ditching
it in favour of a local array that keeps the current focus window for each
device.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2008-12-19 21:05:47 +10:00
commit eb2d7b3d70
6 changed files with 837 additions and 281 deletions

View file

@ -509,8 +509,6 @@ extern _X_EXPORT int AllocMasterDevice(ClientPtr client,
extern _X_EXPORT void DeepCopyDeviceClasses(DeviceIntPtr from,
DeviceIntPtr to);
extern _X_EXPORT int FocusSemaphoresIsset(WindowPtr win);
/* Implemented by the DDX. */
extern _X_EXPORT int NewInputDeviceRequest(
InputOption *options,

View file

@ -179,11 +179,6 @@ typedef struct _Window {
#ifdef ROOTLESS
unsigned rootlessUnhittable:1; /* doesn't hit-test */
#endif
/* Used to maintain semantics of core protocol for Enter/LeaveNotifies and
* FocusIn/Out events for multiple pointers/keyboards. Each device ID
* corresponds to one bit. If set, the device is in the window/has focus.
*/
char focusinout[(MAXDEVICES + 7)/8];
} WindowRec;
/*