diff --git a/src/core/screen.c b/src/core/screen.c index 9d3c43d03..7e8c58100 100644 --- a/src/core/screen.c +++ b/src/core/screen.c @@ -1157,6 +1157,7 @@ meta_screen_remove_workspace (MetaScreen *screen, MetaWorkspace *workspace, { GList *l; MetaWorkspace *neighbour = NULL; + GList *next = NULL; l = screen->workspaces; while (l) @@ -1165,6 +1166,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) @@ -1191,6 +1195,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); g_object_notify (G_OBJECT (screen), "n-workspaces"); diff --git a/src/core/workspace.c b/src/core/workspace.c index 74d7d184b..4c01d400d 100644 --- a/src/core/workspace.c +++ b/src/core/workspace.c @@ -498,6 +498,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 45ae52157..fd7e1dfb2 100644 --- a/src/include/workspace.h +++ b/src/include/workspace.h @@ -72,4 +72,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