fix(ui): GUI button inline same row + same height as Synth/File/FX in TCP

This commit is contained in:
2026-08-14 08:04:33 +07:00
parent 7a8122f99d
commit 29f7fecb35
6 changed files with 221 additions and 144 deletions
+22
View File
@@ -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!())