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);
|
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,
|
void meta_window_set_urgent (MetaWindow *window,
|
||||||
gboolean urgent);
|
gboolean urgent);
|
||||||
|
@ -3579,7 +3579,7 @@ meta_window_update_for_monitors_changed (MetaWindow *window)
|
|||||||
|
|
||||||
if (window->override_redirect)
|
if (window->override_redirect)
|
||||||
{
|
{
|
||||||
meta_window_update_monitor (window);
|
meta_window_update_monitor (window, FALSE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3612,7 +3612,8 @@ meta_window_update_for_monitors_changed (MetaWindow *window)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_window_update_monitor (MetaWindow *window)
|
meta_window_update_monitor (MetaWindow *window,
|
||||||
|
gboolean user_op)
|
||||||
{
|
{
|
||||||
const MetaMonitorInfo *old;
|
const MetaMonitorInfo *old;
|
||||||
|
|
||||||
@ -3622,22 +3623,17 @@ meta_window_update_monitor (MetaWindow *window)
|
|||||||
{
|
{
|
||||||
meta_window_update_on_all_workspaces (window);
|
meta_window_update_on_all_workspaces (window);
|
||||||
|
|
||||||
/* If workspaces only on primary and we moved back to primary, ensure that the
|
/* If workspaces only on primary and we moved back to primary due to a user action,
|
||||||
* window is now in that workspace. We do this because while the window is on a
|
* ensure that the window is now in that workspace. We do this because while
|
||||||
* non-primary monitor it is always visible, so it would be very jarring if it
|
* the window is on a non-primary monitor it is always visible, so it would be
|
||||||
* disappeared when it crossed the monitor border.
|
* 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
|
* 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.
|
* workspace is when dropping the window on some other workspace thumbnail directly.
|
||||||
* That should be handled by explicitly moving the window before changing the
|
* That should be handled by explicitly moving the window before changing the
|
||||||
* workspace
|
* 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.
|
|
||||||
*/
|
*/
|
||||||
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) &&
|
meta_window_is_on_primary_monitor (window) &&
|
||||||
old != NULL && !old->is_primary &&
|
|
||||||
window->screen->active_workspace != window->workspace)
|
window->screen->active_workspace != window->workspace)
|
||||||
meta_window_change_workspace (window, window->screen->active_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,
|
/* If we're changing monitors, we need to update the has_maximize_func flag,
|
||||||
* as the working area has changed. */
|
* as the working area has changed. */
|
||||||
meta_window_recalc_features (window);
|
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;
|
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 &&
|
if (old_output_id != window->monitor->output_id &&
|
||||||
flags & META_IS_MOVE_ACTION && flags & META_IS_USER_ACTION)
|
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;
|
priv->client_rect = window->rect;
|
||||||
window->buffer_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
|
/* Whether an override-redirect window is considered fullscreen depends
|
||||||
* on its geometry.
|
* on its geometry.
|
||||||
|
Loading…
Reference in New Issue
Block a user