iconGrid: Don't hide children inside allocation loop
Hiding a child implies a parent reallocation, and IconGrid does it for the children that doesn't fit in the available space, but this could lead to an allocation recursion cycle. This has been introduced by commit0e0574a0
to reduce CPU usage not to using JS vfuncs. To avoid this, toggle the children opacity instead so that we can achieve the same visibility result, without any reallocation need. In this way we also fix the case where hidden children can be shown again, as _getVisibleChildren doesn't filter-out transparent ones, restoring the pre-commit0e0574a0
behavior. Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1336 https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/559
This commit is contained in:
parent
58c4212cfa
commit
520cea9394
@ -331,10 +331,10 @@ var IconGrid = GObject.registerClass({
|
||||
|
||||
if (this._rowLimit && rowIndex >= this._rowLimit ||
|
||||
this._fillParent && childBox.y2 > availHeight - this.bottomPadding) {
|
||||
children[i].hide();
|
||||
children[i].opacity = 0;
|
||||
} else {
|
||||
children[i].opacity = 255;
|
||||
children[i].allocate(childBox, flags);
|
||||
children[i].show();
|
||||
}
|
||||
|
||||
columnIndex++;
|
||||
@ -378,7 +378,7 @@ var IconGrid = GObject.registerClass({
|
||||
child != null;
|
||||
child = child.get_next_sibling()) {
|
||||
|
||||
if (!child.visible)
|
||||
if (!child.visible || !child.opacity)
|
||||
continue;
|
||||
|
||||
let childVolume = child.get_transformed_paint_volume(this);
|
||||
|
Loading…
Reference in New Issue
Block a user