Merge pull request #63286 from RandomShaper/fix_debugger_focus
This commit is contained in:
commit
19db9ed863
5 changed files with 20 additions and 11 deletions
|
@ -43,6 +43,8 @@ HashMap<StringName, EngineDebugger::Profiler> EngineDebugger::profilers;
|
||||||
HashMap<StringName, EngineDebugger::Capture> EngineDebugger::captures;
|
HashMap<StringName, EngineDebugger::Capture> EngineDebugger::captures;
|
||||||
HashMap<String, EngineDebugger::CreatePeerFunc> EngineDebugger::protocols;
|
HashMap<String, EngineDebugger::CreatePeerFunc> EngineDebugger::protocols;
|
||||||
|
|
||||||
|
void (*EngineDebugger::allow_focus_steal_fn)();
|
||||||
|
|
||||||
void EngineDebugger::register_profiler(const StringName &p_name, const Profiler &p_func) {
|
void EngineDebugger::register_profiler(const StringName &p_name, const Profiler &p_func) {
|
||||||
ERR_FAIL_COND_MSG(profilers.has(p_name), "Profiler already registered: " + p_name);
|
ERR_FAIL_COND_MSG(profilers.has(p_name), "Profiler already registered: " + p_name);
|
||||||
profilers.insert(p_name, p_func);
|
profilers.insert(p_name, p_func);
|
||||||
|
@ -133,7 +135,7 @@ void EngineDebugger::iteration(uint64_t p_frame_ticks, uint64_t p_process_ticks,
|
||||||
singleton->poll_events(true);
|
singleton->poll_events(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EngineDebugger::initialize(const String &p_uri, bool p_skip_breakpoints, Vector<String> p_breakpoints) {
|
void EngineDebugger::initialize(const String &p_uri, bool p_skip_breakpoints, Vector<String> p_breakpoints, void (*p_allow_focus_steal_fn)()) {
|
||||||
register_uri_handler("tcp://", RemoteDebuggerPeerTCP::create); // TCP is the default protocol. Platforms/modules can add more.
|
register_uri_handler("tcp://", RemoteDebuggerPeerTCP::create); // TCP is the default protocol. Platforms/modules can add more.
|
||||||
if (p_uri.is_empty()) {
|
if (p_uri.is_empty()) {
|
||||||
return;
|
return;
|
||||||
|
@ -174,6 +176,8 @@ void EngineDebugger::initialize(const String &p_uri, bool p_skip_breakpoints, Ve
|
||||||
|
|
||||||
singleton_script_debugger->insert_breakpoint(bp.substr(sp + 1, bp.length()).to_int(), bp.substr(0, sp));
|
singleton_script_debugger->insert_breakpoint(bp.substr(sp + 1, bp.length()).to_int(), bp.substr(0, sp));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
allow_focus_steal_fn = p_allow_focus_steal_fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EngineDebugger::deinitialize() {
|
void EngineDebugger::deinitialize() {
|
||||||
|
|
|
@ -100,13 +100,15 @@ protected:
|
||||||
static HashMap<StringName, Capture> captures;
|
static HashMap<StringName, Capture> captures;
|
||||||
static HashMap<String, CreatePeerFunc> protocols;
|
static HashMap<String, CreatePeerFunc> protocols;
|
||||||
|
|
||||||
|
static void (*allow_focus_steal_fn)();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
_FORCE_INLINE_ static EngineDebugger *get_singleton() { return singleton; }
|
_FORCE_INLINE_ static EngineDebugger *get_singleton() { return singleton; }
|
||||||
_FORCE_INLINE_ static bool is_active() { return singleton != nullptr && script_debugger != nullptr; }
|
_FORCE_INLINE_ static bool is_active() { return singleton != nullptr && script_debugger != nullptr; }
|
||||||
|
|
||||||
_FORCE_INLINE_ static ScriptDebugger *get_script_debugger() { return script_debugger; };
|
_FORCE_INLINE_ static ScriptDebugger *get_script_debugger() { return script_debugger; };
|
||||||
|
|
||||||
static void initialize(const String &p_uri, bool p_skip_breakpoints, Vector<String> p_breakpoints);
|
static void initialize(const String &p_uri, bool p_skip_breakpoints, Vector<String> p_breakpoints, void (*p_allow_focus_steal_fn)());
|
||||||
static void deinitialize();
|
static void deinitialize();
|
||||||
static void register_profiler(const StringName &p_name, const Profiler &p_profiler);
|
static void register_profiler(const StringName &p_name, const Profiler &p_profiler);
|
||||||
static void unregister_profiler(const StringName &p_name);
|
static void unregister_profiler(const StringName &p_name);
|
||||||
|
|
|
@ -452,6 +452,9 @@ void RemoteDebugger::debug(bool p_can_continue, bool p_is_error_breakpoint) {
|
||||||
msg.push_back(error_str);
|
msg.push_back(error_str);
|
||||||
ERR_FAIL_COND(!script_lang);
|
ERR_FAIL_COND(!script_lang);
|
||||||
msg.push_back(script_lang->debug_get_stack_level_count() > 0);
|
msg.push_back(script_lang->debug_get_stack_level_count() > 0);
|
||||||
|
if (allow_focus_steal_fn) {
|
||||||
|
allow_focus_steal_fn();
|
||||||
|
}
|
||||||
send_message("debug_enter", msg);
|
send_message("debug_enter", msg);
|
||||||
|
|
||||||
Input::MouseMode mouse_mode = Input::get_singleton()->get_mouse_mode();
|
Input::MouseMode mouse_mode = Input::get_singleton()->get_mouse_mode();
|
||||||
|
|
|
@ -55,7 +55,7 @@ Error EditorRun::run(const String &p_scene, const String &p_write_movie) {
|
||||||
args.push_back("--remote-debug");
|
args.push_back("--remote-debug");
|
||||||
args.push_back(EditorDebuggerNode::get_singleton()->get_server_uri());
|
args.push_back(EditorDebuggerNode::get_singleton()->get_server_uri());
|
||||||
|
|
||||||
args.push_back("--allow_focus_steal_pid");
|
args.push_back("--editor-pid");
|
||||||
args.push_back(itos(OS::get_singleton()->get_process_id()));
|
args.push_back(itos(OS::get_singleton()->get_process_id()));
|
||||||
|
|
||||||
bool debug_collisions = EditorSettings::get_singleton()->get_project_metadata("debug_options", "run_debug_collisons", false);
|
bool debug_collisions = EditorSettings::get_singleton()->get_project_metadata("debug_options", "run_debug_collisons", false);
|
||||||
|
|
|
@ -148,7 +148,7 @@ static bool cmdline_tool = false;
|
||||||
static String locale;
|
static String locale;
|
||||||
static bool show_help = false;
|
static bool show_help = false;
|
||||||
static bool auto_quit = false;
|
static bool auto_quit = false;
|
||||||
static OS::ProcessID allow_focus_steal_pid = 0;
|
static OS::ProcessID editor_pid = 0;
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
static bool auto_build_solutions = false;
|
static bool auto_build_solutions = false;
|
||||||
static String debug_server_uri;
|
static String debug_server_uri;
|
||||||
|
@ -1140,9 +1140,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
||||||
OS::get_singleton()->print("Missing remote debug host address, aborting.\n");
|
OS::get_singleton()->print("Missing remote debug host address, aborting.\n");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
} else if (I->get() == "--allow_focus_steal_pid") { // not exposed to user
|
} else if (I->get() == "--editor-pid") { // not exposed to user
|
||||||
if (I->next()) {
|
if (I->next()) {
|
||||||
allow_focus_steal_pid = I->next()->get().to_int();
|
editor_pid = I->next()->get().to_int();
|
||||||
N = I->next()->next();
|
N = I->next()->next();
|
||||||
} else {
|
} else {
|
||||||
OS::get_singleton()->print("Missing editor PID argument, aborting.\n");
|
OS::get_singleton()->print("Missing editor PID argument, aborting.\n");
|
||||||
|
@ -1272,7 +1272,11 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
||||||
PROPERTY_HINT_RANGE,
|
PROPERTY_HINT_RANGE,
|
||||||
"0, 200, 1, or_greater"));
|
"0, 200, 1, or_greater"));
|
||||||
|
|
||||||
EngineDebugger::initialize(debug_uri, skip_breakpoints, breakpoints);
|
EngineDebugger::initialize(debug_uri, skip_breakpoints, breakpoints, []() {
|
||||||
|
if (editor_pid) {
|
||||||
|
DisplayServer::get_singleton()->enable_for_stealing_focus(editor_pid);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
if (editor) {
|
if (editor) {
|
||||||
|
@ -1837,10 +1841,6 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
|
||||||
DisplayServer::get_singleton()->window_set_flag(DisplayServer::WINDOW_FLAG_ALWAYS_ON_TOP, true);
|
DisplayServer::get_singleton()->window_set_flag(DisplayServer::WINDOW_FLAG_ALWAYS_ON_TOP, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (allow_focus_steal_pid) {
|
|
||||||
DisplayServer::get_singleton()->enable_for_stealing_focus(allow_focus_steal_pid);
|
|
||||||
}
|
|
||||||
|
|
||||||
MAIN_PRINT("Main: Load Boot Image");
|
MAIN_PRINT("Main: Load Boot Image");
|
||||||
|
|
||||||
Color clear = GLOBAL_DEF_BASIC("rendering/environment/defaults/default_clear_color", Color(0.3, 0.3, 0.3));
|
Color clear = GLOBAL_DEF_BASIC("rendering/environment/defaults/default_clear_color", Color(0.3, 0.3, 0.3));
|
||||||
|
|
Loading…
Add table
Reference in a new issue