workspace: Focus the default window only if no window is focused
This might happen when the workspace is not switched and focus_default_window is called or when 'workspace on primary display only' is enabled, a secondary display exists and the workspace is switched. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2747>
This commit is contained in:
parent
a2ed0f97c3
commit
058981dc12
@ -1316,15 +1316,40 @@ meta_workspace_get_name (MetaWorkspace *workspace)
|
|||||||
return meta_prefs_get_workspace_name (meta_workspace_index (workspace));
|
return meta_prefs_get_workspace_name (meta_workspace_index (workspace));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static MetaWindow *
|
||||||
|
get_focused_workspace_window (MetaWorkspace *workspace)
|
||||||
|
{
|
||||||
|
g_autoptr (GList) windows = NULL;
|
||||||
|
GList *l;
|
||||||
|
|
||||||
|
windows = meta_workspace_list_windows (workspace);
|
||||||
|
|
||||||
|
for (l = windows; l != NULL; l = l->next)
|
||||||
|
{
|
||||||
|
MetaWindow *window = l->data;
|
||||||
|
|
||||||
|
if (meta_window_has_focus (window))
|
||||||
|
return window;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_workspace_focus_default_window (MetaWorkspace *workspace,
|
meta_workspace_focus_default_window (MetaWorkspace *workspace,
|
||||||
MetaWindow *not_this_one,
|
MetaWindow *not_this_one,
|
||||||
guint32 timestamp)
|
guint32 timestamp)
|
||||||
{
|
{
|
||||||
|
MetaWindow *focus;
|
||||||
|
|
||||||
if (timestamp == META_CURRENT_TIME)
|
if (timestamp == META_CURRENT_TIME)
|
||||||
meta_warning ("META_CURRENT_TIME used to choose focus window; "
|
meta_warning ("META_CURRENT_TIME used to choose focus window; "
|
||||||
"focus window may not be correct.");
|
"focus window may not be correct.");
|
||||||
|
|
||||||
|
focus = get_focused_workspace_window (workspace);
|
||||||
|
if (focus != NULL && focus != not_this_one)
|
||||||
|
return;
|
||||||
|
|
||||||
if (meta_prefs_get_focus_mode () == G_DESKTOP_FOCUS_MODE_CLICK ||
|
if (meta_prefs_get_focus_mode () == G_DESKTOP_FOCUS_MODE_CLICK ||
|
||||||
!workspace->display->mouse_mode)
|
!workspace->display->mouse_mode)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user