on xenial help sign in
Merge lp:~aacid/unity8/unfocusSearchEntryOnHistoryPick
9e848c1Albert Astals
qml/Components/PageHeader.qml+17−7
@@ -56,6 +56,12 @@ Item {
56 }
56 }
57 }
57 }
58
58
59+ function closePopup() {
60+ if (headerContainer.popover != null) {
61+ PopupUtils.close(headerContainer.popover);
62+ }
63+ }
64+
59 function resetSearch(keepFocus) {
65 function resetSearch(keepFocus) {
60 if (searchHistory) {
66 if (searchHistory) {
61 searchHistory.addQuery(searchTextField.text);
67 searchHistory.addQuery(searchTextField.text);
@@ -64,9 +70,7 @@ Item {
64 unfocus();
70 unfocus();
65 }
71 }
66 searchTextField.text = "";
72 searchTextField.text = "";
67− if (headerContainer.popover != null) {
73+ closePopup();
68− PopupUtils.close(headerContainer.popover);
69− }
70 }
74 }
71
75
72 function unfocus() {
76 function unfocus() {
@@ -107,9 +111,7 @@ Item {
107 anchors { fill: parent; margins: units.gu(1); bottomMargin: units.gu(3) + bottomContainer.height }
111 anchors { fill: parent; margins: units.gu(1); bottomMargin: units.gu(3) + bottomContainer.height }
108 visible: headerContainer.showSearch
112 visible: headerContainer.showSearch
109 onPressed: {
113 onPressed: {
110− if (headerContainer.popover) {
114+ closePopup();
111− PopupUtils.close(headerContainer.popover);
112− }
113 if (!searchTextField.text) {
115 if (!searchTextField.text) {
114 headerContainer.showSearch = false;
116 headerContainer.showSearch = false;
115 }
117 }
@@ -224,6 +226,12 @@ Item {
224 root.openSearchHistory();
226 root.openSearchHistory();
225 }
227 }
226 }
228 }
229+
230+ onTextChanged: {
231+ if (text != "") {
232+ closePopup();
233+ }
234+ }
227 }
235 }
228 }
236 }
229
237
@@ -300,6 +308,7 @@ Item {
300
308
301 Repeater {
309 Repeater {
302 id: recentSearches
310 id: recentSearches
311+ objectName: "recentSearches"
303 model: searchHistory
312 model: searchHistory
304
313
305 delegate: Standard {
314 delegate: Standard {
@@ -308,7 +317,8 @@ Item {
308 onClicked: {
317 onClicked: {
309 searchHistory.addQuery(text);
318 searchHistory.addQuery(text);
310 searchTextField.text = text;
319 searchTextField.text = text;
311− PopupUtils.close(popover);
320+ closePopup();
321+ unfocus();
312 }
322 }
313 }
323 }
314 }
324 }
tests/qmltests/Components/tst_PageHeader.qml+27−6
@@ -36,6 +36,16 @@ Item {
36
36
37 function init() {
37 function init() {
38 searchEnabled = true;
38 searchEnabled = true;
39+
40+ // Reset to initial state
41+ pageHeader.searchQuery = "";
42+ pageHeader.closePopup();
43+ pageHeader.searchHistory.clear();
44+
45+ // Check initial state
46+ var headerContainer = findChild(pageHeader, "headerContainer");
47+ tryCompareFunction(function() { return headerContainer.popover === null; }, true);
48+ compare(pageHeader.searchHistory.count, 0);
39 }
49 }
40
50
41 function test_search_disabled() {
51 function test_search_disabled() {
@@ -80,9 +90,6 @@ Item {
80 }
90 }
81
91
82 function test_history() {
92 function test_history() {
83− pageHeader.searchHistory.clear()
84− compare(pageHeader.searchHistory.count, 0)
85−
86 pageHeader.triggerSearch()
93 pageHeader.triggerSearch()
87 typeString("humppa1")
94 typeString("humppa1")
88 pageHeader.resetSearch()
95 pageHeader.resetSearch()
@@ -166,16 +173,26 @@ Item {
166 tryCompareFunction(function() { return headerContainer.popover !== null; }, true);
173 tryCompareFunction(function() { return headerContainer.popover !== null; }, true);
167
174
168 tryCompare(headerContainer.popover, "visible", true);
175 tryCompare(headerContainer.popover, "visible", true);
176+
177+ var searchTextField = findChild(pageHeader, "searchTextField");
178+ compare(searchTextField.focus, true);
179+
180+ var recentSearches = findChild(headerContainer.popover, "recentSearches");
181+ mouseClick(recentSearches.itemAt(0), 0, 0);
182+
183+ compare(pageHeader.searchQuery, "Search2");
184+ tryCompareFunction(function() { return headerContainer.popover === null; }, true);
185+ compare(searchTextField.focus, false);
169 }
186 }
170
187
171− function test_tap_outside_closes_popup_data() {
188+ function test_popup_closing_data() {
172 return [
189 return [
173 { tag: "with search text", searchText: "foobar", hideSearch: false },
190 { tag: "with search text", searchText: "foobar", hideSearch: false },
174 { tag: "without search text", searchText: "", hideSearch: true }
191 { tag: "without search text", searchText: "", hideSearch: true }
175 ];
192 ];
176 }
193 }
177
194
178− function test_tap_outside_closes_popup(data) {
195+ function test_popup_closing(data) {
179 searchEnabled = true;
196 searchEnabled = true;
180 pageHeader.searchHistory.clear();
197 pageHeader.searchHistory.clear();
181
198
@@ -191,7 +208,11 @@ Item {
191
208
192 pageHeader.searchQuery = data.searchText;
209 pageHeader.searchQuery = data.searchText;
193
210
211+ if (data.searchText == "") {
212+ // When the text is empty the user can also close the
213+ // popup by clicking outside the header instead of by starting a search
194− mouseClick(root, root.width / 2, root.height - 1);
214+ mouseClick(root, root.width / 2, root.height - 1);
215+ }
195
216
196 tryCompare(headerContainer, "showSearch", !data.hideSearch);
217 tryCompare(headerContainer, "showSearch", !data.hideSearch);
197 tryCompareFunction(function() { return headerContainer.popover === null; }, true);
218 tryCompareFunction(function() { return headerContainer.popover === null; }, true);