From 52f604757c1fdcec2603bdf59f2958f97ad5294d Mon Sep 17 00:00:00 2001 From: Rares Visalom Date: Mon, 21 Aug 2017 16:20:25 +0300 Subject: [PATCH] appDisplay: Include system actions in search results The way system actions are displayed in the search results is by appending them at the end of the list returned by the ApplicationProvider. https://bugzilla.gnome.org/show_bug.cgi?id=691900 --- data/theme/gnome-shell-high-contrast.css | 6 +++ data/theme/gnome-shell-sass | 2 +- data/theme/gnome-shell.css | 6 +++ js/ui/appDisplay.js | 54 +++++++++++++++++++----- 4 files changed, 57 insertions(+), 11 deletions(-) diff --git a/data/theme/gnome-shell-high-contrast.css b/data/theme/gnome-shell-high-contrast.css index 6b4ea1218..766202927 100644 --- a/data/theme/gnome-shell-high-contrast.css +++ b/data/theme/gnome-shell-high-contrast.css @@ -1210,6 +1210,12 @@ StScrollBar { .icon-grid .overview-icon { icon-size: 96px; } +.system-action-icon { + background-color: black; + color: white; + border-radius: 99px; + icon-size: 48px; } + .app-view-controls { padding-bottom: 32px; } diff --git a/data/theme/gnome-shell-sass b/data/theme/gnome-shell-sass index 53cf147f9..81c5a273c 160000 --- a/data/theme/gnome-shell-sass +++ b/data/theme/gnome-shell-sass @@ -1 +1 @@ -Subproject commit 53cf147f95305d398b71443de2b5cb893fbcd166 +Subproject commit 81c5a273cf2fa5ef8c05940665a077635ae019a4 diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css index 34d3c886b..f94c67cbc 100644 --- a/data/theme/gnome-shell.css +++ b/data/theme/gnome-shell.css @@ -1210,6 +1210,12 @@ StScrollBar { .icon-grid .overview-icon { icon-size: 96px; } +.system-action-icon { + background-color: black; + color: white; + border-radius: 99px; + icon-size: 48px; } + .app-view-controls { padding-bottom: 32px; } diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index 428b3c062..9b92311ac 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -24,8 +24,11 @@ const OverviewControls = imports.ui.overviewControls; const PopupMenu = imports.ui.popupMenu; const Tweener = imports.ui.tweener; const Workspace = imports.ui.workspace; +const Search = imports.ui.search; +const System = imports.ui.status.system; const Params = imports.misc.params; const Util = imports.misc.util; +const SystemActions = imports.misc.systemActions; var MAX_APPLICATION_WORK_MILLIS = 75; var MENU_POPUP_TIMEOUT = 600; @@ -1085,19 +1088,35 @@ var AppSearchProvider = new Lang.Class({ this.id = 'applications'; this.isRemoteProvider = false; this.canLaunchSearch = false; + + this._systemActions = new SystemActions.getDefault(); }, getResultMetas: function(apps, callback) { let metas = []; - for (let i = 0; i < apps.length; i++) { - let app = this._appSys.lookup_app(apps[i]); - metas.push({ 'id': app.get_id(), - 'name': app.get_name(), - 'createIcon': function(size) { - return app.create_icon_texture(size); - } - }); + for (let id of apps) { + if (id.endsWith('.desktop')) { + let app = this._appSys.lookup_app(id); + + metas.push({ 'id': app.get_id(), + 'name': app.get_name(), + 'createIcon': function(size) { + return app.create_icon_texture(size); + } + }); + } else { + let name = this._systemActions.getName(id); + let iconName = this._systemActions.getIconName(id); + + let createIcon = size => new St.Icon({ icon_name: iconName, + width: size, + height: size, + style_class: 'system-action-icon' }); + + metas.push({ id, name, createIcon }); + } } + callback(metas); }, @@ -1119,6 +1138,9 @@ var AppSearchProvider = new Lang.Class({ return usage.compare('', a, b); })); }); + + results = results.concat(this._systemActions.getMatchingActions(terms)); + callback(results); }, @@ -1127,8 +1149,10 @@ var AppSearchProvider = new Lang.Class({ }, createResultObject: function (resultMeta) { - let app = this._appSys.lookup_app(resultMeta['id']); - return new AppIcon(app); + if (resultMeta.id.endsWith('.desktop')) + return new AppIcon(this._appSys.lookup_app(resultMeta['id'])); + else + return new SystemActionIcon(this, resultMeta); } }); @@ -1983,3 +2007,13 @@ var AppIconMenu = new Lang.Class({ } }); Signals.addSignalMethods(AppIconMenu.prototype); + +var SystemActionIcon = new Lang.Class({ + Name: 'SystemActionIcon', + Extends: Search.GridSearchResult, + + activate: function() { + SystemActions.getDefault().activateAction(this.metaInfo['id']); + Main.overview.hide(); + } +});