From 3806f28918ea23291749ff4775339075a5f394e8 Mon Sep 17 00:00:00 2001 From: Tom Anderson Date: Thu, 6 Jan 2022 00:59:40 +0000 Subject: [PATCH] [X11] Fix tag dragging in Mutter We used to use a BFS to find the target window for tag dragging, but this causes windows underneath (like the window for the desktop wallpaper) to take precedence over nested windows. This CL switches to a DFS. R=sky Bug: 1279532 Change-Id: Ib569e9270be60bcb4fff088517dfe295697608b0 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3355470 Reviewed-by: Scott Violet Commit-Queue: Thomas Anderson Auto-Submit: Thomas Anderson Cr-Commit-Position: refs/heads/main@{#955976} --- ui/platform_window/x11/x11_topmost_window_finder.cc | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/ui/platform_window/x11/x11_topmost_window_finder.cc b/ui/platform_window/x11/x11_topmost_window_finder.cc index 2e16393487b..e20bf0abf0e 100644 --- a/ui/platform_window/x11/x11_topmost_window_finder.cc +++ b/ui/platform_window/x11/x11_topmost_window_finder.cc @@ -44,15 +44,8 @@ bool EnumerateChildren(ShouldStopIteratingCallback should_stop_iterating, for (iter = windows.rbegin(); iter != windows.rend(); iter++) { if (IsWindowNamed(*iter) && should_stop_iterating.Run(*iter)) return true; - } - - // If we're at this point, we didn't find the window we're looking for at the - // current level, so we need to recurse to the next level. We use a second - // loop because the recursion and call to XQueryTree are expensive and is only - // needed for a small number of cases. - if (++depth <= max_depth) { - for (iter = windows.rbegin(); iter != windows.rend(); iter++) { - if (EnumerateChildren(should_stop_iterating, *iter, max_depth, depth)) + if (depth < max_depth) { + if (EnumerateChildren(should_stop_iterating, *iter, max_depth, depth + 1)) return true; } }