[gnome-shell/wip/swarm: 1/6] Search: Use AppIcon for gridResults
- From: Carlos Soriano <csoriano src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/wip/swarm: 1/6] Search: Use AppIcon for gridResults
- Date: Thu, 3 Jul 2014 11:23:43 +0000 (UTC)
commit 40b9ee1a2adf2eb9080924a0de89229146559a7c
Author: Carlos Soriano <carlos soriano89 gmail com>
Date: Thu Jun 26 21:27:54 2014 +0200
Search: Use AppIcon for gridResults
data/theme/gnome-shell.css | 14 ++----
js/ui/appDisplay.js | 50 ++++++++--------------
js/ui/search.js | 98 +++++++++++++-------------------------------
3 files changed, 51 insertions(+), 111 deletions(-)
---
diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
index c2d1f18..1bcae20 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 c70d250..68f4205 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -1049,26 +1049,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);
@@ -1589,13 +1569,9 @@ const AppIcon = new Lang.Class({
_onClicked: function(actor, button) {
this._removeMenuTimeout();
+ this.activate(button);
+ Main.overview.hide();
- if (button == 1) {
- this._onActivate(Clutter.get_current_event());
- } else if (button == 2) {
- this.app.open_new_window(-1);
- Main.overview.hide();
- }
return false;
},
@@ -1650,15 +1626,18 @@ const AppIcon = new Lang.Class({
this.emit('menu-state-changed', false);
},
- _onActivate: function (event) {
- let modifiers = event.get_state();
+ activate: function (button) {
+ let event = Clutter.get_current_event();
+ let modifiers = event ? event.get_state() : 0;
+ let openNewWindow = modifiers & Clutter.ModifierType.CONTROL_MASK &&
+ this.app.state == Shell.AppState.RUNNING ||
+ button && button == 2;
+
- if (modifiers & Clutter.ModifierType.CONTROL_MASK
- && this.app.state == Shell.AppState.RUNNING) {
+ if (openNewWindow)
this.app.open_new_window(-1);
- } else {
+ else
this.app.activate();
- }
Main.overview.hide();
},
@@ -1683,6 +1662,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 e0ad069..f820688 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,44 +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;
- },
+ _init: function(provider, metaInfo, terms) {
+ this.provider = provider;
+ this.metaInfo = metaInfo;
- getDragActor: function() {
- return this.metaInfo['createIcon'](Main.overview.dashIconSize);
+ // Expect an AppIcon which already takes management of drag,
+ // activation, selection, etc.
+ this.actor = provider.createResultObject(metaInfo).actor;
}
});
@@ -302,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) {
},
@@ -335,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;
}));
@@ -418,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) {
@@ -458,7 +418,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]