From 093b73b616bcbab2cf57bccf67a525a50c739708 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 16 Aug 2017 01:25:15 +0200 Subject: [PATCH] viewSelector: Open context for highlighted search result To make search more efficient, users don't need to move the actual keyboard focus away from the search entry to activate the first result. However the shift+f10 shortcut to pop up the context menu via keyboard still acts on the actually focused widget, which is the entry. It makes more sense to open the context menu of the selected result instead, as that's what's highlighted and responds to keyboard activation. https://bugzilla.gnome.org/show_bug.cgi?id=675315 --- js/ui/search.js | 9 +++++++++ js/ui/viewSelector.js | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/js/ui/search.js b/js/ui/search.js index c399880f5..30e2b301d 100644 --- a/js/ui/search.js +++ b/js/ui/search.js @@ -681,6 +681,15 @@ var SearchResults = new Lang.Class({ this._setSelected(this._defaultResult, highlight); }, + popupMenuDefault: function() { + // If we have a search queued up, force the search now. + if (this._searchTimeoutId > 0) + this._doSearch(); + + if (this._defaultResult) + this._defaultResult.actor.popup_menu(); + }, + navigateFocus: function(direction) { let rtl = this.actor.get_text_direction() == Clutter.TextDirection.RTL; if (direction == Gtk.DirectionType.TAB_BACKWARD || diff --git a/js/ui/viewSelector.js b/js/ui/viewSelector.js index ba7f46c71..7131f77bd 100644 --- a/js/ui/viewSelector.js +++ b/js/ui/viewSelector.js @@ -163,6 +163,13 @@ var ViewSelector = new Lang.Class({ this._text.connect('key-focus-out', Lang.bind(this, function() { this._searchResults.highlightDefault(false); })); + this._entry.connect('popup-menu', () => { + if (!this._searchActive) + return; + + this._entry.menu.close(); + this._searchResults.popupMenuDefault(); + }); this._entry.connect('notify::mapped', Lang.bind(this, this._onMapped)); global.stage.connect('notify::key-focus', Lang.bind(this, this._onStageKeyFocusChanged));