From 6a0c6a5df67892343d11b50db2788d672020827f Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Sat, 8 Nov 2008 19:33:35 +0000 Subject: [PATCH] Fix stacking order in the overlay When showing windows in the overlay, stack them in the same order as they are on the screen. This improves the animation (the starting point is now the current layout!) and also the case where we have a lot of windows and just overlap them diagonally. svn path=/trunk/; revision=40 --- js/ui/overlay.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/js/ui/overlay.js b/js/ui/overlay.js index 2f99e2f8d..1e744d11f 100644 --- a/js/ui/overlay.js +++ b/js/ui/overlay.js @@ -92,13 +92,14 @@ Overlay.prototype = { n_windows++; } - // Now create actors for all the desktop windows + // Now create actors for all the desktop windows. Do it in + // reverse order so that the active actor ends up on top let window_index = 0; - for (let i = 0; i < windows.length; i++) { + for (let i = windows.length - 1; i >= 0; i--) { let w = windows[i]; if (w == desktop_window || w.is_override_redirect()) continue; - this._createWindowClone(w, window_index, n_windows); + this._createWindowClone(w, n_windows - window_index - 1, n_windows); window_index++; } @@ -155,6 +156,7 @@ Overlay.prototype = { }); }, + // window_index == 0 => top in stacking order _computeWindowPosition : function(window_index, n_windows) { if (n_windows in POSITIONS) return POSITIONS[n_windows][window_index]; @@ -162,7 +164,12 @@ Overlay.prototype = { // If we don't have a predefined scheme for this window count, overlap the windows // along the diagonal of the desktop (improve this!) let fraction = Math.sqrt(1/n_windows); - let x_center = (fraction / 2) + (1 - fraction) * window_index / (n_windows - 1); + + // The top window goes at the lower right - this is different from the + // fixed position schemes where the windows are in "reading order" + // and the top window goes at the upper left. + let pos = (n_windows - window_index - 1) / (n_windows - 1); + let x_center = (fraction / 2) + (1 - fraction) * pos; let y_center = x_center; return [x_center, y_center, fraction];