Merge pull request #69164 from Faless/debugger/4.x_server_keep_open
[Editor] Add button to keep the debug server open.
This commit is contained in:
commit
92c08a5973
@ -207,9 +207,32 @@ String EditorDebuggerNode::get_server_uri() const {
|
|||||||
return server->get_uri();
|
return server->get_uri();
|
||||||
}
|
}
|
||||||
|
|
||||||
Error EditorDebuggerNode::start(const String &p_uri) {
|
void EditorDebuggerNode::set_keep_open(bool p_keep_open) {
|
||||||
|
keep_open = p_keep_open;
|
||||||
|
if (keep_open) {
|
||||||
|
if (server.is_null() || !server->is_active()) {
|
||||||
|
start();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
bool found = false;
|
||||||
|
_for_all(tabs, [&](ScriptEditorDebugger *p_debugger) {
|
||||||
|
if (p_debugger->is_session_active()) {
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (!found) {
|
||||||
stop();
|
stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Error EditorDebuggerNode::start(const String &p_uri) {
|
||||||
ERR_FAIL_COND_V(p_uri.find("://") < 0, ERR_INVALID_PARAMETER);
|
ERR_FAIL_COND_V(p_uri.find("://") < 0, ERR_INVALID_PARAMETER);
|
||||||
|
if (keep_open && current_uri == p_uri && server.is_valid()) {
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
stop(true);
|
||||||
|
current_uri = p_uri;
|
||||||
if (EDITOR_GET("run/output/always_open_output_on_play")) {
|
if (EDITOR_GET("run/output/always_open_output_on_play")) {
|
||||||
EditorNode::get_singleton()->make_bottom_panel_item_visible(EditorNode::get_log());
|
EditorNode::get_singleton()->make_bottom_panel_item_visible(EditorNode::get_log());
|
||||||
} else {
|
} else {
|
||||||
@ -225,7 +248,11 @@ Error EditorDebuggerNode::start(const String &p_uri) {
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorDebuggerNode::stop() {
|
void EditorDebuggerNode::stop(bool p_force) {
|
||||||
|
if (keep_open && !p_force) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
current_uri.clear();
|
||||||
if (server.is_valid()) {
|
if (server.is_valid()) {
|
||||||
server->stop();
|
server->stop();
|
||||||
EditorNode::get_log()->add_message("--- Debugging process stopped ---", EditorLog::MSG_TYPE_EDITOR);
|
EditorNode::get_log()->add_message("--- Debugging process stopped ---", EditorLog::MSG_TYPE_EDITOR);
|
||||||
@ -244,11 +271,6 @@ void EditorDebuggerNode::stop() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
_break_state_changed();
|
_break_state_changed();
|
||||||
if (hide_on_stop) {
|
|
||||||
if (is_visible_in_tree()) {
|
|
||||||
EditorNode::get_singleton()->hide_bottom_panel();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
breakpoints.clear();
|
breakpoints.clear();
|
||||||
set_process(false);
|
set_process(false);
|
||||||
}
|
}
|
||||||
@ -428,7 +450,6 @@ void EditorDebuggerNode::set_script_debug_button(MenuButton *p_button) {
|
|||||||
p->add_shortcut(ED_GET_SHORTCUT("debugger/break"), DEBUG_BREAK);
|
p->add_shortcut(ED_GET_SHORTCUT("debugger/break"), DEBUG_BREAK);
|
||||||
p->add_shortcut(ED_GET_SHORTCUT("debugger/continue"), DEBUG_CONTINUE);
|
p->add_shortcut(ED_GET_SHORTCUT("debugger/continue"), DEBUG_CONTINUE);
|
||||||
p->add_separator();
|
p->add_separator();
|
||||||
p->add_check_shortcut(ED_GET_SHORTCUT("debugger/keep_debugger_open"), DEBUG_KEEP_DEBUGGER_OPEN);
|
|
||||||
p->add_check_shortcut(ED_GET_SHORTCUT("debugger/debug_with_external_editor"), DEBUG_WITH_EXTERNAL_EDITOR);
|
p->add_check_shortcut(ED_GET_SHORTCUT("debugger/debug_with_external_editor"), DEBUG_WITH_EXTERNAL_EDITOR);
|
||||||
p->connect("id_pressed", callable_mp(this, &EditorDebuggerNode::_menu_option));
|
p->connect("id_pressed", callable_mp(this, &EditorDebuggerNode::_menu_option));
|
||||||
|
|
||||||
@ -468,12 +489,6 @@ void EditorDebuggerNode::_menu_option(int p_id) {
|
|||||||
case DEBUG_CONTINUE: {
|
case DEBUG_CONTINUE: {
|
||||||
debug_continue();
|
debug_continue();
|
||||||
} break;
|
} break;
|
||||||
case DEBUG_KEEP_DEBUGGER_OPEN: {
|
|
||||||
bool ischecked = script_menu->get_popup()->is_item_checked(script_menu->get_popup()->get_item_index(DEBUG_KEEP_DEBUGGER_OPEN));
|
|
||||||
hide_on_stop = ischecked;
|
|
||||||
script_menu->get_popup()->set_item_checked(script_menu->get_popup()->get_item_index(DEBUG_KEEP_DEBUGGER_OPEN), !ischecked);
|
|
||||||
EditorSettings::get_singleton()->set_project_metadata("debug_options", "keep_debugger_open", !ischecked);
|
|
||||||
} break;
|
|
||||||
case DEBUG_WITH_EXTERNAL_EDITOR: {
|
case DEBUG_WITH_EXTERNAL_EDITOR: {
|
||||||
bool ischecked = script_menu->get_popup()->is_item_checked(script_menu->get_popup()->get_item_index(DEBUG_WITH_EXTERNAL_EDITOR));
|
bool ischecked = script_menu->get_popup()->is_item_checked(script_menu->get_popup()->get_item_index(DEBUG_WITH_EXTERNAL_EDITOR));
|
||||||
debug_with_external_editor = !ischecked;
|
debug_with_external_editor = !ischecked;
|
||||||
@ -484,9 +499,6 @@ void EditorDebuggerNode::_menu_option(int p_id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void EditorDebuggerNode::_update_debug_options() {
|
void EditorDebuggerNode::_update_debug_options() {
|
||||||
if (EditorSettings::get_singleton()->get_project_metadata("debug_options", "keep_debugger_open", false).operator bool()) {
|
|
||||||
_menu_option(DEBUG_KEEP_DEBUGGER_OPEN);
|
|
||||||
}
|
|
||||||
if (EditorSettings::get_singleton()->get_project_metadata("debug_options", "debug_with_external_editor", false).operator bool()) {
|
if (EditorSettings::get_singleton()->get_project_metadata("debug_options", "debug_with_external_editor", false).operator bool()) {
|
||||||
_menu_option(DEBUG_WITH_EXTERNAL_EDITOR);
|
_menu_option(DEBUG_WITH_EXTERNAL_EDITOR);
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,6 @@ private:
|
|||||||
DEBUG_STEP,
|
DEBUG_STEP,
|
||||||
DEBUG_BREAK,
|
DEBUG_BREAK,
|
||||||
DEBUG_CONTINUE,
|
DEBUG_CONTINUE,
|
||||||
DEBUG_KEEP_DEBUGGER_OPEN,
|
|
||||||
DEBUG_WITH_EXTERNAL_EDITOR,
|
DEBUG_WITH_EXTERNAL_EDITOR,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -110,7 +109,9 @@ private:
|
|||||||
float remote_scene_tree_timeout = 0.0;
|
float remote_scene_tree_timeout = 0.0;
|
||||||
bool auto_switch_remote_scene_tree = false;
|
bool auto_switch_remote_scene_tree = false;
|
||||||
bool debug_with_external_editor = false;
|
bool debug_with_external_editor = false;
|
||||||
bool hide_on_stop = true;
|
bool keep_open = false;
|
||||||
|
String current_uri;
|
||||||
|
|
||||||
CameraOverride camera_override = OVERRIDE_NONE;
|
CameraOverride camera_override = OVERRIDE_NONE;
|
||||||
HashMap<Breakpoint, bool, Breakpoint> breakpoints;
|
HashMap<Breakpoint, bool, Breakpoint> breakpoints;
|
||||||
|
|
||||||
@ -203,8 +204,9 @@ public:
|
|||||||
|
|
||||||
String get_server_uri() const;
|
String get_server_uri() const;
|
||||||
|
|
||||||
|
void set_keep_open(bool p_keep_open);
|
||||||
Error start(const String &p_uri = "tcp://");
|
Error start(const String &p_uri = "tcp://");
|
||||||
void stop();
|
void stop(bool p_force = false);
|
||||||
|
|
||||||
bool plugins_capture(ScriptEditorDebugger *p_debugger, const String &p_message, const Array &p_data);
|
bool plugins_capture(ScriptEditorDebugger *p_debugger, const String &p_message, const Array &p_data);
|
||||||
void add_debugger_plugin(const Ref<EditorDebuggerPlugin> &p_plugin);
|
void add_debugger_plugin(const Ref<EditorDebuggerPlugin> &p_plugin);
|
||||||
|
@ -47,7 +47,6 @@ DebuggerEditorPlugin::DebuggerEditorPlugin(PopupMenu *p_debug_menu) {
|
|||||||
ED_SHORTCUT("debugger/step_over", TTR("Step Over"), Key::F10);
|
ED_SHORTCUT("debugger/step_over", TTR("Step Over"), Key::F10);
|
||||||
ED_SHORTCUT("debugger/break", TTR("Break"));
|
ED_SHORTCUT("debugger/break", TTR("Break"));
|
||||||
ED_SHORTCUT("debugger/continue", TTR("Continue"), Key::F12);
|
ED_SHORTCUT("debugger/continue", TTR("Continue"), Key::F12);
|
||||||
ED_SHORTCUT("debugger/keep_debugger_open", TTR("Keep Debugger Open"));
|
|
||||||
ED_SHORTCUT("debugger/debug_with_external_editor", TTR("Debug with External Editor"));
|
ED_SHORTCUT("debugger/debug_with_external_editor", TTR("Debug with External Editor"));
|
||||||
|
|
||||||
// File Server for deploy with remote filesystem.
|
// File Server for deploy with remote filesystem.
|
||||||
@ -85,6 +84,9 @@ DebuggerEditorPlugin::DebuggerEditorPlugin(PopupMenu *p_debug_menu) {
|
|||||||
debug_menu->add_check_shortcut(ED_SHORTCUT("editor/sync_script_changes", TTR("Synchronize Script Changes")), RUN_RELOAD_SCRIPTS);
|
debug_menu->add_check_shortcut(ED_SHORTCUT("editor/sync_script_changes", TTR("Synchronize Script Changes")), RUN_RELOAD_SCRIPTS);
|
||||||
debug_menu->set_item_tooltip(-1,
|
debug_menu->set_item_tooltip(-1,
|
||||||
TTR("When this option is enabled, any script that is saved will be reloaded in the running project.\nWhen used remotely on a device, this is more efficient when the network filesystem option is enabled."));
|
TTR("When this option is enabled, any script that is saved will be reloaded in the running project.\nWhen used remotely on a device, this is more efficient when the network filesystem option is enabled."));
|
||||||
|
debug_menu->add_check_shortcut(ED_SHORTCUT("editor/keep_server_open", TTR("Keep Debug Server Open")), SERVER_KEEP_OPEN);
|
||||||
|
debug_menu->set_item_tooltip(-1,
|
||||||
|
TTR("When this option is enabled, the editor debug server will stay open and listen for new sessions started outside of the editor itself."));
|
||||||
|
|
||||||
// Multi-instance, start/stop
|
// Multi-instance, start/stop
|
||||||
instances_menu = memnew(PopupMenu);
|
instances_menu = memnew(PopupMenu);
|
||||||
@ -176,6 +178,14 @@ void DebuggerEditorPlugin::_menu_option(int p_option) {
|
|||||||
EditorSettings::get_singleton()->set_project_metadata("debug_options", "run_reload_scripts", !ischecked);
|
EditorSettings::get_singleton()->set_project_metadata("debug_options", "run_reload_scripts", !ischecked);
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
case SERVER_KEEP_OPEN: {
|
||||||
|
bool ischecked = debug_menu->is_item_checked(debug_menu->get_item_index(SERVER_KEEP_OPEN));
|
||||||
|
debug_menu->set_item_checked(debug_menu->get_item_index(SERVER_KEEP_OPEN), !ischecked);
|
||||||
|
|
||||||
|
EditorDebuggerNode::get_singleton()->set_keep_open(!ischecked);
|
||||||
|
EditorSettings::get_singleton()->set_project_metadata("debug_options", "server_keep_open", !ischecked);
|
||||||
|
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,6 +205,7 @@ void DebuggerEditorPlugin::_update_debug_options() {
|
|||||||
bool check_debug_navigation = EditorSettings::get_singleton()->get_project_metadata("debug_options", "run_debug_navigation", false);
|
bool check_debug_navigation = EditorSettings::get_singleton()->get_project_metadata("debug_options", "run_debug_navigation", false);
|
||||||
bool check_live_debug = EditorSettings::get_singleton()->get_project_metadata("debug_options", "run_live_debug", true);
|
bool check_live_debug = EditorSettings::get_singleton()->get_project_metadata("debug_options", "run_live_debug", true);
|
||||||
bool check_reload_scripts = EditorSettings::get_singleton()->get_project_metadata("debug_options", "run_reload_scripts", true);
|
bool check_reload_scripts = EditorSettings::get_singleton()->get_project_metadata("debug_options", "run_reload_scripts", true);
|
||||||
|
bool check_server_keep_open = EditorSettings::get_singleton()->get_project_metadata("debug_options", "server_keep_open", false);
|
||||||
int instances = EditorSettings::get_singleton()->get_project_metadata("debug_options", "run_debug_instances", 1);
|
int instances = EditorSettings::get_singleton()->get_project_metadata("debug_options", "run_debug_instances", 1);
|
||||||
|
|
||||||
if (check_deploy_remote) {
|
if (check_deploy_remote) {
|
||||||
@ -218,6 +229,9 @@ void DebuggerEditorPlugin::_update_debug_options() {
|
|||||||
if (check_reload_scripts) {
|
if (check_reload_scripts) {
|
||||||
_menu_option(RUN_RELOAD_SCRIPTS);
|
_menu_option(RUN_RELOAD_SCRIPTS);
|
||||||
}
|
}
|
||||||
|
if (check_server_keep_open) {
|
||||||
|
_menu_option(SERVER_KEEP_OPEN);
|
||||||
|
}
|
||||||
|
|
||||||
int len = instances_menu->get_item_count();
|
int len = instances_menu->get_item_count();
|
||||||
for (int idx = 0; idx < len; idx++) {
|
for (int idx = 0; idx < len; idx++) {
|
||||||
|
@ -53,6 +53,7 @@ private:
|
|||||||
RUN_DEBUG_NAVIGATION,
|
RUN_DEBUG_NAVIGATION,
|
||||||
RUN_DEPLOY_REMOTE_DEBUG,
|
RUN_DEPLOY_REMOTE_DEBUG,
|
||||||
RUN_RELOAD_SCRIPTS,
|
RUN_RELOAD_SCRIPTS,
|
||||||
|
SERVER_KEEP_OPEN,
|
||||||
};
|
};
|
||||||
|
|
||||||
void _update_debug_options();
|
void _update_debug_options();
|
||||||
|
@ -2952,6 +2952,7 @@ bool Main::start() {
|
|||||||
DisplayServer::get_singleton()->set_context(DisplayServer::CONTEXT_EDITOR);
|
DisplayServer::get_singleton()->set_context(DisplayServer::CONTEXT_EDITOR);
|
||||||
if (!debug_server_uri.is_empty()) {
|
if (!debug_server_uri.is_empty()) {
|
||||||
EditorDebuggerNode::get_singleton()->start(debug_server_uri);
|
EditorDebuggerNode::get_singleton()->start(debug_server_uri);
|
||||||
|
EditorDebuggerNode::get_singleton()->set_keep_open(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user