This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch fix-sloppy-focus-fix-check-timer
in repository enlightenment.
View the commit online.
commit 01c6729e1493c01204fe658577c504513e838d86
Author: Charles G Waldman <[email protected]>
AuthorDate: Wed Jun 24 12:12:35 2026 -0500
e_comp_x - fix sloppy focus stealing to window behind on overlap
The mouse-in fix-check timer was using evas_tree_objects_at_xy_get()
to resolve the client under the pointer. At a pixel inside an upper
window that has another window behind it, this returns only the
lower window's object and omits the upper one, so the timer reverts
focus to the window behind - visible under sloppy focus as focus
jumping to a window underneath when the pointer crosses a region
where a lower window is exposed (e.g. a gap between two windows).
evas_object_top_at_xy_get() with pass-events and hidden excluded
returns the topmost event-eligible object, matching the X pointer
window and the visible stacking, and resolves the correct client.
The timer originally used e_client_under_pointer_get(); it was
switched to the tree-objects walk in fd7b1e4b3 as a side effect of
an unrelated resize-overlay shape-rect change.
@fix
---
src/bin/e_comp_x.c | 18 +++++-------------
1 file changed, 5 insertions(+), 13 deletions(-)
diff --git a/src/bin/e_comp_x.c b/src/bin/e_comp_x.c
index 2de08967f..cbfa0ca2f 100644
--- a/src/bin/e_comp_x.c
+++ b/src/bin/e_comp_x.c
@@ -2634,7 +2634,6 @@ static Eina_Bool
_e_comp_x_mouse_in_fix_check_timer_cb(void *data EINA_UNUSED)
{
E_Client *ec = NULL;
- Eina_List *l, *in_list;
Evas_Object *o;
int x, y;
@@ -2643,18 +2642,11 @@ _e_comp_x_mouse_in_fix_check_timer_cb(void *data EINA_UNUSED)
return EINA_FALSE;
ecore_evas_pointer_xy_get(e_comp->ee, &x, &y);
- in_list = evas_tree_objects_at_xy_get(e_comp->evas, NULL, x, y);
- EINA_LIST_FOREACH(in_list, l, o)
- {
- ec = _e_comp_x_e_client_obj_get(o);
- if (ec)
- {
- if ((!e_client_util_desk_visible
- (ec, e_desk_current_get(e_zone_current_get())))) continue;
- break;
- }
- }
- eina_list_free(in_list);
+ o = evas_object_top_at_xy_get(e_comp->evas, x, y, 0, 0);
+ if (o)
+ ec = _e_comp_x_e_client_obj_get(o);
+ if (ec && !e_client_util_desk_visible(ec, e_desk_current_get(e_zone_current_get())))
+ ec = NULL;
if (ec)
{
mouse_client = ec;
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.