@@ -65,7 +65,7 @@ Item {
66 unityMenuModel: UnityMenuModel {
66 unityMenuModel: UnityMenuModel {
67 id: menuBackend
67 id: menuBackend
68− modelData: appMenuData.generateTestData(10,5,2,3)
68+ modelData: null
@@ -88,9 +88,11 @@ Item {
88 when: windowShown
88 when: windowShown
90 function init() {
90 function init() {
91+ mouseMove(root, 0, 0);
91 menuBar.dismiss();
92 menuBar.dismiss();
92− menuBackend.modelData = appMenuData.generateTestData(5,5,2,3, "menu")
93+ menuBackend.modelData = appMenuData.generateTestData(5,5,2,3, "menu");
93 activatedSpy.clear();
94 activatedSpy.clear();
95+ aboutToShowCalledSpy.clear();
94 waitForRendering(menuBar);
96 waitForRendering(menuBar);
@@ -233,21 +235,24 @@ Item {
234 var priv = findInvisibleChild(menuBar, "d");
236 var priv = findInvisibleChild(menuBar, "d");
236− var menuItem0 = findChild(menuBar, "menuBar-item0"); verify(menuItem0);
238+ var menuItem0 = findChild(menuBar, "menuBar-item0");
237− var menuItem2 = findChild(menuBar, "menuBar-item2"); verify(menuItem2);
240+ var menuItem2 = findChild(menuBar, "menuBar-item2");
239 menuItem0.show();
243 menuItem0.show();
240− compare(menuItem0.popupVisible, true, "Popup should be visible");
244+ waitForRendering(menuItem0);
245+ tryCompare(menuItem0, "popupVisible", true);
242 keyClick(Qt.Key_Right);
247 keyClick(Qt.Key_Right);
243− compare(priv.currentItem, menuItem2);
248+ tryCompare(priv, "currentItem", menuItem2);
244− compare(menuItem2.popupVisible, true);
249+ tryCompare(menuItem2, "popupVisible", true);
245− compare(menuItem0.popupVisible, false);
250+ tryCompare(menuItem0, "popupVisible", false);
247 keyClick(Qt.Key_Left);
252 keyClick(Qt.Key_Left);
248− compare(priv.currentItem, menuItem0);
253+ tryCompare(priv, "currentItem", menuItem0);
249− compare(menuItem2.popupVisible, false);
254+ tryCompare(menuItem2, "popupVisible", false);
250− compare(menuItem0.popupVisible, true);
255+ tryCompare(menuItem0, "popupVisible", true);
253 function test_menuActivateClosesMenu() {
258 function test_menuActivateClosesMenu() {
@@ -313,6 +318,28 @@ Item {
313 compare(priv.currentItem, null, "CurrentItem should be null");
318 compare(priv.currentItem, null, "CurrentItem should be null");
321+ function test_mouseDoesNotHoldMenuOpen() {
322+ // The user may want to click on a menu to open it then switch to
323+ // keyboard navigation. Ensure that this doesn't keep the original
326+ var priv = findInvisibleChild(menuBar, "d");
327+ var menuItem0 = findChild(menuBar, "menuBar-item0");
328+ var menuItem1 = findChild(menuBar, "menuBar-item1");
330+ mouseClick(menuItem0);
331+ // This only tests the problem behavior if the mouse is moved before
332+ // pressing the arrow keys (which almost always happens with users)
333+ mouseMove(menuItem0, 1, 1, 0);
334+ tryCompare(priv, "currentItem", menuItem0);
335+ tryCompare(menuItem0, "popupVisible", true);
337+ expectFail("", "FIXME: Clicking a menu item then moving the mouse prevents keyboard navigation");
338+ keyClick(Qt.Key_Right);
339+ tryCompare(priv, "currentItem", menuItem1);
340+ tryCompare(menuItem1, "popupVisible", true);
316 function test_overfow() {
343 function test_overfow() {
317 menuBackend.modelData = appMenuData.generateTestData(5,2,0,0,"menu");
344 menuBackend.modelData = appMenuData.generateTestData(5,2,0,0,"menu");
@@ -381,7 +408,8 @@ Item {
381 menuItem.show();
408 menuItem.show();
383 // waits for item to be created so the keyclick actually works
410 // waits for item to be created so the keyclick actually works
384− findChild(menuBar, "menuBar-item0-menu-item1-actionItem");
411+ var submenuContainingDisabledItem = findChild(menuBar, "menuBar-item0-menu-item1-actionItem");
412+ waitForRendering(submenuContainingDisabledItem);
386 keyClick(Qt.Key_Down);
414 keyClick(Qt.Key_Down);
387 keyClick(Qt.Key_Down);
415 keyClick(Qt.Key_Down);