on xenial help sign in
Implement clearing the search and closing the panel on pressing Escape key in the dash header

Approved by: Albert Astals Cid

commitb15b729c86b13c2ac8fb42cc1439ee6c9589f97c authorLukáš Tinkl <lukas.tinkl@canonical.com> dateWed 3 Aug 2016, 15:49 (10 years ago) parent9ca0c7974eb1f9
2 files changed+48
qml/Dash/DashPageHeader.qml+9 tests/qmltests/Dash/tst_DashPageHeader.qml+39
qml/Dash/DashPageHeader.qml+9
@@ -187,6 +187,15 @@ Item {
187187 contents: Item {
188188 anchors.fill: parent
189189
190+ Keys.onEscapePressed: { // clear the search text, dismiss the search in the second step
191+ if (searchTextField.text != "") {
192+ root.clearSearch(true);
193+ } else {
194+ root.clearSearch(false);
195+ headerContainer.showSearch = false;
196+ }
197+ }
198+
190199 TextField {
191200 id: searchTextField
192201 objectName: "searchTextField"
tests/qmltests/Dash/tst_DashPageHeader.qml+39
@@ -28,6 +28,12 @@ Item {
2828 width: units.gu(110)
2929 height: units.gu(50)
3030
31+ SignalSpy {
32+ id: escapeSpy
33+ target: pageHeader
34+ signalName: "clearSearch"
35+ }
36+
3137 UT.UnityTestCase {
3238 name: "PageHeaderLabelTest"
3339 when: windowShown
@@ -145,6 +151,7 @@ Item {
145151
146152 function cleanup() {
147153 doResetSearch();
154+ escapeSpy.clear();
148155 }
149156
150157 function test_popup_closing_data() {
@@ -201,6 +208,38 @@ Item {
201208 doResetSearch();
202209 }
203210
211+ function test_popup_closing_with_escape() {
212+ searchEnabled = true;
213+ pageHeader.searchHistory.clear();
214+
215+ pageHeader.searchHistory.addQuery("Search1");
216+ pageHeader.searchHistory.addQuery("Search2");
217+
218+ pageHeader.triggerSearch();
219+
220+ var headerContainer = findChild(pageHeader, "headerContainer");
221+ tryCompare(pageHeader.extraPanel, "visible", true);
222+
223+ pageHeader.searchQuery = "foobar";
224+
225+ // press Esc once, the search should be cleared
226+ keyClick(Qt.Key_Escape);
227+ pageHeader.searchQuery = ""; // simulate clearing the text field, the clear button doesn't do anything on its own
228+ compare(escapeSpy.count, 1);
229+ compare(escapeSpy.signalArguments[0][0], true);
230+
231+ escapeSpy.clear();
232+
233+ // press Escape a second time, the whole search should be hidden
234+ keyClick(Qt.Key_Escape);
235+ tryCompare(headerContainer, "showSearch", false);
236+ compare(escapeSpy.count, 1);
237+ compare(escapeSpy.signalArguments[0][0], false);
238+ tryCompare(pageHeader.extraPanel, "visible", false);
239+
240+ doResetSearch();
241+ }
242+
204243 function test_search_change_shows_search() {
205244 var headerContainer = findChild(pageHeader, "headerContainer");
206245 compare(headerContainer.showSearch, false);