workspace: Sort windows when we calculate slots

This ensures that windows don't change positions when we lay
them out again when expanding the workspace switcher.

https://bugzilla.gnome.org/show_bug.cgi?id=698776
This commit is contained in:
Jasper St. Pierre 2013-04-24 13:53:11 -04:00
parent 0f47534766
commit e0252f35be

View File

@ -753,13 +753,6 @@ const LayoutStrategy = new Lang.Class({
layout.space = space; layout.space = space;
}, },
_getDistance: function (row, actor) {
let dist_x = actor.x - row.x;
let dist_y = actor.y - row.y;
return Math.sqrt(Math.pow(dist_x, 2) + Math.pow(dist_y, 2));
},
computeWindowSlots: function(layout, area) { computeWindowSlots: function(layout, area) {
this._computeRowSizes(layout); this._computeRowSizes(layout);
@ -788,10 +781,6 @@ const LayoutStrategy = new Lang.Class({
row.x = area.x + (Math.max(area.width - row.width, 0) / 2) * row.additionalScale; row.x = area.x + (Math.max(area.width - row.width, 0) / 2) * row.additionalScale;
row.y = area.y + (y + Math.max(area.height - height, 0) / 2) * row.additionalScale; row.y = area.y + (y + Math.max(area.height - height, 0) / 2) * row.additionalScale;
y += row.height + this._rowSpacing; y += row.height + this._rowSpacing;
row.windows.sort(Lang.bind(this, function(a, b) {
return this._getDistance(row, a.realWindow) - this._getDistance(row, b.realWindow);
}));
} }
for (let i = 0; i < rows.length; i++) { for (let i = 0; i < rows.length; i++) {
@ -844,6 +833,13 @@ const UnalignedLayoutStrategy = new Lang.Class({
return false; return false;
}, },
_sortRow: function(row) {
// Sort windows horizontally to minimize travel distance
row.windows.sort(function(a, b) {
return a.realWindow.x - b.realWindow.x;
});
},
computeLayout: function(windows, layout) { computeLayout: function(windows, layout) {
let numRows = layout.numRows; let numRows = layout.numRows;
@ -874,6 +870,7 @@ const UnalignedLayoutStrategy = new Lang.Class({
row.windows.push(window); row.windows.push(window);
row.fullWidth += width; row.fullWidth += width;
} else { } else {
this._sortRow(row);
break; break;
} }
} }