core: Avoid focusing window in presence of Clutter grabs
This is the same circumstance than the event_route not being NORMAL, since events may or may not eventually reach the window. It should not attempt to get focus out of the stage in that situation. This used to be covered by META_EVENT_ROUTE_COMPOSITOR_GRAB, but this is no longer set when ClutterGrab came in to replace it. Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4858 Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2433>
This commit is contained in:
parent
1e95710c52
commit
50e89e3760
@ -4502,6 +4502,8 @@ meta_window_focus (MetaWindow *window,
|
||||
{
|
||||
MetaWorkspaceManager *workspace_manager = window->display->workspace_manager;
|
||||
MetaWindow *modal_transient;
|
||||
MetaBackend *backend;
|
||||
ClutterStage *stage;
|
||||
|
||||
g_return_if_fail (!window->override_redirect);
|
||||
|
||||
@ -4548,12 +4550,12 @@ meta_window_focus (MetaWindow *window,
|
||||
|
||||
META_WINDOW_GET_CLASS (window)->focus (window, timestamp);
|
||||
|
||||
if (window->display->event_route == META_EVENT_ROUTE_NORMAL)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
ClutterStage *stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
|
||||
clutter_stage_set_key_focus (stage, NULL);
|
||||
}
|
||||
backend = meta_get_backend ();
|
||||
stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
|
||||
|
||||
if (window->display->event_route == META_EVENT_ROUTE_NORMAL &&
|
||||
clutter_stage_get_grab_actor (stage) == NULL)
|
||||
clutter_stage_set_key_focus (stage, NULL);
|
||||
|
||||
if (window->close_dialog &&
|
||||
meta_close_dialog_is_visible (window->close_dialog))
|
||||
|
Loading…
Reference in New Issue
Block a user