[gnome-documents] searchbar: Allow enter to activate first search item



commit 13954c74f593806a5111bea2129bbaa28423fab0
Author: Pranav Kant <pranav913 gmail com>
Date:   Mon Feb 24 16:56:00 2014 +0530

    searchbar: Allow enter to activate first search item
    
    https://bugzilla.gnome.org/show_bug.cgi?id=719920

 src/embed.js       |   11 +++++++++++
 src/mainToolbar.js |    8 ++++----
 src/searchbar.js   |    4 ++++
 src/view.js        |   12 ++++++------
 4 files changed, 25 insertions(+), 10 deletions(-)
---
diff --git a/src/embed.js b/src/embed.js
index 0ef27c2..18ea2f5 100644
--- a/src/embed.js
+++ b/src/embed.js
@@ -34,6 +34,7 @@ const WindowMode = imports.windowMode;
 const Documents = imports.documents;
 
 const EvView = imports.gi.EvinceView;
+const Gd = imports.gi.Gd;
 const Gdk = imports.gi.Gdk;
 const Gio = imports.gi.Gio;
 const GLib = imports.gi.GLib;
@@ -275,6 +276,14 @@ const Embed = new Lang.Class({
             this._onWindowModeChanged(Application.modeController, windowMode, WindowMode.WindowMode.NONE);
     },
 
+    _onActivateResult: function() {
+        let iter = this._view.model.model.get_iter_first()[1];
+        if (iter) {
+            let id = this._view.model.model.get_value(iter, Gd.MainColumns.ID);
+            Application.documentManager.setActiveItem(Application.documentManager.getItemById(id))
+        };
+    },
+
     _onQueryStatusChanged: function() {
         let windowMode = Application.modeController.getWindowMode();
         if (windowMode != WindowMode.WindowMode.OVERVIEW)
@@ -349,6 +358,8 @@ const Embed = new Lang.Class({
             throw(new Error('Not handled'));
             break;
         }
+        this._toolbar.searchbar.connect('activate-result',
+                                        Lang.bind(this, this._onActivateResult));
     },
 
     _onActiveItemChanged: function(manager, doc) {
diff --git a/src/mainToolbar.js b/src/mainToolbar.js
index ac2d893..b89a420 100644
--- a/src/mainToolbar.js
+++ b/src/mainToolbar.js
@@ -49,9 +49,9 @@ const MainToolbar = new Lang.Class({
         this.widget.add(this.toolbar);
         this.toolbar.show();
 
-        this._searchbar = this.createSearchbar();
-        if (this._searchbar)
-            this.widget.add(this._searchbar.widget);
+        this.searchbar = this.createSearchbar();
+        if (this.searchbar)
+            this.widget.add(this.searchbar.widget);
 
         Application.documentManager.connect('load-started', Lang.bind(this,
             function() {
@@ -70,7 +70,7 @@ const MainToolbar = new Lang.Class({
         if (!this._handleEvent)
             return false;
 
-        let res = this._searchbar.handleEvent(event);
+        let res = this.searchbar.handleEvent(event);
         return res;
     },
 
diff --git a/src/searchbar.js b/src/searchbar.js
index 6d62e0f..b4fdfbb 100644
--- a/src/searchbar.js
+++ b/src/searchbar.js
@@ -67,6 +67,9 @@ const Searchbar = new Lang.Class({
                 if (keyval == Gdk.KEY_Escape) {
                     Application.application.change_action_state('search', GLib.Variant.new('b', false));
                     return true;
+                } else if (keyval == Gdk.KEY_Return) {
+                    this.emit('activate-result');
+                    return true;
                 }
 
                 return false;
@@ -200,6 +203,7 @@ const Searchbar = new Lang.Class({
         this._searchEntry.set_text('');
     }
 });
+Signals.addSignalMethods(Searchbar.prototype);
 
 const Dropdown = new Lang.Class({
     Name: 'Dropdown',
diff --git a/src/view.js b/src/view.js
index a52194a..0dd02de 100644
--- a/src/view.js
+++ b/src/view.js
@@ -187,7 +187,7 @@ const ViewContainer = new Lang.Class({
         this._adjustmentChangedId = 0;
         this._scrollbarVisibleId = 0;
 
-        this._model = new ViewModel();
+        this.model = new ViewModel();
 
         this.widget = new Gtk.Grid({ orientation: Gtk.Orientation.VERTICAL });
         this.view = new Gd.MainView({ shadow_type: Gtk.ShadowType.NONE });
@@ -332,7 +332,7 @@ const ViewContainer = new Lang.Class({
 
         if (!status) {
             // setup a model if we're not querying
-            this.view.set_model(this._model.model);
+            this.view.set_model(this.model.model);
 
             // unfreeze selection
             Application.selectionController.freezeSelection(false);
@@ -356,13 +356,13 @@ const ViewContainer = new Lang.Class({
 
         let generic = this.view.get_generic_view();
         let first = true;
-        this._model.model.foreach(Lang.bind(this,
+        this.model.model.foreach(Lang.bind(this,
             function(model, path, iter) {
-                let id = this._model.model.get_value(iter, Gd.MainColumns.ID);
+                let id = this.model.model.get_value(iter, Gd.MainColumns.ID);
                 let idIndex = selected.indexOf(id);
 
                 if (idIndex != -1) {
-                    this._model.model.set_value(iter, Gd.MainColumns.SELECTED, true);
+                    this.model.model.set_value(iter, Gd.MainColumns.SELECTED, true);
                     newSelection.push(id);
 
                     if (first) {
@@ -388,7 +388,7 @@ const ViewContainer = new Lang.Class({
     _onViewSelectionChanged: function() {
         // update the selection on the controller when the view signals a change
         let selectedURNs = Utils.getURNsFromPaths(this.view.get_selection(),
-                                                  this._model.model);
+                                                  this.model.model);
         Application.selectionController.setSelection(selectedURNs);
     },
 


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