|
@@ -32,7 +32,9 @@
|
|
|
|
|
|
#include "core/config/project_settings.h"
|
|
#include "core/config/project_settings.h"
|
|
#include "core/debugger/debugger_marshalls.h"
|
|
#include "core/debugger/debugger_marshalls.h"
|
|
|
|
+#include "core/string/translation_server.h"
|
|
#include "editor/debugger/editor_debugger_node.h"
|
|
#include "editor/debugger/editor_debugger_node.h"
|
|
|
|
+#include "editor/debugger/script_editor_debugger.h"
|
|
#include "editor/editor_command_palette.h"
|
|
#include "editor/editor_command_palette.h"
|
|
#include "editor/editor_feature_profile.h"
|
|
#include "editor/editor_feature_profile.h"
|
|
#include "editor/editor_interface.h"
|
|
#include "editor/editor_interface.h"
|
|
@@ -203,6 +205,12 @@ void GameView::_sessions_changed() {
|
|
}
|
|
}
|
|
|
|
|
|
_update_debugger_buttons();
|
|
_update_debugger_buttons();
|
|
|
|
+
|
|
|
|
+ if (embedded_process->is_embedding_completed()) {
|
|
|
|
+ if (!embedded_script_debugger || !embedded_script_debugger->is_session_active() || embedded_script_debugger->get_remote_pid() != embedded_process->get_embedded_pid()) {
|
|
|
|
+ _attach_script_debugger();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
void GameView::_instance_starting_static(int p_idx, List<String> &r_arguments) {
|
|
void GameView::_instance_starting_static(int p_idx, List<String> &r_arguments) {
|
|
@@ -215,6 +223,11 @@ void GameView::_instance_starting(int p_idx, List<String> &r_arguments) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
if (p_idx == 0 && embed_on_play && make_floating_on_play && !window_wrapper->get_window_enabled() && EditorNode::get_singleton()->is_multi_window_enabled()) {
|
|
if (p_idx == 0 && embed_on_play && make_floating_on_play && !window_wrapper->get_window_enabled() && EditorNode::get_singleton()->is_multi_window_enabled()) {
|
|
|
|
+ // Set the Floating Window default title. Always considered in DEBUG mode, same as in Window::set_title.
|
|
|
|
+ String appname = GLOBAL_GET("application/config/name");
|
|
|
|
+ appname = vformat("%s (DEBUG)", TranslationServer::get_singleton()->translate(appname));
|
|
|
|
+ window_wrapper->set_window_title(appname);
|
|
|
|
+
|
|
window_wrapper->restore_window_from_saved_position(floating_window_rect, floating_window_screen, floating_window_screen_rect);
|
|
window_wrapper->restore_window_from_saved_position(floating_window_rect, floating_window_screen, floating_window_screen_rect);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -255,6 +268,8 @@ void GameView::_stop_pressed() {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ _detach_script_debugger();
|
|
|
|
+
|
|
EditorNode::get_singleton()->set_unfocused_low_processor_usage_mode_enabled(true);
|
|
EditorNode::get_singleton()->set_unfocused_low_processor_usage_mode_enabled(true);
|
|
embedded_process->reset();
|
|
embedded_process->reset();
|
|
_update_ui();
|
|
_update_ui();
|
|
@@ -272,6 +287,7 @@ void GameView::_stop_pressed() {
|
|
}
|
|
}
|
|
|
|
|
|
void GameView::_embedding_completed() {
|
|
void GameView::_embedding_completed() {
|
|
|
|
+ _attach_script_debugger();
|
|
_update_ui();
|
|
_update_ui();
|
|
}
|
|
}
|
|
|
|
|
|
@@ -563,6 +579,36 @@ void GameView::_update_floating_window_settings() {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void GameView::_attach_script_debugger() {
|
|
|
|
+ if (embedded_script_debugger) {
|
|
|
|
+ _detach_script_debugger();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ embedded_script_debugger = nullptr;
|
|
|
|
+ for (int i = 0; EditorDebuggerNode::get_singleton()->get_debugger(i); i++) {
|
|
|
|
+ ScriptEditorDebugger *script_debugger = EditorDebuggerNode::get_singleton()->get_debugger(i);
|
|
|
|
+ if (script_debugger->is_session_active() && script_debugger->get_remote_pid() == embedded_process->get_embedded_pid()) {
|
|
|
|
+ embedded_script_debugger = script_debugger;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (embedded_script_debugger) {
|
|
|
|
+ embedded_script_debugger->connect("remote_window_title_changed", callable_mp(this, &GameView::_remote_window_title_changed));
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void GameView::_detach_script_debugger() {
|
|
|
|
+ if (embedded_script_debugger) {
|
|
|
|
+ embedded_script_debugger->disconnect("remote_window_title_changed", callable_mp(this, &GameView::_remote_window_title_changed));
|
|
|
|
+ embedded_script_debugger = nullptr;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void GameView::_remote_window_title_changed(String title) {
|
|
|
|
+ window_wrapper->set_window_title(title);
|
|
|
|
+}
|
|
|
|
+
|
|
void GameView::_update_arguments_for_instance(int p_idx, List<String> &r_arguments) {
|
|
void GameView::_update_arguments_for_instance(int p_idx, List<String> &r_arguments) {
|
|
if (p_idx != 0 || !embed_on_play || !DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_WINDOW_EMBEDDING)) {
|
|
if (p_idx != 0 || !embed_on_play || !DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_WINDOW_EMBEDDING)) {
|
|
return;
|
|
return;
|