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
5 changed files with 51 additions and 21 deletions
|
@ -207,9 +207,32 @@ String EditorDebuggerNode::get_server_uri() const {
|
|||
return server->get_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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Error EditorDebuggerNode::start(const String &p_uri) {
|
||||
stop();
|
||||
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")) {
|
||||
EditorNode::get_singleton()->make_bottom_panel_item_visible(EditorNode::get_log());
|
||||
} else {
|
||||
|
@ -225,7 +248,11 @@ Error EditorDebuggerNode::start(const String &p_uri) {
|
|||
return OK;
|
||||
}
|
||||
|
||||
void EditorDebuggerNode::stop() {
|
||||
void EditorDebuggerNode::stop(bool p_force) {
|
||||
if (keep_open && !p_force) {
|
||||
return;
|
||||
}
|
||||
current_uri.clear();
|
||||
if (server.is_valid()) {
|
||||
server->stop();
|
||||
EditorNode::get_log()->add_message("--- Debugging process stopped ---", EditorLog::MSG_TYPE_EDITOR);
|
||||
|
@ -244,11 +271,6 @@ void EditorDebuggerNode::stop() {
|
|||
}
|
||||
});
|
||||
_break_state_changed();
|
||||
if (hide_on_stop) {
|
||||
if (is_visible_in_tree()) {
|
||||
EditorNode::get_singleton()->hide_bottom_panel();
|
||||
}
|
||||
}
|
||||
breakpoints.clear();
|
||||
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/continue"), DEBUG_CONTINUE);
|
||||
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->connect("id_pressed", callable_mp(this, &EditorDebuggerNode::_menu_option));
|
||||
|
||||
|
@ -468,12 +489,6 @@ void EditorDebuggerNode::_menu_option(int p_id) {
|
|||
case DEBUG_CONTINUE: {
|
||||
debug_continue();
|
||||
} 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: {
|
||||
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;
|
||||
|
@ -484,9 +499,6 @@ void EditorDebuggerNode::_menu_option(int p_id) {
|
|||
}
|
||||
|
||||
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()) {
|
||||
_menu_option(DEBUG_WITH_EXTERNAL_EDITOR);
|
||||
}
|
||||
|
|
|
@ -63,7 +63,6 @@ private:
|
|||
DEBUG_STEP,
|
||||
DEBUG_BREAK,
|
||||
DEBUG_CONTINUE,
|
||||
DEBUG_KEEP_DEBUGGER_OPEN,
|
||||
DEBUG_WITH_EXTERNAL_EDITOR,
|
||||
};
|
||||
|
||||
|
@ -110,7 +109,9 @@ private:
|
|||
float remote_scene_tree_timeout = 0.0;
|
||||
bool auto_switch_remote_scene_tree = false;
|
||||
bool debug_with_external_editor = false;
|
||||
bool hide_on_stop = true;
|
||||
bool keep_open = false;
|
||||
String current_uri;
|
||||
|
||||
CameraOverride camera_override = OVERRIDE_NONE;
|
||||
HashMap<Breakpoint, bool, Breakpoint> breakpoints;
|
||||
|
||||
|
@ -203,8 +204,9 @@ public:
|
|||
|
||||
String get_server_uri() const;
|
||||
|
||||
void set_keep_open(bool p_keep_open);
|
||||
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);
|
||||
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/break", TTR("Break"));
|
||||
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"));
|
||||
|
||||
// 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->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."));
|
||||
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
|
||||
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);
|
||||
|
||||
} 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_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_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);
|
||||
|
||||
if (check_deploy_remote) {
|
||||
|
@ -218,6 +229,9 @@ void DebuggerEditorPlugin::_update_debug_options() {
|
|||
if (check_reload_scripts) {
|
||||
_menu_option(RUN_RELOAD_SCRIPTS);
|
||||
}
|
||||
if (check_server_keep_open) {
|
||||
_menu_option(SERVER_KEEP_OPEN);
|
||||
}
|
||||
|
||||
int len = instances_menu->get_item_count();
|
||||
for (int idx = 0; idx < len; idx++) {
|
||||
|
|
|
@ -53,6 +53,7 @@ private:
|
|||
RUN_DEBUG_NAVIGATION,
|
||||
RUN_DEPLOY_REMOTE_DEBUG,
|
||||
RUN_RELOAD_SCRIPTS,
|
||||
SERVER_KEEP_OPEN,
|
||||
};
|
||||
|
||||
void _update_debug_options();
|
||||
|
|
|
@ -2952,6 +2952,7 @@ bool Main::start() {
|
|||
DisplayServer::get_singleton()->set_context(DisplayServer::CONTEXT_EDITOR);
|
||||
if (!debug_server_uri.is_empty()) {
|
||||
EditorDebuggerNode::get_singleton()->start(debug_server_uri);
|
||||
EditorDebuggerNode::get_singleton()->set_keep_open(true);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue