@@ -35,14 +35,26 @@ MouseArea {
35 property int borderThickness: 0
35 property int borderThickness: 0
36 property int minWidth: 0
36 property int minWidth: 0
37 property int minHeight: 0
37 property int minHeight: 0
38+ property int defaultWidth: units.gu(60)
39+ property int defaultHeight: units.gu(50)
39 Component.onCompleted: {
41 Component.onCompleted: {
40− var windowState = windowStateStorage.getGeometry(root.windowId, Qt.rect(target.x, target.y, target.width, target.height))
42+ var windowState = windowStateStorage.getGeometry(root.windowId,
43+ Qt.rect(target.x, target.y, defaultWidth, defaultHeight) /* default geometry */);
45+ target.x = windowState.x;
46+ target.y = windowState.y;
41− if (windowState !== undefined) {
48+ if (windowState.width >= minWidth) {
42− target.x = windowState.x
49+ target.requestedWidth = windowState.width;
51+ target.requestedWidth = minWidth;
43− target.y = windowState.y
54+ if (windowState.height >= minHeight) {
44− target.width = windowState.width
55+ target.requestedHeight = windowState.height;
45− target.height = windowState.height
56+ } else {
57+ target.requestedHeight = minHeight;
@@ -64,6 +76,8 @@ MouseArea {
64 property real startY
76 property real startY
65 property real startWidth
77 property real startWidth
66 property real startHeight
78 property real startHeight
79+ property real currentWidth
80+ property real currentHeight
68 property string cursorName: {
82 property string cursorName: {
69 if (root.containsMouse || root.pressed) {
83 if (root.containsMouse || root.pressed) {
@@ -114,6 +128,8 @@ MouseArea {
114 d.startY = target.y;
128 d.startY = target.y;
115 d.startWidth = target.width;
129 d.startWidth = target.width;
116 d.startHeight = target.height;
130 d.startHeight = target.height;
131+ d.currentWidth = target.width;
132+ d.currentHeight = target.height;
117 d.dragging = true;
133 d.dragging = true;
119 d.dragging = false;
135 d.dragging = false;
@@ -146,37 +162,49 @@ MouseArea {
146 if (d.leftBorder) {
162 if (d.leftBorder) {
147 var newTargetX = d.startX + deltaX;
163 var newTargetX = d.startX + deltaX;
148 if (target.x + target.width > newTargetX + minWidth) {
164 if (target.x + target.width > newTargetX + minWidth) {
149− target.width = target.x + target.width - newTargetX;
165+ target.requestedWidth = target.x + target.width - newTargetX;
150− target.x = newTargetX;
152− target.x = target.x + target.width - minWidth;
167+ target.requestedWidth = minWidth;
153− target.width = minWidth;
156 } else if (d.rightBorder) {
170 } else if (d.rightBorder) {
157 if (d.startWidth + deltaX >= minWidth) {
171 if (d.startWidth + deltaX >= minWidth) {
158− target.width = d.startWidth + deltaX;
172+ target.requestedWidth = d.startWidth + deltaX;
160− target.width = minWidth;
174+ target.requestedWidth = minWidth;
164 if (d.topBorder) {
178 if (d.topBorder) {
165 var newTargetY = d.startY + deltaY;
179 var newTargetY = d.startY + deltaY;
166 if (target.y + target.height > newTargetY + minHeight) {
180 if (target.y + target.height > newTargetY + minHeight) {
167− target.height = target.y + target.height - newTargetY;
181+ target.requestedHeight = target.y + target.height - newTargetY;
168− target.y = newTargetY;
170− target.y = target.y + target.height - minHeight;
183+ target.requestedHeight = minHeight;
171− target.height = minHeight;
174 } else if (d.bottomBorder) {
186 } else if (d.bottomBorder) {
175 if (d.startHeight + deltaY >= minHeight) {
187 if (d.startHeight + deltaY >= minHeight) {
176− target.height = d.startHeight + deltaY;
188+ target.requestedHeight = d.startHeight + deltaY;
178− target.height = minHeight;
190+ target.requestedHeight = minHeight;
198+ if (root.pressed && d.leftBorder) {
199+ target.x += d.currentWidth - target.width;
201+ d.currentWidth = target.width;
204+ if (root.pressed && d.topBorder) {
205+ target.y += d.currentHeight - target.height;
207+ d.currentHeight = target.height;