mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 09:30:45 -05:00
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.
This commit is contained in:
parent
d53afd3ae1
commit
fd13022dc4
17
ChangeLog
17
ChangeLog
@ -1,3 +1,20 @@
|
|||||||
|
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>
|
2004-02-14 Rob Adams <readams@readams.net>
|
||||||
|
|
||||||
* configure.in: Add configure option to not even try using
|
* configure.in: Add configure option to not even try using
|
||||||
|
@ -2441,44 +2441,6 @@ process_tab_grab (MetaDisplay *display,
|
|||||||
return key_used;
|
return key_used;
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
static void
|
||||||
handle_activate_workspace (MetaDisplay *display,
|
handle_activate_workspace (MetaDisplay *display,
|
||||||
MetaScreen *screen,
|
MetaScreen *screen,
|
||||||
@ -2504,7 +2466,7 @@ handle_activate_workspace (MetaDisplay *display,
|
|||||||
|
|
||||||
if (workspace)
|
if (workspace)
|
||||||
{
|
{
|
||||||
switch_to_workspace (display, workspace);
|
meta_workspace_activate (workspace);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2704,7 +2666,7 @@ process_workspace_switch_grab (MetaDisplay *display,
|
|||||||
meta_topic (META_DEBUG_KEYBINDINGS,
|
meta_topic (META_DEBUG_KEYBINDINGS,
|
||||||
"Activating target workspace\n");
|
"Activating target workspace\n");
|
||||||
|
|
||||||
switch_to_workspace (display, target_workspace);
|
meta_workspace_activate (target_workspace);
|
||||||
|
|
||||||
return TRUE; /* we already ended the grab */
|
return TRUE; /* we already ended the grab */
|
||||||
}
|
}
|
||||||
@ -2770,7 +2732,7 @@ process_workspace_switch_grab (MetaDisplay *display,
|
|||||||
meta_topic (META_DEBUG_KEYBINDINGS,
|
meta_topic (META_DEBUG_KEYBINDINGS,
|
||||||
"Activating target workspace\n");
|
"Activating target workspace\n");
|
||||||
|
|
||||||
switch_to_workspace (display, target_workspace);
|
meta_workspace_activate (target_workspace);
|
||||||
|
|
||||||
return TRUE; /* we already ended the grab */
|
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);
|
meta_display_end_grab_op (display, event->xkey.time);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch_to_workspace (display, next);
|
meta_workspace_activate (next);
|
||||||
|
|
||||||
if (grabbed_before_release)
|
if (grabbed_before_release)
|
||||||
{
|
{
|
||||||
|
@ -261,6 +261,7 @@ meta_workspace_activate_with_focus (MetaWorkspace *workspace,
|
|||||||
MetaWindow *focus_this)
|
MetaWindow *focus_this)
|
||||||
{
|
{
|
||||||
MetaWorkspace *old;
|
MetaWorkspace *old;
|
||||||
|
MetaWindow *move_window;
|
||||||
|
|
||||||
meta_verbose ("Activating workspace %d\n",
|
meta_verbose ("Activating workspace %d\n",
|
||||||
meta_workspace_index (workspace));
|
meta_workspace_index (workspace));
|
||||||
@ -277,15 +278,46 @@ meta_workspace_activate_with_focus (MetaWorkspace *workspace,
|
|||||||
if (old == NULL)
|
if (old == NULL)
|
||||||
return;
|
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 (old);
|
||||||
meta_workspace_queue_calc_showing (workspace);
|
meta_workspace_queue_calc_showing (workspace);
|
||||||
|
|
||||||
|
if (move_window)
|
||||||
|
/* Removes window from other spaces */
|
||||||
|
meta_window_change_workspace (move_window, workspace);
|
||||||
|
|
||||||
if (focus_this)
|
if (focus_this)
|
||||||
{
|
{
|
||||||
meta_window_focus (focus_this,
|
meta_window_focus (focus_this,
|
||||||
meta_display_get_current_time (focus_this->display));
|
meta_display_get_current_time (focus_this->display));
|
||||||
meta_window_raise (focus_this);
|
meta_window_raise (focus_this);
|
||||||
}
|
}
|
||||||
|
else if (move_window)
|
||||||
|
{
|
||||||
|
meta_window_raise (move_window);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
meta_topic (META_DEBUG_FOCUS, "Focusing default window on new workspace\n");
|
meta_topic (META_DEBUG_FOCUS, "Focusing default window on new workspace\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user