[gnome-shell/wip/swarm: 21/22] Search: Use AppIcon for gridResults



commit 4e6d9b478fe2d321dea9906677dfdb8d14cfa123
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.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=734726

 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 89d6909..59fd31a 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 8807b5b..dba22c0 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -1053,26 +1053,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);
@@ -1745,6 +1725,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 7c2469e..8f5516c 100644
--- a/js/ui/search.js
+++ b/js/ui/search.js
@@ -145,47 +145,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 });
@@ -219,51 +198,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;
     }
 });
 
@@ -310,11 +269,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) {
     },
 
@@ -343,7 +297,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;
                 }));
@@ -426,7 +379,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) {
@@ -474,7 +427,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]