[gnome-documents] toolbar: add a Search button



commit e18ec7830a21ce7c001b10094fa8db138b7484d0
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Thu Jul 19 13:20:50 2012 -0400

    toolbar: add a Search button
    
    In both overview and preview modes.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=668727

 src/application.js |   11 +++++++++++
 src/mainToolbar.js |   14 ++++++++------
 src/mainWindow.js  |    5 -----
 src/preview.js     |    3 +++
 src/searchbar.js   |   26 +++++++++++++++++---------
 src/utils.js       |   13 -------------
 6 files changed, 39 insertions(+), 33 deletions(-)
---
diff --git a/src/application.js b/src/application.js
index 0c204ff..ac5b441 100644
--- a/src/application.js
+++ b/src/application.js
@@ -137,6 +137,17 @@ const Application = new Lang.Class({
                     doc.print(this._mainWindow.window);
             }));
         this.add_action(printAction);
+
+        // search toolbar button
+        let searchAction = Gio.SimpleAction.new_stateful('search',
+            null, GLib.Variant.new('b', false));
+        searchAction.connect('activate', Lang.bind(this,
+            function() {
+                let state = searchAction.get_state();
+                searchAction.change_state(GLib.Variant.new('b', !state.get_boolean()));
+            }));
+        this.add_action(searchAction);
+        this.add_accelerator('<Primary>f', 'app.search', null);
     },
 
     _initAppMenu: function() {
diff --git a/src/mainToolbar.js b/src/mainToolbar.js
index 6ce23f8..2f9a304 100644
--- a/src/mainToolbar.js
+++ b/src/mainToolbar.js
@@ -36,10 +36,6 @@ const Mainloop = imports.mainloop;
 const Global = imports.global;
 const Searchbar = imports.searchbar;
 const Tweener = imports.util.tweener;
-const WindowMode = imports.windowMode;
-
-const EvView = imports.gi.EvinceView;//for printing
-const Notifications = imports.notifications;//for printing
 
 const MainToolbar = new Lang.Class({
     Name: 'MainToolbar',
@@ -72,8 +68,10 @@ const MainToolbar = new Lang.Class({
         return res;
     },
 
-    toggleSearch: function() {
-        this._searchbar.toggle();
+    addSearchButton: function() {
+        let searchButton =
+            this.widget.add_toggle('edit-find-symbolic', _("Search"), false);
+        searchButton.action_name = 'app.search';
     }
 });
 
@@ -199,6 +197,8 @@ const OverviewToolbar = new Lang.Class({
         this.widget.get_style_context().add_class('documents-selection-mode');
         this.widget.reset_style();
 
+        this.addSearchButton();
+
         let selectionButton =
             this.widget.add_button(null, _("Done"), false);
         selectionButton.connect('clicked', Lang.bind(this,
@@ -232,6 +232,8 @@ const OverviewToolbar = new Lang.Class({
     },
 
     _populateForOverview: function() {
+        this.addSearchButton();
+
         let selectionButton =
             this.widget.add_button('emblem-default-symbolic', _("Select Items"), false);
         selectionButton.connect('clicked', Lang.bind(this,
diff --git a/src/mainWindow.js b/src/mainWindow.js
index 1c8a7b6..cc0b702 100644
--- a/src/mainWindow.js
+++ b/src/mainWindow.js
@@ -142,11 +142,6 @@ const MainWindow = new Lang.Class({
     _onKeyPressEvent: function(widget, event) {
         let toolbar = this._embed.getMainToolbar();
 
-        if (Utils.isSearchEvent(event)) {
-            toolbar.toggleSearch();
-            return true;
-        }
-
         if (toolbar.handleEvent(event))
             return true;
 
diff --git a/src/preview.js b/src/preview.js
index 41149cb..1bdb9b8 100644
--- a/src/preview.js
+++ b/src/preview.js
@@ -311,6 +311,9 @@ const PreviewToolbar = new Lang.Class({
                 Global.documentManager.setActiveItem(null);
             }));
 
+        // search button, on the right of the toolbar
+        this.addSearchButton();
+
         // menu button, on the right of the toolbar
         let menuModel = new Gio.Menu();
         menuModel.append_item(Gio.MenuItem.new(_("Open"), 'app.open-current'));
diff --git a/src/searchbar.js b/src/searchbar.js
index 979246c..1654c26 100644
--- a/src/searchbar.js
+++ b/src/searchbar.js
@@ -21,6 +21,7 @@
 
 const Gd = imports.gi.Gd;
 const Gdk = imports.gi.Gdk;
+const GLib = imports.gi.GLib;
 const Gtk = imports.gi.Gtk;
 const GtkClutter = imports.gi.GtkClutter;
 const Tracker = imports.gi.Tracker;
@@ -299,7 +300,7 @@ const Searchbar = new Lang.Class({
                 let keyval = event.get_keyval()[1];
 
                 if (keyval == Gdk.KEY_Escape) {
-                    this.hide();
+                    Global.application.change_action_state('search', GLib.Variant.new('b', false));
                     return true;
                 }
 
@@ -320,6 +321,20 @@ const Searchbar = new Lang.Class({
                     }));
             }));
 
+        // connect to the search action state for visibility
+        let searchStateId = Global.application.connect('action-state-changed::search', Lang.bind(this,
+            function(source, actionName, state) {
+                if (state.get_boolean())
+                    this.show();
+                else
+                    this.hide();
+            }));
+        this.widget.connect('destroy', Lang.bind(this,
+            function() {
+                Global.application.disconnect(searchStateId);
+                Global.application.change_action_state('search', GLib.Variant.new('b', false));
+            }));
+
         this.widget.show_all();
     },
 
@@ -361,19 +376,12 @@ const Searchbar = new Lang.Class({
             handled = true;
 
             if (!this._in)
-                this.show();
+                Global.application.change_action_state('search', GLib.Variant.new('b', true));
         }
 
         return handled;
     },
 
-    toggle: function() {
-        if (this._visible)
-            this.hide();
-        else
-            this.show();
-    },
-
     show: function() {
         let eventDevice = Gtk.get_current_event_device();
 
diff --git a/src/utils.js b/src/utils.js
index d3f060c..9dd6b22 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -97,19 +97,6 @@ function getURNFromPath(path, model) {
     return id;
 }
 
-function isSearchEvent(event) {
-    let keyval = event.get_keyval()[1];
-    let state = event.get_state()[1];
-
-    let retval =
-        (((keyval == Gdk.KEY_f) &&
-          ((state & Gdk.ModifierType.CONTROL_MASK) != 0)) ||
-         ((keyval == Gdk.KEY_s) &&
-          ((state & Gdk.ModifierType.CONTROL_MASK) != 0)));
-
-    return retval;
-}
-
 function alphaGtkWidget(widget) {
     widget.override_background_color(0, new Gdk.RGBA({ red: 0,
                                                        green: 0,



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