[polari/wip/fmuellner/invalid-object-access: 5/8] roomListRow: Disconnect room signals
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [polari/wip/fmuellner/invalid-object-access: 5/8] roomListRow: Disconnect room signals
- Date: Sat, 9 Dec 2017 21:16:21 +0000 (UTC)
commit d4ed3a1c72c0378e3a2062b4be3267478d171da4
Author: Florian Müllner <fmuellner gnome org>
Date: Wed Dec 6 00:37:30 2017 +0100
roomListRow: Disconnect room signals
Room list rows are destroyed from a ::room-removed handler, which means
it has a slightly shorter life time than the corresponding room; without
disconnecting
src/roomList.js | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
---
diff --git a/src/roomList.js b/src/roomList.js
index 6635b67..514636c 100644
--- a/src/roomList.js
+++ b/src/roomList.js
@@ -34,20 +34,26 @@ var RoomRow = GObject.registerClass({
this._onButtonRelease.bind(this));
this.connect('key-press-event', this._onKeyPress.bind(this));
- room.connect('notify::channel', this._onChannelChanged.bind(this));
room.bind_property('display-name', this._roomLabel, 'label',
GObject.BindingFlags.SYNC_CREATE);
+ let channelChangedId =
+ room.connect('notify::channel', this._onChannelChanged.bind(this));
+
+ let connectionStatusChangedId = 0;
+
if (this._room.type == Tp.HandleType.ROOM) {
- let connectionStatusChangedId =
+ connectionStatusChangedId =
this.account.connect('notify::connection-status',
this._onConnectionStatusChanged.bind(this));
this._onConnectionStatusChanged();
+ }
- this.connect('destroy', () => {
+ this.connect('destroy', () => {
+ room.disconnect(channelChangedId);
+ if (connectionStatusChangedId)
this.account.disconnect(connectionStatusChangedId);
- });
- }
+ });
this._updatePending();
this._onChannelChanged();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]