[PATCH 4/5] dix: add a few auxiliary functions for the updated focus model.

Peter Hutterer peter.hutterer at who-t.net
Wed Jan 7 16:13:05 PST 2009


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

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 dix/enterleave.c |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 54 insertions(+), 0 deletions(-)

diff --git a/dix/enterleave.c b/dix/enterleave.c
index 0b15619..d01597a 100644
--- a/dix/enterleave.c
+++ b/dix/enterleave.c
@@ -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.
-- 
1.6.0.6




More information about the xorg mailing list