1
1
extends Control
2
2
3
+ var _n_theme_viewport : Viewport
3
4
var _n_filesystem_popup : FileDialog : set = _set_filesystem_popup
4
- var _n_virtual_keyboard : PopupPanel : set = _set_virtual_keyboard
5
+ var _n_virtual_keyboard : Window : set = _set_virtual_keyboard
5
6
var _n_config_popup : Window : set = _set_config_popup
6
7
var _n_warning_popup : AcceptDialog : set = _set_warning_popup
7
8
@@ -60,7 +61,7 @@ func _set_filesystem_popup(popup: FileDialog):
60
61
# warning-ignore:return_value_discarded
61
62
_n_filesystem_popup .visibility_changed .connect (_on_visibility_changed )
62
63
63
- func _set_virtual_keyboard (keyboard : PopupPanel ):
64
+ func _set_virtual_keyboard (keyboard : Window ):
64
65
_n_virtual_keyboard = keyboard
65
66
66
67
func _set_config_popup (config_popup : Window ):
@@ -150,7 +151,7 @@ func show_warning(text: String):
150
151
_n_warning_popup .get_ok_button ().grab_focus ()
151
152
152
153
func get_focused_window () -> Window :
153
- var win_id := DisplayServer .get_focused_window_or_popup ()
154
+ var win_id := DisplayServer .get_top_popup_or_focused_window ()
154
155
var win : Window = instance_from_id (win_id )
155
156
return win
156
157
@@ -162,9 +163,13 @@ func get_true_focused_control() -> Control:
162
163
163
164
# Find currently focused "embedded" window viewport
164
165
var viewport := win .get_viewport ()
166
+ # Handle theme viewport as well
167
+ if viewport == get_tree ().get_root ().get_viewport ():
168
+ viewport = _n_theme_viewport
169
+
165
170
while viewport :
166
- if viewport .get_focused_window_or_popup () == null :
171
+ if viewport .get_top_popup_or_focused_window () == null :
167
172
# Found the innermost viewport
168
173
return viewport .gui_get_focus_owner ()
169
- viewport = viewport .get_focused_window_or_popup ().get_viewport ()
174
+ viewport = viewport .get_top_popup_or_focused_window ().get_viewport ()
170
175
return get_viewport ().gui_get_focus_owner ()
0 commit comments