diff --git a/js/ui/overview.js b/js/ui/overview.js index 1cd10cb95..b0a6f3be2 100644 --- a/js/ui/overview.js +++ b/js/ui/overview.js @@ -185,7 +185,17 @@ const Overview = new Lang.Class({ this._shellInfo = new ShellInfo(); - this._viewSelector = new ViewSelector.ViewSelector(); + this._searchEntry = new St.Entry({ name: 'searchEntry', + /* Translators: this is the text displayed + in the search entry when no search is + active; it should not exceed ~30 + characters. */ + hint_text: _("Type to search..."), + track_hover: true, + can_focus: true }); + this._group.add_actor(this._searchEntry); + + this._viewSelector = new ViewSelector.ViewSelector(this._searchEntry); this._group.add_actor(this._viewSelector.actor); // TODO - recalculate everything when desktop size changes @@ -477,10 +487,15 @@ const Overview = new Lang.Class({ this._coverPane.set_position(0, contentY); this._coverPane.set_size(primary.width, contentHeight); + let searchWidth = this._searchEntry.get_width(); + let searchHeight = this._searchEntry.get_height(); + let searchX = (primary.width - searchWidth) / 2; + let searchY = contentY + this._spacing; + let dashWidth = Math.round(DASH_SPLIT_FRACTION * primary.width); let viewWidth = primary.width - dashWidth - this._spacing; - let viewHeight = contentHeight - 2 * this._spacing; - let viewY = contentY + this._spacing; + let viewHeight = contentHeight - 2 * this._spacing - searchHeight; + let viewY = contentY + this._spacing + searchHeight; let viewX = rtl ? 0 : dashWidth + this._spacing; // Set the dash's x position - y is handled by a constraint @@ -493,6 +508,7 @@ const Overview = new Lang.Class({ } this._dash.actor.set_x(dashX); + this._searchEntry.set_position(searchX, searchY); this._viewSelector.actor.set_position(viewX, viewY); this._viewSelector.actor.set_size(viewWidth, viewHeight); }, diff --git a/js/ui/viewSelector.js b/js/ui/viewSelector.js index 463b1d5e7..dd5ac20e1 100644 --- a/js/ui/viewSelector.js +++ b/js/ui/viewSelector.js @@ -102,21 +102,14 @@ const SearchTab = new Lang.Class({ Name: 'SearchTab', Extends: BaseTab, - _init: function() { + _init: function(searchEntry) { this.active = false; this._searchPending = false; this._searchTimeoutId = 0; this._searchSystem = new Search.SearchSystem(); - this._entry = new St.Entry({ name: 'searchEntry', - /* Translators: this is the text displayed - in the search entry when no search is - active; it should not exceed ~30 - characters. */ - hint_text: _("Type to search..."), - track_hover: true, - can_focus: true }); + this._entry = searchEntry; ShellEntry.addContextMenu(this._entry); this._text = this._entry.clutter_text; this._text.connect('key-press-event', Lang.bind(this, this._onKeyPress)); @@ -132,7 +125,7 @@ const SearchTab = new Lang.Class({ this._iconClickedId = 0; this._searchResults = new SearchDisplay.SearchResults(this._searchSystem); - this.parent(this._entry, this._searchResults.actor, _("Search"), 'edit-find'); + this.parent(new St.Bin() /* Dummy */, this._searchResults.actor, _("Search"), 'edit-find'); this._text.connect('text-changed', Lang.bind(this, this._onTextChanged)); this._text.connect('key-press-event', Lang.bind(this, function (o, e) { @@ -352,7 +345,7 @@ const SearchTab = new Lang.Class({ const ViewSelector = new Lang.Class({ Name: 'ViewSelector', - _init : function() { + _init : function(searchEntry) { this.actor = new St.BoxLayout({ name: 'viewSelector', vertical: true }); @@ -388,7 +381,7 @@ const ViewSelector = new Lang.Class({ this._tabs = []; this._activeTab = null; - this._searchTab = new SearchTab(); + this._searchTab = new SearchTab(searchEntry); this._searchArea.set_child(this._searchTab.title); this._addTab(this._searchTab);