fix(ui): GUI button inline same row + same height as Synth/File/FX in TCP
This commit is contained in:
@@ -15,9 +15,15 @@ use tauri_plugin_dialog::{DialogExt, FilePath};
|
||||
use tauri_plugin_shell::process::{CommandChild, CommandEvent};
|
||||
use tauri_plugin_shell::ShellExt;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::sync::atomic::{AtomicBool, Ordering};
|
||||
use std::sync::Mutex;
|
||||
|
||||
mod shm;
|
||||
|
||||
/// App đang tắt (cửa sổ chính đã Destroyed) — pump thread phải dừng ngay,
|
||||
/// không respawn bridge mới sau khi sidecar đã bị giết (fix: app còn sống
|
||||
/// sau khi đóng window → pump thấy stall 3s → spawn bridge mới → orphan).
|
||||
static SHUTTING_DOWN: AtomicBool = AtomicBool::new(false);
|
||||
use shm::{Shm, ShmState};
|
||||
|
||||
struct EngineProcess(Mutex<Option<CommandChild>>);
|
||||
@@ -356,6 +362,10 @@ pub fn run() {
|
||||
let mut down_emitted = false;
|
||||
let mut restart_attempts = 0u32;
|
||||
loop {
|
||||
// App đang tắt (window Destroyed) — dừng pump, không respawn bridge.
|
||||
if SHUTTING_DOWN.load(Ordering::Relaxed) {
|
||||
break;
|
||||
}
|
||||
let state = pump_handle.state::<ShmState>();
|
||||
let guard = match state.0.lock() {
|
||||
Ok(g) => g,
|
||||
@@ -385,6 +395,10 @@ pub fn run() {
|
||||
AudioFrame { l: l.to_vec(), r: r.to_vec() },
|
||||
);
|
||||
} else if last_change.elapsed() >= std::time::Duration::from_secs(3) && !down_emitted {
|
||||
// Check lai truoc khi respawn — Destroyed co the vua set flag.
|
||||
if SHUTTING_DOWN.load(Ordering::Relaxed) {
|
||||
break;
|
||||
}
|
||||
down_emitted = true;
|
||||
if restart_attempts == 0 {
|
||||
restart_attempts += 1;
|
||||
@@ -483,6 +497,8 @@ pub fn run() {
|
||||
.on_window_event(|window, event| {
|
||||
// Terminate sidecar khi DAW window dong — tranh orphan process
|
||||
if let tauri::WindowEvent::Destroyed = event {
|
||||
// Dung pump thread: khong respawn bridge sau khi sidecar da bi giet.
|
||||
SHUTTING_DOWN.store(true, Ordering::Relaxed);
|
||||
let child = window
|
||||
.state::<EngineProcess>()
|
||||
.0
|
||||
@@ -506,6 +522,12 @@ pub fn run() {
|
||||
let _ = child.kill();
|
||||
println!("daw_vst_bridge sidecar terminated.");
|
||||
}
|
||||
// Cua so chinh da dong — ep app thoat han. Neu con window
|
||||
// phu/an giu event loop song, Tauri khong tu exit; exit(0)
|
||||
// ket thuc dut diem (pump da dung, khong con respawn bridge).
|
||||
if window.label() == "main" {
|
||||
window.app_handle().exit(0);
|
||||
}
|
||||
}
|
||||
})
|
||||
.run(tauri::generate_context!())
|
||||
|
||||
Reference in New Issue
Block a user