[gnome-shell] Make it possible to register new search providers for the dash after it has been created.



commit 039229f340ed48b6affdd189c27b5fae19872b01
Author: Tor-björn Claesson <tclaesson gmail com>
Date:   Sat Aug 7 19:43:41 2010 +0200

    Make it possible to register new search providers for the dash after it has been created.
    
    Factors out meta creation from SearchResults._init to SearchResults.createProviderMeta(provider).
    
    Adds Dash.addSearchProvider(provider).
    
    https://bugzilla.gnome.org/show_bug.cgi?id=625954

 js/ui/dash.js |   69 ++++++++++++++++++++++++++++++++------------------------
 1 files changed, 39 insertions(+), 30 deletions(-)
---
diff --git a/js/ui/dash.js b/js/ui/dash.js
index 982e9c7..530962b 100644
--- a/js/ui/dash.js
+++ b/js/ui/dash.js
@@ -416,38 +416,40 @@ SearchResults.prototype = {
         this._selectedProvider = -1;
         this._providers = this._searchSystem.getProviders();
         this._providerMeta = [];
-        for (let i = 0; i < this._providers.length; i++) {
-            let provider = this._providers[i];
-            let providerBox = new St.BoxLayout({ style_class: 'dash-search-section',
-                                                  vertical: true });
-            let titleButton = new St.Button({ style_class: 'dash-search-section-header',
-                                              reactive: true,
-                                              x_fill: true,
-                                              y_fill: true });
-            titleButton.connect('clicked', Lang.bind(this, function () { this._onHeaderClicked(provider); }));
-            providerBox.add(titleButton);
-            let titleBox = new St.BoxLayout();
-            titleButton.set_child(titleBox);
-            let title = new St.Label({ text: provider.title });
-            let count = new St.Label();
-            titleBox.add(title, { expand: true });
-            titleBox.add(count);
-
-            let resultDisplayBin = new St.Bin({ style_class: 'dash-search-section-results',
-                                                x_fill: true,
-                                                y_fill: true });
-            providerBox.add(resultDisplayBin, { expand: true });
-            let resultDisplay = provider.createResultContainerActor();
-            if (resultDisplay == null) {
-                resultDisplay = new OverflowSearchResults(provider);
-            }
-            resultDisplayBin.set_child(resultDisplay.actor);
+        for (let i = 0; i < this._providers.length; i++)
+            this.createProviderMeta(this._providers[i]);
+    },
 
-            this._providerMeta.push({ actor: providerBox,
-                                      resultDisplay: resultDisplay,
-                                      count: count });
-            this.actor.add(providerBox);
+    createProviderMeta: function(provider) {
+        let providerBox = new St.BoxLayout({ style_class: 'dash-search-section',
+                                             vertical: true });
+        let titleButton = new St.Button({ style_class: 'dash-search-section-header',
+                                          reactive: true,
+                                          x_fill: true,
+                                          y_fill: true });
+        titleButton.connect('clicked', Lang.bind(this, function () { this._onHeaderClicked(provider); }));
+        providerBox.add(titleButton);
+        let titleBox = new St.BoxLayout();
+        titleButton.set_child(titleBox);
+        let title = new St.Label({ text: provider.title });
+        let count = new St.Label();
+        titleBox.add(title, { expand: true });
+        titleBox.add(count);
+
+        let resultDisplayBin = new St.Bin({ style_class: 'dash-search-section-results',
+                                            x_fill: true,
+                                            y_fill: true });
+        providerBox.add(resultDisplayBin, { expand: true });
+        let resultDisplay = provider.createResultContainerActor();
+        if (resultDisplay == null) {
+            resultDisplay = new OverflowSearchResults(provider);
         }
+        resultDisplayBin.set_child(resultDisplay.actor);
+
+        this._providerMeta.push({ actor: providerBox,
+                                  resultDisplay: resultDisplay,
+                                  count: count });
+        this.actor.add(providerBox);
     },
 
     _clearDisplay: function() {
@@ -864,6 +866,13 @@ Dash.prototype = {
         return false;
     },
 
+    addSearchProvider: function(provider) {
+        //Add a new search provider to the dash.
+
+        this._searchSystem.registerProvider(provider);
+        this.searchResults.createProviderMeta(provider);
+    },
+
     show: function() {
         this._searchEntry.show();
         if (this._keyPressId == 0)



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