[gnome-shell] workspaces-view: Handle clip rectangle separately
- From: Florian MÃllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] workspaces-view: Handle clip rectangle separately
- Date: Mon, 27 Jun 2011 13:23:01 +0000 (UTC)
commit 6ce07abf509320cee311337e68ed3585293b4b03
Author: Florian MÃllner <fmuellner gnome org>
Date: Wed Jun 22 00:28:42 2011 +0200
workspaces-view: Handle clip rectangle separately
After completing the overview transition, the workspace view is
clipped to avoid overlapping the search entry/view selector titles
while switching workspaces. For clipping, the view's position and
size was used, which works well assuming that the workspace pager
will start hidden or stay zoomed out while the overview is visible.
However, that assumption holds no longer true, as auto-hiding the
pager now depends on the number of workspaces, and thus may change
while in the overview. For instance, when starting with the pager
being visible, the clip area ends up being too small when moving
all windows to the first workspace (and thus triggering auto-hide).
As a fix, handle the clip rectangle separately from the view's
geometry, and set it always to the area the workspaces would
occupy with the pager hidden.
https://bugzilla.gnome.org/show_bug.cgi?id=653142
js/ui/workspacesView.js | 21 ++++++++++++++++++++-
1 files changed, 20 insertions(+), 1 deletions(-)
---
diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
index 19ec796..4a37b29 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -49,6 +49,10 @@ WorkspacesView.prototype = {
this._height = 0;
this._x = 0;
this._y = 0;
+ this._clipX = 0;
+ this._clipY = 0;
+ this._clipWidth = 0;
+ this._clipHeight = 0;
this._workspaceRatioSpacing = 0;
this._spacing = 0;
this._animating = false; // tweening
@@ -92,7 +96,8 @@ WorkspacesView.prototype = {
this._overviewShownId =
Main.overview.connect('shown',
Lang.bind(this, function() {
- this.actor.set_clip(this._x, this._y, this._width, this._height);
+ this.actor.set_clip(this._clipX, this._clipY,
+ this._clipWidth, this._clipHeight);
}));
this._scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
@@ -136,6 +141,13 @@ WorkspacesView.prototype = {
this._workspaces[i].setGeometry(x, y, width, height);
},
+ setClipRect: function(x, y, width, height) {
+ this._clipX = x;
+ this._clipY = y;
+ this._clipWidth = width;
+ this._clipHeight = height;
+ },
+
_lookupWorkspaceForMetaWindow: function (metaWindow) {
for (let i = 0; i < this._workspaces.length; i++) {
if (this._workspaces[i].containsMetaWindow(metaWindow))
@@ -751,6 +763,13 @@ WorkspacesDisplay.prototype = {
let rtl = (St.Widget.get_default_direction () == St.TextDirection.RTL);
+ let clipWidth = width - controlsVisible;
+ let clipHeight = (fullHeight / fullWidth) * clipWidth;
+ let clipX = rtl ? x + controlsVisible : x;
+ let clipY = y + (fullHeight - clipHeight) / 2;
+
+ this.workspacesView.setClipRect(clipX, clipY, clipWidth, clipHeight);
+
if (this._zoomOut) {
width -= controlsNatural;
if (rtl)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]