Split EmbeddedProcess::reset to allow stopping timers without full reset.

This commit is contained in:
Pāvels Nadtočajevs
2026-01-15 11:19:43 +02:00
parent 1549d51865
commit c3bef1b83f
4 changed files with 11 additions and 3 deletions

View File

@@ -220,13 +220,17 @@ void EmbeddedProcess::reset() {
embedding_completed = false; embedding_completed = false;
start_embedding_time = 0; start_embedding_time = 0;
embedding_grab_focus = false; embedding_grab_focus = false;
timer_embedding->stop(); reset_timers();
timer_update_embedded_process->stop();
set_process(false); set_process(false);
set_notify_transform(false); set_notify_transform(false);
queue_redraw(); queue_redraw();
} }
void EmbeddedProcess::reset_timers() {
timer_embedding->stop();
timer_update_embedded_process->stop();
}
void EmbeddedProcess::request_close() { void EmbeddedProcess::request_close() {
if (current_process_id != 0 && embedding_completed) { if (current_process_id != 0 && embedding_completed) {
DisplayServer::get_singleton()->request_close_embedded_process(current_process_id); DisplayServer::get_singleton()->request_close_embedded_process(current_process_id);

View File

@@ -66,6 +66,7 @@ public:
virtual void embed_process(OS::ProcessID p_pid) = 0; virtual void embed_process(OS::ProcessID p_pid) = 0;
virtual int get_embedded_pid() const = 0; virtual int get_embedded_pid() const = 0;
virtual void reset() = 0; virtual void reset() = 0;
virtual void reset_timers() = 0;
virtual void request_close() = 0; virtual void request_close() = 0;
virtual void queue_update_embedded_process() = 0; virtual void queue_update_embedded_process() = 0;
@@ -119,6 +120,7 @@ public:
void embed_process(OS::ProcessID p_pid) override; void embed_process(OS::ProcessID p_pid) override;
int get_embedded_pid() const override; int get_embedded_pid() const override;
void reset() override; void reset() override;
void reset_timers() override;
void request_close() override; void request_close() override;
void queue_update_embedded_process() override; void queue_update_embedded_process() override;

View File

@@ -1163,7 +1163,7 @@ void GameView::_window_close_request() {
if (window_wrapper->get_window_enabled()) { if (window_wrapper->get_window_enabled()) {
// Stop the embedded process timer before closing the window wrapper, // Stop the embedded process timer before closing the window wrapper,
// so the signal to focus EDITOR_GAME isn't sent when the window is not enabled. // so the signal to focus EDITOR_GAME isn't sent when the window is not enabled.
embedded_process->reset(); embedded_process->reset_timers();
window_wrapper->set_window_enabled(false); window_wrapper->set_window_enabled(false);
} }
@@ -1175,6 +1175,7 @@ void GameView::_window_close_request() {
if (paused || embedded_process->is_embedding_in_progress()) { if (paused || embedded_process->is_embedding_in_progress()) {
// Call deferred to prevent the _stop_pressed callback to be executed before the wrapper window // Call deferred to prevent the _stop_pressed callback to be executed before the wrapper window
// actually closes. // actually closes.
embedded_process->reset();
callable_mp(EditorRunBar::get_singleton(), &EditorRunBar::stop_playing).call_deferred(); callable_mp(EditorRunBar::get_singleton(), &EditorRunBar::stop_playing).call_deferred();
} else { } else {
// Try to gracefully close the window. That way, the NOTIFICATION_WM_CLOSE_REQUEST // Try to gracefully close the window. That way, the NOTIFICATION_WM_CLOSE_REQUEST

View File

@@ -118,6 +118,7 @@ public:
void embed_process(OS::ProcessID p_pid) override; void embed_process(OS::ProcessID p_pid) override;
int get_embedded_pid() const override { return current_process_id; } int get_embedded_pid() const override { return current_process_id; }
void reset() override; void reset() override;
void reset_timers() override {}
void request_close() override; void request_close() override;
void queue_update_embedded_process() override { update_embedded_process(); } void queue_update_embedded_process() override { update_embedded_process(); }