diff options
Diffstat (limited to 'src/window.c')
-rw-r--r-- | src/window.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/window.c b/src/window.c index 94f2928e..11cebbd7 100644 --- a/src/window.c +++ b/src/window.c @@ -921,6 +921,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) @@ -937,6 +943,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 */ @@ -3211,7 +3230,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; } @@ -3240,7 +3259,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; } |