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:
parent
38b28dcadd
commit
673eb23aac
|
@ -55,6 +55,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static WindowPtr PointerWindows[MAXDEVICES];
|
static WindowPtr PointerWindows[MAXDEVICES];
|
||||||
|
static WindowPtr FocusWindows[MAXDEVICES];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return TRUE if @win has a pointer within its boundaries, excluding child
|
* Return TRUE if @win has a pointer within its boundaries, excluding child
|
||||||
|
@ -72,6 +73,17 @@ HasPointer(WindowPtr win)
|
||||||
return FALSE;
|
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
|
* Search for the first window below @win that has a pointer directly within
|
||||||
* it's boundaries (excluding boundaries of its own descendants).
|
* it's boundaries (excluding boundaries of its own descendants).
|
||||||
|
@ -92,6 +104,28 @@ FirstPointerChild(WindowPtr win)
|
||||||
return NULL;
|
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.
|
* 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;
|
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.
|
* @return The window that is the first ancestor of both a and b.
|
||||||
|
|
Loading…
Reference in New Issue