@@ -43,17 +43,15 @@ ListView {
4343 id: appMenuModel
4444
4545 appMenuAreaRect: Qt .rect (root .x , root .y , root .width , root .height )
46- openedMenuAreaRect: Boolean (prv . openedMenu ) ? Qt .rect (prv . openedMenu .x , prv . openedMenu .y , prv . openedMenu .width , prv . openedMenu .height )
47- : Qt .rect (0 , 0 , 0 , 0 )
46+ openedMenuAreaRect: Boolean (menuLoader . isMenuOpened ) ? Qt .rect (menuLoader . menu .x , menuLoader . menu .y , menuLoader . menu .width , menuLoader . menu .height )
47+ : Qt .rect (0 , 0 , 0 , 0 )
4848
4949 onOpenMenuRequested: {
5050 prv .openMenu (menuId)
5151 }
5252
5353 onCloseOpenedMenuRequested: {
54- if (Boolean (prv .openedMenu )) {
55- prv .openedMenu .close ()
56- }
54+ menuLoader .close ()
5755 }
5856 }
5957
@@ -68,14 +66,23 @@ ListView {
6866 property bool needRestoreNavigationAfterClose: false
6967 property string lastOpenedMenuId: " "
7068
71- function openMenu (menuId ) {
69+ function openMenu (menuId , byHover ) {
7270 for (var i = 0 ; i < root .count ; ++ i) {
7371 var item = root .itemAtIndex (i)
7472 if (Boolean (item) && item .menuId === menuId) {
7573 needRestoreNavigationAfterClose = true
7674 lastOpenedMenuId = menuId
7775
78- item .toggleMenuOpened ()
76+ if (! byHover) {
77+ if (menuLoader .isMenuOpened && menuLoader .parent === item) {
78+ menuLoader .close ()
79+ return
80+ }
81+ }
82+
83+ menuLoader .menuId = menuId
84+ menuLoader .parent = item
85+ menuLoader .open (item .item .subitems )
7986
8087 return
8188 }
@@ -94,6 +101,8 @@ ListView {
94101 property string menuId: Boolean (item) ? item .id : " "
95102 property string title: Boolean (item) ? item .title : " "
96103
104+ property bool isMenuOpened: menuLoader .isMenuOpened && menuLoader .parent === this
105+
97106 property bool highlight: appMenuModel .highlightedMenuId === menuId
98107 onHighlightChanged: {
99108 if (highlight) {
@@ -108,8 +117,8 @@ ListView {
108117 margins: 8
109118 drawFocusBorderInsideRect: true
110119
111- transparent: ! menuLoader . isMenuOpened
112- accentButton: menuLoader . isMenuOpened
120+ transparent: ! isMenuOpened
121+ accentButton: isMenuOpened
113122
114123 contentItem: StyledTextLabel {
115124 id: textLabel
@@ -155,42 +164,36 @@ ListView {
155164 Accessible .role : Accessible .Button
156165 Accessible .name : Utils .removeAmpersands (title)
157166
158- mouseArea .onContainsMouseChanged : {
159- if (! mouseArea .containsMouse || ! prv . openedMenu || prv . openedMenu == menuLoader . menu ) {
167+ mouseArea .onHoveredChanged : {
168+ if (! mouseArea .containsMouse ) {
160169 return
161170 }
162171
163- appMenuModel .openMenu (radioButtonDelegate .menuId )
172+ if (menuLoader .isMenuOpened && menuLoader .parent !== this ) {
173+ appMenuModel .openMenu (radioButtonDelegate .menuId , true )
174+ }
164175 }
165176
166177 onClicked: {
167- appMenuModel .openMenu (radioButtonDelegate .menuId )
178+ appMenuModel .openMenu (radioButtonDelegate .menuId , false )
168179 }
180+ }
169181
170- function toggleMenuOpened () {
171- if (prv .openedMenu && prv .openedMenu != menuLoader .menu ) {
172- prv .openedMenu .close ()
173- }
182+ StyledMenuLoader {
183+ id: menuLoader
174184
175- Qt .callLater (menuLoader .toggleOpened , item .subitems )
176- }
185+ property string menuId: " "
177186
178- StyledMenuLoader {
179- id: menuLoader
180-
181- onHandleMenuItem: {
182- Qt .callLater (appMenuModel .handleMenuItem , itemId)
183- }
187+ onHandleMenuItem: {
188+ Qt .callLater (appMenuModel .handleMenuItem , itemId)
189+ }
184190
185- onOpened: {
186- prv .openedMenu = menu
187- appMenuModel .openedMenuId = radioButtonDelegate .menuId
188- }
191+ onOpened: {
192+ appMenuModel .openedMenuId = menuLoader .menuId
193+ }
189194
190- onClosed: {
191- prv .openedMenu = null
192- appMenuModel .openedMenuId = " "
193- }
195+ onClosed: {
196+ appMenuModel .openedMenuId = " "
194197 }
195198 }
196199}
0 commit comments