Use the correct frame size during unmaximize

When unmaximizing, we changed bits of window state, then called out
to code that used the frame extents *before* we cleared old cached
extents. Clear the cache up-front as soon as we change the window
state.

https://bugzilla.gnome.org/show_bug.cgi?id=714707
This commit is contained in:
Owen W. Taylor 2013-12-05 08:27:28 -05:00
parent 55226ada8a
commit 3283018bfb

View File

@ -3900,8 +3900,10 @@ meta_window_unmaximize_internal (MetaWindow *window,
{ {
MetaRectangle target_rect; MetaRectangle target_rect;
MetaRectangle work_area; MetaRectangle work_area;
MetaRectangle old_rect;
meta_window_get_work_area_for_monitor (window, window->monitor->number, &work_area); meta_window_get_work_area_for_monitor (window, window->monitor->number, &work_area);
meta_window_get_frame_rect (window, &old_rect);
meta_topic (META_DEBUG_WINDOW_OPS, meta_topic (META_DEBUG_WINDOW_OPS,
"Unmaximizing %s%s\n", "Unmaximizing %s%s\n",
@ -3915,6 +3917,12 @@ meta_window_unmaximize_internal (MetaWindow *window,
window->maximized_vertically = window->maximized_vertically =
window->maximized_vertically && !unmaximize_vertically; window->maximized_vertically && !unmaximize_vertically;
/* recalc_window_features() will eventually clear the cached frame
* extents, but we need the correct frame extents in the code below,
* so invalidate the old frame extents manually up front.
*/
meta_window_frame_size_changed (window);
/* Unmaximize to the saved_rect position in the direction(s) /* Unmaximize to the saved_rect position in the direction(s)
* being unmaximized. * being unmaximized.
*/ */
@ -3959,9 +3967,7 @@ meta_window_unmaximize_internal (MetaWindow *window,
if (window->display->compositor) if (window->display->compositor)
{ {
MetaRectangle old_rect, new_rect; MetaRectangle new_rect;
meta_window_get_frame_rect (window, &old_rect);
meta_window_move_resize_internal (window, meta_window_move_resize_internal (window,
META_IS_MOVE_ACTION | META_IS_RESIZE_ACTION, META_IS_MOVE_ACTION | META_IS_RESIZE_ACTION,