panel: Disconnect destroy signal handler when needed
The panel corners try to match their style to the buttons closest to them. In order to make sure the corner styles stay in sync with their neighboring buttons, they connect to the style-changed signals of the buttons. In order to make sure the style-changed signal handler isn't leaked, it gets disconnected when the button is destroyed. Unfortunately, the destroy signal handler connection itself gets leaked! This commit ensures the destroy signal handler gets disconnected any time the neighboring button is re-determined. https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1460
This commit is contained in:
parent
9963f7ce84
commit
b41ef2f6e3
@ -591,14 +591,19 @@ class PanelCorner extends St.DrawingArea {
|
||||
button = this._findRightmostButton(box);
|
||||
|
||||
if (button) {
|
||||
if (this._button && this._buttonStyleChangedSignalId) {
|
||||
this._button.disconnect(this._buttonStyleChangedSignalId);
|
||||
this._button.style = null;
|
||||
if (this._button) {
|
||||
if (this._buttonStyleChangedSignalId) {
|
||||
this._button.disconnect(this._buttonStyleChangedSignalId);
|
||||
this._button.style = null;
|
||||
}
|
||||
|
||||
if (this._buttonDestroySignalId)
|
||||
this._button.disconnect(this._buttonDestroySignalId);
|
||||
}
|
||||
|
||||
this._button = button;
|
||||
|
||||
button.connect('destroy', () => {
|
||||
this._buttonDestroySignalId = button.connect('destroy', () => {
|
||||
if (this._button == button) {
|
||||
this._button = null;
|
||||
this._buttonStyleChangedSignalId = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user