search: Remove updateSearch later on destruction
When the GridSearchBase actor is destroyed we should remove the ongoing later that might try to access to invalid resources. To do this, add an _onDestroy() callback function to SearchResultsBase and override it in GridSearchBase. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/700
This commit is contained in:
parent
a53b48de4c
commit
c69e195441
@ -158,10 +158,15 @@ var SearchResultsBase = class {
|
|||||||
this._clipboard = St.Clipboard.get_default();
|
this._clipboard = St.Clipboard.get_default();
|
||||||
|
|
||||||
this._cancellable = new Gio.Cancellable();
|
this._cancellable = new Gio.Cancellable();
|
||||||
|
|
||||||
|
this.actor.connect('destroy', this._onDestroy.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy() {
|
destroy() {
|
||||||
this.actor.destroy();
|
this.actor.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
_onDestroy() {
|
||||||
this._terms = [];
|
this._terms = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -341,14 +346,30 @@ var GridSearchResults = class extends SearchResultsBase {
|
|||||||
this._resultDisplayBin.set_child(this._bin);
|
this._resultDisplayBin.set_child(this._bin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_onDestroy() {
|
||||||
|
if (this._updateSearchLater) {
|
||||||
|
Meta.later_remove(this._updateSearchLater);
|
||||||
|
delete this._updateSearchLater;
|
||||||
|
}
|
||||||
|
|
||||||
|
super._onDestroy();
|
||||||
|
}
|
||||||
|
|
||||||
updateSearch(...args) {
|
updateSearch(...args) {
|
||||||
if (this._notifyAllocationId)
|
if (this._notifyAllocationId)
|
||||||
this.actor.disconnect(this._notifyAllocationId);
|
this.actor.disconnect(this._notifyAllocationId);
|
||||||
|
if (this._updateSearchLater) {
|
||||||
|
Meta.later_remove(this._updateSearchLater);
|
||||||
|
delete this._updateSearchLater;
|
||||||
|
}
|
||||||
|
|
||||||
// Make sure the maximum number of results calculated by
|
// Make sure the maximum number of results calculated by
|
||||||
// _getMaxDisplayedResults() is updated after width changes.
|
// _getMaxDisplayedResults() is updated after width changes.
|
||||||
this._notifyAllocationId = this.actor.connect('notify::allocation', () => {
|
this._notifyAllocationId = this.actor.connect('notify::allocation', () => {
|
||||||
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
|
if (this._updateSearchLater)
|
||||||
|
return;
|
||||||
|
this._updateSearchLater = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
|
||||||
|
delete this._updateSearchLater;
|
||||||
super.updateSearch(...args);
|
super.updateSearch(...args);
|
||||||
return GLib.SOURCE_REMOVE;
|
return GLib.SOURCE_REMOVE;
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user