From 633b75c9e184c36e1c3b971100265f3dae79841e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20J=2E=20Est=C3=A9banez?= Date: Tue, 21 Jul 2020 01:09:17 +0200 Subject: [PATCH] Fix debugger not getting focused on break on Windows This is a revert of 9d78274e068d4928044220c4d5c1a7baed423670, which was an attempt to fix #21431, but in the end it seems a different problem was the root of the issue. Renewing focus steal allowance every time is needed on Windows. --- main/main.cpp | 5 +---- scene/debugger/script_debugger_remote.cpp | 9 +++++++++ scene/debugger/script_debugger_remote.h | 3 +++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/main/main.cpp b/main/main.cpp index 551b5ccf5d9..f21e7bc10e5 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -927,6 +927,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph memdelete(sdr); } else { script_debugger = sdr; + sdr->set_allow_focus_steal_pid(allow_focus_steal_pid); } } else if (debug_mode == "local") { @@ -1306,10 +1307,6 @@ Error Main::setup2(Thread::ID p_main_tid_override) { OS::get_singleton()->set_window_always_on_top(true); } - if (allow_focus_steal_pid) { - OS::get_singleton()->enable_for_stealing_focus(allow_focus_steal_pid); - } - register_server_types(); MAIN_PRINT("Main: Load Remaps"); diff --git a/scene/debugger/script_debugger_remote.cpp b/scene/debugger/script_debugger_remote.cpp index fbe5e84f4b1..5b6222e5718 100644 --- a/scene/debugger/script_debugger_remote.cpp +++ b/scene/debugger/script_debugger_remote.cpp @@ -142,6 +142,10 @@ void ScriptDebuggerRemote::debug(ScriptLanguage *p_script, bool p_can_continue, ERR_FAIL_COND_MSG(!tcp_client->is_connected_to_host(), "Script Debugger failed to connect, but being used anyway."); + if (allow_focus_steal_pid) { + OS::get_singleton()->enable_for_stealing_focus(allow_focus_steal_pid); + } + packet_peer_stream->put_var("debug_enter"); packet_peer_stream->put_var(2); packet_peer_stream->put_var(p_can_continue); @@ -1231,6 +1235,10 @@ void ScriptDebuggerRemote::set_skip_breakpoints(bool p_skip_breakpoints) { skip_breakpoints = p_skip_breakpoints; } +void ScriptDebuggerRemote::set_allow_focus_steal_pid(OS::ProcessID p_pid) { + allow_focus_steal_pid = p_pid; +} + ScriptDebuggerRemote::ResourceUsageFunc ScriptDebuggerRemote::resource_usage_func = NULL; ScriptDebuggerRemote::ScriptDebuggerRemote() : @@ -1258,6 +1266,7 @@ ScriptDebuggerRemote::ScriptDebuggerRemote() : warn_count(0), last_msec(0), msec_count(0), + allow_focus_steal_pid(0), locking(false), poll_every(0), scene_tree(NULL) { diff --git a/scene/debugger/script_debugger_remote.h b/scene/debugger/script_debugger_remote.h index c56166502e9..6b9c91d739a 100644 --- a/scene/debugger/script_debugger_remote.h +++ b/scene/debugger/script_debugger_remote.h @@ -114,6 +114,8 @@ class ScriptDebuggerRemote : public ScriptDebugger { uint64_t last_msec; uint64_t msec_count; + OS::ProcessID allow_focus_steal_pid; + bool locking; //hack to avoid a deadloop static void _print_handler(void *p_this, const String &p_string, bool p_error); @@ -198,6 +200,7 @@ public: virtual void set_skip_breakpoints(bool p_skip_breakpoints); void set_scene_tree(SceneTree *p_scene_tree) { scene_tree = p_scene_tree; }; + void set_allow_focus_steal_pid(OS::ProcessID p_pid); ScriptDebuggerRemote(); ~ScriptDebuggerRemote();