@@ -35,14 +35,26 @@ MouseArea {
3535 property int borderThickness: 0
3636 property int minWidth: 0
3737 property int minHeight: 0
38+ property int defaultWidth: units.gu(60)
39+ property int defaultHeight: units.gu(50)
3840
3941 Component.onCompleted: {
40− var windowState = windowStateStorage.getGeometry(root.windowId, Qt.rect(target.x, target.y, target.width, target.height))
41− if (windowState !== undefined) {
42− target.x = windowState.x
43− target.y = windowState.y
44− target.width = windowState.width
45− target.height = windowState.height
42+ var windowState = windowStateStorage.getGeometry(root.windowId,
43+ Qt.rect(target.x, target.y, defaultWidth, defaultHeight) /* default geometry */);
44+
45+ target.x = windowState.x;
46+ target.y = windowState.y;
47+
48+ if (windowState.width >= minWidth) {
49+ target.requestedWidth = windowState.width;
50+ } else {
51+ target.requestedWidth = minWidth;
52+ }
53+
54+ if (windowState.height >= minHeight) {
55+ target.requestedHeight = windowState.height;
56+ } else {
57+ target.requestedHeight = minHeight;
4658 }
4759 }
4860
@@ -64,6 +76,8 @@ MouseArea {
6476 property real startY
6577 property real startWidth
6678 property real startHeight
79+ property real currentWidth
80+ property real currentHeight
6781
6882 property string cursorName: {
6983 if (root.containsMouse || root.pressed) {
@@ -114,6 +128,8 @@ MouseArea {
114128 d.startY = target.y;
115129 d.startWidth = target.width;
116130 d.startHeight = target.height;
131+ d.currentWidth = target.width;
132+ d.currentHeight = target.height;
117133 d.dragging = true;
118134 } else {
119135 d.dragging = false;
@@ -146,37 +162,49 @@ MouseArea {
146162 if (d.leftBorder) {
147163 var newTargetX = d.startX + deltaX;
148164 if (target.x + target.width > newTargetX + minWidth) {
149− target.width = target.x + target.width - newTargetX;
150− target.x = newTargetX;
165+ target.requestedWidth = target.x + target.width - newTargetX;
151166 } else {
152− target.x = target.x + target.width - minWidth;
153− target.width = minWidth;
167+ target.requestedWidth = minWidth;
154168 }
155169
156170 } else if (d.rightBorder) {
157171 if (d.startWidth + deltaX >= minWidth) {
158− target.width = d.startWidth + deltaX;
172+ target.requestedWidth = d.startWidth + deltaX;
159173 } else {
160− target.width = minWidth;
174+ target.requestedWidth = minWidth;
161175 }
162176 }
163177
164178 if (d.topBorder) {
165179 var newTargetY = d.startY + deltaY;
166180 if (target.y + target.height > newTargetY + minHeight) {
167− target.height = target.y + target.height - newTargetY;
168− target.y = newTargetY;
181+ target.requestedHeight = target.y + target.height - newTargetY;
169182 } else {
170− target.y = target.y + target.height - minHeight;
171− target.height = minHeight;
183+ target.requestedHeight = minHeight;
172184 }
173185
174186 } else if (d.bottomBorder) {
175187 if (d.startHeight + deltaY >= minHeight) {
176− target.height = d.startHeight + deltaY;
188+ target.requestedHeight = d.startHeight + deltaY;
177189 } else {
178− target.height = minHeight;
190+ target.requestedHeight = minHeight;
191+ }
192+ }
193+ }
194+
195+ Connections {
196+ target: root.target
197+ onWidthChanged: {
198+ if (root.pressed && d.leftBorder) {
199+ target.x += d.currentWidth - target.width;
200+ }
201+ d.currentWidth = target.width;
202+ }
203+ onHeightChanged: {
204+ if (root.pressed && d.topBorder) {
205+ target.y += d.currentHeight - target.height;
179206 }
207+ d.currentHeight = target.height;
180208 }
181209 }
182210}