Ensure that when a workspace is removed from the middle of the list, the

_NET_WM_DESKTOP props on windows on following workspaces are correctly set.
This commit is contained in:
Tomas Frydrych 2009-01-09 15:04:53 +00:00
parent 0b978e61aa
commit b47cd6a3bc
3 changed files with 31 additions and 0 deletions

View File

@ -1112,6 +1112,7 @@ meta_screen_remove_workspace (MetaScreen *screen, MetaWorkspace *workspace,
{ {
GList *l; GList *l;
MetaWorkspace *neighbour = NULL; MetaWorkspace *neighbour = NULL;
GList *next = NULL;
l = screen->workspaces; l = screen->workspaces;
while (l) while (l)
@ -1120,6 +1121,9 @@ meta_screen_remove_workspace (MetaScreen *screen, MetaWorkspace *workspace,
if (w == workspace) if (w == workspace)
{ {
if (l->next)
next = l->next;
if (l->prev) if (l->prev)
neighbour = l->prev->data; neighbour = l->prev->data;
else if (l->next) 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)); 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); meta_screen_queue_workarea_recalc (screen);
} }

View File

@ -477,6 +477,20 @@ meta_workspace_index (MetaWorkspace *workspace)
return ret; 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 /* get windows contained on workspace, including workspace->windows
* and also sticky windows. * and also sticky windows.
*/ */

View File

@ -61,4 +61,7 @@ void meta_workspace_activate (MetaWorkspace *workspace, guint32 timestamp);
void meta_workspace_activate_with_focus (MetaWorkspace *workspace, void meta_workspace_activate_with_focus (MetaWorkspace *workspace,
MetaWindow *focus_this, MetaWindow *focus_this,
guint32 timestamp); guint32 timestamp);
void meta_workspace_update_window_hints (MetaWorkspace *workspace);
#endif #endif