systemActions: Only do prefix matches

Our search for system actions is currently inconsistent with searching
for applications: While we match terms anywhere within keywords, GIO
will only match at the beginning of words.

In order to get the same behavior, split keywords into single words
and only match terms at the beginning of a word.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/745
This commit is contained in:
Florian Müllner 2018-11-05 00:21:26 +01:00 committed by Florian Müllner
parent 7e70dd8453
commit 9b379c49ba

View File

@ -88,42 +88,42 @@ const SystemActions = GObject.registerClass({
name: C_("search-result", "Power Off"), name: C_("search-result", "Power Off"),
iconName: 'system-shutdown-symbolic', iconName: 'system-shutdown-symbolic',
// Translators: A list of keywords that match the power-off action, separated by semicolons // Translators: A list of keywords that match the power-off action, separated by semicolons
keywords: _("power off;shutdown;reboot;restart").split(';'), keywords: _("power off;shutdown;reboot;restart").split(/[; ]/),
available: false }); available: false });
this._actions.set(LOCK_SCREEN_ACTION_ID, this._actions.set(LOCK_SCREEN_ACTION_ID,
{ // Translators: The name of the lock screen action in search { // Translators: The name of the lock screen action in search
name: C_("search-result", "Lock Screen"), name: C_("search-result", "Lock Screen"),
iconName: 'system-lock-screen-symbolic', iconName: 'system-lock-screen-symbolic',
// Translators: A list of keywords that match the lock screen action, separated by semicolons // Translators: A list of keywords that match the lock screen action, separated by semicolons
keywords: _("lock screen").split(';'), keywords: _("lock screen").split(/[; ]/),
available: false }); available: false });
this._actions.set(LOGOUT_ACTION_ID, this._actions.set(LOGOUT_ACTION_ID,
{ // Translators: The name of the logout action in search { // Translators: The name of the logout action in search
name: C_("search-result", "Log Out"), name: C_("search-result", "Log Out"),
iconName: 'application-exit-symbolic', iconName: 'application-exit-symbolic',
// Translators: A list of keywords that match the logout action, separated by semicolons // Translators: A list of keywords that match the logout action, separated by semicolons
keywords: _("logout;sign off").split(';'), keywords: _("logout;log out;sign off").split(/[; ]/),
available: false }); available: false });
this._actions.set(SUSPEND_ACTION_ID, this._actions.set(SUSPEND_ACTION_ID,
{ // Translators: The name of the suspend action in search { // Translators: The name of the suspend action in search
name: C_("search-result", "Suspend"), name: C_("search-result", "Suspend"),
iconName: 'media-playback-pause-symbolic', iconName: 'media-playback-pause-symbolic',
// Translators: A list of keywords that match the suspend action, separated by semicolons // Translators: A list of keywords that match the suspend action, separated by semicolons
keywords: _("suspend;sleep").split(';'), keywords: _("suspend;sleep").split(/[; ]/),
available: false }); available: false });
this._actions.set(SWITCH_USER_ACTION_ID, this._actions.set(SWITCH_USER_ACTION_ID,
{ // Translators: The name of the switch user action in search { // Translators: The name of the switch user action in search
name: C_("search-result", "Switch User"), name: C_("search-result", "Switch User"),
iconName: 'system-switch-user-symbolic', iconName: 'system-switch-user-symbolic',
// Translators: A list of keywords that match the switch user action, separated by semicolons // Translators: A list of keywords that match the switch user action, separated by semicolons
keywords: _("switch user").split(';'), keywords: _("switch user").split(/[; ]/),
available: false }); available: false });
this._actions.set(LOCK_ORIENTATION_ACTION_ID, this._actions.set(LOCK_ORIENTATION_ACTION_ID,
{ // Translators: The name of the lock orientation action in search { // Translators: The name of the lock orientation action in search
name: C_("search-result", "Lock Orientation"), name: C_("search-result", "Lock Orientation"),
iconName: '', iconName: '',
// Translators: A list of keywords that match the lock orientation action, separated by semicolons // Translators: A list of keywords that match the lock orientation action, separated by semicolons
keywords: _("lock orientation;screen;rotation").split(';'), keywords: _("lock orientation;screen;rotation").split(/[; ]/),
available: false }); available: false });
this._loginScreenSettings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA }); this._loginScreenSettings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
@ -262,7 +262,7 @@ const SystemActions = GObject.registerClass({
let results = []; let results = [];
for (let [key, {available, keywords}] of this._actions) for (let [key, {available, keywords}] of this._actions)
if (available && terms.every(t => keywords.some(k => (k.indexOf(t) >= 0)))) if (available && terms.every(t => keywords.some(k => k.startsWith(t))))
results.push(key); results.push(key);
return results; return results;