diff --git a/ChangeLog b/ChangeLog index f98b0b1e0..b91ddec27 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2006-01-20 Elijah Newren + + Avoid flashing when closing a maximized window. Fixes #317254. + + * src/window.c (unmaximize_window_before_freeing): new function + that just fixes the net_wm_state and sends a configure_notify, + (meta_window_free): use unmaximize_window_before_freeing() instead + of meta_window_unmaximize() to avoid flicker + 2006-01-20 Elijah Newren Fix unitialized value problem when in raise-on-click mode. Søren, diff --git a/src/window.c b/src/window.c index 627a41656..46a6e7c56 100644 --- a/src/window.c +++ b/src/window.c @@ -119,6 +119,8 @@ static gboolean queue_calc_showing_func (MetaWindow *window, static void meta_window_apply_session_info (MetaWindow *window, const MetaWindowSessionInfo *info); +static void unmaximize_window_before_freeing (MetaWindow *window); + #ifdef WITH_VERBOSE_MODE static const char* wm_state_to_string (int state) @@ -977,9 +979,7 @@ meta_window_free (MetaWindow *window) if (window->display->focus_window == window) window->display->focus_window = NULL; - if (window->maximized_horizontally || window->maximized_vertically) - meta_window_unmaximize (window, - META_MAXIMIZE_HORIZONTAL | META_MAXIMIZE_VERTICAL); + unmaximize_window_before_freeing (window); meta_window_unqueue_calc_showing (window); meta_window_unqueue_move_resize (window); @@ -2230,6 +2230,21 @@ meta_window_maximize (MetaWindow *window, } } +static void +unmaximize_window_before_freeing (MetaWindow *window) +{ + meta_topic (META_DEBUG_WINDOW_OPS, + "Unmaximizing %s just before freeing\n", + window->desc); + + window->rect = window->saved_rect; + send_configure_notify (window); + + window->maximized_horizontally = FALSE; + window->maximized_vertically = FALSE; + set_net_wm_state (window); +} + void meta_window_unmaximize (MetaWindow *window, MetaMaximizeFlags directions)