Commit 520cea93 authored by Marco Trevisan's avatar Marco Trevisan 🎺 Committed by Florian Müllner

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 commit 0e0574a0 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-commit 0e0574a0 behavior.

Fixes #1336

parent 58c4212c
Pipeline #88483 passed with stages
in 3 minutes and 57 seconds
......@@ -331,10 +331,10 @@ var IconGrid = GObject.registerClass({
if (this._rowLimit && rowIndex >= this._rowLimit ||
this._fillParent && childBox.y2 > availHeight - this.bottomPadding) {
children[i].opacity = 0;
} else {
children[i].opacity = 255;
children[i].allocate(childBox, flags);
......@@ -378,7 +378,7 @@ var IconGrid = GObject.registerClass({
child != null;
child = child.get_next_sibling()) {
if (!child.visible)
if (!child.visible || !child.opacity)
let childVolume = child.get_transformed_paint_volume(this);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment