[gnome-shell/wip/swarm: 6/9] Search: Use AppIcon for gridResults



commit 97621b96716d636713d1125d2e6f8fbe827e8e01
Author: Carlos Soriano <carlos soriano89 gmail com>
Date:   Mon Aug 11 16:28:39 2014 +0200

    Search: Use AppIcon for gridResults
    
    Currently GridResult and ListResult inherit from a base class named
    SearchResult which creates a StButton as a base item.
    Then GridResult put as a child of the StButton an AppIcon created on
    provider.createResultObject. But, StButton lacks some features of
    AppIcon like dnd, style, etc. So GridResult add those in the class and
    also adds the style of the AppIcon on the theme.
    
    Obviously that doesn't look very appealing, so instead of that, delete
    the base class and provide AppIcon some API needed by
    Search and then use directly AppIcon on GridResult.

 data/theme/gnome-shell.css |   14 ++----
 js/ui/appDisplay.js        |   27 +++--------
 js/ui/search.js            |  105 ++++++++++++--------------------------------
 3 files changed, 40 insertions(+), 106 deletions(-)
---
diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
index db671e7..0236fd6 100644
--- a/data/theme/gnome-shell.css
+++ b/data/theme/gnome-shell.css
@@ -47,8 +47,7 @@ stage {
 .window-caption,
 .switcher-list,
 .app-well-app > .overview-icon,
-.show-apps > .overview-icon,
-.grid-search-result .overview-icon {
+.show-apps > .overview-icon {
     font-size: 9pt;
     font-weight: bold;
 }
@@ -1078,8 +1077,7 @@ StScrollBar StButton#vhandle:active {
     background-image: url("more-results.svg");
 }
 
-.app-well-app > .overview-icon.overview-icon-with-label,
-.grid-search-result .overview-icon.overview-icon-with-label {
+.app-well-app > .overview-icon.overview-icon-with-label {
     /* since the label controls its own spacing, it is visually more
     consistent to use different padding values for top and bottom */
     padding: 10px 8px 5px 8px;
@@ -1089,8 +1087,7 @@ StScrollBar StButton#vhandle:active {
 .app-well-app > .overview-icon,
 .show-apps > .overview-icon,
 .search-provider-icon,
-.list-search-result,
-.grid-search-result .overview-icon {
+.list-search-result {
     border-radius: 4px;
     padding: 6px;
     border: 1px rgba(0,0,0,0);
@@ -1126,8 +1123,7 @@ StScrollBar StButton#vhandle:active {
 .app-well-app:hover > .overview-icon,
 .show-apps:hover > .overview-icon,
 .search-provider-icon:hover,
-.list-search-result:hover,
-.grid-search-result:hover .overview-icon {
+.list-search-result:hover {
     background-color: rgba(255,255,255,0.1);
     text-shadow: black 0px 2px 2px;
     transition-duration: 100ms;
@@ -1175,12 +1171,10 @@ StScrollBar StButton#vhandle:active {
 }
 
 .app-well-app:focus > .overview-icon,
-.grid-search-result:focus .overview-icon,
 .show-apps:focus > .overview-icon,
 .search-provider-icon:focus,
 .list-search-result:focus,
 .app-well-app:selected > .overview-icon,
-.grid-search-result:selected .overview-icon,
 .search-provider-icon:selected,
 .list-search-result:selected {
     background-color: rgba(255,255,255,0.33);
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index dfe6e98..f6fdfb4 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -1068,26 +1068,6 @@ const AppSearchProvider = new Lang.Class({
         this.getInitialResultSet(terms, callback, cancellable);
     },
 
-    activateResult: function(result) {
-        let app = this._appSys.lookup_app(result);
-        let event = Clutter.get_current_event();
-        let modifiers = event ? event.get_state() : 0;
-        let openNewWindow = modifiers & Clutter.ModifierType.CONTROL_MASK;
-
-        if (openNewWindow)
-            app.open_new_window(-1);
-        else
-            app.activate();
-    },
-
-    dragActivateResult: function(id, params) {
-        params = Params.parse(params, { workspace: -1,
-                                        timestamp: 0 });
-
-        let app = this._appSys.lookup_app(id);
-        app.open_new_window(workspace);
-    },
-
     createResultObject: function (resultMeta) {
         let app = this._appSys.lookup_app(resultMeta['id']);
         return new AppIcon(app);
@@ -1760,6 +1740,13 @@ const AppIcon = new Lang.Class({
     shouldShowTooltip: function() {
         return this.actor.hover && (!this._menu || !this._menu.isOpen);
     },
+
+    setSelected: function(selected) {
+        if (selected)
+            this.actor.add_style_pseudo_class('selected');
+        else
+            this.actor.remove_style_pseudo_class('selected');
+    }
 });
 Signals.addSignalMethods(AppIcon.prototype);
 
diff --git a/js/ui/search.js b/js/ui/search.js
index 1a15dbd..753287b 100644
--- a/js/ui/search.js
+++ b/js/ui/search.js
@@ -144,47 +144,26 @@ const MaxWidthBin = new Lang.Class({
     }
 });
 
-const SearchResult = new Lang.Class({
-    Name: 'SearchResult',
+const ListSearchResult = new Lang.Class({
+    Name: 'ListSearchResult',
+
+    ICON_SIZE: 64,
 
-    _init: function(provider, metaInfo) {
+    _init: function(provider, metaInfo, terms) {
         this.provider = provider;
         this.metaInfo = metaInfo;
+        this._terms = terms;
 
         this.actor = new St.Button({ reactive: true,
                                      can_focus: true,
                                      track_hover: true,
                                      x_align: St.Align.START,
-                                     y_fill: true });
+                                     x_fill: true,
+                                     y_fill: true,
+                                     style_class: 'list-search-result'});
 
         this.actor._delegate = this;
         this.actor.connect('clicked', Lang.bind(this, this.activate));
-    },
-
-    activate: function() {
-        this.emit('activate', this.metaInfo.id);
-    },
-
-    setSelected: function(selected) {
-        if (selected)
-            this.actor.add_style_pseudo_class('selected');
-        else
-            this.actor.remove_style_pseudo_class('selected');
-    }
-});
-Signals.addSignalMethods(SearchResult.prototype);
-
-const ListSearchResult = new Lang.Class({
-    Name: 'ListSearchResult',
-    Extends: SearchResult,
-
-    ICON_SIZE: 64,
-
-    _init: function(provider, metaInfo) {
-        this.parent(provider, metaInfo);
-
-        this.actor.style_class = 'list-search-result';
-        this.actor.x_fill = true;
 
         let content = new St.BoxLayout({ style_class: 'list-search-result-content',
                                          vertical: false });
@@ -218,51 +197,31 @@ const ListSearchResult = new Lang.Class({
                                        x_align: St.Align.START,
                                        y_align: St.Align.END });
         }
+    },
+
+    activate: function() {
+        this.provider.activateResult(this.metaInfo.id, this._terms);
+        Main.overview.toggle();
+    },
+
+    setSelected: function(selected) {
+        if (selected)
+            this.actor.add_style_pseudo_class('selected');
+        else
+            this.actor.remove_style_pseudo_class('selected');
     }
 });
 
 const GridSearchResult = new Lang.Class({
     Name: 'GridSearchResult',
-    Extends: SearchResult,
-
-    _init: function(provider, metaInfo) {
-        this.parent(provider, metaInfo);
-
-        this.actor.style_class = 'grid-search-result';
-
-        let content = provider.createResultObject(metaInfo);
-        this._dragActorSource = content;
 
-        this.actor.set_child(content.actor);
-
-        let draggable = DND.makeDraggable(this.actor);
-        draggable.connect('drag-begin',
-                          Lang.bind(this, function() {
-                              Main.overview.beginItemDrag(this);
-                          }));
-        draggable.connect('drag-cancelled',
-                          Lang.bind(this, function() {
-                              Main.overview.cancelledItemDrag(this);
-                          }));
-        draggable.connect('drag-end',
-                          Lang.bind(this, function() {
-                              Main.overview.endItemDrag(this);
-                          }));
-    },
-
-    getDragActorSource: function() {
-        return this._dragActorSource;
-    },
-
-    getDragActor: function() {
-        return this.metaInfo['createIcon'](Main.overview.dashIconSize);
-    },
+    _init: function(provider, metaInfo, terms) {
+        this.provider = provider;
+        this.metaInfo = metaInfo;
 
-    shellWorkspaceLaunch: function(params) {
-        if (this.provider.dragActivateResult)
-            this.provider.dragActivateResult(this.metaInfo.id, params);
-        else
-            this.provider.activateResult(this.metaInfo.id, this.terms);
+        // Expect an AppIcon which already takes management of drag,
+        // activation, selection, etc.
+        this.actor = provider.createResultObject(metaInfo).actor;
     }
 });
 
@@ -309,11 +268,6 @@ const SearchResultsBase = new Lang.Class({
         this.emit('key-focus-in', actor);
     },
 
-    _activateResult: function(result, id) {
-        this.provider.activateResult(id, this._terms);
-        Main.overview.toggle();
-    },
-
     _setMoreIconVisible: function(visible) {
     },
 
@@ -342,7 +296,6 @@ const SearchResultsBase = new Lang.Class({
                 metasNeeded.forEach(Lang.bind(this, function(resultId, i) {
                     let meta = metas[i];
                     let display = this._createResultDisplay(meta);
-                    display.connect('activate', Lang.bind(this, this._activateResult));
                     display.actor.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
                     this._resultDisplays[resultId] = display;
                 }));
@@ -425,7 +378,7 @@ const ListSearchResults = new Lang.Class({
     },
 
     _createResultDisplay: function(meta) {
-        return new ListSearchResult(this.provider, meta);
+        return new ListSearchResult(this.provider, meta, this._terms);
     },
 
     _addItem: function(display) {
@@ -473,7 +426,7 @@ const GridSearchResults = new Lang.Class({
     },
 
     _createResultDisplay: function(meta) {
-        return new GridSearchResult(this.provider, meta);
+        return new GridSearchResult(this.provider, meta, this._terms);
     },
 
     _addItem: function(display) {


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