gnome-shell r40 - trunk/js/ui



Author: otaylor
Date: Sat Nov  8 19:33:35 2008
New Revision: 40
URL: http://svn.gnome.org/viewvc/gnome-shell?rev=40&view=rev

Log:
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.

Modified:
   trunk/js/ui/overlay.js

Modified: trunk/js/ui/overlay.js
==============================================================================
--- trunk/js/ui/overlay.js	(original)
+++ trunk/js/ui/overlay.js	Sat Nov  8 19:33:35 2008
@@ -92,13 +92,14 @@
 		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 @@
 		      });
     },
 
+    // 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 @@
 	// 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];



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]