[polari/wip/fmuellner/connect-button: 2/2] connections: Auto-select first match while filtering



commit eb50ea694436936ba09c1bf8bf2b1e40ef7befb3
Author: Florian Müllner <fmuellner gnome org>
Date:   Tue Mar 15 20:29:29 2016 +0100

    connections: Auto-select first match while filtering

 src/connections.js |   34 +++++++++++++++++-----------------
 src/joinDialog.js  |    5 -----
 2 files changed, 17 insertions(+), 22 deletions(-)
---
diff --git a/src/connections.js b/src/connections.js
index ba528ed..fae84b4 100644
--- a/src/connections.js
+++ b/src/connections.js
@@ -78,8 +78,6 @@ const ConnectionsList = new Lang.Class({
 
         this._rows = new Map();
 
-        this._filterTerms = [];
-        this._list.set_filter_func(Lang.bind(this, this._filterRows));
         this._list.set_header_func(Lang.bind(this, this._updateHeader));
 
         this._accountsMonitor = AccountsMonitor.getDefault();
@@ -107,21 +105,23 @@ const ConnectionsList = new Lang.Class({
     },
 
     setFilter: function(filter) {
-        this._list.select_row(null);
-        this._filterTerms = filter.trim().toLowerCase().replace(/\s+/g, ' ').split(' ');
-        this._list.invalidate_filter();
-    },
-
-    activateFirst: function() {
-        let row = this._list.get_row_at_y(0);
-        this._list.select_row(row);
-    },
-
-    _filterRows: function(row) {
-        let matchTerms = this._networksManager.getNetworkMatchTerms(row.id);
-        return this._filterTerms.every(function(term) {
-            return matchTerms.some(function(s) { return s.indexOf(term) != -1; });
-        });
+        let trimmedFilter = filter.trim().toLowerCase().replace(/\s+/g, ' ');
+        let filterTerms = trimmedFilter.split(' ');
+        this._list.foreach(Lang.bind(this, function(r) {
+            let matchTerms = this._networksManager.getNetworkMatchTerms(r.id);
+            r.visible = filterTerms.every(t => {
+                return matchTerms.some(s => s.indexOf(t) != -1);
+            });
+        }));
+
+        let id = this._list.connect('draw', Lang.bind(this, function() {
+            let row = trimmedFilter ? this._list.get_row_at_y(0) : null;
+            if (row && row.selectable)
+                this._list.select_row(row);
+            else
+                this._list.unselect_all();
+            this._list.disconnect(id);
+        }));
     },
 
     _updateHeader: function(row, before) {
diff --git a/src/joinDialog.js b/src/joinDialog.js
index 31f7af6..1149b61 100644
--- a/src/joinDialog.js
+++ b/src/joinDialog.js
@@ -155,11 +155,6 @@ const JoinDialog = new Lang.Class({
                 else
                     this.response(Gtk.ResponseType.CANCEL);
             }));
-        this._filterEntry.connect_after('activate', Lang.bind(this,
-            function() {
-                if (this._filterEntry.text.length > 0)
-                    this._connectionsList.activateFirst();
-            }));
     },
 
     _onAccountChanged: function() {


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