iconGrid: Clear meta_later callback on destruction
The IconGrid code sometimes sets up a callback to be invoked later right before being destroyed. This commit adds a destroy handler to cancel the callback. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/628
This commit is contained in:
parent
eaa32090b9
commit
1d60c4d9d4
@ -206,6 +206,8 @@ var IconGrid = GObject.registerClass({
|
|||||||
this.rightPadding = 0;
|
this.rightPadding = 0;
|
||||||
this.leftPadding = 0;
|
this.leftPadding = 0;
|
||||||
|
|
||||||
|
this._updateIconSizesLaterId = 0;
|
||||||
|
|
||||||
this._items = [];
|
this._items = [];
|
||||||
this._clonesAnimating = [];
|
this._clonesAnimating = [];
|
||||||
// Pulled from CSS, but hardcode some defaults here
|
// Pulled from CSS, but hardcode some defaults here
|
||||||
@ -223,6 +225,14 @@ var IconGrid = GObject.registerClass({
|
|||||||
|
|
||||||
this.connect('actor-added', this._childAdded.bind(this));
|
this.connect('actor-added', this._childAdded.bind(this));
|
||||||
this.connect('actor-removed', this._childRemoved.bind(this));
|
this.connect('actor-removed', this._childRemoved.bind(this));
|
||||||
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
_onDestroy() {
|
||||||
|
if (this._updateIconSizesLaterId) {
|
||||||
|
Meta.later_remove (this._updateIconSizesLaterId);
|
||||||
|
this._updateIconSizesLaterId = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_keyFocusIn(actor) {
|
_keyFocusIn(actor) {
|
||||||
@ -757,12 +767,14 @@ var IconGrid = GObject.registerClass({
|
|||||||
|
|
||||||
this._updateSpacingForSize(availWidth, availHeight);
|
this._updateSpacingForSize(availWidth, availHeight);
|
||||||
}
|
}
|
||||||
Meta.later_add(Meta.LaterType.BEFORE_REDRAW,
|
if (!this._updateIconSizesLaterId)
|
||||||
this._updateIconSizes.bind(this));
|
this._updateIconSizesLaterId = Meta.later_add(Meta.LaterType.BEFORE_REDRAW,
|
||||||
|
this._updateIconSizes.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note that this is ICON_SIZE as used by BaseIcon, not elsewhere in IconGrid; it's a bit messed up
|
// Note that this is ICON_SIZE as used by BaseIcon, not elsewhere in IconGrid; it's a bit messed up
|
||||||
_updateIconSizes() {
|
_updateIconSizes() {
|
||||||
|
this._updateIconSizesLaterId = 0;
|
||||||
let scale = Math.min(this._fixedHItemSize, this._fixedVItemSize) / Math.max(this._hItemSize, this._vItemSize);
|
let scale = Math.min(this._fixedHItemSize, this._fixedVItemSize) / Math.max(this._hItemSize, this._vItemSize);
|
||||||
let newIconSize = Math.floor(ICON_SIZE * scale);
|
let newIconSize = Math.floor(ICON_SIZE * scale);
|
||||||
for (let i in this._items) {
|
for (let i in this._items) {
|
||||||
|
Loading…
Reference in New Issue
Block a user