Revert "dash: Ignore hiding items in _adjustIconSize()"

Ooops, a patch got lost in rebase.

This reverts commit b07f9932db.
This commit is contained in:
Florian Müllner 2011-10-17 16:00:13 +02:00
parent 1721db6d8d
commit adef2009a5

View File

@ -37,7 +37,6 @@ DashItemContainer.prototype = {
this.child = null; this.child = null;
this._childScale = 1; this._childScale = 1;
this._childOpacity = 255; this._childOpacity = 255;
this.animatingOut = false;
}, },
_allocate: function(actor, box, flags) { _allocate: function(actor, box, flags) {
@ -116,7 +115,6 @@ DashItemContainer.prototype = {
return; return;
} }
this.animatingOut = true;
this.childScale = 1.0; this.childScale = 1.0;
Tweener.addTween(this, Tweener.addTween(this,
{ childScale: 0.0, { childScale: 0.0,
@ -179,6 +177,12 @@ RemoveFavoriteIcon.prototype = {
this._iconBin._delegate = this; this._iconBin._delegate = this;
this.setChild(this._iconBin); this.setChild(this._iconBin);
this.hiding = false;
},
animateOutAndDestroy: function() {
DashItemContainer.prototype.animateOutAndDestroy.call(this);
this.hiding = true;
}, },
_createIcon: function(size) { _createIcon: function(size) {
@ -310,12 +314,15 @@ Dash.prototype = {
_endDrag: function() { _endDrag: function() {
this._clearDragPlaceholder(); this._clearDragPlaceholder();
if (this._favRemoveTarget) { if (this._favRemoveTarget) {
this._favRemoveTarget.actor.hide();
this._adjustIconSize();
this._favRemoveTarget.actor.show();
this._favRemoveTarget.animateOutAndDestroy(); this._favRemoveTarget.animateOutAndDestroy();
this._favRemoveTarget.actor.connect('destroy', Lang.bind(this, this._favRemoveTarget.actor.connect('destroy', Lang.bind(this,
function() { function() {
this._favRemoveTarget = null; this._favRemoveTarget = null;
})); }));
this._adjustIconSize();
} }
DND.removeDragMonitor(this._dragMonitor); DND.removeDragMonitor(this._dragMonitor);
}, },
@ -394,18 +401,8 @@ Dash.prototype = {
}, },
_adjustIconSize: function() { _adjustIconSize: function() {
// For the icon size, we only consider children which are "proper" let children = this._box.get_children();
// icons (i.e. ignoring drag placeholders) and which are not if (children.length == 0) {
// animating out (which means they will be destroyed at the end of
// the animation)
let iconChildren = this._box.get_children().filter(function(actor) {
return actor._delegate.child &&
actor._delegate.child._delegate &&
actor._delegate.child._delegate.icon &&
!actor._delegate.animatingOut;
});
if (iconChildren.length == 0) {
this._box.add_style_pseudo_class('empty'); this._box.add_style_pseudo_class('empty');
return; return;
} }
@ -415,39 +412,23 @@ Dash.prototype = {
if (this._maxHeight == -1) if (this._maxHeight == -1)
return; return;
let iconChildren = children.filter(function(actor) {
return actor.visible &&
actor._delegate.child &&
actor._delegate.child._delegate &&
actor._delegate.child._delegate.icon;
});
let themeNode = this.actor.get_theme_node(); // Compute the amount of extra space (or missing space) we have
let maxAllocation = new Clutter.ActorBox({ x1: 0, y1: 0, // per icon with the current icon size
x2: 42 /* whatever */, let [minHeight, natHeight] = this.actor.get_preferred_height(-1);
y2: this._maxHeight }); let diff = (this._maxHeight - natHeight) / iconChildren.length;
let maxContent = themeNode.get_content_box(maxAllocation);
let availHeight = maxContent.y2 - maxContent.y1;
let spacing = themeNode.get_length('spacing');
let firstIcon = iconChildren[0]._delegate.child._delegate.icon;
// Icons may be animating, so enforce the current icon size
// during the size request
let [currentWidth, currentHeight] = firstIcon.icon.get_size();
firstIcon.icon.set_size(this.iconSize, this.iconSize);
let [minHeight, natHeight] = iconChildren[0].get_preferred_height(-1);
firstIcon.icon.set_size(currentWidth, currentHeight);
// Subtract icon padding and box spacing from the available height
availHeight -= iconChildren.length * (natHeight - this.iconSize) +
(iconChildren.length - 1) * spacing;
let availSize = availHeight / iconChildren.length;
let iconSizes = [ 16, 22, 24, 32, 48, 64 ]; let iconSizes = [ 16, 22, 24, 32, 48, 64 ];
let newIconSize = 16; let newIconSize = 16;
for (let i = 0; i < iconSizes.length; i++) { for (let i = 0; i < iconSizes.length; i++) {
if (iconSizes[i] < availSize) if (iconSizes[i] < this.iconSize + diff)
newIconSize = iconSizes[i]; newIconSize = iconSizes[i];
} }
@ -585,7 +566,29 @@ Dash.prototype = {
this._box.insert_actor(addedItems[i].item.actor, this._box.insert_actor(addedItems[i].item.actor,
addedItems[i].pos); addedItems[i].pos);
// Hide removed actors to not take them into account
// when adjusting the icon size ...
for (let i = 0; i < removedActors.length; i++)
removedActors[i].hide();
// ... and do the same for the remove target if necessary
if (this._favRemoveTarget && this._favRemoveTarget.hiding)
this._favRemoveTarget.actor.hide();
this._adjustIconSize();
if (this._favRemoveTarget && this._favRemoveTarget.hiding)
this._favRemoveTarget.actor.show();
// Skip animations on first run when adding the initial set
// of items, to avoid all items zooming in at once
if (!this._shownInitially) {
this._shownInitially = true;
return;
}
for (let i = 0; i < removedActors.length; i++) { for (let i = 0; i < removedActors.length; i++) {
removedActors[i].show();
let item = removedActors[i]._delegate; let item = removedActors[i]._delegate;
// Don't animate item removal when the overview is hidden // Don't animate item removal when the overview is hidden
@ -595,15 +598,6 @@ Dash.prototype = {
item.actor.destroy(); item.actor.destroy();
} }
this._adjustIconSize();
// Skip animations on first run when adding the initial set
// of items, to avoid all items zooming in at once
if (!this._shownInitially) {
this._shownInitially = true;
return;
}
// Don't animate item addition when the overview is hidden // Don't animate item addition when the overview is hidden
if (!Main.overview.visible) if (!Main.overview.visible)
return; return;