[gnome-shell/wip/raresv/system-actions: 1/2] systemActions: Make actions searchable



commit ccdfd0af2a8fa3bf60a6b9cc426767dc85ed9cf2
Author: Rares Visalom <rares visalom gmail com>
Date:   Thu Aug 3 01:21:17 2017 +0300

    systemActions: Make actions searchable

 js/misc/systemActions.js |   85 ++++++++++++++++++++++++++++++++++++++++++---
 po/POTFILES.in           |    1 +
 2 files changed, 80 insertions(+), 6 deletions(-)
---
diff --git a/js/misc/systemActions.js b/js/misc/systemActions.js
index f0fdede..125e3da 100644
--- a/js/misc/systemActions.js
+++ b/js/misc/systemActions.js
@@ -95,17 +95,46 @@ const SystemActions = new Lang.Class({
 
         this._actions = new Map();
         this._actions.set(POWER_OFF_ACTION_ID,
-                          { available: false });
+                          { // Translators: The name of the power-off action in search
+                            name: _("Power off"),
+                            iconName: 'system-shutdown-symbolic',
+                            // Translators: A list of keywords that match the power-off action, separated by 
semicolons
+                            keywords: _("power off;shutdown").split(';'),
+                            available: false });
         this._actions.set(LOCK_SCREEN_ACTION_ID,
-                          { available: false });
+                          { // Translators: The name of the lock screen action in search
+                            name: _("Lock screen"),
+                            iconName: 'system-lock-screen-symbolic',
+                            // Translators: A list of keywords that match the lock screen action, separated 
by semicolons
+                            keywords: _("lock screen").split(';'),
+                            available: false });
         this._actions.set(LOGOUT_ACTION_ID,
-                          { available: false });
+                          { // Translators: The name of the logout action in search
+                            name: _("Logout"),
+                            iconName: 'application-exit-symbolic',
+                            // Translators: A list of keywords that match the logout action, separated by 
semicolons
+                            keywords: _("logout;sign off").split(';'),
+                            available: false });
         this._actions.set(SUSPEND_ACTION_ID,
-                          { available: false });
+                          { // Translators: The name of the suspend action in search
+                            name: _("Suspend"),
+                            iconName: 'media-playback-pause-symbolic',
+                            // Translators: A list of keywords that match the suspend action, separated by 
semicolons
+                            keywords: _("suspend;sleep").split(';'),
+                            available: false });
         this._actions.set(SWITCH_USER_ACTION_ID,
-                          { available: false });
+                          { // Translators: The name of the switch user action in search
+                            name: _("Switch user"),
+                            iconName: 'system-switch-user-symbolic',
+                            // Translators: A list of keywords that match the switch user action, separated 
by semicolons
+                            keywords: _("switch user").split(';'),
+                            available: false });
         this._actions.set(LOCK_ORIENTATION_ACTION_ID,
-                          { iconName: '',
+                          { // Translators: The name of the lock orientation action in search
+                            name: _("Lock orientation"),
+                            iconName: '',
+                            // Translators: A list of keywords that match the lock orientation action, 
separated by semicolons
+                            keywords: _("lock orientation").split(';'),
                             available: false });
 
         this._loginScreenSettings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
@@ -237,6 +266,50 @@ const SystemActions = new Lang.Class({
         this._updateHaveSuspend();
     },
 
+    getMatchingActions: function(terms) {
+        // terms is a list of strings
+        terms = terms.map((term) => { return term.toLowerCase(); });
+
+        let results = [];
+
+        for (let [key, {available, keywords}] of this._actions)
+            if (available && terms.every(t => keywords.some(k => (k.indexOf(t) >= 0))))
+                results.push(key);
+
+        return results;
+    },
+
+    getName: function(id) {
+        return this._actions.get(id).name;
+    },
+
+    getIconName: function(id) {
+        return this._actions.get(id).iconName;
+    },
+
+    activateAction: function(id) {
+        switch (id) {
+            case POWER_OFF_ACTION_ID:
+                this.activatePowerOff();
+                break;
+            case LOCK_SCREEN_ACTION_ID:
+                this.activateLockScreen();
+                break;
+            case LOGOUT_ACTION_ID:
+                this.activateLogout();
+                break;
+            case SUSPEND_ACTION_ID:
+                this.activateSuspend();
+                break;
+            case SWITCH_USER_ACTION_ID:
+                this.activateSwitchUser();
+                break;
+            case LOCK_ORIENTATION_ACTION_ID:
+                this.activateLockOrientation();
+                break;
+        }
+    },
+
     _updateLockScreen() {
         let showLock = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
         let allowLockScreen = !this._lockdownSettings.get_boolean(DISABLE_LOCK_SCREEN_KEY);
diff --git a/po/POTFILES.in b/po/POTFILES.in
index d564cb0..cb41b8a 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -9,6 +9,7 @@ js/extensionPrefs/main.js
 js/gdm/authPrompt.js
 js/gdm/loginDialog.js
 js/gdm/util.js
+js/misc/systemActions.js
 js/misc/util.js
 js/portalHelper/main.js
 js/ui/accessDialog.js


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