*
* Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <libmainloop/hooks.h>
}
-static bool region_is_await(WRegion *reg)
+static bool region_is_parent(WRegion *reg, WRegion *aw)
{
- WRegion *aw=(WRegion*)await_watch.obj;
-
while(aw!=NULL){
if(aw==reg)
return TRUE;
}
+static bool region_is_await(WRegion *reg)
+{
+ return region_is_parent(reg, (WRegion*)await_watch.obj);
+}
+
+
+static bool region_is_focusnext(WRegion *reg)
+{
+ return region_is_parent(reg, ioncore_g.focus_next);
+}
+
+
/* Only keep await status if focus event is to an ancestor of the await
* region.
*/
}
+static bool region_manager_is_focusnext(WRegion *reg)
+{
+ if(reg==NULL || ioncore_g.focus_next==NULL)
+ return FALSE;
+
+ if(reg==ioncore_g.focus_next)
+ return TRUE;
+
+ return region_manager_is_focusnext(REGION_MANAGER(reg));
+}
+
+
bool region_may_control_focus(WRegion *reg)
{
if(OBJ_IS_BEING_DESTROYED(reg))
if(REGION_IS_ACTIVE(reg) || REGION_IS_PSEUDOACTIVE(reg))
return TRUE;
-
- if(region_is_await(reg))
+
+ if(region_is_await(reg) || region_is_focusnext(reg))
+ return TRUE;
+
+ if(region_manager_is_focusnext(reg))
return TRUE;
return FALSE;