diff options
author | Ted Percival <ted@midg3t.net> | 2008-08-16 03:09:40 +0000 |
---|---|---|
committer | Thomas James Alexander Thurman <tthurman@src.gnome.org> | 2008-08-16 03:09:40 +0000 |
commit | 4fb40b57a9c55ea4ada55f75cacfc2ea8936870b (patch) | |
tree | d4bce35f39a510c1c74e713e317e2da4f637a108 | |
parent | 6e4c88ad932f1810777e849af94bfa0b6e874056 (diff) | |
download | metacity-4fb40b57a9c55ea4ada55f75cacfc2ea8936870b.tar.gz |
Ensure the user_rect is set sanely for windows that start maximized.
2008-08-16 Ted Percival <ted@midg3t.net>
Ensure the user_rect is set sanely for windows that start maximized.
Prevents maximized windows from warping across the screen.
Fixes bug #504692.
* src/core/window.c (save_user_placement): renamed version of
meta_window_save_user_rect().
* src/core/window.c (force_save_user_placement): similar, but will
always save user_rect even if the window is maximised or fullscreen.
* src/core/window.c (meta_window_move_resize_internal): unplaced
windows have force_save_user_placement() called instead of
save_user_placement().
svn path=/trunk/; revision=3816
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | src/core/window.c | 40 |
2 files changed, 42 insertions, 12 deletions
@@ -1,3 +1,17 @@ +2008-08-16 Ted Percival <ted@midg3t.net> + + Ensure the user_rect is set sanely for windows that start maximized. + Prevents maximized windows from warping across the screen. + Fixes bug #504692. + + * src/core/window.c (save_user_placement): renamed version of + meta_window_save_user_rect(). + * src/core/window.c (force_save_user_placement): similar, but will + always save user_rect even if the window is maximised or fullscreen. + * src/core/window.c (meta_window_move_resize_internal): unplaced + windows have force_save_user_placement() called instead of + save_user_placement(). + 2008-08-14 Patrick Niklaus <marex@compiz-fusion.org> Icons for windows are taken from the desktop theme, not from diff --git a/src/core/window.c b/src/core/window.c index a528e16b..b4c56fc7 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -75,7 +75,8 @@ static void meta_window_show (MetaWindow *window); static void meta_window_hide (MetaWindow *window); static void meta_window_save_rect (MetaWindow *window); -static void meta_window_save_user_rect (MetaWindow *window); +static void save_user_window_placement (MetaWindow *window); +static void force_save_user_window_placement (MetaWindow *window); static void meta_window_move_resize_internal (MetaWindow *window, MetaMoveResizeFlags flags, @@ -2450,11 +2451,28 @@ meta_window_save_rect (MetaWindow *window) } } +/** + * Save the user_rect regardless of whether the window is maximized or + * fullscreen. See save_user_window_placement() for most uses. + * + * \param window Store current position of this window for future reference + */ +static void +force_save_user_window_placement (MetaWindow *window) +{ + meta_window_get_client_root_coords (window, &window->user_rect); +} + +/** + * Save the user_rect, but only if the window is neither maximized nor + * fullscreen, otherwise the window may snap back to those dimensions + * (bug #461927). + * + * \param window Store current position of this window for future reference + */ static void -meta_window_save_user_rect (MetaWindow *window) +save_user_window_placement (MetaWindow *window) { - /* We do not save maximized or fullscreen dimensions, otherwise the - * window may snap back to those dimensions (Bug #461927). */ if (!(META_WINDOW_MAXIMIZED (window) || window->fullscreen)) { MetaRectangle user_rect; @@ -3520,13 +3538,11 @@ meta_window_move_resize_internal (MetaWindow *window, if (need_configure_notify) send_configure_notify (window); - /* user_rect is the position to restore towards if strut changes occur. Thus - * we want user_rect to reflect user position/size changes OR the initial - * placement of the window. - */ - if (is_user_action || !window->placed) - meta_window_save_user_rect(window); - + if (!window->placed) + force_save_user_window_placement (window); + else if (is_user_action) + save_user_window_placement (window); + if (need_move_frame || need_resize_frame || need_move_client || need_resize_client) { @@ -4568,7 +4584,7 @@ meta_window_move_resize_request (MetaWindow *window, * * See also bug 426519. */ - meta_window_save_user_rect(window); + save_user_window_placement (window); } gboolean |