diff --git a/src/core/screen.c b/src/core/screen.c index d02536cd8..fcf64aa07 100644 --- a/src/core/screen.c +++ b/src/core/screen.c @@ -1112,6 +1112,7 @@ meta_screen_remove_workspace (MetaScreen *screen, MetaWorkspace *workspace, { GList *l; MetaWorkspace *neighbour = NULL; + GList *next = NULL; l = screen->workspaces; while (l) @@ -1120,6 +1121,9 @@ meta_screen_remove_workspace (MetaScreen *screen, MetaWorkspace *workspace, if (w == workspace) { + if (l->next) + next = l->next; + if (l->prev) neighbour = l->prev->data; else if (l->next) @@ -1146,6 +1150,16 @@ meta_screen_remove_workspace (MetaScreen *screen, MetaWorkspace *workspace, set_number_of_spaces_hint (screen, g_list_length (screen->workspaces)); + l = next; + while (l) + { + MetaWorkspace *w = l->data; + + meta_workspace_update_window_hints (w); + + l = l->next; + } + meta_screen_queue_workarea_recalc (screen); } diff --git a/src/core/workspace.c b/src/core/workspace.c index 625da5087..ee0638cf7 100644 --- a/src/core/workspace.c +++ b/src/core/workspace.c @@ -477,6 +477,20 @@ meta_workspace_index (MetaWorkspace *workspace) return ret; } +void +meta_workspace_update_window_hints (MetaWorkspace *workspace) +{ + GList *l = workspace->windows; + while (l) + { + MetaWindow *win = l->data; + + meta_window_set_current_workspace_hint (win); + + l = l->next; + } +} + /* get windows contained on workspace, including workspace->windows * and also sticky windows. */ diff --git a/src/include/workspace.h b/src/include/workspace.h index 00497068c..2890ba5f3 100644 --- a/src/include/workspace.h +++ b/src/include/workspace.h @@ -61,4 +61,7 @@ void meta_workspace_activate (MetaWorkspace *workspace, guint32 timestamp); void meta_workspace_activate_with_focus (MetaWorkspace *workspace, MetaWindow *focus_this, guint32 timestamp); + +void meta_workspace_update_window_hints (MetaWorkspace *workspace); + #endif