Browse Source

Merge pull request #40555 from RandomShaper/fix_debugger_autofocus_3.2

Fix debugger not getting focused on break on Windows (3.2)
Rémi Verschelde 4 years ago
parent
commit
9da889ff29

+ 1 - 4
main/main.cpp

@@ -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") {
 
 
@@ -1311,10 +1312,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");

+ 9 - 0
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.");
 	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) {

+ 3 - 0
scene/debugger/script_debugger_remote.h

@@ -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();