summaryrefslogtreecommitdiff
path: root/src/workspace.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/workspace.c')
-rw-r--r--src/workspace.c39
1 files changed, 14 insertions, 25 deletions
diff --git a/src/workspace.c b/src/workspace.c
index 205363ff..2eb9ec03 100644
--- a/src/workspace.c
+++ b/src/workspace.c
@@ -94,7 +94,7 @@ meta_workspace_free (MetaWorkspace *workspace)
/* pop front of list we're iterating over */
meta_workspace_remove_window (workspace, window);
- g_assert (window->workspaces != NULL);
+ g_assert (window->workspace != NULL);
tmp = next;
}
@@ -125,14 +125,14 @@ void
meta_workspace_add_window (MetaWorkspace *workspace,
MetaWindow *window)
{
- g_return_if_fail (!meta_workspace_contains_window (workspace, window));
+ g_return_if_fail (window->workspace == NULL);
/* If the window is on all workspaces, we want to add it to all mru
* lists, otherwise just add it to this workspaces mru list
*/
if (window->on_all_workspaces)
{
- if (window->workspaces == NULL)
+ if (window->workspace == NULL)
{
GList* tmp = window->screen->workspaces;
while (tmp)
@@ -152,7 +152,7 @@ meta_workspace_add_window (MetaWorkspace *workspace,
}
workspace->windows = g_list_prepend (workspace->windows, window);
- window->workspaces = g_list_prepend (window->workspaces, workspace);
+ window->workspace = workspace;
meta_window_set_current_workspace_hint (window);
@@ -175,10 +175,10 @@ void
meta_workspace_remove_window (MetaWorkspace *workspace,
MetaWindow *window)
{
- g_return_if_fail (meta_workspace_contains_window (workspace, window));
+ g_return_if_fail (window->workspace == workspace);
workspace->windows = g_list_remove (workspace->windows, window);
- window->workspaces = g_list_remove (window->workspaces, workspace);
+ window->workspace = NULL;
/* If the window is on all workspaces, we don't want to remove it
* from the MRU list unless this causes it to be removed from all
@@ -186,16 +186,13 @@ meta_workspace_remove_window (MetaWorkspace *workspace,
*/
if (window->on_all_workspaces)
{
- if (window->workspaces == NULL)
+ GList* tmp = window->screen->workspaces;
+ while (tmp)
{
- GList* tmp = window->screen->workspaces;
- while (tmp)
- {
- MetaWorkspace* work = (MetaWorkspace*) tmp->data;
- work->mru_list = g_list_remove (work->mru_list, window);
+ MetaWorkspace* work = (MetaWorkspace*) tmp->data;
+ work->mru_list = g_list_remove (work->mru_list, window);
- tmp = tmp->next;
- }
+ tmp = tmp->next;
}
}
else
@@ -250,13 +247,6 @@ meta_workspace_relocate_windows (MetaWorkspace *workspace,
g_assert (workspace->windows == NULL);
}
-gboolean
-meta_workspace_contains_window (MetaWorkspace *workspace,
- MetaWindow *window)
-{
- return g_list_find (window->workspaces, workspace) != NULL;
-}
-
void
meta_workspace_queue_calc_showing (MetaWorkspace *workspace)
{
@@ -317,11 +307,10 @@ meta_workspace_activate_with_focus (MetaWorkspace *workspace,
* never gets unmapped and we maintain the button grab
* on it.
*/
- if (move_window)
+ if (move_window && (move_window->workspace != workspace))
{
- if (!meta_workspace_contains_window (workspace,
- move_window))
- meta_workspace_add_window (workspace, move_window);
+ meta_workspace_remove_window (workspace, move_window);
+ meta_workspace_add_window (workspace, move_window);
}
}