[polari] roomList: Add "Connect" menu item
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [polari] roomList: Add "Connect" menu item
- Date: Tue, 26 Jul 2016 23:11:33 +0000 (UTC)
commit c9706cd483e7ade51ef657c1623405454f65d67e
Author: Florian Müllner <fmuellner gnome org>
Date: Tue Jul 26 18:04:46 2016 +0200
roomList: Add "Connect" menu item
The existing reconnect action only works for accounts that are not
offline (by user request). However there are cases where initiating
a connection can be useful, mostly when not joining channels through
the UI, but via an external service like webirc or bouncers. To
account for this, show a "Connect" item when the "Reconnect" action
isn't available.
https://bugzilla.gnome.org/show_bug.cgi?id=769192
data/resources/room-list-header.ui | 8 ++++++++
src/application.js | 2 ++
src/chatroomManager.js | 13 +++++++++++++
src/roomList.js | 15 +++++++++++++++
4 files changed, 38 insertions(+), 0 deletions(-)
---
diff --git a/data/resources/room-list-header.ui b/data/resources/room-list-header.ui
index d824f23..fed89c5 100644
--- a/data/resources/room-list-header.ui
+++ b/data/resources/room-list-header.ui
@@ -130,6 +130,14 @@
</object>
</child>
<child>
+ <object class="GtkModelButton" id="popoverConnect">
+ <property name="xalign">0</property>
+ <property name="visible">True</property>
+ <property name="action-name">app.connect-account</property>
+ <property name="text" translatable="yes">Connect</property>
+ </object>
+ </child>
+ <child>
<object class="GtkModelButton" id="popoverReconnect">
<property name="xalign">0</property>
<property name="visible">True</property>
diff --git a/src/application.js b/src/application.js
index 7df0b07..b98389b 100644
--- a/src/application.js
+++ b/src/application.js
@@ -79,6 +79,8 @@ const Application = new Lang.Class({
accels: ['<Primary>w'] },
{ name: 'authenticate-account',
parameter_type: GLib.VariantType.new('(os)') },
+ { name: 'connect-account',
+ parameter_type: GLib.VariantType.new('o') },
{ name: 'reconnect-account',
parameter_type: GLib.VariantType.new('o') },
{ name: 'user-list',
diff --git a/src/chatroomManager.js b/src/chatroomManager.js
index 7cddd98..3fe7726 100644
--- a/src/chatroomManager.js
+++ b/src/chatroomManager.js
@@ -174,6 +174,9 @@ const _ChatroomManager = new Lang.Class({
let leaveAction = this._app.lookup_action('leave-room');
leaveAction.connect('activate', Lang.bind(this, this._onLeaveActivated));
+ let connectAction = this._app.lookup_action('connect-account');
+ connectAction.connect('activate', Lang.bind(this, this._onConnectAccountActivated));
+
let reconnectAction = this._app.lookup_action('reconnect-account');
reconnectAction.connect('activate', Lang.bind(this, this._onReconnectAccountActivated));
@@ -278,6 +281,16 @@ const _ChatroomManager = new Lang.Class({
action.activate(parameter);
},
+ _onConnectAccountActivated: function(action, parameter) {
+ let accountPath = parameter.deep_unpack();
+ let factory = Tp.AccountManager.dup().get_factory();
+ let account = factory.ensure_account(accountPath, []);
+ account.request_presence_async(Tp.ConnectionPresenceType.AVAILABLE,
+ 'available',
+ account.requested_status_message,
+ null);
+ },
+
_onReconnectAccountActivated: function(action, parameter) {
let accountPath = parameter.deep_unpack();
let factory = Tp.AccountManager.dup().get_factory();
diff --git a/src/roomList.js b/src/roomList.js
index 10f3cf5..d7b1db1 100644
--- a/src/roomList.js
+++ b/src/roomList.js
@@ -151,6 +151,7 @@ const RoomListHeader = new Lang.Class({
'popoverStatus',
'popoverTitle',
'popoverPassword',
+ 'popoverConnect',
'popoverReconnect',
'popoverRemove',
'popoverProperties',
@@ -173,6 +174,7 @@ const RoomListHeader = new Lang.Class({
}));
let target = new GLib.Variant('o', this._account.get_object_path());
+ this._popoverConnect.action_target = target;
this._popoverReconnect.action_target = target;
this._popoverRemove.action_target = target;
this._popoverProperties.action_target = target;
@@ -197,9 +199,15 @@ const RoomListHeader = new Lang.Class({
Lang.bind(this, this._onConnectionStatusChanged));
this._onConnectionStatusChanged();
+ let presenceChangedId =
+ this._account.connect('notify::requested-presence-type',
+ Lang.bind(this, this._onRequestedPresenceChanged));
+ this._onRequestedPresenceChanged();
+
this.connect('destroy', Lang.bind(this, function() {
this._account.disconnect(displayNameChangedId);
this._account.disconnect(connectionStatusChangedId);
+ this._account.disconnect(presenceChangedId);
}));
},
@@ -279,6 +287,13 @@ const RoomListHeader = new Lang.Class({
}
},
+ _onRequestedPresenceChanged: function() {
+ let presence = this._account.requested_presence_type;
+ let offline = presence == Tp.ConnectionPresenceType.OFFLINE;
+ this._popoverConnect.visible = offline;
+ this._popoverReconnect.visible = !offline;
+ },
+
_getStatusLabel: function() {
switch (this._account.connection_status) {
case Tp.ConnectionStatus.CONNECTED:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]