浏览代码

Merge pull request #19229 from RandomShaper/fix-focus-steal

Fix debugger focus stealing
Max Hilbrunner 7 年之前
父节点
当前提交
dc2d8d4dee
共有 3 个文件被更改,包括 15 次插入4 次删除
  1. 9 0
      core/script_debugger_remote.cpp
  2. 5 0
      core/script_debugger_remote.h
  3. 1 4
      main/main.cpp

+ 9 - 0
core/script_debugger_remote.cpp

@@ -169,6 +169,10 @@ void ScriptDebuggerRemote::debug(ScriptLanguage *p_script, bool p_can_continue)
 		ERR_FAIL();
 	}
 
+	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);
@@ -1070,6 +1074,10 @@ void ScriptDebuggerRemote::profiling_set_frame_times(float p_frame_time, float p
 	physics_frame_time = p_physics_frame_time;
 }
 
+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() :
@@ -1091,6 +1099,7 @@ ScriptDebuggerRemote::ScriptDebuggerRemote() :
 		n_errors_dropped(0),
 		last_msec(0),
 		msec_count(0),
+		allow_focus_steal_pid(0),
 		locking(false),
 		poll_every(0),
 		request_scene_tree(NULL),

+ 5 - 0
core/script_debugger_remote.h

@@ -34,6 +34,7 @@
 #include "io/packet_peer.h"
 #include "io/stream_peer_tcp.h"
 #include "list.h"
+#include "os/os.h"
 #include "script_language.h"
 
 class ScriptDebuggerRemote : public ScriptDebugger {
@@ -98,6 +99,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);
 
@@ -171,6 +174,8 @@ public:
 	virtual void profiling_end();
 	virtual void profiling_set_frame_times(float p_frame_time, float p_idle_time, float p_physics_time, float p_physics_frame_time);
 
+	void set_allow_focus_steal_pid(OS::ProcessID p_pid);
+
 	ScriptDebuggerRemote();
 	~ScriptDebuggerRemote();
 };

+ 1 - 4
main/main.cpp

@@ -715,6 +715,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") {
 
@@ -1179,10 +1180,6 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
 
 #endif
 
-	if (allow_focus_steal_pid) {
-		OS::get_singleton()->enable_for_stealing_focus(allow_focus_steal_pid);
-	}
-
 	MAIN_PRINT("Main: Load Modules, Physics, Drivers, Scripts");
 
 	register_platform_apis();