mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 17:40:40 -05:00
Fix windows walking up the screen on restart
When a window is initially created, we need to save it's user rect after any adjustments for gravity. Otherwise, the next time the window is queued for a resize, it will jump back to it's initial position. We did that for newly created windows, but on restart, when windows were already placed, the logic skipped saving the position. Use an explicit flag so that we always save the position for newly created MetaWindows.
This commit is contained in:
parent
14d2f8fddc
commit
8e5bb17750
@ -33,7 +33,9 @@ typedef enum
|
|||||||
META_DO_GRAVITY_ADJUST = 1 << 1,
|
META_DO_GRAVITY_ADJUST = 1 << 1,
|
||||||
META_IS_USER_ACTION = 1 << 2,
|
META_IS_USER_ACTION = 1 << 2,
|
||||||
META_IS_MOVE_ACTION = 1 << 3,
|
META_IS_MOVE_ACTION = 1 << 3,
|
||||||
META_IS_RESIZE_ACTION = 1 << 4
|
META_IS_RESIZE_ACTION = 1 << 4,
|
||||||
|
META_FORCE_STATIC_GRAVITY = 1 << 5,
|
||||||
|
META_IS_INITIAL_RESIZE = 1 << 6
|
||||||
} MetaMoveResizeFlags;
|
} MetaMoveResizeFlags;
|
||||||
|
|
||||||
void meta_window_constrain (MetaWindow *window,
|
void meta_window_constrain (MetaWindow *window,
|
||||||
|
@ -1439,7 +1439,7 @@ meta_window_new (MetaDisplay *display,
|
|||||||
* initial map is handled same as configure request
|
* initial map is handled same as configure request
|
||||||
*/
|
*/
|
||||||
flags =
|
flags =
|
||||||
META_IS_CONFIGURE_REQUEST | META_IS_MOVE_ACTION | META_IS_RESIZE_ACTION;
|
META_IS_CONFIGURE_REQUEST | META_IS_MOVE_ACTION | META_IS_RESIZE_ACTION | META_IS_INITIAL_RESIZE;
|
||||||
if (!window->override_redirect)
|
if (!window->override_redirect)
|
||||||
meta_window_move_resize_internal (window,
|
meta_window_move_resize_internal (window,
|
||||||
flags,
|
flags,
|
||||||
@ -5180,7 +5180,8 @@ meta_window_move_resize_internal (MetaWindow *window,
|
|||||||
if (need_configure_notify)
|
if (need_configure_notify)
|
||||||
send_configure_notify (window);
|
send_configure_notify (window);
|
||||||
|
|
||||||
if (!window->placed && window->force_save_user_rect && !window->fullscreen)
|
if ((flags & META_IS_INITIAL_RESIZE) != 0 &&
|
||||||
|
window->force_save_user_rect && !window->fullscreen)
|
||||||
force_save_user_window_placement (window);
|
force_save_user_window_placement (window);
|
||||||
else if (is_user_action)
|
else if (is_user_action)
|
||||||
save_user_window_placement (window);
|
save_user_window_placement (window);
|
||||||
|
Loading…
Reference in New Issue
Block a user