on xenial help sign in
Touch in windowed mode
9eb5ad2Nick Dedekind
qml/Components/WindowControlButtons.qml+21
@@ -46,6 +46,13 @@ Row {
46 onClicked: root.closeClicked()
46 onClicked: root.closeClicked()
47 visible: root.closeButtonShown
47 visible: root.closeButtonShown
48
48
49+ // We dont want touch events to fall through to parent,
50+ // otherwise the containsMouse will not work.
51+ MouseArea {
52+ anchors.fill: parent
53+ propagateComposedEvents: true
54+ }
55+
49 Rectangle {
56 Rectangle {
50 anchors.fill: parent
57 anchors.fill: parent
51 anchors.margins: windowIsMaximized ? units.dp(3) : 0
58 anchors.margins: windowIsMaximized ? units.dp(3) : 0
@@ -69,6 +76,13 @@ Row {
69 width: height
76 width: height
70 onClicked: root.minimizeClicked()
77 onClicked: root.minimizeClicked()
71
78
79+ // We dont want touch events to fall through to parent,
80+ // otherwise the containsMouse will not work.
81+ MouseArea {
82+ anchors.fill: parent
83+ propagateComposedEvents: true
84+ }
85+
72 Rectangle {
86 Rectangle {
73 anchors.fill: parent
87 anchors.fill: parent
74 anchors.margins: windowIsMaximized ? units.dp(3) : 0
88 anchors.margins: windowIsMaximized ? units.dp(3) : 0
@@ -102,6 +116,13 @@ Row {
102 }
116 }
103 }
117 }
104
118
119+ // We dont want touch events to fall through to parent,
120+ // otherwise the containsMouse will not work.
121+ MouseArea {
122+ anchors.fill: parent
123+ propagateComposedEvents: true
124+ }
125+
105 Rectangle {
126 Rectangle {
106 anchors.fill: parent
127 anchors.fill: parent
107 anchors.margins: windowIsMaximized ? units.dp(3) : 0
128 anchors.margins: windowIsMaximized ? units.dp(3) : 0
qml/Panel/Panel.qml+143−275
@@ -42,7 +42,7 @@ Item {
42 property real indicatorMenuWidth: width
42 property real indicatorMenuWidth: width
43 property real applicationMenuWidth: width
43 property real applicationMenuWidth: width
44
44
45− property alias applicationMenus: fakeApplicationMenus
45+ property alias applicationMenus: __applicationMenus
46 property alias indicators: __indicators
46 property alias indicators: __indicators
47 property bool fullscreenMode: false
47 property bool fullscreenMode: false
48 property real indicatorAreaShowProgress: 1.0
48 property real indicatorAreaShowProgress: 1.0
@@ -55,9 +55,14 @@ Item {
55 id: backMouseEater
55 id: backMouseEater
56 anchors.fill: parent
56 anchors.fill: parent
57 anchors.topMargin: panelHeight
57 anchors.topMargin: panelHeight
58− visible: __indicators.fullyOpened
58+ visible: __indicators.fullyOpened || __applicationMenus.fullyOpened
59 enabled: visible
59 enabled: visible
60 hoverEnabled: true // should also eat hover events, otherwise they will pass through
60 hoverEnabled: true // should also eat hover events, otherwise they will pass through
61+
62+ onClicked: {
63+ __applicationMenus.hide();
64+ __indicators.hide();
65+ }
61 }
66 }
62
67
63 Binding {
68 Binding {
@@ -66,11 +71,6 @@ Item {
66 value: minimizedPanelHeight
71 value: minimizedPanelHeight
67 }
72 }
68
73
69− FakePanelMenu {
70− id: fakeApplicationMenus
71− model: registeredMenuModel.model
72− }
73−
74 RegisteredApplicationMenuModel {
74 RegisteredApplicationMenuModel {
75 id: registeredMenuModel
75 id: registeredMenuModel
76 persistentSurfaceId: PanelState.focusedPersistentSurfaceId
76 persistentSurfaceId: PanelState.focusedPersistentSurfaceId
@@ -98,6 +98,16 @@ Item {
98 source: "graphics/rectangular_dropshadow.sci"
98 source: "graphics/rectangular_dropshadow.sci"
99 }
99 }
100
100
101+ BorderImage {
102+ id: appmenuDropShadow
103+ anchors {
104+ fill: __applicationMenus
105+ margins: -units.gu(1)
106+ }
107+ visible: !__applicationMenus.fullyClosed
108+ source: "graphics/rectangular_dropshadow.sci"
109+ }
110+
101 BorderImage {
111 BorderImage {
102 id: panelDropShadow
112 id: panelDropShadow
103 anchors {
113 anchors {
@@ -110,7 +120,7 @@ Item {
110
120
111 Rectangle {
121 Rectangle {
112 id: panelAreaBackground
122 id: panelAreaBackground
113− color: theme.palette.normal.background
123+ color: callHint.visible ? theme.palette.normal.positive : theme.palette.normal.background
114 anchors {
124 anchors {
115 top: parent.top
125 top: parent.top
116 left: parent.left
126 left: parent.left
@@ -121,300 +131,148 @@ Item {
121 Behavior on color { ColorAnimation { duration: UbuntuAnimation.FastDuration } }
131 Behavior on color { ColorAnimation { duration: UbuntuAnimation.FastDuration } }
122 }
132 }
123
133
124− Loader {
134+ MouseArea {
125− id: apppMenuLoader
135+ id: decorationMouseArea
126− sourceComponent: mode == "staged" ? stagedLeftPanelComponent : windowedLeftPanelComponent
136+ objectName: "windowControlArea"
127− width: parent.width
137+ anchors {
138+ left: parent.left
139+ right: parent.right
140+ }
128 height: minimizedPanelHeight
141 height: minimizedPanelHeight
142+ hoverEnabled: !__indicators.shown
143+ onClicked: {
144+ if (callHint.visible) {
145+ callHint.showLiveCall();
146+ }
147+ }
129
148
130− opacity: root.locked ? 0 : 1
149+ onPressed: {
131− visible: opacity != 0
150+ if (!callHint.visible) {
132− Behavior on opacity { UbuntuNumberAnimation {} }
151+ // let it fall through to the window decoration of the maximized window behind, if any
152+ mouse.accepted = false;
153+ }
133− }
154+ }
134
155
135− Component {
156+ property bool showWindowControls: (PanelState.decorationsVisible && (containsMouse || menuBarLoader.menusRequested)) || PanelState.decorationsAlwaysVisible
136− id: stagedLeftPanelComponent
137
157
138− MouseArea {
158+ // WindowControlButtons inside the mouse area, otherwise QML doesn't grok nested hover events :/
139− id: decorationMouseArea
159+ // cf. https://bugreports.qt.io/browse/QTBUG-32909
140− objectName: "windowControlArea"
160+ WindowControlButtons {
161+ id: windowControlButtons
162+ objectName: "panelWindowControlButtons"
141 anchors {
163 anchors {
142 left: parent.left
164 left: parent.left
143− right: parent.right
165+ top: parent.top
144− }
145− height: minimizedPanelHeight
146− hoverEnabled: !__indicators.shown
147− onClicked: {
148− if (callHint.visible) {
149− callHint.showLiveCall();
150− }
151 }
166 }
167+ height: indicators.minimizedPanelHeight
168+ opacity: decorationMouseArea.showWindowControls ? 1 : 0
169+ visible: opacity != 0
170+ Behavior on opacity { UbuntuNumberAnimation {} }
171+
172+ active: PanelState.decorationsVisible || PanelState.decorationsAlwaysVisible
173+ windowIsMaximized: true
174+ onCloseClicked: PanelState.closeClicked()
175+ onMinimizeClicked: PanelState.minimizeClicked()
176+ onMaximizeClicked: PanelState.restoreClicked()
177+ closeButtonShown: PanelState.closeButtonShown
178+ }
152
179
153− BorderImage {
180+ Loader {
154− id: applicationMenusDropShadow
181+ id: menuBarLoader
155− anchors {
182+ anchors {
156− fill: __applicationMenus
183+ left: windowControlButtons.right
157− margins: -units.gu(1)
184+ leftMargin: units.gu(3)
158− }
159− visible: !__applicationMenus.fullyClosed
160− source: "graphics/rectangular_dropshadow.sci"
161 }
185 }
186+ height: parent.height
187+ opacity: windowControlButtons.opacity
188+ visible: opacity != 0
189+ active: __applicationMenus.model
162
190
163− PanelMenu {
191+ property bool menusRequested: menuBarLoader.item ? menuBarLoader.item.showRequested : false
164− id: __applicationMenus
165−
166− hides: fakeApplicationMenus.hides
167− model: fakeApplicationMenus.model
168−
169− width: root.applicationMenuWidth
170− minimizedPanelHeight: root.minimizedPanelHeight
171− expandedPanelHeight: root.expandedPanelHeight
172− openedHeight: root.height
173− enableHint: !callHint.active && !fullscreenMode
174− showOnClick: !callHint.visible
175− panelColor: callHint.visible ? theme.palette.normal.positive : theme.palette.normal.background
176− alignment: Qt.AlignLeft
177−
178− showRowTitle: !expanded
179− rowTitle: PanelState.title
180− rowItemDelegate: ActionItem {
181− id: actionItem
182− property int ownIndex: index
183−
184− width: _title.width + units.gu(2)
185− height: parent.height
186−
187− action: Action {
188− text: model.label.replace("_", "&")
189− }
190−
191− Label {
192− id: _title
193− anchors.centerIn: parent
194− text: actionItem.text
195− horizontalAlignment: Text.AlignLeft
196− color: enabled ? "white" : "#5d5d5d"
197− }
198− }
199−
200− pageDelegate: PanelMenuPage {
201− id: page
202− menuModel: __applicationMenus.model
203− submenuIndex: modelIndex
204−
205− factory: ApplicationMenuItemFactory {
206− rootModel: __applicationMenus.model
207− }
208− }
209−
210− enabled: !root.locked && model
211− opacity: !indicators.expanded ? 1 : 0
212− visible: opacity != 0
213− Behavior on opacity { UbuntuNumberAnimation { duration: UbuntuAnimation.SnapDuration } }
214
192
215− onEnabledChanged: {
193+ sourceComponent: MenuBar {
216− if (!enabled) hide();
194+ id: bar
217− }
195+ height: menuBarLoader.height
218−
196+ enableKeyFilter: valid && PanelState.decorationsVisible
219− Binding {
197+ unityMenuModel: registeredMenuModel.model
220− target: fakeApplicationMenus
221− property: "expanded"
222− value: __applicationMenus.expanded
223− }
224
198
225 Connections {
199 Connections {
226− target: fakeApplicationMenus
200+ target: __applicationMenus
227− onHide: __applicationMenus.hide();
201+ onHide: bar.dismiss();
228− onShow: __applicationMenus.show();
229 }
202 }
230 }
203 }
204+ }
231
205
232− ActiveCallHint {
206+ ActiveCallHint {
233− id: callHint
207+ id: callHint
234− objectName: "callHint"
208+ objectName: "callHint"
235−
236− x: __applicationMenus.x + __applicationMenus.barWidth
237− height: parent.height
238
209
239− visible: active && (indicators.state == "initial" && __applicationMenus.state == "initial")
210+ anchors.centerIn: parent
240− greeterShown: root.greeterShown
211+ height: minimizedPanelHeight
241− }
242
212
243− Binding {
213+ visible: active && indicators.state == "initial"
244− target: __indicators
214+ greeterShown: root.greeterShown
245− property: "overFlowWidth"
246− value: {
247− var width = root.width;
248− if (callHint.visible) {
249− width -= callHint.width;
250− }
251− if (__applicationMenus.visible) {
252− width -= __applicationMenus.barWidth;
253− }
254− return Math.max(width, 0);
255− }
256− }
257− Binding {
258− target: panelAreaBackground
259− property: "color"
260− value: callHint.visible ? theme.palette.normal.positive : theme.palette.normal.background
261− }
262− Binding {
263− target: __indicators
264− property: "enableHint"
265− value: !callHint.active && !__indicators.fullscreenMode
266− }
267− Binding {
268− target: __indicators
269− property: "showOnClick"
270− value: !callHint.visible
271− }
272− Connections {
273− target: __indicators
274− onShowTapped: {
275− if (callHint.active) {
276− callHint.showLiveCall();
277− }
278− }
279− }
280− Binding {
281− target: backMouseEater
282− property: "visible"
283− value: true
284− when: __applicationMenus.fullyOpened
285− }
286− Connections {
287− target: backMouseEater
288− onClicked: __applicationMenus.hide();
289− }
290 }
215 }
291 }
216 }
292
217
293− Component {
218+ PanelMenu {
294− id: windowedLeftPanelComponent
219+ id: __applicationMenus
295
220
296− MouseArea {
221+ model: registeredMenuModel.model
297− id: decorationMouseArea
222+ width: root.applicationMenuWidth
298− objectName: "windowControlArea"
223+ minimizedPanelHeight: root.minimizedPanelHeight
299− anchors {
224+ expandedPanelHeight: root.expandedPanelHeight
300− left: parent.left
225+ openedHeight: root.height
301− right: parent.right
226+ alignment: Qt.AlignLeft
302− }
227+ enableHint: !callHint.active && !fullscreenMode
303− height: minimizedPanelHeight
304− hoverEnabled: !__indicators.shown
305− onClicked: if (callHint.visible) { callHint.showLiveCall(); }
228+ showOnClick: !callHint.visible
229+ panelColor: panelAreaBackground.color
306
230
307− onPressed: {
231+ onShowTapped: {
308− if (!callHint.visible) {
232+ if (callHint.active) {
309− // let it fall through to the window decoration of the maximized window behind, if any
233+ callHint.showLiveCall();
310− mouse.accepted = false;
311− }
312 }
234 }
235+ }
313
236
314− property bool showWindowControls: (PanelState.decorationsVisible && (containsMouse || menuBarLoader.menusRequested)) || PanelState.decorationsAlwaysVisible
237+ showRowTitle: !expanded
238+ rowTitle: PanelState.title
239+ rowItemDelegate: ActionItem {
240+ id: actionItem
241+ property int ownIndex: index
315
242
316− // WindowControlButtons inside the mouse area, otherwise QML doesn't grok nested hover events :/
243+ width: _title.width + units.gu(2)
317− // cf. https://bugreports.qt.io/browse/QTBUG-32909
244+ height: parent.height
318− WindowControlButtons {
319− id: windowControlButtons
320− objectName: "panelWindowControlButtons"
321− anchors {
322− left: parent.left
323− top: parent.top
324− }
325− height: indicators.minimizedPanelHeight
326− opacity: decorationMouseArea.showWindowControls ? 1 : 0
327− visible: opacity != 0
328− Behavior on opacity { UbuntuNumberAnimation {} }
329−
330− active: PanelState.decorationsVisible || PanelState.decorationsAlwaysVisible
331− windowIsMaximized: true
332− onCloseClicked: PanelState.closeClicked()
333− onMinimizeClicked: PanelState.minimizeClicked()
334− onMaximizeClicked: PanelState.restoreClicked()
335− closeButtonShown: PanelState.closeButtonShown
336− }
337
245
338− Loader {
246+ action: Action {
339− id: menuBarLoader
247+ text: model.label.replace("_", "&")
340− anchors {
341− left: windowControlButtons.right
342− leftMargin: units.gu(3)
343− }
344− height: parent.height
345− opacity: windowControlButtons.opacity
346− visible: opacity != 0
347− active: fakeApplicationMenus.model
348−
349− property bool menusRequested: menuBarLoader.item ? menuBarLoader.item.showRequested : false
350−
351− sourceComponent: MenuBar {
352− id: bar
353− height: menuBarLoader.height
354− enableKeyFilter: valid && PanelState.decorationsVisible
355− unityMenuModel: fakeApplicationMenus.model
356−
357− Connections {
358− target: fakeApplicationMenus
359− onHide: bar.dismiss();
360− }
361− }
362 }
248 }
363
249
364 Label {
250 Label {
365− id: titleLabel
251+ id: _title
366− objectName: "windowDecorationTitle"
367− anchors {
252+ anchors.centerIn: parent
368− left: parent.left
253+ text: actionItem.text
369− leftMargin: units.gu(1)
254+ horizontalAlignment: Text.AlignLeft
370− verticalCenter: parent.verticalCenter
371− }
372− color: "white"
255+ color: enabled ? "white" : "#5d5d5d"
373− opacity: !decorationMouseArea.showWindowControls ? 1 : 0
374− visible: opacity != 0
375− verticalAlignment: Text.AlignVCenter
376− fontSize: "medium"
377− font.weight: PanelState.decorationsVisible ? Font.Light : Font.Medium
378− text: PanelState.title
379− elide: Text.ElideRight
380− maximumLineCount: 1
381− Behavior on opacity { UbuntuNumberAnimation {} }
382 }
256 }
257+ }
383
258
384− ActiveCallHint {
259+ pageDelegate: PanelMenuPage {
385− id: callHint
260+ id: page
386− objectName: "callHint"
261+ menuModel: __applicationMenus.model
387−
262+ submenuIndex: modelIndex
388− anchors.centerIn: parent
389− height: minimizedPanelHeight
390
263
391− visible: active && indicators.state == "initial"
264+ factory: ApplicationMenuItemFactory {
392− greeterShown: root.greeterShown
265+ rootModel: __applicationMenus.model
393 }
266 }
267+ }
394
268
395− Binding {
269+ enabled: !root.locked && model
396− target: panelAreaBackground
270+ opacity: !decorationMouseArea.showWindowControls && !indicators.expanded ? 1 : 0
397− property: "color"
271+ visible: opacity != 0
398− value: callHint.visible ? theme.palette.normal.positive : theme.palette.normal.background
272+ Behavior on opacity { UbuntuNumberAnimation { duration: UbuntuAnimation.SnapDuration } }
399− }
273+
400− Binding {
274+ onEnabledChanged: {
401− target: __indicators
275+ if (!enabled) hide();
402− property: "enableHint"
403− value: !callHint.active && !__indicators.fullscreenMode
404− }
405− Binding {
406− target: __indicators
407− property: "showOnClick"
408− value: !callHint.visible
409− }
410− Connections {
411− target: __indicators
412− onShowTapped: {
413− if (callHint.active) {
414− callHint.showLiveCall();
415− }
416− }
417− }
418 }
276 }
419 }
277 }
420
278
@@ -432,10 +290,16 @@ Item {
432 openedHeight: root.height
290 openedHeight: root.height
433
291
434 overFlowWidth: root.width
292 overFlowWidth: root.width
435− enableHint: !fullscreenMode
293+ enableHint: !callHint.active && !fullscreenMode
436− showOnClick: true
294+ showOnClick: !callHint.visible
437 panelColor: panelAreaBackground.color
295 panelColor: panelAreaBackground.color
438
296
297+ onShowTapped: {
298+ if (callHint.active) {
299+ callHint.showLiveCall();
300+ }
301+ }
302+
439 rowItemDelegate: IndicatorItem {
303 rowItemDelegate: IndicatorItem {
440 id: indicatorItem
304 id: indicatorItem
441 objectName: identifier+"-panelItem"
305 objectName: identifier+"-panelItem"
@@ -492,10 +356,6 @@ Item {
492 onEnabledChanged: {
356 onEnabledChanged: {
493 if (!enabled) hide();
357 if (!enabled) hide();
494 }
358 }
495− Connections {
496− target: backMouseEater
497− onClicked: __indicators.hide();
498− }
499 }
359 }
500 }
360 }
501
361
@@ -523,13 +383,21 @@ Item {
523 when: fullscreenMode
383 when: fullscreenMode
524 PropertyChanges {
384 PropertyChanges {
525 target: indicatorArea;
385 target: indicatorArea;
386+ anchors.topMargin: {
526− anchors.topMargin: indicators.state === "initial" ? - minimizedPanelHeight : 0
387+ if (indicators.state !== "initial") return 0;
388+ if (applicationMenus.state !== "initial") return 0;
389+ return -minimizedPanelHeight;
390+ }
527− opacity: indicators.fullyClosed ? 0.0 : 1.0
391+ opacity: indicators.fullyClosed && applicationMenus.fullyClosed ? 0.0 : 1.0
528 }
392 }
529 PropertyChanges {
393 PropertyChanges {
530 target: indicators.showDragHandle;
394 target: indicators.showDragHandle;
531 anchors.bottomMargin: -units.gu(1)
395 anchors.bottomMargin: -units.gu(1)
532 }
396 }
397+ PropertyChanges {
398+ target: applicationMenus.showDragHandle;
399+ anchors.bottomMargin: -units.gu(1)
400+ }
533 }
401 }
534 ]
402 ]
535
403
qml/Stage/DecoratedWindow.qml+1−2
@@ -232,8 +232,7 @@ FocusScope {
232 enableMenus: {
232 enableMenus: {
233 return active &&
233 return active &&
234 surface &&
234 surface &&
235− (PanelState.focusedPersistentSurfaceId !== surface.persistentId ||
236− (PanelState.focusedPersistentSurfaceId === surface.persistentId && !PanelState.focusedSurfaceMaximized))
235+ (PanelState.focusedPersistentSurfaceId === surface.persistentId && !PanelState.decorationsVisible)
237 }
236 }
238 menu: sharedAppModel.model
237 menu: sharedAppModel.model
239
238
qml/Stage/WindowDecoration.qml+26−13
@@ -22,7 +22,7 @@ import "../Components"
22import "../Components/PanelState"
22import "../Components/PanelState"
23import "../ApplicationMenus"
23import "../ApplicationMenus"
24
24
25−MouseArea {
25+Item {
26 id: root
26 id: root
27
27
28 property Item target // appDelegate
28 property Item target // appDelegate
@@ -35,23 +35,35 @@ MouseArea {
35
35
36 readonly property real buttonsWidth: buttons.width + row.spacing
36 readonly property real buttonsWidth: buttons.width + row.spacing
37
37
38− acceptedButtons: Qt.AllButtons // prevent leaking unhandled mouse events
39− hoverEnabled: true
40−
41 signal closeClicked()
38 signal closeClicked()
42 signal minimizeClicked()
39 signal minimizeClicked()
43 signal maximizeClicked()
40 signal maximizeClicked()
44 signal maximizeHorizontallyClicked()
41 signal maximizeHorizontallyClicked()
45 signal maximizeVerticallyClicked()
42 signal maximizeVerticallyClicked()
46
43
44+ MouseArea {
45+ id: hoverArea
46+ anchors.fill: parent
47+
48+ acceptedButtons: Qt.AllButtons // prevent leaking unhandled mouse events
49+ hoverEnabled: true
50+
47− onDoubleClicked: {
51+ onDoubleClicked: {
48− if (target.canBeMaximized && mouse.button == Qt.LeftButton) {
52+ if (target.canBeMaximized && mouse.button == Qt.LeftButton) {
49− root.maximizeClicked();
53+ root.maximizeClicked();
54+ }
50 }
55 }
51− }
52
56
53− // do not let unhandled wheel event pass thru the decoration
57+ // do not let unhandled wheel event pass thru the decoration
54− onWheel: wheel.accepted = true;
58+ onWheel: wheel.accepted = true;
59+
60+ // We dont want touch events to fall through to parent,
61+ // otherwise the containsMouse will not work.
62+ MouseArea {
63+ anchors.fill: parent
64+ propagateComposedEvents: true
65+ }
66+ }
55
67
56 QtObject {
68 QtObject {
57 id: priv
69 id: priv
@@ -60,7 +72,7 @@ MouseArea {
60 property bool shouldShowMenus: root.enableMenus &&
72 property bool shouldShowMenus: root.enableMenus &&
61 menuBar &&
73 menuBar &&
62 menuBar.valid &&
74 menuBar.valid &&
63− (menuBar.showRequested || root.containsMouse)
75+ (menuBar.showRequested || hoverArea.containsMouse)
64 }
76 }
65
77
66 Rectangle {
78 Rectangle {
@@ -108,6 +120,8 @@ MouseArea {
108 onMaximizeHorizontallyClicked: if (root.target.canBeMaximizedHorizontally) root.maximizeHorizontallyClicked();
120 onMaximizeHorizontallyClicked: if (root.target.canBeMaximizedHorizontally) root.maximizeHorizontallyClicked();
109 onMaximizeVerticallyClicked: if (root.target.canBeMaximizedVertically) root.maximizeVerticallyClicked();
121 onMaximizeVerticallyClicked: if (root.target.canBeMaximizedVertically) root.maximizeVerticallyClicked();
110 closeButtonShown: root.target.appId !== "unity8-dash"
122 closeButtonShown: root.target.appId !== "unity8-dash"
123+
124+ enabled: !PanelState.decorationsVisible
111 }
125 }
112
126
113 Item {
127 Item {
@@ -140,7 +154,7 @@ MouseArea {
140 sourceComponent: MenuBar {
154 sourceComponent: MenuBar {
141 id: menuBar
155 id: menuBar
142 height: menuBarLoader.height
156 height: menuBarLoader.height
143− enableKeyFilter: valid && root.active && root.enableMenus && !PanelState.decorationsVisible
157+ enableKeyFilter: valid && root.active && root.enableMenus
144 unityMenuModel: root.menu
158 unityMenuModel: root.menu
145 }
159 }
146
160
@@ -150,5 +164,4 @@ MouseArea {
150 }
164 }
151 }
165 }
152 }
166 }
153−
154}
167}