diff options
author | Rob Adams <readams@readams.net> | 2004-02-15 05:29:49 +0000 |
---|---|---|
committer | Rob Adams <readams@src.gnome.org> | 2004-02-15 05:29:49 +0000 |
commit | fd13022dc43864205fdbca0906d7c3343c537f7e (patch) | |
tree | b59655e06439bac8809028140ca6699b6cba6633 | |
parent | d53afd3ae1edc5bc084c7438393acb0b611e6832 (diff) | |
download | metacity-fd13022dc43864205fdbca0906d7c3343c537f7e.tar.gz |
If we're moving a window and receive a _NET_CURRENT_DESKTOP message
2004-02-14 Rob Adams <readams@readams.net>
If we're moving a window and receive a _NET_CURRENT_DESKTOP
message indicating a workspace switch, bring along the drag window
to the new workspace, solving a potentially weird bug where the
window would be lost on the old workspace. This also makes it
possible to implement edge flipping in an external program with
just a few lines of code. Patch for #131630 from ed@catmur.co.uk.
* src/keybindings.c (switch_to_workspace): remove function -- no
longer needed.
(handle_activate_workspace): call meta_workspace_activate instead
of switch_to_workspace
* src/workspace.c (meta_workspace_activate_with_focus): if we're
in a move grab op, bring along the drag window.
-rw-r--r-- | ChangeLog | 17 | ||||
-rw-r--r-- | src/keybindings.c | 46 | ||||
-rw-r--r-- | src/workspace.c | 32 |
3 files changed, 53 insertions, 42 deletions
@@ -1,5 +1,22 @@ 2004-02-14 Rob Adams <readams@readams.net> + If we're moving a window and receive a _NET_CURRENT_DESKTOP + message indicating a workspace switch, bring along the drag window + to the new workspace, solving a potentially weird bug where the + window would be lost on the old workspace. This also makes it + possible to implement edge flipping in an external program with + just a few lines of code. Patch for #131630 from ed@catmur.co.uk. + + * src/keybindings.c (switch_to_workspace): remove function -- no + longer needed. + (handle_activate_workspace): call meta_workspace_activate instead + of switch_to_workspace + + * src/workspace.c (meta_workspace_activate_with_focus): if we're + in a move grab op, bring along the drag window. + +2004-02-14 Rob Adams <readams@readams.net> + * configure.in: Add configure option to not even try using xinerama, to make metacity buildable on systems with no shared library version of the xinerama libraries. Patch for #134203 from diff --git a/src/keybindings.c b/src/keybindings.c index 921736e3..c0774b04 100644 --- a/src/keybindings.c +++ b/src/keybindings.c @@ -2442,44 +2442,6 @@ process_tab_grab (MetaDisplay *display, } static void -switch_to_workspace (MetaDisplay *display, - MetaWorkspace *workspace) -{ - MetaWindow *move_window; - - move_window = NULL; - if (display->grab_op == META_GRAB_OP_MOVING) - move_window = 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_activate (workspace); - - if (move_window) - { - /* Removes window from other spaces */ - meta_window_change_workspace (move_window, workspace); - meta_window_raise (move_window); - } -} - -static void handle_activate_workspace (MetaDisplay *display, MetaScreen *screen, MetaWindow *event_window, @@ -2504,7 +2466,7 @@ handle_activate_workspace (MetaDisplay *display, if (workspace) { - switch_to_workspace (display, workspace); + meta_workspace_activate (workspace); } else { @@ -2704,7 +2666,7 @@ process_workspace_switch_grab (MetaDisplay *display, meta_topic (META_DEBUG_KEYBINDINGS, "Activating target workspace\n"); - switch_to_workspace (display, target_workspace); + meta_workspace_activate (target_workspace); return TRUE; /* we already ended the grab */ } @@ -2770,7 +2732,7 @@ process_workspace_switch_grab (MetaDisplay *display, meta_topic (META_DEBUG_KEYBINDINGS, "Activating target workspace\n"); - switch_to_workspace (display, target_workspace); + meta_workspace_activate (target_workspace); return TRUE; /* we already ended the grab */ } @@ -3392,7 +3354,7 @@ handle_workspace_switch (MetaDisplay *display, meta_display_end_grab_op (display, event->xkey.time); } - switch_to_workspace (display, next); + meta_workspace_activate (next); if (grabbed_before_release) { 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"); |