[gnome-shell] overview: Move dash to a separate layer
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] overview: Move dash to a separate layer
- Date: Fri, 1 Mar 2013 17:26:19 +0000 (UTC)
commit cca008b73ce746418fcd45cad163be2be174c79b
Author: Florian Müllner <fmuellner gnome org>
Date: Thu Feb 21 18:48:09 2013 +0100
overview: Move dash to a separate layer
We generally want view content centered, in particular where the
view itself is symmetrical. So move the dash to a separate layer
and use a placeholder to account for its size when showing the
window picker, which is the only view where it doesn't make sense
to center the content.
https://bugzilla.gnome.org/show_bug.cgi?id=694261
js/ui/overview.js | 15 ++++++++++--
js/ui/overviewControls.js | 51 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 63 insertions(+), 3 deletions(-)
---
diff --git a/js/ui/overview.js b/js/ui/overview.js
index 1b54a08..71c321e 100644
--- a/js/ui/overview.js
+++ b/js/ui/overview.js
@@ -129,9 +129,13 @@ const Overview = new Lang.Class({
vertical: true });
this._overview._delegate = this;
+ this._groupStack = new St.Widget({ layout_manager: new Clutter.BinLayout(),
+ x_expand: true, y_expand: true });
this._group = new St.BoxLayout({ name: 'overview-group',
reactive: true,
+ x_expand: true, y_expand: true,
clip_to_allocation: true });
+ this._groupStack.add_actor(this._group);
this._backgroundGroup = new Meta.BackgroundGroup();
global.overlay_group.add_child(this._backgroundGroup);
@@ -289,15 +293,20 @@ const Overview = new Lang.Class({
this._thumbnailsBox,
this._viewSelector);
+ this._controls.dashActor.x_align = Clutter.ActorAlign.START;
+ this._controls.dashActor.y_expand = true;
+
+ // Put the dash in a separate layer to allow content to be centered
+ this._groupStack.add_actor(this._controls.dashActor);
+
// Pack all the actors into the group
- this._group.add_actor(this._controls.dashActor);
+ this._group.add_actor(this._controls.dashSpacer);
this._group.add(this._viewSelector.actor, { x_fill: true,
expand: true });
this._group.add_actor(this._controls.thumbnailsActor);
// Add our same-line elements after the search entry
- this._overview.add(this._group, { y_fill: true,
- expand: true });
+ this._overview.add(this._groupStack, { y_fill: true, expand: true });
// TODO - recalculate everything when desktop size changes
this.dashIconSize = this._dash.iconSize;
diff --git a/js/ui/overviewControls.js b/js/ui/overviewControls.js
index 4f876fc..13527a5 100644
--- a/js/ui/overviewControls.js
+++ b/js/ui/overviewControls.js
@@ -329,12 +329,52 @@ const DashSlider = new Lang.Class({
}
});
+const DashSpacer = new Lang.Class({
+ Name: 'DashSpacer',
+ Extends: St.Widget,
+
+ _init: function(params) {
+ this.parent(params);
+
+ this._bindConstraint = null;
+ },
+
+ setDashActor: function(dashActor) {
+ if (this._bindConstraint) {
+ this.remove_constraint(this._bindConstraint);
+ this._bindConstraint = null;
+ }
+
+ if (dashActor) {
+ this._bindConstraint = new Clutter.BindConstraint({ source: dashActor,
+ coordinate: Clutter.BindCoordinate.SIZE });
+ this.add_constraint(this._bindConstraint);
+ }
+ },
+
+ vfunc_get_preferred_width: function(forHeight) {
+ let box = this.get_allocation_box();
+ let minWidth = this.parent(forHeight)[0];
+ let natWidth = box.x2 - box.x1;
+ return [minWidth, natWidth];
+ },
+
+ vfunc_get_preferred_height: function(forWidth) {
+ let box = this.get_allocation_box();
+ let minHeight = this.parent(forWidth)[0];
+ let natHeight = box.y2 - box.y1;
+ return [minHeight, natHeight];
+ }
+});
+
const ControlsManager = new Lang.Class({
Name: 'ControlsManager',
_init: function(dash, thumbnails, viewSelector) {
this._dashSlider = new DashSlider(dash);
this.dashActor = this._dashSlider.actor;
+ this.dashSpacer = new DashSpacer();
+ this.dashSpacer.setDashActor(this.dashActor);
this._thumbnailsSlider = new ThumbnailsSlider(thumbnails);
this.thumbnailsActor = this._thumbnailsSlider.actor;
@@ -343,6 +383,7 @@ const ControlsManager = new Lang.Class({
this._viewSelector.connect('page-changed', Lang.bind(this, this._setVisibility));
this._viewSelector.connect('page-empty', Lang.bind(this, this._onPageEmpty));
+ Main.overview.connect('showing', Lang.bind(this, this._updateSpacerVisibility));
Main.overview.connect('item-drag-begin', Lang.bind(this,
function() {
let activePage = this._viewSelector.getActivePage();
@@ -384,8 +425,18 @@ const ControlsManager = new Lang.Class({
this._thumbnailsSlider.slideOut();
},
+ _updateSpacerVisibility: function() {
+ if (Main.overview.animationInProgress && !Main.overview.visibleTarget)
+ return;
+
+ let activePage = this._viewSelector.getActivePage();
+ this.dashSpacer.visible = (activePage == ViewSelector.ViewPage.WINDOWS);
+ },
+
_onPageEmpty: function() {
this._dashSlider.pageEmpty();
this._thumbnailsSlider.pageEmpty();
+
+ this._updateSpacerVisibility();
}
});
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]