[gnome-shell/wip/re-search-v2: 1/26] searchDisplay, and others: Switch from provider title to provider icon
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/wip/re-search-v2: 1/26] searchDisplay, and others: Switch from provider title to provider icon
- Date: Mon, 10 Dec 2012 21:02:03 +0000 (UTC)
commit b62bd0e62f460f4136ccc526a8c95c1ec795167f
Author: Tanner Doshier <doshitan gmail com>
Date: Thu Aug 9 16:52:36 2012 -0500
searchDisplay, and others: Switch from provider title to provider icon
Display a '+' icon on the provider icon if there are more results that are
hidden. If the provider icon is clicked, ask the provider to launch itself and
perform a search with the current terms.
https://bugzilla.gnome.org/show_bug.cgi?id=681797
data/Makefile.am | 1 +
data/theme/gnome-shell.css | 12 +++++-
data/theme/more-results.svg | 93 +++++++++++++++++++++++++++++++++++++++++++
js/ui/appDisplay.js | 7 +--
js/ui/remoteSearch.js | 2 +-
js/ui/search.js | 10 +++--
js/ui/searchDisplay.js | 63 +++++++++++++++++++++++++++--
js/ui/wanda.js | 3 +-
8 files changed, 175 insertions(+), 16 deletions(-)
---
diff --git a/data/Makefile.am b/data/Makefile.am
index c998dce..f3e90b0 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -34,6 +34,7 @@ dist_theme_DATA = \
theme/gnome-shell.css \
theme/logged-in-indicator.svg \
theme/message-tray-background.png \
+ theme/more-results.svg \
theme/noise-texture.png \
theme/panel-button-border.svg \
theme/panel-button-highlight-narrow.svg \
diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
index a4b9842..fd3121e 100644
--- a/data/theme/gnome-shell.css
+++ b/data/theme/gnome-shell.css
@@ -871,8 +871,15 @@ StScrollBar StButton#vhandle:active {
padding: 4px 8px;
}
+.search-provider-icon-more {
+ width: 16px;
+ height: 16px;
+ background-image: url("more-results.svg");
+}
+
.app-well-app > .overview-icon,
.show-apps > .overview-icon,
+.search-provider-icon,
.search-result-content > .overview-icon {
border-radius: 4px;
padding: 3px;
@@ -889,6 +896,7 @@ StScrollBar StButton#vhandle:active {
.app-well-app:hover > .overview-icon,
.show-apps:hover > .overview-icon,
+.search-provider-icon:hover,
.search-result-content:hover > .overview-icon {
background-color: rgba(255,255,255,0.1);
text-shadow: black 0px 2px 2px;
@@ -926,8 +934,10 @@ StScrollBar StButton#vhandle:active {
.app-well-app:focus > .overview-icon,
.search-result-content:focus > .overview-icon,
.show-apps:focus > .overview-icon,
+.search-provider-icon:focus,
.app-well-app:selected > .overview-icon,
-.search-result-content:selected > .overview-icon {
+.search-result-content:selected > .overview-icon,
+.search-provider-icon:selected {
background-color: rgba(255,255,255,0.33);
}
diff --git a/data/theme/more-results.svg b/data/theme/more-results.svg
new file mode 100644
index 0000000..264e14d
--- /dev/null
+++ b/data/theme/more-results.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ id="svg12430"
+ version="1.1"
+ inkscape:version="0.48+devel r11908 custom"
+ sodipodi:docname="more-results.svg">
+ <defs
+ id="defs12432" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#7a7a7a"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="1"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="7.4498765"
+ inkscape:cy="9.9072581"
+ inkscape:document-units="px"
+ inkscape:current-layer="g14642-3-0"
+ showgrid="false"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ inkscape:window-width="2560"
+ inkscape:window-height="1376"
+ inkscape:window-x="1600"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid13002" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata12435">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1036.3622)">
+ <g
+ style="display:inline"
+ transform="translate(-141.99984,638.37113)"
+ inkscape:label="zoom-in"
+ id="g14642-3-0">
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="0"
+ inkscape:original="M 145.1875 400 C 144.5248 400 144 400.54899 144 401.21875 L 144 410.78125 C 144 411.45101 144.5248 412 145.1875 412 L 154.8125 412 C 155.4752 412 156 411.45101 156 410.78125 L 156 401.21875 C 156 400.54899 155.4752 400 154.8125 400 L 145.1875 400 z M 149 403 L 151 403 L 151 405 L 153 405 L 153 407 L 151 407 L 151 409 L 149 409 L 149 407 L 147 407 L 147 405 L 149 405 L 149 403 z "
+ xlink:href="#rect11749-5-0-1-8"
+ style="color:#bebebe;fill:#000000;fill-opacity:0.38207546;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible"
+ id="path13004"
+ inkscape:href="#rect11749-5-0-1-8"
+ d="M 145.1875,400 C 144.5248,400 144,400.54899 144,401.21875 l 0,9.5625 c 0,0.66976 0.5248,1.21875 1.1875,1.21875 l 9.625,0 c 0.6627,0 1.1875,-0.54899 1.1875,-1.21875 l 0,-9.5625 C 156,400.54899 155.4752,400 154.8125,400 L 145.1875,400 z m 3.8125,3 2,0 0,2 2,0 0,2 -2,0 0,2 -2,0 0,-2 -2,0 0,-2 2,0 L 149,403 Z"
+ transform="translate(0,1)" />
+ <path
+ inkscape:connector-curvature="0"
+ style="color:#bebebe;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible"
+ d="M 145.1875,400 C 144.5248,400 144,400.54899 144,401.21875 l 0,9.5625 c 0,0.66976 0.5248,1.21875 1.1875,1.21875 l 9.625,0 c 0.6627,0 1.1875,-0.54899 1.1875,-1.21875 l 0,-9.5625 C 156,400.54899 155.4752,400 154.8125,400 L 145.1875,400 z m 3.8125,3 2,0 0,2 2,0 0,2 -2,0 0,2 -2,0 0,-2 -2,0 0,-2 2,0 L 149,403 Z"
+ id="rect11749-5-0-1-8" />
+ <rect
+ style="fill:none;stroke:none"
+ id="rect3620-5-4"
+ width="15.981825"
+ height="16"
+ x="142"
+ y="398"
+ rx="0"
+ ry="0" />
+ </g>
+ </g>
+</svg>
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index 944b246..754864d 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -315,8 +315,9 @@ const AppSearchProvider = new Lang.Class({
Extends: Search.SearchProvider,
_init: function() {
- this.parent(_("APPLICATIONS"));
+ this.parent();
this._appSys = Shell.AppSystem.get_default();
+ this.id = 'applications';
},
getResultMetas: function(apps, callback) {
@@ -372,10 +373,8 @@ const SettingsSearchProvider = new Lang.Class({
Extends: Search.SearchProvider,
_init: function() {
- this.parent(_("SETTINGS"));
-
+ this.parent(Gio.DesktopAppInfo.new('gnome-control-center.desktop'));
this._appSys = Shell.AppSystem.get_default();
- this.appInfo = Gio.DesktopAppInfo.new('gnome-control-center.desktop');
},
getResultMetas: function(prefs, callback) {
diff --git a/js/ui/remoteSearch.js b/js/ui/remoteSearch.js
index 3bdba7d..52bbafb 100644
--- a/js/ui/remoteSearch.js
+++ b/js/ui/remoteSearch.js
@@ -175,7 +175,7 @@ const RemoteSearchProvider = new Lang.Class({
this.proxy = new proxyType(Gio.DBus.session,
dbusName, dbusPath, Lang.bind(this, this._onProxyConstructed));
- this.parent(appInfo.get_name().toUpperCase(), appInfo, true);
+ this.parent(appInfo, true);
this._cancellable = new Gio.Cancellable();
},
diff --git a/js/ui/search.js b/js/ui/search.js
index e21c2a7..6bbbdab 100644
--- a/js/ui/search.js
+++ b/js/ui/search.js
@@ -76,12 +76,14 @@ const SearchResultDisplay = new Lang.Class({
const SearchProvider = new Lang.Class({
Name: 'SearchProvider',
- _init: function(title, appInfo, isRemoteProvider) {
- this.title = title;
+ _init: function(appInfo, isRemoteProvider) {
this.appInfo = appInfo;
this.searchSystem = null;
this.isRemoteProvider = !!isRemoteProvider;
this.canLaunchSearch = false;
+
+ if (this.appInfo)
+ this.id = this.appInfo.get_id();
},
/**
@@ -273,7 +275,7 @@ const SearchSystem = new Lang.Class({
results.push([provider, []]);
provider.getSubsearchResultSet(previousResults, terms);
} catch (error) {
- log('A ' + error.name + ' has occured in ' + provider.title + ': ' + error.message);
+ log('A ' + error.name + ' has occured in ' + provider.id + ': ' + error.message);
}
}
} else {
@@ -283,7 +285,7 @@ const SearchSystem = new Lang.Class({
results.push([provider, []]);
provider.getInitialResultSet(terms);
} catch (error) {
- log('A ' + error.name + ' has occured in ' + provider.title + ': ' + error.message);
+ log('A ' + error.name + ' has occured in ' + provider.id + ': ' + error.message);
}
}
}
diff --git a/js/ui/searchDisplay.js b/js/ui/searchDisplay.js
index 869586b..67a674d 100644
--- a/js/ui/searchDisplay.js
+++ b/js/ui/searchDisplay.js
@@ -144,6 +144,10 @@ const GridSearchResults = new Lang.Class({
return this._grid.visibleItemsCount();
},
+ hasMoreResults: function() {
+ return this._notDisplayedResult.length > 0;
+ },
+
setResults: function(results, terms) {
// copy the lists
this._notDisplayedResult = results.slice(0);
@@ -222,11 +226,22 @@ const SearchResults = new Lang.Class({
},
createProviderMeta: function(provider) {
- let providerBox = new St.BoxLayout({ style_class: 'search-section',
- vertical: true });
- let title = new St.Label({ style_class: 'search-section-header',
- text: provider.title });
- providerBox.add(title, { x_fill: false, x_align: St.Align.START });
+ let providerBox = new St.BoxLayout({ style_class: 'search-section' });
+ let providerIcon = null;
+
+ if (provider.appInfo) {
+ providerIcon = new ProviderIcon(provider);
+ providerIcon.connect('clicked', Lang.bind(this,
+ function() {
+ provider.launchSearch(this._searchSystem.getTerms());
+ Main.overview.toggle();
+ }));
+
+ providerBox.add(providerIcon, { x_fill: false,
+ y_fill: false,
+ x_align: St.Align.START,
+ y_align: St.Align.START });
+ }
let resultDisplayBin = new St.Bin({ style_class: 'search-section-results',
x_fill: true,
@@ -237,6 +252,7 @@ const SearchResults = new Lang.Class({
this._providerMeta.push({ provider: provider,
actor: providerBox,
+ icon: providerIcon,
resultDisplay: resultDisplay });
this._content.add(providerBox);
},
@@ -343,6 +359,11 @@ const SearchResults = new Lang.Class({
meta.resultDisplay.setResults(providerResults, terms);
let results = meta.resultDisplay.getResultsForDisplay();
+ if (meta.icon)
+ meta.icon.moreIcon.visible =
+ meta.resultDisplay.hasMoreResults() &&
+ provider.canLaunchSearch;
+
provider.getResultMetas(results, Lang.bind(this, function(metas) {
this._clearDisplayForProvider(provider);
meta.actor.show();
@@ -395,3 +416,35 @@ const SearchResults = new Lang.Class({
}
}
});
+
+const ProviderIcon = new Lang.Class({
+ Name: 'ProviderIcon',
+ Extends: St.Button,
+
+ PROVIDER_ICON_SIZE: 48,
+
+ _init: function(provider) {
+ this.provider = provider;
+ this.parent({ style_class: 'search-provider-icon',
+ reactive: true,
+ can_focus: true,
+ track_hover: true });
+
+ this._content = new St.Widget({ layout_manager: new Clutter.BinLayout() });
+ this.set_child(this._content);
+
+ let rtl = (this.get_text_direction() == Clutter.TextDirection.RTL);
+
+ this.moreIcon = new St.Widget({ style_class: 'search-provider-icon-more',
+ visible: false,
+ x_align: rtl ? Clutter.ActorAlign.START : Clutter.ActorAlign.END,
+ y_align: Clutter.ActorAlign.END,
+ x_expand: true,
+ y_expand: true });
+
+ let icon = new St.Icon({ icon_size: this.PROVIDER_ICON_SIZE,
+ gicon: provider.appInfo.get_icon() });
+ this._content.add_actor(icon);
+ this._content.add_actor(this.moreIcon);
+ }
+});
diff --git a/js/ui/wanda.js b/js/ui/wanda.js
index 305bf9b..846098b 100644
--- a/js/ui/wanda.js
+++ b/js/ui/wanda.js
@@ -136,7 +136,8 @@ const WandaSearchProvider = new Lang.Class({
Extends: Search.SearchProvider,
_init: function() {
- this.parent(_("Your favorite Easter Egg"));
+ this.parent();
+ this.id = 'wanda';
},
getResultMetas: function(fish, callback) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]