[polari] ui: Select last used account by default in dialogs



commit b92901fa003b2a383ca7ff72334c4561bb3e2efa
Author: Florian Müllner <fmuellner gnome org>
Date:   Mon Jul 28 16:15:33 2014 +0200

    ui: Select last used account by default in dialogs
    
    Connections are currently ordered alphabetically with the first
    one selected when opening the dialog. While not arbitrary, this
    does not support users in joining the rooms they want as quickly
    as possible - remembering the last account used for joining a room
    and making it persistent has a higher chance of picking the account
    the user wants, so do that instead of always selecting the first one.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=711833

 data/org.gnome.polari.gschema.xml |    3 +++
 src/joinDialog.js                 |   12 +++++++++++-
 src/messageDialog.js              |   12 +++++++++++-
 3 files changed, 25 insertions(+), 2 deletions(-)
---
diff --git a/data/org.gnome.polari.gschema.xml b/data/org.gnome.polari.gschema.xml
index 7952296..e55981c 100644
--- a/data/org.gnome.polari.gschema.xml
+++ b/data/org.gnome.polari.gschema.xml
@@ -6,6 +6,9 @@
       <summary>Saved channel list</summary>
       <description>List of channels to restore on startup</description>
     </key>
+    <key type="s" name="last-used-account">
+      <default>''</default>
+    </key>
     <key type="ai" name="window-size">
       <default>[800,500]</default>
       <summary>Window size</summary>
diff --git a/src/joinDialog.js b/src/joinDialog.js
index c0480ef..fca8709 100644
--- a/src/joinDialog.js
+++ b/src/joinDialog.js
@@ -1,6 +1,7 @@
 const Gio = imports.gi.Gio;
 const GLib = imports.gi.GLib;
 const Gtk = imports.gi.Gtk;
+const Tp = imports.gi.TelepathyGLib;
 const Tpl = imports.gi.TelepathyLogger;
 
 const AccountsMonitor = imports.accountsMonitor;
@@ -20,6 +21,8 @@ const JoinDialog = new Lang.Class({
     _init: function() {
         this._createWidget();
 
+        this._settings = new Gio.Settings({ schema: 'org.gnome.polari' });
+
         this._accountsMonitor = AccountsMonitor.getDefault();
 
         this._accounts = {};
@@ -149,6 +152,9 @@ const JoinDialog = new Lang.Class({
         let selected = this._connectionCombo.get_active_text();
         let account = this._accounts[selected];
 
+        this._settings.set_string('last-used-account',
+                                  account.get_object_path());
+
         let room = this._nameEntry.get_text();
         if (room[0] != '#')
             room = '#' + room;
@@ -172,7 +178,11 @@ const JoinDialog = new Lang.Class({
         for (let i = 0; i < names.length; i++)
             this._connectionCombo.append_text(names[i]);
         this._connectionCombo.sensitive = names.length > 1;
-        this._connectionCombo.set_active(0);
+
+        let factory = Tp.AccountManager.dup().get_factory();
+        let lastUsed = factory.ensure_account(this._settings.get_string('last-used-account'), []);
+        let activeIndex = lastUsed ? names.indexOf(lastUsed.display_name) : 0;
+        this._connectionCombo.set_active(activeIndex);
     },
 
     _updateCanConfirm: function() {
diff --git a/src/messageDialog.js b/src/messageDialog.js
index 9c67df8..f3aa9dd 100644
--- a/src/messageDialog.js
+++ b/src/messageDialog.js
@@ -16,6 +16,8 @@ const MessageDialog = new Lang.Class({
     _init: function() {
         this._createWidget();
 
+        this._settings = new Gio.Settings({ schema: 'org.gnome.polari' });
+
         this._accounts = {};
         AccountsMonitor.getDefault().dupAccounts().forEach(Lang.bind(this,
             function(a) {
@@ -30,8 +32,13 @@ const MessageDialog = new Lang.Class({
             });
         for (let i = 0; i < names.length; i++)
             this._connectionCombo.append_text(names[i]);
-        this._connectionCombo.set_active(0);
         this._connectionCombo.sensitive = names.length > 1;
+
+        let factory = Tp.AccountManager.dup().get_factory();
+        let lastUsed = factory.ensure_account(this._settings.get_string('last-used-account'), []);
+        let activeIndex = lastUsed ? names.indexOf(lastUsed.display_name) : 0;
+        this._connectionCombo.set_active(activeIndex);
+
         this._updateCanConfirm();
         this._updateRecentList([]);
     },
@@ -152,6 +159,9 @@ const MessageDialog = new Lang.Class({
         let selected = this._connectionCombo.get_active_text();
         let account = this._accounts[selected];
 
+        this._settings.set_string('last-used-account',
+                                  account.get_object_path());
+
         let user = this._nameEntry.get_text();
 
         let app = Gio.Application.get_default();


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]