[polari/wip/raresv/popoverRebasedOnTracker] fixed some stuff with the signals, but there is still work to do
- From: Rares Visalom <raresvisalom src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [polari/wip/raresv/popoverRebasedOnTracker] fixed some stuff with the signals, but there is still work to do
- Date: Fri, 22 Jul 2016 13:10:56 +0000 (UTC)
commit 35e6ffb275984886f5074786e6a77c34cf156332
Author: raresv <rares visalom gmail com>
Date: Thu Jul 21 03:10:00 2016 +0300
fixed some stuff with the signals, but there is still work to do
src/chatView.js | 5 +---
src/userList.js | 62 +++++++++++++++++++++------------------------------
src/userTracker.js | 11 +-------
3 files changed, 29 insertions(+), 49 deletions(-)
---
diff --git a/src/chatView.js b/src/chatView.js
index 2d8b435..3036748 100644
--- a/src/chatView.js
+++ b/src/chatView.js
@@ -359,10 +359,7 @@ const ChatView = new Lang.Class({
Lang.bind(this, this._onNickStatusChanged));
this.connect('destroy', () => {
- if (this._nickStatusChangedId > 0)
- this._userTracker.unwatchRoomStatus(this._room, this._nickStatusChangedId);
- this._nickStatusChangedId = 0;
-
+ this._userTracker.unwatchRoomStatus(this._room, this._nickStatusChangedId);
this._userTracker = null;
});
},
diff --git a/src/userList.js b/src/userList.js
index 935e1e9..c98fb87 100644
--- a/src/userList.js
+++ b/src/userList.js
@@ -362,6 +362,14 @@ const UserPopover = new Lang.Class({
this._userDetails, 'notifications-enabled',
GObject.BindingFlags.SYNC_CREATE);
+ this._roomStatusChangedId = 0;
+ this._globalStatusChangedId = 0;
+ this._contactsChangedId = 0;
+
+ this.connect('destroy', () => {
+ this.nickname = null;
+ });
+
/* Noooo - this opens the popover!
* Assuming all widgets in the .ui have
* <property name="visible">true</property>
@@ -370,10 +378,18 @@ const UserPopover = new Lang.Class({
},
set nickname(nickname) {
- /* probably worth including a quick:
- if (this._nickname == nickname)
- return;
- */
+ if (this._nickname == nickname)
+ return;
+
+ if (this._nickname) {
+ this._userTracker.unwatchRoomStatus(this._room, this._roomStatusChangedId);
+ this._userTracker.disconnect(this._globalStatusChangedId);
+ this._userTracker.disconnect(this._contactsChangedId);
+ }
+
+ if (nickname == null)
+ return;
+
this._nickname = nickname;
let baseNick = Polari.util_get_basenick(nickname);
@@ -381,9 +397,7 @@ const UserPopover = new Lang.Class({
/* Seeing this code, I think getNotifyActionName() should maybe
* return the full name - it's a bit of an implementation detail
* that the action is added to the application ... */
- let notifyActionName = this._userTracker.getNotifyActionName(this._nickname);
- /* unused */
- let notifyAction = this._app.lookup_action(notifyActionName);
+ let actionName = this._userTracker.getNotifyActionName(this._nickname);
/* As I generally try to keep lines within the 80 character limit,
* I'll throw in:
@@ -391,43 +405,19 @@ const UserPopover = new Lang.Class({
this._notifyButton.action_name = actionName;
* as suggestion - the button property and tracker method name already
* have 'notify' in there, no need to repeat that over and over */
- this._notifyButton.action_name = 'app.' + notifyActionName;
-
- /* pointless comment */
- /*these need to be disconnected when not used anymore*/
- /* Nits:
- * - Convention is to use 'id', not 'signal'
- * - maybe this._roomStatusChangedId is clearer? */
- if (this._localStatusChangedSignal > 0)
- this._userTracker.unwatchRoomStatus(this._room, this._localStatusChangedSignal);
- /* this desparately needs line breaks, sth like
- this._localStatusChangedId =
+ this._notifyButton.action_name = 'app.' + actionName;
+
+ this._roomStatusChangedId =
this._userTracker.watchRoomStatus(this._room, this._nickname,
Lang.bind(this, this._onNickStatusChanged));
- */
- this._localStatusChangedSignal = this._userTracker.watchRoomStatus(this._room, this._nickname,
Lang.bind(this, this._onNickStatusChanged));
- /* Dto. */
- if (this._globalStatusChangedSignal)
- this._userTracker.disconnect(this._globalStatusChangedSignal);
- this._globalStatusChangedSignal = this._userTracker.connect("status-changed::"+this._nickname,
Lang.bind(this, this._updateContents));
+ this._globalStatusChangedId = this._userTracker.connect("status-changed::"+this._nickname,
Lang.bind(this, this._updateContents));
this._updateContents();
- /*disconnect when not needed anymore*/
- if (this._contactsChangedSignal)
- this._userTracker.disconnect(this._contactsChangedSignal);
- this._contactsChangedSignal = this._userTracker.connect("contacts-changed::" + baseNick, () => {
+ this._contactsChangedId = this._userTracker.connect("contacts-changed::" + baseNick, () => {
this._userDetails.user = this._userTracker.lookupContact(this._nickname);
});
-
- /* Another comment on signal handlers:
- * It is good practice to initialize them to 0 in _init(), and - more
- * importantly - you need to disconnect the handlers when the popover
- * is destroyed, or else the handler will keep running while the
- * user tracker still exists (it's per account, so if you just leave
- * a room instead of closing polari altogether, that's the expcted
- * case */
},
get nickname() {
diff --git a/src/userTracker.js b/src/userTracker.js
index 4ad5f9c..9389088 100644
--- a/src/userTracker.js
+++ b/src/userTracker.js
@@ -213,7 +213,7 @@ const UserTracker = new Lang.Class({
let notifyAction = this._app.lookup_action(notifyActionName);
if (notifyAction.get_state().get_boolean()) {
- this.emitWatchedUserNotification(room, member);
+ this._emitNotification(room, member);
/*change state so that the button is not pressed if it reappears again*/
notifyAction.change_state(GLib.Variant.new('b', false));
}
@@ -302,12 +302,6 @@ const UserTracker = new Lang.Class({
handler: callback
});
- /* it would be good to follow gsignal semantics and not use 0 as
- * a valid handler ID - see the pattern of
- if (this._someSignalId > 0)
- this._someObject.disconnect(this._someSignalId);
- this._someSignalId = 0;
- * used all over the place */
return this._handlerCounter;
},
@@ -325,8 +319,7 @@ const UserTracker = new Lang.Class({
this._roomMapping.get(room)._handlerMapping.delete(handlerID);
},
- /* overly long name again, should at the very least be private */
- emitWatchedUserNotification: function (room, member) {
+ _emitNotification: function (room, member) {
let notification = new Gio.Notification();
notification.set_title(_("User is online"));
notification.set_body(_("User %s is now online.").format(member.alias));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]