From 706326491011be8cecb9b56c06f7241b7cbd425f Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Tue, 18 Jan 2011 20:16:36 +0000 Subject: [PATCH] Input: Add DeepestSpriteWin function Does what it says on the box: returns the deepest child window in a given sprite's trace. Signed-off-by: Daniel Stone Reviewed-by: Chase Douglas Reviewed-by: Keith Packard --- dix/events.c | 4 ++-- include/inputstr.h | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/dix/events.c b/dix/events.c index 1d513eb10..4a2815b0f 100644 --- a/dix/events.c +++ b/dix/events.c @@ -2182,7 +2182,7 @@ MaybeDeliverEventsToClient(WindowPtr pWin, xEvent *pEvents, static Window FindChildForEvent(SpritePtr pSprite, WindowPtr event) { - WindowPtr w = pSprite->spriteTrace[pSprite->spriteTraceGood-1]; + WindowPtr w = DeepestSpriteWin(pSprite); Window child = None; /* If the search ends up past the root should the child field be @@ -2625,7 +2625,7 @@ XYToWindow(SpritePtr pSprite, int x, int y) else pWin = pWin->nextSib; } - return pSprite->spriteTrace[pSprite->spriteTraceGood-1]; + return DeepestSpriteWin(pSprite); } /** diff --git a/include/inputstr.h b/include/inputstr.h index bd7c78dec..bc0accc87 100644 --- a/include/inputstr.h +++ b/include/inputstr.h @@ -591,4 +591,14 @@ typedef struct _EventSyncInfo { extern EventSyncInfoRec syncEvents; +/** + * Given a sprite, returns the window at the bottom of the trace (i.e. the + * furthest window from the root). + */ +static inline WindowPtr DeepestSpriteWin(SpritePtr sprite) +{ + assert(sprite->spriteTraceGood > 0); + return sprite->spriteTrace[sprite->spriteTraceGood - 1]; +} + #endif /* INPUTSTRUCT_H */