diff --git a/js/ui/main.js b/js/ui/main.js index 0774b3aad..1bd61b794 100644 --- a/js/ui/main.js +++ b/js/ui/main.js @@ -356,8 +356,6 @@ function pushModal(actor, params) { Meta.disable_unredirect_for_screen(global.screen); } - global.set_stage_input_mode(Shell.StageInputMode.FULLSCREEN); - modalCount += 1; let actorDestroyId = actor.connect('destroy', function() { let index = _findModal(actor); @@ -406,7 +404,6 @@ function popModal(actor, timestamp) { if (focusIndex < 0) { global.stage.set_key_focus(null); global.end_modal(timestamp); - global.set_stage_input_mode(Shell.StageInputMode.NORMAL); keybindingMode = Shell.KeyBindingMode.NORMAL; throw new Error('incorrect pop'); @@ -454,7 +451,6 @@ function popModal(actor, timestamp) { return; global.end_modal(timestamp); - global.set_stage_input_mode(Shell.StageInputMode.NORMAL); Meta.enable_unredirect_for_screen(global.screen); keybindingMode = Shell.KeyBindingMode.NORMAL; } diff --git a/src/shell-global.c b/src/shell-global.c index c448a7abc..afc3d5318 100644 --- a/src/shell-global.c +++ b/src/shell-global.c @@ -611,7 +611,7 @@ sync_input_region (ShellGlobal *global) if (global->gtk_grab_active) meta_empty_stage_input_region (screen); - else if (global->input_mode == SHELL_STAGE_INPUT_MODE_FULLSCREEN || !global->input_region) + else if (global->input_mode == SHELL_STAGE_INPUT_MODE_FULLSCREEN || !global->input_region || global->has_modal) meta_set_stage_input_region (screen, None); else meta_set_stage_input_region (screen, global->input_region); @@ -1050,6 +1050,7 @@ shell_global_begin_modal (ShellGlobal *global, return FALSE; global->has_modal = meta_plugin_begin_modal (global->plugin, global->stage_xwindow, None, options, timestamp); + sync_input_region (global); return global->has_modal; } @@ -1080,6 +1081,8 @@ shell_global_end_modal (ShellGlobal *global, else if (get_key_focused_actor (global) && meta_stage_is_focused (global->meta_screen)) meta_screen_focus_default_window (global->meta_screen, get_current_time_maybe_roundtrip (global)); + + sync_input_region (global); } void