[gnome-shell-extensions] dock: clip the actor to the primary monitor
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell-extensions] dock: clip the actor to the primary monitor
- Date: Sun, 29 Apr 2012 19:13:41 +0000 (UTC)
commit e3f1091f2d573d3006fb1c1bf9160e45feb952e0
Author: Giovanni Campagna <gcampagna src gnome org>
Date: Sat Apr 28 18:28:36 2012 +0200
dock: clip the actor to the primary monitor
In particular with the move effect, but also with others, the
dock could end up partially on the neighbor screen when hidden.
extensions/dock/extension.js | 80 +++++++++++++++++++++++++++++++++---------
1 files changed, 63 insertions(+), 17 deletions(-)
---
diff --git a/extensions/dock/extension.js b/extensions/dock/extension.js
index 3b8036f..c12963d 100644
--- a/extensions/dock/extension.js
+++ b/extensions/dock/extension.js
@@ -50,6 +50,27 @@ const AutoHideEffect = {
const DND_RAISE_APP_TIMEOUT = 500;
+// Utility function to make the dock clipped to the primary monitor
+function updateClip(actor) {
+ let monitor = Main.layoutManager.primaryMonitor;
+ let allocation = actor.allocation;
+
+ // Here we implicitly assume that the stage and actor's parent
+ // share the same coordinate space
+ let clip = new Clutter.ActorBox({ x1: Math.max(monitor.x, allocation.x1),
+ y1: Math.max(monitor.y, allocation.y1),
+ x2: Math.min(monitor.x + monitor.width, allocation.x2),
+ y2: Math.min(monitor.y + monitor.height, allocation.y2) });
+ // Translate back into actor's coordinate space
+ clip.x1 -= actor.x;
+ clip.x2 -= actor.x;
+ clip.y1 -= actor.y;
+ clip.y2 -= actor.y;
+
+ // Apply the clip
+ actor.set_clip(clip.x1, clip.y1, clip.x2-clip.x1, clip.y2 - clip.y1);
+}
+
/*************************************************************************************/
/**** start resize's Dock functions *****************/
/*************************************************************************************/
@@ -79,6 +100,8 @@ function hideDock_size () {
}
this.actor.set_position (position_x,monitor.y+(monitor.height-height)/2);
this.actor.set_size(width,height);
+
+ updateClip(this.actor);
},
});
@@ -108,6 +131,8 @@ function showDock_size () {
}
this.actor.set_position (position_x, monitor.y+(monitor.height-height)/2);
this.actor.set_size(width,height);
+
+ updateClip(this.actor);
}
});
@@ -124,7 +149,10 @@ function showEffectAddItem_size () {
height: height,
width: width,
time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
- transition: 'easeOutQuad'
+ transition: 'easeOutQuad',
+ onUpdate: function () {
+ updateClip(this);
+ }
});
}
@@ -157,7 +185,10 @@ function hideDock_scale () {
width: width,
scale_x: 0.025,
time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
- transition: 'easeOutQuad'
+ transition: 'easeOutQuad',
+ onUpdate: function() {
+ updateClip(this);
+ }
});
this._hidden = true;
@@ -185,7 +216,10 @@ function showDock_scale () {
width: width,
scale_x: 1,
time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
- transition: 'easeOutQuad'
+ transition: 'easeOutQuad',
+ onUpdate: function() {
+ updateClip(this);
+ }
});
this._hidden = false;
@@ -201,7 +235,10 @@ function showEffectAddItem_scale () {
height: height,
width: width,
time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
- transition: 'easeOutQuad'
+ transition: 'easeOutQuad',
+ onUpdate: function() {
+ updateClip(this);
+ }
});
}
@@ -233,7 +270,10 @@ function hideDock_move () {
width: width,
height: height,
time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
- transition: 'easeOutQuad'
+ transition: 'easeOutQuad',
+ onUpdate: function() {
+ updateClip(this);
+ },
});
this._hidden = true;
@@ -260,24 +300,30 @@ function showDock_move () {
width: width,
height: height,
time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
- transition: 'easeOutQuad'
+ transition: 'easeOutQuad',
+ onUpdate: function() {
+ updateClip(this);
+ },
});
this._hidden = false;
}
function showEffectAddItem_move () {
- let monitor = Main.layoutManager.primaryMonitor;
- let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
- let width = this._item_size + 4*this._spacing;
+ let monitor = Main.layoutManager.primaryMonitor;
+ let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
+ let width = this._item_size + 4*this._spacing;
- Tweener.addTween(this.actor, {
- y: monitor.y + (monitor.height-height)/2,
- height: height,
- width: width,
- time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
- transition: 'easeOutQuad'
- });
+ Tweener.addTween(this.actor, {
+ y: monitor.y + (monitor.height-height)/2,
+ height: height,
+ width: width,
+ time: this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY),
+ transition: 'easeOutQuad',
+ onUpdate: function() {
+ updateClip(this);
+ },
+ });
}
const Dock = new Lang.Class({
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]