mirror of
https://github.com/brl/mutter.git
synced 2024-11-24 17:10:40 -05:00
window: Add user_op parameter to update_monitor()
When workspaces-only-on-primary is set and a window is moved back to the primary, we also move it to the active workspace to avoid the confusion of a visible window suddenly disappearing when crossing the monitor border. However when the window is not actually moved by the user, preserving the workspace makes more sense - we already do this in some cases (e.g. when moving between primary monitors), but miss others (unplugging the previous monitor); just add an explicit user_op parameter as used elsewhere to cover all exceptions. https://bugzilla.gnome.org/show_bug.cgi?id=731760
This commit is contained in:
parent
00c7a27732
commit
967b6c33df
@ -690,7 +690,8 @@ void meta_window_activate_full (MetaWindow *window,
|
||||
|
||||
gboolean meta_window_is_client_decorated (MetaWindow *window);
|
||||
|
||||
void meta_window_update_monitor (MetaWindow *window);
|
||||
void meta_window_update_monitor (MetaWindow *window,
|
||||
gboolean user_op);
|
||||
|
||||
void meta_window_set_urgent (MetaWindow *window,
|
||||
gboolean urgent);
|
||||
|
@ -3579,7 +3579,7 @@ meta_window_update_for_monitors_changed (MetaWindow *window)
|
||||
|
||||
if (window->override_redirect)
|
||||
{
|
||||
meta_window_update_monitor (window);
|
||||
meta_window_update_monitor (window, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -3612,7 +3612,8 @@ meta_window_update_for_monitors_changed (MetaWindow *window)
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_update_monitor (MetaWindow *window)
|
||||
meta_window_update_monitor (MetaWindow *window,
|
||||
gboolean user_op)
|
||||
{
|
||||
const MetaMonitorInfo *old;
|
||||
|
||||
@ -3622,22 +3623,17 @@ meta_window_update_monitor (MetaWindow *window)
|
||||
{
|
||||
meta_window_update_on_all_workspaces (window);
|
||||
|
||||
/* If workspaces only on primary and we moved back to primary, ensure that the
|
||||
* window is now in that workspace. We do this because while the window is on a
|
||||
* non-primary monitor it is always visible, so it would be very jarring if it
|
||||
* disappeared when it crossed the monitor border.
|
||||
/* If workspaces only on primary and we moved back to primary due to a user action,
|
||||
* ensure that the window is now in that workspace. We do this because while
|
||||
* the window is on a non-primary monitor it is always visible, so it would be
|
||||
* very jarring if it disappeared when it crossed the monitor border.
|
||||
* The one time we want it to both change to the primary monitor and a non-active
|
||||
* workspace is when dropping the window on some other workspace thumbnail directly.
|
||||
* That should be handled by explicitly moving the window before changing the
|
||||
* workspace
|
||||
* Don't do this if old == NULL, because thats what happens when starting up, and
|
||||
* we don't want to move all windows around from a previous WM instance. Nor do
|
||||
* we want it when moving from one primary monitor to another (can happen during
|
||||
* screen reconfiguration.
|
||||
* workspace.
|
||||
*/
|
||||
if (meta_prefs_get_workspaces_only_on_primary () &&
|
||||
if (meta_prefs_get_workspaces_only_on_primary () && user_op &&
|
||||
meta_window_is_on_primary_monitor (window) &&
|
||||
old != NULL && !old->is_primary &&
|
||||
window->screen->active_workspace != window->workspace)
|
||||
meta_window_change_workspace (window, window->screen->active_workspace);
|
||||
|
||||
@ -3648,6 +3644,7 @@ meta_window_update_monitor (MetaWindow *window)
|
||||
/* If we're changing monitors, we need to update the has_maximize_func flag,
|
||||
* as the working area has changed. */
|
||||
meta_window_recalc_features (window);
|
||||
meta_window_queue (window, META_QUEUE_CALC_SHOWING);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3764,7 +3761,7 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
|
||||
old_output_id = window->monitor->output_id;
|
||||
|
||||
meta_window_update_monitor (window);
|
||||
meta_window_update_monitor (window, flags & META_IS_USER_ACTION);
|
||||
|
||||
if (old_output_id != window->monitor->output_id &&
|
||||
flags & META_IS_MOVE_ACTION && flags & META_IS_USER_ACTION)
|
||||
|
@ -3271,7 +3271,7 @@ meta_window_x11_configure_notify (MetaWindow *window,
|
||||
priv->client_rect = window->rect;
|
||||
window->buffer_rect = window->rect;
|
||||
|
||||
meta_window_update_monitor (window);
|
||||
meta_window_update_monitor (window, FALSE);
|
||||
|
||||
/* Whether an override-redirect window is considered fullscreen depends
|
||||
* on its geometry.
|
||||
|
Loading…
Reference in New Issue
Block a user