on xenial help sign in
WIP: shell theme updates
e11e7bbLukáš Tinkl
CMakeLists.txt+1−1
@@ -57,7 +57,7 @@ find_package(Qt5DBus 5.4 REQUIRED)
57find_package(Qt5Concurrent 5.4 REQUIRED)
57find_package(Qt5Concurrent 5.4 REQUIRED)
58find_package(Qt5Sql 5.4 REQUIRED)
58find_package(Qt5Sql 5.4 REQUIRED)
59
59
60−pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=13)
60+pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application>=13)
61pkg_check_modules(GIO REQUIRED gio-2.0>=2.32)
61pkg_check_modules(GIO REQUIRED gio-2.0>=2.32)
62pkg_check_modules(GLIB REQUIRED glib-2.0>=2.32)
62pkg_check_modules(GLIB REQUIRED glib-2.0>=2.32)
63pkg_check_modules(QMENUMODEL REQUIRED qmenumodel)
63pkg_check_modules(QMENUMODEL REQUIRED qmenumodel)
qml/Components/PanelState/PanelState.qml+1−1
@@ -23,7 +23,7 @@ QtObject {
23 property string title: ""
23 property string title: ""
24 property bool buttonsVisible: false
24 property bool buttonsVisible: false
25 property bool dropShadow: false
25 property bool dropShadow: false
26− property int panelHeight: units.gu(3)
26+ property int panelHeight: 0
27
27
28 signal close()
28 signal close()
29 signal minimize()
29 signal minimize()
qml/Components/UbuntuShapeForItem.qml+1
@@ -28,6 +28,7 @@ Item {
28
28
29 property alias radius: shape.radius
29 property alias radius: shape.radius
30 property alias image: source.sourceItem
30 property alias image: source.sourceItem
31+ property alias aspect: shape.aspect
31
32
32 ShaderEffectSource {
33 ShaderEffectSource {
33 id: source
34 id: source
qml/Components/WindowControlButtons.qml+6−6
@@ -41,7 +41,7 @@ Row {
41 width: units.gu(2)
41 width: units.gu(2)
42 height: units.gu(2)
42 height: units.gu(2)
43 radius: height / 2
43 radius: height / 2
44− color: "#ed3146"
44+ color: UbuntuColors.red
45 visible: parent.containsMouse
45 visible: parent.containsMouse
46 }
46 }
47 Icon {
47 Icon {
@@ -49,7 +49,7 @@ Row {
49 height: parent.height *.5
49 height: parent.height *.5
50 anchors.centerIn: parent
50 anchors.centerIn: parent
51 source: "graphics/window-close.svg"
51 source: "graphics/window-close.svg"
52− color: root.active ? "white" : "#5d5d5d"
52+ color: root.active ? "white" : UbuntuColors.slate
53 keyColor: "black"
53 keyColor: "black"
54 }
54 }
55 }
55 }
@@ -67,7 +67,7 @@ Row {
67 width: units.gu(2)
67 width: units.gu(2)
68 height: units.gu(2)
68 height: units.gu(2)
69 radius: height / 2
69 radius: height / 2
70− color: "#888888"
70+ color: UbuntuColors.graphite
71 visible: parent.containsMouse
71 visible: parent.containsMouse
72 }
72 }
73 Icon {
73 Icon {
@@ -75,7 +75,7 @@ Row {
75 height: parent.height *.5
75 height: parent.height *.5
76 anchors.centerIn: parent
76 anchors.centerIn: parent
77 source: "graphics/window-minimize.svg"
77 source: "graphics/window-minimize.svg"
78− color: root.active ? "white" : "#5d5d5d"
78+ color: root.active ? "white" : UbuntuColors.slate
79 keyColor: "black"
79 keyColor: "black"
80 }
80 }
81 }
81 }
@@ -93,7 +93,7 @@ Row {
93 width: units.gu(2)
93 width: units.gu(2)
94 height: units.gu(2)
94 height: units.gu(2)
95 radius: height / 2
95 radius: height / 2
96− color: "#888888"
96+ color: UbuntuColors.graphite
97 visible: parent.containsMouse
97 visible: parent.containsMouse
98 }
98 }
99 Icon {
99 Icon {
@@ -101,7 +101,7 @@ Row {
101 height: parent.height *.5
101 height: parent.height *.5
102 anchors.centerIn: parent
102 anchors.centerIn: parent
103 source: "graphics/window-maximize.svg"
103 source: "graphics/window-maximize.svg"
104− color: root.active ? "white" : "#5d5d5d"
104+ color: root.active ? "white" : UbuntuColors.slate
105 keyColor: "black"
105 keyColor: "black"
106 }
106 }
107 }
107 }
qml/Launcher/LauncherDelegate.qml+10−11
@@ -164,7 +164,7 @@ Item {
164 }
164 }
165 width: Math.min(root.itemWidth, Math.max(units.gu(2), countLabel.implicitWidth + units.gu(1)))
165 width: Math.min(root.itemWidth, Math.max(units.gu(2), countLabel.implicitWidth + units.gu(1)))
166 height: units.gu(2)
166 height: units.gu(2)
167− backgroundColor: UbuntuColors.orange
167+ backgroundColor: UbuntuColors.green
168 visible: root.countVisible
168 visible: root.countVisible
169 aspect: UbuntuShape.Flat
169 aspect: UbuntuShape.Flat
170
170
@@ -173,14 +173,12 @@ Item {
173 objectName: "countLabel"
173 objectName: "countLabel"
174 text: root.count
174 text: root.count
175 anchors.centerIn: parent
175 anchors.centerIn: parent
176− // FIXME: verticalCenter seems to be off wee bit and QML doesn't have a centerLine
177− // property for Text: https://bugreports.qt-project.org/browse/QTBUG-40479
178− anchors.verticalCenterOffset: -units.dp(.5)
179 width: root.itemWidth - units.gu(1)
176 width: root.itemWidth - units.gu(1)
180 horizontalAlignment: Text.AlignHCenter
177 horizontalAlignment: Text.AlignHCenter
181 elide: Text.ElideRight
178 elide: Text.ElideRight
182 color: "white"
179 color: "white"
183 fontSize: "x-small"
180 fontSize: "x-small"
181+ font.weight: Font.Light
184 }
182 }
185 }
183 }
186
184
@@ -190,9 +188,9 @@ Item {
190
188
191 anchors.centerIn: parent
189 anchors.centerIn: parent
192 width: root.itemWidth * .8
190 width: root.itemWidth * .8
193− height: units.gu(1)
191+ height: units.dp(3)
194 visible: root.progress > -1
192 visible: root.progress > -1
195− backgroundColor: UbuntuColors.darkGrey
193+ backgroundColor: "white"
196 borderSource: "none"
194 borderSource: "none"
197
195
198 Item {
196 Item {
@@ -210,7 +208,7 @@ Item {
210 top: parent.top
208 top: parent.top
211 bottom: parent.bottom
209 bottom: parent.bottom
212 }
210 }
213− backgroundColor: "white"
211+ backgroundColor: UbuntuColors.blue
214 borderSource: "none"
212 borderSource: "none"
215 width: progressOverlay.width
213 width: progressOverlay.width
216 }
214 }
@@ -247,18 +245,19 @@ Item {
247 visible: root.itemFocused
245 visible: root.itemFocused
248 }
246 }
249
247
250− Rectangle {
248+ UbuntuShape {
251 objectName: "shortcutHint"
249 objectName: "shortcutHint"
252 anchors.centerIn: parent
250 anchors.centerIn: parent
253− width: units.gu(3)
251+ width: units.gu(2)
254 height: width
252 height: width
255− color: "#E0292929"
253+ backgroundColor: Qt.rgba(17/255, 17/255, 17/255, 0.95) // #111111, 95%
256 visible: root.shortcutHintShown
254 visible: root.shortcutHintShown
255+ aspect: UbuntuShape.Flat
257 Label {
256 Label {
258 anchors.centerIn: parent
257 anchors.centerIn: parent
259 text: (itemIndex + 1) % 10
258 text: (itemIndex + 1) % 10
260 color: "white"
259 color: "white"
261− font.weight: Font.DemiBold
260+ font.weight: Font.Light
262 }
261 }
263 }
262 }
264 }
263 }
qml/Launcher/LauncherPanel.qml+20−11
@@ -25,7 +25,7 @@ import "../Components/"
25
25
26Rectangle {
26Rectangle {
27 id: root
27 id: root
28− color: "#E0292929"
28+ color: Qt.rgba(17/255, 17/255, 17/255, 0.95) // #111111, 95%
29
29
30 rotation: inverted ? 180 : 0
30 rotation: inverted ? 180 : 0
31
31
@@ -633,9 +633,10 @@ Rectangle {
633 id: quickListShape
633 id: quickListShape
634 objectName: "quickListShape"
634 objectName: "quickListShape"
635 anchors.fill: quickList
635 anchors.fill: quickList
636− opacity: quickList.state === "open" ? 0.8 : 0
636+ opacity: quickList.state === "open" ? 0.95 : 0 // FIXME: should this have some transparency at all?
637 visible: opacity > 0
637 visible: opacity > 0
638 rotation: root.rotation
638 rotation: root.rotation
639+ aspect: UbuntuShape.Flat
639
640
640 Behavior on opacity {
641 Behavior on opacity {
641 UbuntuNumberAnimation {}
642 UbuntuNumberAnimation {}
@@ -696,7 +697,7 @@ Rectangle {
696 Rectangle {
697 Rectangle {
697 id: quickList
698 id: quickList
698 objectName: "quickList"
699 objectName: "quickList"
699− color: "#f5f5f5"
700+ color: UbuntuColors.jet
700 // Because we're setting left/right anchors depending on orientation, it will break the
701 // Because we're setting left/right anchors depending on orientation, it will break the
701 // width setting after rotating twice. This makes sure we also re-apply width on rotation
702 // width setting after rotating twice. This makes sure we also re-apply width on rotation
702 width: root.inverted ? units.gu(30) : units.gu(30)
703 width: root.inverted ? units.gu(30) : units.gu(30)
@@ -767,14 +768,10 @@ Rectangle {
767 quickList.state = "open";
768 quickList.state = "open";
768 }
769 }
769
770
770− StyledItem {
771+ Item {
771 width: parent.width
772 width: parent.width
772 height: quickListColumn.height
773 height: quickListColumn.height
773
774
774− theme: ThemeSettings {
775− name: "Ubuntu.Components.Themes.Ambiance"
776− }
777−
778 Column {
775 Column {
779 id: quickListColumn
776 id: quickListColumn
780 width: parent.width
777 width: parent.width
@@ -784,11 +781,23 @@ Rectangle {
784 id: popoverRepeater
781 id: popoverRepeater
785 model: quickList.model
782 model: quickList.model
786
783
787− ListItems.Standard {
784+ ListItem {
788 objectName: "quickListEntry" + index
785 objectName: "quickListEntry" + index
789− text: (model.clickable ? "" : "<b>") + model.label + (model.clickable ? "" : "</b>")
790− highlightWhenPressed: model.clickable
791 selected: index === quickList.selectedIndex
786 selected: index === quickList.selectedIndex
787+ divider.colorFrom: UbuntuColors.slate
788+ divider.colorTo: UbuntuColors.slate
789+ highlightColor: !model.clickable ? quickList.color : undefined
790+
791+ Label {
792+ anchors.fill: parent
793+ anchors.leftMargin: units.gu(4) // 2 GU for an optional checkmark
794+ anchors.rightMargin: units.gu(1)
795+ verticalAlignment: Label.AlignVCenter
796+ text: model.label
797+ color: model.clickable ? "white" /*theme.palette.normal.backgroundText*/ : theme.palette.normal.backgroundSecondaryText
798+ //fontSize: model.clickable && index == 0 ? "medium" : "small" // FIXME too small
799+ font.weight: index == 0 ? Font.Medium : Font.Light
800+ }
792
801
793 onClicked: {
802 onClicked: {
794 if (!model.clickable) {
803 if (!model.clickable) {
qml/Panel/Indicators/client/IndicatorsClient.qml+1−1
@@ -22,7 +22,7 @@ import Ubuntu.Components 1.3
22import Ubuntu.Components.ListItems 1.3 as ListItem
22import Ubuntu.Components.ListItems 1.3 as ListItem
23
23
24Rectangle {
24Rectangle {
25− color: "#292929"
25+ color: UbuntuColors.jet
26 id: root
26 id: root
27
27
28 Component.onCompleted: {
28 Component.onCompleted: {
qml/Panel/MenuContent.qml−1
@@ -27,7 +27,6 @@ Rectangle {
27
27
28 property QtObject indicatorsModel: null
28 property QtObject indicatorsModel: null
29 property int currentMenuIndex: -1
29 property int currentMenuIndex: -1
30− color: theme.palette.normal.background
31
30
32 width: units.gu(40)
31 width: units.gu(40)
33 height: units.gu(42)
32 height: units.gu(42)
qml/Panel/Panel.qml+12−2
@@ -101,6 +101,7 @@ Item {
101 }
101 }
102
102
103 MouseArea {
103 MouseArea {
104+ objectName: "windowControlArea"
104 anchors {
105 anchors {
105 top: parent.top
106 top: parent.top
106 left: parent.left
107 left: parent.left
@@ -111,6 +112,15 @@ Item {
111 onClicked: callHint.visible ? callHint.showLiveCall() : PanelState.focusMaximizedApp()
112 onClicked: callHint.visible ? callHint.showLiveCall() : PanelState.focusMaximizedApp()
112 onDoubleClicked: PanelState.maximize()
113 onDoubleClicked: PanelState.maximize()
113
114
115+ property bool mouseWasPressed: false
116+ onPressed: mouseWasPressed = containsPress
117+ onExited: {
118+ if (mouseWasPressed && !indicatorAreaBackground.contains(Qt.point(mouseX, mouseY))) {
119+ PanelState.maximize(); // restore the window when "dragging" the panel down
120+ mouseWasPressed = false;
121+ }
122+ }
123+
114 // WindowControlButtons inside the mouse area, otherwise QML doesn't grok nested hover events :/
124 // WindowControlButtons inside the mouse area, otherwise QML doesn't grok nested hover events :/
115 // cf. https://bugreports.qt.io/browse/QTBUG-32909
125 // cf. https://bugreports.qt.io/browse/QTBUG-32909
116 WindowControlButtons {
126 WindowControlButtons {
@@ -176,12 +186,12 @@ Item {
176 topMargin: units.gu(0.5)
186 topMargin: units.gu(0.5)
177 bottomMargin: units.gu(0.5)
187 bottomMargin: units.gu(0.5)
178 }
188 }
179− color: PanelState.buttonsVisible ? "#ffffff" : "#5d5d5d"
189+ color: PanelState.buttonsVisible ? "white" : UbuntuColors.slate
180 height: indicators.minimizedPanelHeight - anchors.topMargin - anchors.bottomMargin
190 height: indicators.minimizedPanelHeight - anchors.topMargin - anchors.bottomMargin
181 visible: !windowControlButtons.visible && !root.locked && !callHint.visible
191 visible: !windowControlButtons.visible && !root.locked && !callHint.visible
182 verticalAlignment: Text.AlignVCenter
192 verticalAlignment: Text.AlignVCenter
183 fontSize: "medium"
193 fontSize: "medium"
184− font.weight: Font.Normal
194+ font.weight: PanelState.buttonsVisible ? Font.Light : Font.Medium
185 text: PanelState.title
195 text: PanelState.title
186 elide: Text.ElideRight
196 elide: Text.ElideRight
187 maximumLineCount: 1
197 maximumLineCount: 1
qml/Stages/DecoratedWindow.qml−11
@@ -34,7 +34,6 @@ FocusScope {
34
34
35 readonly property bool decorationShown: !fullscreen
35 readonly property bool decorationShown: !fullscreen
36 property bool highlightShown: false
36 property bool highlightShown: false
37− property real shadowOpacity: 1
38
37
39 property alias requestedWidth: applicationWindow.requestedWidth
38 property alias requestedWidth: applicationWindow.requestedWidth
40 property real requestedHeight
39 property real requestedHeight
@@ -66,16 +65,6 @@ FocusScope {
66 visible: highlightShown
65 visible: highlightShown
67 }
66 }
68
67
69− BorderImage {
70− anchors {
71− fill: root
72− margins: active ? -units.gu(2) : -units.gu(1.5)
73− }
74− source: "graphics/dropshadow2gu.sci"
75− opacity: root.shadowOpacity * .3
76− enabled: !fullscreen
77− }
78−
79 WindowDecoration {
68 WindowDecoration {
80 id: decoration
69 id: decoration
81 target: root.parent
70 target: root.parent
qml/Stages/DesktopStage.qml+57
@@ -486,6 +486,63 @@ AbstractStage {
486 onMinimize: appDelegate.minimize()
486 onMinimize: appDelegate.minimize()
487 onDecorationPressed: { ApplicationManager.focusApplication(model.appId) }
487 onDecorationPressed: { ApplicationManager.focusApplication(model.appId) }
488 }
488 }
489+
490+ BorderImage {
491+ anchors {
492+ fill: decoratedWindow
493+ margins: decoratedWindow.active ? -units.gu(2) : -units.gu(1.5)
494+ }
495+ source: "graphics/dropshadow2gu.sci"
496+ opacity: .3
497+ visible: !decoratedWindow.fullscreen && !appDelegate.maximized
498+ enabled: visible
499+ }
500+
501+ Rectangle {
502+ id: mask
503+ radius: appDelegate.maximized ? 0 : units.gu(.7) // disable rounded corners when maximized/fullscreen
504+ anchors.fill: decoratedWindow
505+ }
506+
507+ ShaderEffectSource {
508+ id: sourceMask
509+ hideSource: true
510+ sourceItem: mask
511+ }
512+
513+ ShaderEffectSource {
514+ id: sourceImage
515+ hideSource: !decoratedWindow.fullscreen
516+ sourceItem: decoratedWindow
517+ }
518+
519+ ShaderEffect {
520+ id: maskEffect
521+ anchors.fill: mask
522+ blending: false
523+ enabled: state == "normal" || state == "closing"
524+ || appDelegate.maximizedLeft || appDelegate.maximizedRight
525+
526+ property variant sourceTexture: sourceImage
527+ property variant maskTexture: sourceMask
528+
529+ fragmentShader: "
530+ uniform sampler2D sourceTexture;
531+ uniform sampler2D maskTexture;
532+ varying highp vec2 qt_TexCoord0;
533+
534+ void main()
535+ {
536+ highp vec4 c = texture2D(sourceTexture, qt_TexCoord0);
537+ highp vec4 m = texture2D(maskTexture, qt_TexCoord0);
538+
539+ if (m.a == 0.0) // if the mask is transparent, discard the pixel
540+ discard;
541+ else
542+ gl_FragColor = c; // otherwise use the original color
543+ }
544+ "
545+ }
489 }
546 }
490 }
547 }
491 }
548 }
qml/Stages/WindowDecoration.qml+2−6
@@ -22,7 +22,6 @@ import "../Components/PanelState"
22
22
23MouseArea {
23MouseArea {
24 id: root
24 id: root
25− clip: true
26
25
27 property Item target
26 property Item target
28 property alias title: titleLabel.text
27 property alias title: titleLabel.text
@@ -64,9 +63,6 @@ MouseArea {
64 }
63 }
65
64
66 Rectangle {
65 Rectangle {
67− anchors.fill: parent
68− anchors.bottomMargin: -radius
69− radius: units.gu(.5)
70 color: theme.palette.normal.background
66 color: theme.palette.normal.background
71 }
67 }
72
68
@@ -92,12 +88,12 @@ MouseArea {
92 Label {
88 Label {
93 id: titleLabel
89 id: titleLabel
94 objectName: "windowDecorationTitle"
90 objectName: "windowDecorationTitle"
95− color: root.active ? "white" : "#5d5d5d"
91+ color: root.active ? "white" : UbuntuColors.slate
96 height: parent.height
92 height: parent.height
97 width: parent.width - buttons.width - parent.anchors.rightMargin - parent.anchors.leftMargin
93 width: parent.width - buttons.width - parent.anchors.rightMargin - parent.anchors.leftMargin
98 verticalAlignment: Text.AlignVCenter
94 verticalAlignment: Text.AlignVCenter
99 fontSize: "medium"
95 fontSize: "medium"
100− font.weight: root.active ? Font.Light : Font.Normal
96+ font.weight: root.active ? Font.Light : Font.Medium
101 elide: Text.ElideRight
97 elide: Text.ElideRight
102 }
98 }
103 }
99 }
tests/mocks/Unity/CMakeLists.txt+1−1
@@ -8,7 +8,7 @@ add_subdirectory(DashCommunicator)
8add_subdirectory(Screens)
8add_subdirectory(Screens)
9
9
10pkg_search_module(GOBJECT gobject-2.0 REQUIRED)
10pkg_search_module(GOBJECT gobject-2.0 REQUIRED)
11−pkg_check_modules(SCOPES_API REQUIRED unity-shell-scopes=10)
11+pkg_check_modules(SCOPES_API REQUIRED unity-shell-scopes=11)
12
12
13include_directories(
13include_directories(
14 ${CMAKE_CURRENT_BINARY_DIR}
14 ${CMAKE_CURRENT_BINARY_DIR}
tests/qmltests/Stages/ApplicationCheckBox.qml−1
@@ -88,7 +88,6 @@ RowLayout {
88 Label {
88 Label {
89 id: appIdLabel
89 id: appIdLabel
90 text: root.appId
90 text: root.appId
91− color: "white"
92 anchors.verticalCenter: parent.verticalCenter
91 anchors.verticalCenter: parent.verticalCenter
93 }
92 }
94 Rectangle {
93 Rectangle {
tests/qmltests/Stages/tst_DesktopStage.qml+2−4
@@ -65,7 +65,6 @@ Item {
65 property bool itemDestroyed: false
65 property bool itemDestroyed: false
66 sourceComponent: Component {
66 sourceComponent: Component {
67 DesktopStage {
67 DesktopStage {
68− color: "white"
69 anchors.fill: parent
68 anchors.fill: parent
70 background: "../../../qml/graphics/tablet_background.jpg"
69 background: "../../../qml/graphics/tablet_background.jpg"
71
70
@@ -82,13 +81,13 @@ Item {
82
81
83 Rectangle {
82 Rectangle {
84 id: controls
83 id: controls
85− color: "darkgrey"
86 width: units.gu(30)
84 width: units.gu(30)
87 anchors {
85 anchors {
88 top: parent.top
86 top: parent.top
89 bottom: parent.bottom
87 bottom: parent.bottom
90 right: parent.right
88 right: parent.right
91 }
89 }
90+ color: "darkgrey"
92
91
93 Flickable {
92 Flickable {
94 anchors.fill: parent
93 anchors.fill: parent
@@ -98,7 +97,6 @@ Item {
98 spacing: units.gu(1)
97 spacing: units.gu(1)
99
98
100 Button {
99 Button {
101− color: "white"
102 text: "Make surface slow to resize"
100 text: "Make surface slow to resize"
103 activeFocusOnPress: false
101 activeFocusOnPress: false
104 onClicked: {
102 onClicked: {
@@ -125,7 +123,7 @@ Item {
125 }
123 }
126 }
124 }
127
125
128− SurfaceManagerControls { textColor: "white" }
126+ SurfaceManagerControls { }
129 }
127 }
130 }
128 }
131 }
129 }
tests/qmltests/tst_Shell.qml+24−1
@@ -215,7 +215,6 @@ Rectangle {
215 MouseTouchEmulationCheckbox {
215 MouseTouchEmulationCheckbox {
216 id: mouseEmulation
216 id: mouseEmulation
217 checked: true
217 checked: true
218− color: "white"
219 }
218 }
220 ListItem.ItemSelector {
219 ListItem.ItemSelector {
221 id: ctrlModifier
220 id: ctrlModifier
@@ -2224,5 +2223,29 @@ Rectangle {
2224 compare(topmostSurfaceItem.touchPressCount, 2);
2223 compare(topmostSurfaceItem.touchPressCount, 2);
2225 compare(topmostSurfaceItem.touchReleaseCount, 2);
2224 compare(topmostSurfaceItem.touchReleaseCount, 2);
2226 }
2225 }
2226+
2227+ function test_dragPanelToRestoreMaximizedWindow() {
2228+ loadShell("desktop");
2229+ shell.usageScenario = "desktop";
2230+ waitForRendering(shell);
2231+ var panel = findChild(shell, "windowControlArea");
2232+ verify(panel);
2233+
2234+ var app = ApplicationManager.startApplication("dialer-app")
2235+ waitUntilAppWindowIsFullyLoaded(app);
2236+
2237+ // start dialer, maximize it
2238+ var appContainer = findChild(shell, "appContainer");
2239+ var appDelegate = findChild(appContainer, "appDelegate_dialer-app");
2240+ verify(appDelegate);
2241+ appDelegate.maximize();
2242+ tryCompare(appDelegate, "state", "maximized");
2243+
2244+ mousePress(panel);
2245+ mouseMove(shell, shell.width/2, shell.height/2);
2246+ mouseRelease(shell);
2247+
2248+ tryCompare(appDelegate, "state", "normal");
2249+ }
2227 }
2250 }
2228}
2251}