on xenial help sign in
Indicators close when menu items are activated. Fixes: https://bugs.launchpad.net/bugs/1238182.
4f3b200Nick Dedekind
Panel/Panel.qml+22
@@ -31,6 +31,28 @@ Item {
31
31
32 signal searchClicked
32 signal searchClicked
33
33
34+ function hideIndicatorMenu(delay) {
35+ if (delay !== undefined) {
36+ hideTimer.interval = delay;
37+ hideTimer.start();
38+ } else {
39+ indicatorsMenu.hide();
40+ }
41+ }
42+
43+ Timer {
44+ id: hideTimer
45+ running: false
46+ onTriggered: {
47+ indicatorsMenu.hide();
48+ }
49+ }
50+
51+ Connections {
52+ target: indicatorsMenu
53+ onShown: hideTimer.stop()
54+ }
55+
34 PanelBackground {
56 PanelBackground {
35 id: panelBackground
57 id: panelBackground
36 anchors {
58 anchors {
Shell.qml+4
@@ -576,6 +576,10 @@ FocusScope {
576 stages.hide()
576 stages.hide()
577 }
577 }
578
578
579+ function hideIndicatorMenu(delay) {
580+ panel.hideIndicatorMenu(delay);
581+ }
582+
579 Item {
583 Item {
580 id: overlay
584 id: overlay
581
585
plugins/Unity/Indicators/Messaging/qml/MessageMenuItemFactory.qml+3
@@ -50,6 +50,7 @@ Indicators.BaseMenuItem {
50
50
51 onActivateApp: {
51 onActivateApp: {
52 menuItem.model.activate(modelIndex, true);
52 menuItem.model.activate(modelIndex, true);
53+ shell.hideIndicatorMenu(UbuntuAnimation.FastDuration);
53 }
54 }
54 onDismiss: {
55 onDismiss: {
55 menuItem.model.activate(modelIndex, false);
56 menuItem.model.activate(modelIndex, false);
@@ -82,6 +83,7 @@ Indicators.BaseMenuItem {
82
83
83 onActivateApp: {
84 onActivateApp: {
84 menuItem.model.activate(modelIndex, true);
85 menuItem.model.activate(modelIndex, true);
86+ shell.hideIndicatorMenu(UbuntuAnimation.FastDuration);
85 }
87 }
86 onDismiss: {
88 onDismiss: {
87 menuItem.model.activate(modelIndex, false);
89 menuItem.model.activate(modelIndex, false);
@@ -125,6 +127,7 @@ Indicators.BaseMenuItem {
125
127
126 onActivateApp: {
128 onActivateApp: {
127 menuItem.model.activate(modelIndex, true);
129 menuItem.model.activate(modelIndex, true);
130+ shell.hideIndicatorMenu(UbuntuAnimation.FastDuration);
128 }
131 }
129 onDismiss: {
132 onDismiss: {
130 menuItem.model.activate(modelIndex, false);
133 menuItem.model.activate(modelIndex, false);
plugins/Unity/Indicators/qml/MenuItemFactory.qml+6
@@ -22,6 +22,7 @@ import Unity.Indicators 0.1 as Indicators
22import Unity.Indicators.Network 0.1 as ICNetwork
22import Unity.Indicators.Network 0.1 as ICNetwork
23import Unity.Indicators.Messaging 0.1 as ICMessaging
23import Unity.Indicators.Messaging 0.1 as ICMessaging
24import QMenuModel 0.1 as QMenuModel
24import QMenuModel 0.1 as QMenuModel
25+import Ubuntu.Components 0.1
25
26
26Item {
27Item {
27 id: menuFactory
28 id: menuFactory
@@ -95,6 +96,7 @@ Item {
95
96
96 onActivate: {
97 onActivate: {
97 model.activate(modelIndex);
98 model.activate(modelIndex);
99+ shell.hideIndicatorMenu(UbuntuAnimation.FastDuration);
98 }
100 }
99 }
101 }
100 }
102 }
@@ -132,6 +134,7 @@ Item {
132
134
133 onActivate: {
135 onActivate: {
134 model.activate(modelIndex);
136 model.activate(modelIndex);
137+ shell.hideIndicatorMenu(UbuntuAnimation.BriskDuration);
135 }
138 }
136 }
139 }
137 }
140 }
@@ -148,6 +151,7 @@ Item {
148
151
149 onActivate: {
152 onActivate: {
150 model.activate(modelIndex);
153 model.activate(modelIndex);
154+ shell.hideIndicatorMenu(UbuntuAnimation.BriskDuration);
151 }
155 }
152 }
156 }
153 }
157 }
@@ -190,6 +194,7 @@ Item {
190 }
194 }
191 onActivate: {
195 onActivate: {
192 model.activate(modelIndex);
196 model.activate(modelIndex);
197+ shell.hideIndicatorMenu(UbuntuAnimation.BriskDuration);
193 }
198 }
194 }
199 }
195 }
200 }
@@ -225,6 +230,7 @@ Item {
225 }
230 }
226 onActivateApp: {
231 onActivateApp: {
227 model.activate(modelIndex, true);
232 model.activate(modelIndex, true);
233+ shell.hideIndicatorMenu(UbuntuAnimation.FastDuration);
228 }
234 }
229 onDismiss: {
235 onDismiss: {
230 model.activate(modelIndex, false);
236 model.activate(modelIndex, false);
tests/qmltests/Panel/tst_Panel.qml+14
@@ -264,5 +264,19 @@ Item {
264
264
265 compare(indicatorRow.currentItem, indicatorItemFirst, "First indicator should still be the current item");
265 compare(indicatorRow.currentItem, indicatorItemFirst, "First indicator should still be the current item");
266 }
266 }
267+
268+ function test_hideIndicatorMenu_data() {
269+ return [ {tag: "no-delay", delay: undefined },
270+ {tag: "delayed", delay: 200 }
271+ ];
272+ }
273+
274+ function test_hideIndicatorMenu(data) {
275+ panel.indicators.show();
276+ compare(panel.indicators.shown, true);
277+
278+ panel.hideIndicatorMenu(data.delay);
279+ tryCompare(panel.indicators, "shown", false);
280+ }
267 }
281 }
268}
282}