Merge lp:~compiz-team/compiz/compiz.revert_3728 into lp:compiz/0.9.10
- compiz.revert_3728
- Merge into 0.9.10
Status: | Merged |
---|---|
Approved by: | Sam Spilsbury |
Approved revision: | 3735 |
Merged at revision: | 3736 |
Proposed branch: | lp:~compiz-team/compiz/compiz.revert_3728 |
Merge into: | lp:compiz/0.9.10 |
Diff against target: |
648 lines (+158/-179) 10 files modified
.bzrignore (+0/-1) plugins/decor/src/decor.cpp (+38/-78) plugins/decor/src/decor.h (+0/-6) plugins/place/src/constrain-to-workarea/include/constrain-to-workarea.h (+6/-3) plugins/place/src/constrain-to-workarea/src/constrain-to-workarea.cpp (+49/-25) plugins/place/src/constrain-to-workarea/tests/constrain-to-workarea/src/test-place-constrain-to-workarea.cpp (+57/-4) plugins/place/src/place.cpp (+8/-3) src/window/extents/src/windowextents.cpp (+0/-10) tests/manual/README.txt (+0/-9) tests/manual/plugins/decor.txt (+0/-40) |
To merge this branch: | bzr merge lp:~compiz-team/compiz/compiz.revert_3728 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
PS Jenkins bot (community) | continuous-integration | Approve | |
MC Return | Abstain | ||
Brandon Schaefer (community) | Approve | ||
Review via email:
|
Commit message
Revert revision 3278.
Description of the change
Revert revision 3278.
It isn't quite ready yet.
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Brandon Schaefer (brandontschaefer) wrote : | # |
Alright, reverting!
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
MC Return (mc-return) wrote : | # |
What about Sam's "It isn't quite ready yet." comment ?
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
MC Return (mc-return) wrote : | # |
Setting to "On Hold"/"WIP" until Sam has verified that this is ready...
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Brandon Schaefer (brandontschaefer) wrote : | # |
Hmm I thought he was talking about the branch that was r3278 was not ready, hence why he wanted to revert it?
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
MC Return (mc-return) wrote : | # |
Ah yes, maybe you are right -> I am not sure though...
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Brandon Schaefer (brandontschaefer) wrote : | # |
Haha, yeah now im not 100% sure either, soo ill just wait for Sam to come around and global approve it :)
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
MC Return (mc-return) wrote : | # |
+1
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Autolanding.
Approved revid is not set in launchpad (maybe a permission problem?).
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) : | # |
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
MC Return (mc-return) wrote : | # |
Oh, the misunderstanding was on my side. Sorry... ;)
Preview Diff
1 | === removed file '.bzrignore' |
2 | --- .bzrignore 2013-05-26 06:01:34 +0000 |
3 | +++ .bzrignore 1970-01-01 00:00:00 +0000 |
4 | @@ -1,1 +0,0 @@ |
5 | -.bzr-repo |
6 | |
7 | === modified file 'plugins/decor/src/decor.cpp' |
8 | --- plugins/decor/src/decor.cpp 2013-05-20 15:26:11 +0000 |
9 | +++ plugins/decor/src/decor.cpp 2013-06-07 06:12:28 +0000 |
10 | @@ -1165,8 +1165,6 @@ |
11 | |
12 | xwc.x += w->serverGeometry ().x (); |
13 | xwc.y += w->serverGeometry ().y (); |
14 | - xwc.width += w->serverGeometry ().width (); |
15 | - xwc.height += w->serverGeometry ().height (); |
16 | |
17 | w->configureXWindow (mask, &xwc); |
18 | screen->handleCompizEvent ("decor", "window_decorated", o); |
19 | @@ -1511,68 +1509,38 @@ |
20 | |
21 | void |
22 | DecorWindow::moveDecoratedWindowBy (const CompPoint &movement, |
23 | - const CompSize &sizeDelta, |
24 | bool instant) |
25 | { |
26 | - /* movement and sizeDelta are the shift of the client window |
27 | - * as a result of decoration from a theoretical neutral position, |
28 | - * lastShift and lastSizeDelta are the last recorded shift |
29 | - * and size-change. The true difference between two decorations |
30 | - * is movement - lastShift, sizeDelta - sizeDelta */ |
31 | - |
32 | - int dx = movement.x () - lastShift.x (); |
33 | - int dy = movement.y () - lastShift.y (); |
34 | - int dwidth = sizeDelta.width () - lastSizeDelta.height (); |
35 | - int dheight = sizeDelta.height () - lastSizeDelta.height (); |
36 | - |
37 | - /* We don't apply these rules to override-redirect windows |
38 | - * and we need to check that both the position and of the window |
39 | - * would change as a result of decoration in order to move it |
40 | - * (this is usually the case because as a window is decorated |
41 | - * it will necessarily get bigger or smaller in order to fit |
42 | - * inside its decoration) */ |
43 | - if (!window->overrideRedirect () && |
44 | - ((dx || dy) && (dwidth || dheight))) |
45 | + /* Need to actually move the window */ |
46 | + if (window->placed () && !window->overrideRedirect () && |
47 | + (movement.x () || movement.y ())) |
48 | { |
49 | XWindowChanges xwc; |
50 | - unsigned int mask = CWX | CWY | CWWidth | CWHeight; |
51 | + unsigned int mask = CWX | CWY; |
52 | |
53 | memset (&xwc, 0, sizeof (XWindowChanges)); |
54 | |
55 | /* Grab the geometry last sent to server at configureXWindow |
56 | * time and not here since serverGeometry may be updated by |
57 | * the time that we do call configureXWindow */ |
58 | - xwc.x = dx; |
59 | - xwc.y = dy; |
60 | - xwc.width = dwidth; |
61 | - xwc.height = dheight; |
62 | + xwc.x = movement.x (); |
63 | + xwc.y = movement.y (); |
64 | |
65 | /* Except if it's fullscreen, maximized or such */ |
66 | if (window->state () & CompWindowStateFullscreenMask) |
67 | - mask &= ~(CWX | CWY | CWWidth | CWHeight); |
68 | + mask &= ~(CWX | CWY); |
69 | |
70 | if (window->state () & CompWindowStateMaximizedHorzMask) |
71 | - mask &= ~(CWX | CWWidth); |
72 | + mask &= ~CWX; |
73 | |
74 | if (window->state () & CompWindowStateMaximizedVertMask) |
75 | - mask &= ~(CWY | CWHeight); |
76 | + mask &= ~CWY; |
77 | |
78 | if (window->saveMask () & CWX) |
79 | - window->saveWc ().x += xwc.x; |
80 | + window->saveWc ().x += movement.x (); |
81 | |
82 | if (window->saveMask () & CWY) |
83 | - window->saveWc ().y += xwc.y; |
84 | - |
85 | - if (window->saveMask () & CWWidth) |
86 | - window->saveWc ().width += xwc.width; |
87 | - |
88 | - if (window->saveMask () & CWHeight) |
89 | - window->saveWc ().height += xwc.height; |
90 | - |
91 | - /* If the window has not been placed, do not move it this time |
92 | - * but record what we would have moved it by */ |
93 | - if (!window->placed ()) |
94 | - mask = 0; |
95 | + window->saveWc ().y += movement.y (); |
96 | |
97 | if (mask) |
98 | { |
99 | @@ -1590,15 +1558,6 @@ |
100 | else |
101 | moveUpdate.start (boost::bind (decorOffsetMove, window, xwc, mask), 0); |
102 | } |
103 | - |
104 | - /* Even if the window has not yet been placed, we still |
105 | - * need to store what we would have moved it by in order |
106 | - * to put it in the right position. The place plugin will |
107 | - * set a position that makes the most sense, but we need |
108 | - * to know how much to move back by should the window |
109 | - * become undecorated again */ |
110 | - lastShift = movement; |
111 | - lastSizeDelta = sizeDelta; |
112 | } |
113 | } |
114 | |
115 | @@ -1609,9 +1568,9 @@ |
116 | bool shadowOnly, |
117 | bool isSwitcher) |
118 | { |
119 | - const bool frameOrUnmapReference = (w->frame () || |
120 | + const bool visible = (w->frame () || |
121 | w->hasUnmapReference ()); |
122 | - const bool realDecoration = frameOrUnmapReference && !shadowOnly; |
123 | + const bool realDecoration = visible && !shadowOnly; |
124 | const bool forceDecoration = isSwitcher; |
125 | |
126 | return realDecoration || forceDecoration; |
127 | @@ -1657,8 +1616,7 @@ |
128 | DecorWindow::update (bool allowDecoration) |
129 | { |
130 | Decoration::Ptr old, decoration; |
131 | - CompPoint movement; |
132 | - CompSize sizeDelta; |
133 | + CompPoint oldShift, movement; |
134 | |
135 | if (wd) |
136 | old = wd->decor; |
137 | @@ -1692,9 +1650,13 @@ |
138 | if (decoration == old) |
139 | return false; |
140 | |
141 | - /* Destroy the old WindowDecoration */ |
142 | + /* Determine how much we moved the window for the old |
143 | + * decoration and save that, also destroy the old |
144 | + * WindowDecoration */ |
145 | if (old) |
146 | { |
147 | + oldShift = cwe::shift (window->border (), window->sizeHints ().win_gravity); |
148 | + |
149 | WindowDecoration::destroy (wd); |
150 | wd = NULL; |
151 | } |
152 | @@ -1716,6 +1678,7 @@ |
153 | else if (!window->hasUnmapReference ()) |
154 | window->setWindowFrameExtents (&decoration->border, |
155 | &decoration->input); |
156 | + |
157 | /* This window actually needs its decoration contents updated |
158 | * as it was actually visible */ |
159 | if (decorate || |
160 | @@ -1732,11 +1695,7 @@ |
161 | } |
162 | |
163 | movement = cwe::shift (window->border (), window->sizeHints ().win_gravity); |
164 | - |
165 | - sizeDelta = CompSize (-(window->border ().left + |
166 | - window->border ().right), |
167 | - -(window->border ().top + |
168 | - window->border ().bottom)); |
169 | + movement -= oldShift; |
170 | |
171 | window->updateWindowOutputExtents (); |
172 | |
173 | @@ -1765,6 +1724,8 @@ |
174 | memset (&emptyExtents, 0, sizeof (CompWindowExtents)); |
175 | |
176 | window->setWindowFrameExtents (&emptyExtents, &emptyExtents); |
177 | + |
178 | + movement -= oldShift; |
179 | } |
180 | |
181 | /* We need to damage the current output extents |
182 | @@ -1778,7 +1739,6 @@ |
183 | } |
184 | |
185 | moveDecoratedWindowBy (movement, |
186 | - sizeDelta, |
187 | !allowDecoration); |
188 | |
189 | return true; |
190 | @@ -2320,20 +2280,6 @@ |
191 | } |
192 | |
193 | /* |
194 | - * DecorWindow::place |
195 | - * |
196 | - * Update any windows just before placement |
197 | - * so that placement algorithms will have the |
198 | - * border size at place-time |
199 | - */ |
200 | -bool |
201 | -DecorWindow::place (CompPoint &pos) |
202 | -{ |
203 | - update (true); |
204 | - return window->place (pos); |
205 | -} |
206 | - |
207 | -/* |
208 | * DecorWindow::windowNotify |
209 | * |
210 | * Window event notification handler. On various |
211 | @@ -3011,6 +2957,9 @@ |
212 | { |
213 | if (wd && wd->decor) |
214 | { |
215 | + CompPoint oldShift = compiz::window::extents::shift (window->border (), window->sizeHints ().win_gravity); |
216 | + |
217 | + |
218 | if ((window->state () & MAXIMIZE_STATE)) |
219 | window->setWindowFrameExtents (&wd->decor->maxBorder, |
220 | &wd->decor->maxInput); |
221 | @@ -3018,7 +2967,18 @@ |
222 | window->setWindowFrameExtents (&wd->decor->border, |
223 | &wd->decor->input); |
224 | |
225 | - /* The shift will occurr in decorOffsetMove */ |
226 | + /* Since we immediately update the frame extents, we must |
227 | + * also update the stored saved window geometry in order |
228 | + * to prevent the window from shifting back too far once |
229 | + * unmaximized */ |
230 | + |
231 | + CompPoint movement = compiz::window::extents::shift (window->border (), window->sizeHints ().win_gravity) - oldShift; |
232 | + |
233 | + if (window->saveMask () & CWX) |
234 | + window->saveWc ().x += movement.x (); |
235 | + |
236 | + if (window->saveMask () & CWY) |
237 | + window->saveWc ().y += movement.y (); |
238 | |
239 | updateFrame (); |
240 | } |
241 | |
242 | === modified file 'plugins/decor/src/decor.h' |
243 | --- plugins/decor/src/decor.h 2013-04-17 23:41:09 +0000 |
244 | +++ plugins/decor/src/decor.h 2013-06-07 06:12:28 +0000 |
245 | @@ -293,8 +293,6 @@ |
246 | |
247 | bool damageRect (bool, const CompRect &); |
248 | |
249 | - bool place (CompPoint &pos); |
250 | - |
251 | bool glDraw (const GLMatrix &, const GLWindowPaintAttrib &, |
252 | const CompRegion &, unsigned int); |
253 | void glDecorate (const GLMatrix &, const GLWindowPaintAttrib &, |
254 | @@ -382,16 +380,12 @@ |
255 | |
256 | X11DecorPixmapRequestor mRequestor; |
257 | |
258 | - CompPoint lastShift; |
259 | - CompSize lastSizeDelta; |
260 | - |
261 | private: |
262 | |
263 | bool bareDecorationOnly (); |
264 | Decoration::Ptr findRealDecoration (); |
265 | Decoration::Ptr findBareDecoration (); |
266 | void moveDecoratedWindowBy (const CompPoint &movement, |
267 | - const CompSize &sizeDelta, |
268 | bool instant); |
269 | }; |
270 | |
271 | |
272 | === modified file 'plugins/place/src/constrain-to-workarea/include/constrain-to-workarea.h' |
273 | --- plugins/place/src/constrain-to-workarea/include/constrain-to-workarea.h 2013-04-17 23:41:09 +0000 |
274 | +++ plugins/place/src/constrain-to-workarea/include/constrain-to-workarea.h 2013-06-07 06:12:28 +0000 |
275 | @@ -45,7 +45,8 @@ |
276 | CompPoint & constrainPositionToWorkArea (CompPoint &pos, |
277 | const compiz::window::Geometry &serverGeometry, |
278 | const CompWindowExtents &border, |
279 | - const CompRect &workArea); |
280 | + const CompRect &workArea, |
281 | + bool staticGravity); |
282 | |
283 | |
284 | CompPoint getViewportRelativeCoordinates (const compiz::window::Geometry &geom, |
285 | @@ -53,7 +54,8 @@ |
286 | |
287 | CompWindowExtents getWindowEdgePositions (const CompPoint &position, |
288 | const compiz::window::Geometry &geom, |
289 | - const CompWindowExtents &border); |
290 | + const CompWindowExtents &border, |
291 | + unsigned int gravity); |
292 | |
293 | void clampHorizontalEdgePositionsToWorkArea (CompWindowExtents &edgePositions, |
294 | const CompRect &workArea); |
295 | @@ -62,7 +64,8 @@ |
296 | |
297 | void subtractBordersFromEdgePositions (CompWindowExtents &edgePositions, |
298 | const CompWindowExtents &border, |
299 | - unsigned int legacyBorder); |
300 | + unsigned int legacyBorder, |
301 | + unsigned int gravity); |
302 | |
303 | bool onlySizeChanged (unsigned int mask); |
304 | bool applyWidthChange (const CompWindowExtents &edgePositions, |
305 | |
306 | === modified file 'plugins/place/src/constrain-to-workarea/src/constrain-to-workarea.cpp' |
307 | --- plugins/place/src/constrain-to-workarea/src/constrain-to-workarea.cpp 2013-04-17 23:41:09 +0000 |
308 | +++ plugins/place/src/constrain-to-workarea/src/constrain-to-workarea.cpp 2013-06-07 06:12:28 +0000 |
309 | @@ -140,21 +140,35 @@ |
310 | |
311 | CompPoint & |
312 | cp::constrainPositionToWorkArea (CompPoint &pos, |
313 | - const cw::Geometry &serverGeometry, |
314 | - const CompWindowExtents &border, |
315 | - const CompRect &workArea) |
316 | + const cw::Geometry &serverGeometry, |
317 | + const CompWindowExtents &border, |
318 | + const CompRect &workArea, |
319 | + bool staticGravity) |
320 | { |
321 | CompWindowExtents extents; |
322 | int delta; |
323 | |
324 | - extents.left = pos.x () - border.left; |
325 | - extents.top = pos.y () - border.top; |
326 | + CompWindowExtents effectiveBorders = border; |
327 | + |
328 | + /* Ignore borders in the StaticGravity case for placement |
329 | + * because the window intended to be placed as if it didn't |
330 | + * have them */ |
331 | + if (staticGravity) |
332 | + { |
333 | + effectiveBorders.left = 0; |
334 | + effectiveBorders.right = 0; |
335 | + effectiveBorders.top = 0; |
336 | + effectiveBorders.bottom = 0; |
337 | + } |
338 | + |
339 | + extents.left = pos.x () - effectiveBorders.left; |
340 | + extents.top = pos.y () - effectiveBorders.top; |
341 | extents.right = extents.left + serverGeometry.widthIncBorders () + |
342 | - (border.left + |
343 | - border.right); |
344 | + (effectiveBorders.left + |
345 | + effectiveBorders.right); |
346 | extents.bottom = extents.top + serverGeometry.heightIncBorders () + |
347 | - (border.top + |
348 | - border.bottom); |
349 | + (effectiveBorders.top + |
350 | + effectiveBorders.bottom); |
351 | |
352 | delta = workArea.right () - extents.right; |
353 | if (delta < 0) |
354 | @@ -172,8 +186,8 @@ |
355 | if (delta > 0) |
356 | extents.top += delta; |
357 | |
358 | - pos.setX (extents.left + border.left); |
359 | - pos.setY (extents.top + border.top); |
360 | + pos.setX (extents.left + effectiveBorders.left); |
361 | + pos.setY (extents.top + effectiveBorders.top); |
362 | |
363 | return pos; |
364 | } |
365 | @@ -199,18 +213,23 @@ |
366 | |
367 | CompWindowExtents cp::getWindowEdgePositions (const CompPoint &position, |
368 | const cw::Geometry &geom, |
369 | - const CompWindowExtents &border) |
370 | + const CompWindowExtents &border, |
371 | + unsigned int gravity) |
372 | { |
373 | CompWindowExtents edgePositions; |
374 | - |
375 | - edgePositions.left = position.x () - border.left; |
376 | + CompWindowExtents effectiveBorder (border); |
377 | + |
378 | + if (gravity & StaticGravity) |
379 | + effectiveBorder = CompWindowExtents (0, 0, 0, 0); |
380 | + |
381 | + edgePositions.left = position.x () - effectiveBorder.left; |
382 | edgePositions.right = edgePositions.left + |
383 | - geom.widthIncBorders () + (border.left + |
384 | - border.right); |
385 | - edgePositions.top = position.y () - border.top; |
386 | + geom.widthIncBorders () + (effectiveBorder.left + |
387 | + effectiveBorder.right); |
388 | + edgePositions.top = position.y () - effectiveBorder.top; |
389 | edgePositions.bottom = edgePositions.top + |
390 | - geom.heightIncBorders () + (border.top + |
391 | - border.bottom); |
392 | + geom.heightIncBorders () + (effectiveBorder.top + |
393 | + effectiveBorder.bottom); |
394 | |
395 | return edgePositions; |
396 | } |
397 | @@ -266,14 +285,19 @@ |
398 | |
399 | void cp::subtractBordersFromEdgePositions (CompWindowExtents &edgePositions, |
400 | const CompWindowExtents &border, |
401 | - unsigned int legacyBorder) |
402 | + unsigned int legacyBorder, |
403 | + unsigned int gravity) |
404 | { |
405 | const unsigned int doubleBorder = 2 * legacyBorder; |
406 | - |
407 | - edgePositions.left += border.left; |
408 | - edgePositions.right -= border.right + doubleBorder; |
409 | - edgePositions.top += border.top; |
410 | - edgePositions.bottom -= border.bottom + doubleBorder; |
411 | + CompWindowExtents effectiveBorder = border; |
412 | + |
413 | + if (gravity & StaticGravity) |
414 | + effectiveBorder = CompWindowExtents (0, 0, 0, 0); |
415 | + |
416 | + edgePositions.left += effectiveBorder.left; |
417 | + edgePositions.right -= effectiveBorder.right + doubleBorder; |
418 | + edgePositions.top += effectiveBorder.top; |
419 | + edgePositions.bottom -= effectiveBorder.bottom + doubleBorder; |
420 | } |
421 | |
422 | bool cp::onlySizeChanged (unsigned int mask) |
423 | |
424 | === modified file 'plugins/place/src/constrain-to-workarea/tests/constrain-to-workarea/src/test-place-constrain-to-workarea.cpp' |
425 | --- plugins/place/src/constrain-to-workarea/tests/constrain-to-workarea/src/test-place-constrain-to-workarea.cpp 2013-04-17 23:41:09 +0000 |
426 | +++ plugins/place/src/constrain-to-workarea/tests/constrain-to-workarea/src/test-place-constrain-to-workarea.cpp 2013-06-07 06:12:28 +0000 |
427 | @@ -226,7 +226,7 @@ |
428 | extents = WindowExtents (GetParam ()); |
429 | |
430 | CompPoint pos = InitialPosition (GetParam ()); |
431 | - pos = cp::constrainPositionToWorkArea (pos, g, extents, WArea); |
432 | + pos = cp::constrainPositionToWorkArea (pos, g, extents, WArea, false); |
433 | |
434 | const CompPoint expectedAfterExtentsAdjustment = ExpectedPosition + |
435 | CompPoint (extents.left, |
436 | @@ -235,6 +235,19 @@ |
437 | EXPECT_EQ (expectedAfterExtentsAdjustment, pos); |
438 | } |
439 | |
440 | +TEST_P (PlaceConstrainPositionToWorkArea, PositionConstrainedStaticGravity) |
441 | +{ |
442 | + g = WindowGeometry (GetParam ()); |
443 | + extents = WindowExtents (GetParam ()); |
444 | + |
445 | + CompPoint pos = InitialPosition (GetParam ()); |
446 | + pos = cp::constrainPositionToWorkArea (pos, g, extents, WArea, true); |
447 | + |
448 | + /* Do not adjust residual position for extents with windows |
449 | + * that have a static gravity */ |
450 | + EXPECT_EQ (ExpectedPosition, pos); |
451 | +} |
452 | + |
453 | namespace |
454 | { |
455 | cwe::Extents PossibleExtents[] = |
456 | @@ -284,7 +297,7 @@ |
457 | CompPoint pos; |
458 | }; |
459 | |
460 | -TEST_F (PlaceGetEdgePositions, GetEdgePositions) |
461 | +TEST_F (PlaceGetEdgePositions, GetEdgePositionsNWGravity) |
462 | { |
463 | int left = geom.x () - border.left; |
464 | int right = left + (geom.widthIncBorders ()) + |
465 | @@ -296,7 +309,25 @@ |
466 | const cwe::Extents ExpectedExtents (left, right, top, bottom); |
467 | cwe::Extents actualExtents (cp::getWindowEdgePositions (pos, |
468 | geom, |
469 | - border)); |
470 | + border, |
471 | + NorthWestGravity)); |
472 | + |
473 | + EXPECT_EQ (ExpectedExtents, actualExtents); |
474 | +} |
475 | + |
476 | +TEST_F (PlaceGetEdgePositions, GetEdgePositionsStaticGravity) |
477 | +{ |
478 | + /* Don't count borders in validation */ |
479 | + int left = geom.x (); |
480 | + int right = left + (geom.widthIncBorders ()); |
481 | + int top = geom.y (); |
482 | + int bottom = top + (geom.heightIncBorders ()); |
483 | + |
484 | + const cwe::Extents ExpectedExtents (left, right, top, bottom); |
485 | + cwe::Extents actualExtents (cp::getWindowEdgePositions (pos, |
486 | + geom, |
487 | + border, |
488 | + StaticGravity)); |
489 | |
490 | EXPECT_EQ (ExpectedExtents, actualExtents); |
491 | } |
492 | @@ -496,7 +527,29 @@ |
493 | |
494 | cp::subtractBordersFromEdgePositions (modifiedEdgePositions, |
495 | borders, |
496 | - legacyBorder); |
497 | + legacyBorder, |
498 | + NorthWestGravity); |
499 | + |
500 | + EXPECT_EQ (expectedEdgePositions, modifiedEdgePositions); |
501 | +} |
502 | + |
503 | +TEST (PlaceSubtractBordersFromEdgePositions, StaticGravityDefinition) |
504 | +{ |
505 | + const CompWindowExtents borders (1, 2, 3, 4); |
506 | + const CompWindowExtents edgePositions (100, 200, 100, 200); |
507 | + const unsigned int legacyBorder = 1; |
508 | + |
509 | + CompWindowExtents expectedEdgePositions (edgePositions.left, |
510 | + edgePositions.right - (2 * legacyBorder), |
511 | + edgePositions.top, |
512 | + edgePositions.bottom - (2 * legacyBorder)); |
513 | + |
514 | + CompWindowExtents modifiedEdgePositions (edgePositions); |
515 | + |
516 | + cp::subtractBordersFromEdgePositions (modifiedEdgePositions, |
517 | + borders, |
518 | + legacyBorder, |
519 | + StaticGravity); |
520 | |
521 | EXPECT_EQ (expectedEdgePositions, modifiedEdgePositions); |
522 | } |
523 | |
524 | === modified file 'plugins/place/src/place.cpp' |
525 | --- plugins/place/src/place.cpp 2013-05-20 15:26:11 +0000 |
526 | +++ plugins/place/src/place.cpp 2013-06-07 06:12:28 +0000 |
527 | @@ -362,7 +362,8 @@ |
528 | |
529 | CompWindowExtents edgePositions = cp::getWindowEdgePositions (pos, |
530 | geom, |
531 | - window->border ()); |
532 | + window->border (), |
533 | + window->sizeHints ().win_gravity); |
534 | |
535 | int output = screen->outputDeviceForGeometry (geom); |
536 | CompRect workArea = screen->getWorkareaForOutput (output); |
537 | @@ -385,7 +386,8 @@ |
538 | /* bring left/right/top/bottom to actual window coordinates */ |
539 | cp::subtractBordersFromEdgePositions (edgePositions, |
540 | window->border (), |
541 | - geom.border ()); |
542 | + geom.border (), |
543 | + window->sizeHints ().win_gravity); |
544 | |
545 | /* always validate position if the application changed only its size, |
546 | * as it might become partially offscreen because of that */ |
547 | @@ -1141,10 +1143,13 @@ |
548 | PlaceWindow::constrainToWorkarea (const CompRect &workArea, |
549 | CompPoint &pos) |
550 | { |
551 | + bool staticGravity = window->sizeHints ().win_gravity & StaticGravity; |
552 | + |
553 | pos = cp::constrainPositionToWorkArea (pos, |
554 | window->serverGeometry (), |
555 | window->border (), |
556 | - workArea); |
557 | + workArea, |
558 | + staticGravity); |
559 | |
560 | } |
561 | |
562 | |
563 | === modified file 'src/window/extents/src/windowextents.cpp' |
564 | --- src/window/extents/src/windowextents.cpp 2013-04-17 23:41:09 +0000 |
565 | +++ src/window/extents/src/windowextents.cpp 2013-06-07 06:12:28 +0000 |
566 | @@ -35,11 +35,6 @@ |
567 | CompPoint rv = CompPoint (); |
568 | |
569 | switch (gravity) { |
570 | - /* We treat StaticGravity like NorthWestGravity here |
571 | - * as when decorating / undecorating the window we |
572 | - * really do need to move it in order to handle |
573 | - * any cases where it goes offscreen */ |
574 | - case StaticGravity: |
575 | case NorthGravity: |
576 | case NorthWestGravity: |
577 | case NorthEastGravity: |
578 | @@ -55,11 +50,6 @@ |
579 | } |
580 | |
581 | switch (gravity) { |
582 | - /* We treat StaticGravity like NorthWestGravity here |
583 | - * as when decorating / undecorating the window we |
584 | - * really do need to move it in order to handle |
585 | - * any cases where it goes offscreen */ |
586 | - case StaticGravity: |
587 | case WestGravity: |
588 | case NorthWestGravity: |
589 | case SouthWestGravity: |
590 | |
591 | === removed file 'tests/manual/README.txt' |
592 | --- tests/manual/README.txt 2013-04-18 03:02:14 +0000 |
593 | +++ tests/manual/README.txt 1970-01-01 00:00:00 +0000 |
594 | @@ -1,9 +0,0 @@ |
595 | -Compiz Manual Tests |
596 | -=================== |
597 | - |
598 | -Avoid writing manual tests if you can. Acceptance tests that can be run |
599 | -on an automatic basis are always preferred. |
600 | - |
601 | -If getting some part of the code would be too difficult or invasive, then |
602 | -write a manual test in here so that we can remind ourselves to deploy test |
603 | -frameworks for the code in quesiton. |
604 | |
605 | === removed file 'tests/manual/plugins/decor.txt' |
606 | --- tests/manual/plugins/decor.txt 2013-05-20 15:26:11 +0000 |
607 | +++ tests/manual/plugins/decor.txt 1970-01-01 00:00:00 +0000 |
608 | @@ -1,40 +0,0 @@ |
609 | -COMPIZ DECOR PLUGIN |
610 | -=================== |
611 | -Sam Spilsbury <smspillaz@gmail.com> |
612 | - |
613 | -Static Gravity Handling - no decorations |
614 | ----------------------------------------- |
615 | -Setup: |
616 | -# Install guake |
617 | - |
618 | -Actions: |
619 | -# Start and launch guake |
620 | - |
621 | -Expected Result: |
622 | - Guake should sit flush with the panels and work area |
623 | - |
624 | -Static Gravity Handling - decorations |
625 | -------------------------------------- |
626 | -Setup: |
627 | -# Install friends-app |
628 | - |
629 | -Actions: |
630 | -# Start and launch friends-app |
631 | - |
632 | -Expected Result: |
633 | - The QML window should have its decorations visible and |
634 | - be contained in the top left hand corner of the work area |
635 | - |
636 | -_NET_REQUEST_FRAME_EXTENTS handling |
637 | ------------------------------------ |
638 | -Setup: |
639 | -# Install any sun-awt application - examples: |
640 | - 1. netbeans |
641 | - 2. ecplise |
642 | - |
643 | -Actions: |
644 | -# Run the application |
645 | - |
646 | -Expected Result: |
647 | - The application should not have its contents offset |
648 | - by its decoration size |
PASSED: Continuous integration, rev:3735 jenkins. qa.ubuntu. com/job/ compiz- ci/193/ jenkins. qa.ubuntu. com/job/ compiz- gles-ci/ ./build= pbuilder, distribution= raring, flavor= amd64/234 jenkins. qa.ubuntu. com/job/ compiz- saucy-amd64- ci/6 jenkins. qa.ubuntu. com/job/ compiz- saucy-armhf- ci/6 jenkins. qa.ubuntu. com/job/ compiz- saucy-i386- ci/6
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild: s-jenkins: 8080/job/ compiz- ci/193/ rebuild
http://