diff --git a/ChangeLog b/ChangeLog index ebe6209d7..0e085d493 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2003-12-12 Havoc Pennington + + * 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 * fix up compositing manager to somewhat work diff --git a/src/window.c b/src/window.c index 3a01d27a9..7cfaf5e47 100644 --- a/src/window.c +++ b/src/window.c @@ -944,6 +944,12 @@ meta_window_free (MetaWindow *window) meta_window_unqueue_move_resize (window); meta_window_unqueue_update_icon (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; while (tmp != NULL) @@ -960,6 +966,19 @@ meta_window_free (MetaWindow *window) 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); /* FIXME restore original size if window has maximized */ @@ -3243,7 +3262,7 @@ meta_window_stick (MetaWindow *window) { workspace = (MetaWorkspace *) tmp->data; 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; } @@ -3272,7 +3291,7 @@ meta_window_unstick (MetaWindow *window) { workspace = (MetaWorkspace *) tmp->data; 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; } diff --git a/src/workspace.c b/src/workspace.c index c16c2c119..e8a820df5 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -85,6 +85,7 @@ meta_workspace_free (MetaWorkspace *workspace) } g_assert (workspace->windows == NULL); + g_assert (workspace->mru_list == NULL); screen = workspace->screen;