appDisplay: Disconnect from parental controls on destroy

BaseAppView not disconnecting from the 'app-filter-changed'
signal means parental controls may trigger callbacks on
a destroyed grid, which tries to access destroyed icons,
which spams the journal with stack traces.

Disconnect from parental controls when BaseAppView is destroyed.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1441
This commit is contained in:
Georges Basile Stavracas Neto 2020-09-16 14:44:49 -03:00
parent ff9001d0a4
commit 5014d7e9fc

View File

@ -188,9 +188,10 @@ var BaseAppView = GObject.registerClass({
// Filter the apps through the users parental controls.
this._parentalControlsManager = ParentalControlsManager.getDefault();
this._parentalControlsManager.connect('app-filter-changed', () => {
this._redisplay();
});
this._appFilterChangedId =
this._parentalControlsManager.connect('app-filter-changed', () => {
this._redisplay();
});
// Drag n' Drop
this._lastOvershoot = -1;
@ -206,6 +207,10 @@ var BaseAppView = GObject.registerClass({
}
_onDestroy() {
if (this._appFilterChangedId > 0) {
this._parentalControlsManager.disconnect(this._appFilterChangedId);
this._appFilterChangedId = 0;
}
this._removeDelayedMove();
this._disconnectDnD();
}