summaryrefslogtreecommitdiff
path: root/src/workspace.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/workspace.c')
-rw-r--r--src/workspace.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/workspace.c b/src/workspace.c
index df7a72dd..ee4d0bad 100644
--- a/src/workspace.c
+++ b/src/workspace.c
@@ -261,6 +261,7 @@ meta_workspace_activate_with_focus (MetaWorkspace *workspace,
MetaWindow *focus_this)
{
MetaWorkspace *old;
+ MetaWindow *move_window;
meta_verbose ("Activating workspace %d\n",
meta_workspace_index (workspace));
@@ -277,15 +278,46 @@ meta_workspace_activate_with_focus (MetaWorkspace *workspace,
if (old == NULL)
return;
+ move_window = NULL;
+ if (workspace->screen->display->grab_op == META_GRAB_OP_MOVING ||
+ workspace->screen->display->grab_op == META_GRAB_OP_KEYBOARD_MOVING)
+ move_window = workspace->screen->display->grab_window;
+
+ if (move_window != NULL)
+ {
+ if (move_window->on_all_workspaces)
+ move_window = NULL; /* don't move it after all */
+
+ /* We put the window on the new workspace, flip spaces,
+ * then remove from old workspace, so the window
+ * never gets unmapped and we maintain the button grab
+ * on it.
+ */
+ if (move_window)
+ {
+ if (!meta_workspace_contains_window (workspace,
+ move_window))
+ meta_workspace_add_window (workspace, move_window);
+ }
+ }
+
meta_workspace_queue_calc_showing (old);
meta_workspace_queue_calc_showing (workspace);
+ if (move_window)
+ /* Removes window from other spaces */
+ meta_window_change_workspace (move_window, workspace);
+
if (focus_this)
{
meta_window_focus (focus_this,
meta_display_get_current_time (focus_this->display));
meta_window_raise (focus_this);
}
+ else if (move_window)
+ {
+ meta_window_raise (move_window);
+ }
else
{
meta_topic (META_DEBUG_FOCUS, "Focusing default window on new workspace\n");