Fix debugger not getting focused on break on Windows

This is a revert of 9d78274e06, 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.
This commit is contained in:
Pedro J. Estébanez 2020-07-21 01:09:17 +02:00
parent 89f57ae122
commit 633b75c9e1
3 changed files with 13 additions and 4 deletions

View file

@ -927,6 +927,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
memdelete(sdr); memdelete(sdr);
} else { } else {
script_debugger = sdr; script_debugger = sdr;
sdr->set_allow_focus_steal_pid(allow_focus_steal_pid);
} }
} else if (debug_mode == "local") { } 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); 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(); register_server_types();
MAIN_PRINT("Main: Load Remaps"); MAIN_PRINT("Main: Load Remaps");

View file

@ -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."); 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("debug_enter");
packet_peer_stream->put_var(2); packet_peer_stream->put_var(2);
packet_peer_stream->put_var(p_can_continue); 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; 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::ResourceUsageFunc ScriptDebuggerRemote::resource_usage_func = NULL;
ScriptDebuggerRemote::ScriptDebuggerRemote() : ScriptDebuggerRemote::ScriptDebuggerRemote() :
@ -1258,6 +1266,7 @@ ScriptDebuggerRemote::ScriptDebuggerRemote() :
warn_count(0), warn_count(0),
last_msec(0), last_msec(0),
msec_count(0), msec_count(0),
allow_focus_steal_pid(0),
locking(false), locking(false),
poll_every(0), poll_every(0),
scene_tree(NULL) { scene_tree(NULL) {

View file

@ -114,6 +114,8 @@ class ScriptDebuggerRemote : public ScriptDebugger {
uint64_t last_msec; uint64_t last_msec;
uint64_t msec_count; uint64_t msec_count;
OS::ProcessID allow_focus_steal_pid;
bool locking; //hack to avoid a deadloop bool locking; //hack to avoid a deadloop
static void _print_handler(void *p_this, const String &p_string, bool p_error); 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); virtual void set_skip_breakpoints(bool p_skip_breakpoints);
void set_scene_tree(SceneTree *p_scene_tree) { scene_tree = p_scene_tree; }; 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();
~ScriptDebuggerRemote(); ~ScriptDebuggerRemote();