dix: add a few auxiliary functions for the updated focus model.

SetFocusIn and SetFocusOut, including the static array to keep all focus
windows.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2008-12-19 21:05:09 +10:00
parent 38b28dcadd
commit 673eb23aac

View File

@ -55,6 +55,7 @@
*/
static WindowPtr PointerWindows[MAXDEVICES];
static WindowPtr FocusWindows[MAXDEVICES];
/**
* Return TRUE if @win has a pointer within its boundaries, excluding child
@ -72,6 +73,17 @@ HasPointer(WindowPtr win)
return FALSE;
}
static BOOL
HasFocus(WindowPtr win)
{
int i;
for (i = 0; i < MAXDEVICES; i++)
if (FocusWindows[i] == win)
return TRUE;
return FALSE;
}
/**
* Search for the first window below @win that has a pointer directly within
* it's boundaries (excluding boundaries of its own descendants).
@ -92,6 +104,28 @@ FirstPointerChild(WindowPtr win)
return NULL;
}
/**
* Search for the first window below @win that has a pointer directly within
* it's boundaries (excluding boundaries of its own descendants).
*
* @return The child window that has the pointer within its boundaries or
* NULL.
*/
static WindowPtr
FirstFocusChild(WindowPtr win)
{
int i;
for (i = 0; i < MAXDEVICES; i++)
{
if (FocusWindows[i] && FocusWindows[i] != PointerRootWin &&
IsParent(win, FocusWindows[i]))
return FocusWindows[i];
}
return NULL;
}
/**
* Set the presence flag for @dev to mark that it is now in @win.
@ -111,6 +145,26 @@ LeaveWindow(DeviceIntPtr dev, WindowPtr win, int mode)
PointerWindows[dev->id] = NULL;
}
/**
* Set the presence flag for @dev to mark that it is now in @win.
*/
void
SetFocusIn(DeviceIntPtr dev, WindowPtr win)
{
FocusWindows[dev->id] = win;
}
/**
* Unset the presence flag for @dev to mark that it is not in @win anymore.
*/
void
SetFocusOut(DeviceIntPtr dev, WindowPtr win)
{
FocusWindows[dev->id] = NULL;
}
/**
* @return The window that is the first ancestor of both a and b.