Avoid flashing when closing a maximized window. Fixes #317254.

2006-01-20  Elijah Newren  <newren gmail com>

	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
This commit is contained in:
Elijah Newren 2006-01-20 23:36:23 +00:00 committed by Elijah Newren
parent 6f318f1a75
commit dcec11274a
2 changed files with 27 additions and 3 deletions

View File

@ -1,3 +1,12 @@
2006-01-20 Elijah Newren <newren gmail com>
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 <newren gmail com> 2006-01-20 Elijah Newren <newren gmail com>
Fix unitialized value problem when in raise-on-click mode. Søren, Fix unitialized value problem when in raise-on-click mode. Søren,

View File

@ -119,6 +119,8 @@ static gboolean queue_calc_showing_func (MetaWindow *window,
static void meta_window_apply_session_info (MetaWindow *window, static void meta_window_apply_session_info (MetaWindow *window,
const MetaWindowSessionInfo *info); const MetaWindowSessionInfo *info);
static void unmaximize_window_before_freeing (MetaWindow *window);
#ifdef WITH_VERBOSE_MODE #ifdef WITH_VERBOSE_MODE
static const char* static const char*
wm_state_to_string (int state) wm_state_to_string (int state)
@ -977,9 +979,7 @@ meta_window_free (MetaWindow *window)
if (window->display->focus_window == window) if (window->display->focus_window == window)
window->display->focus_window = NULL; window->display->focus_window = NULL;
if (window->maximized_horizontally || window->maximized_vertically) unmaximize_window_before_freeing (window);
meta_window_unmaximize (window,
META_MAXIMIZE_HORIZONTAL | META_MAXIMIZE_VERTICAL);
meta_window_unqueue_calc_showing (window); meta_window_unqueue_calc_showing (window);
meta_window_unqueue_move_resize (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 void
meta_window_unmaximize (MetaWindow *window, meta_window_unmaximize (MetaWindow *window,
MetaMaximizeFlags directions) MetaMaximizeFlags directions)