unstick window to get it out of mru_list it should not be in; assert that

2003-12-12  Havoc Pennington  <hp@redhat.com>

	* src/window.c (meta_window_free): unstick window to get it out of
	mru_list it should not be in; assert that window has been removed
	from all mru_list. Perhaps fixes #122016 crash.
This commit is contained in:
Havoc Pennington 2003-12-13 03:58:55 +00:00 committed by Havoc Pennington
parent 0bb3361b73
commit a92be6e319
3 changed files with 28 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2003-12-12 Havoc Pennington <hp@redhat.com>
* src/window.c (meta_window_free): unstick window to get it out of
mru_list it should not be in; assert that window has been removed
from all mru_list. Perhaps fixes #122016 crash.
2003-11-29 Havoc Pennington <hp@redhat.com> 2003-11-29 Havoc Pennington <hp@redhat.com>
* fix up compositing manager to somewhat work * fix up compositing manager to somewhat work

View File

@ -945,6 +945,12 @@ meta_window_free (MetaWindow *window)
meta_window_unqueue_update_icon (window); meta_window_unqueue_update_icon (window);
meta_window_free_delete_dialog (window); meta_window_free_delete_dialog (window);
/* We need to unstick to remove the window from
* any workspace->mru_list for workspaces not
* in window->workspaces
*/
meta_window_unstick (window);
tmp = window->workspaces; tmp = window->workspaces;
while (tmp != NULL) while (tmp != NULL)
{ {
@ -960,6 +966,19 @@ meta_window_free (MetaWindow *window)
g_assert (window->workspaces == NULL); g_assert (window->workspaces == NULL);
#ifndef G_DISABLE_CHECKS
tmp = window->screen->workspaces;
while (tmp != NULL)
{
MetaWorkspace *workspace = tmp->data;
g_assert (g_list_find (workspace->windows, window) == NULL);
g_assert (g_list_find (workspace->mru_list, window) == NULL);
tmp = tmp->next;
}
#endif
meta_stack_remove (window->screen->stack, window); meta_stack_remove (window->screen->stack, window);
/* FIXME restore original size if window has maximized */ /* FIXME restore original size if window has maximized */
@ -3243,7 +3262,7 @@ meta_window_stick (MetaWindow *window)
{ {
workspace = (MetaWorkspace *) tmp->data; workspace = (MetaWorkspace *) tmp->data;
if (!g_list_find (workspace->mru_list, window)) if (!g_list_find (workspace->mru_list, window))
workspace->mru_list = g_list_append (workspace->mru_list, window); workspace->mru_list = g_list_append (workspace->mru_list, window);
tmp = tmp->next; tmp = tmp->next;
} }
@ -3272,7 +3291,7 @@ meta_window_unstick (MetaWindow *window)
{ {
workspace = (MetaWorkspace *) tmp->data; workspace = (MetaWorkspace *) tmp->data;
if (!meta_workspace_contains_window (workspace, window)) if (!meta_workspace_contains_window (workspace, window))
workspace->mru_list = g_list_remove (workspace->mru_list, window); workspace->mru_list = g_list_remove (workspace->mru_list, window);
tmp = tmp->next; tmp = tmp->next;
} }

View File

@ -85,6 +85,7 @@ meta_workspace_free (MetaWorkspace *workspace)
} }
g_assert (workspace->windows == NULL); g_assert (workspace->windows == NULL);
g_assert (workspace->mru_list == NULL);
screen = workspace->screen; screen = workspace->screen;