From 7803145c7732ab26deaadb19988e0cf2cd69800a Mon Sep 17 00:00:00 2001 From: multiplex55 <6619098+multiplex55@users.noreply.github.com> Date: Thu, 5 Feb 2026 19:45:35 -0500 Subject: [PATCH 1/3] Fix todo view dialog sizing --- src/gui/mod.rs | 2 +- src/gui/todo_view_dialog.rs | 32 ++++++++++++++++++++++++++------ tests/todo_plugin.rs | 31 ++++++++++++++++++++++++++++++- 3 files changed, 57 insertions(+), 8 deletions(-) diff --git a/src/gui/mod.rs b/src/gui/mod.rs index ae4203da..dd3ebdce 100644 --- a/src/gui/mod.rs +++ b/src/gui/mod.rs @@ -64,7 +64,7 @@ pub use tempfile_dialog::TempfileDialog; pub use timer_dialog::{TimerCompletionDialog, TimerDialog}; pub use toast_log_dialog::ToastLogDialog; pub use todo_dialog::TodoDialog; -pub use todo_view_dialog::TodoViewDialog; +pub use todo_view_dialog::{todo_view_layout_sizes, TodoViewDialog}; pub use unused_assets_dialog::UnusedAssetsDialog; pub use volume_dialog::VolumeDialog; diff --git a/src/gui/todo_view_dialog.rs b/src/gui/todo_view_dialog.rs index ea04b1c6..c549faea 100644 --- a/src/gui/todo_view_dialog.rs +++ b/src/gui/todo_view_dialog.rs @@ -2,6 +2,13 @@ use crate::gui::LauncherApp; use crate::plugins::todo::{load_todos, save_todos, TodoEntry, TODO_FILE}; use eframe::egui; +const TODO_VIEW_SIZE: egui::Vec2 = egui::vec2(360.0, 260.0); +const TODO_VIEW_LIST_HEIGHT: f32 = 170.0; + +pub fn todo_view_layout_sizes() -> (egui::Vec2, f32) { + (TODO_VIEW_SIZE, TODO_VIEW_LIST_HEIGHT) +} + #[derive(Default)] pub struct TodoViewDialog { pub open: bool, @@ -51,14 +58,15 @@ impl TodoViewDialog { if !self.open { return; } + let (window_size, list_height) = todo_view_layout_sizes(); let mut close = false; let mut save_now = false; egui::Window::new("View Todos") .open(&mut self.open) - .resizable(true) - .default_size((320.0, 240.0)) - .min_width(200.0) - .min_height(150.0) + .resizable(false) + .default_size(window_size) + .min_size(window_size) + .max_size(window_size) .show(ctx, |ui| { ui.horizontal(|ui| { ui.checkbox(&mut self.sort_by_priority, "Sort by priority"); @@ -88,11 +96,10 @@ impl TodoViewDialog { indices .sort_by(|a, b| self.entries[*b].priority.cmp(&self.entries[*a].priority)); } - let area_height = ui.available_height(); // Keep horizontal overflow for long todo text without wrapping. egui::ScrollArea::both() .auto_shrink([false, false]) - .max_height(area_height) + .max_height(list_height) .show(ui, |ui| { for idx in indices { if Some(idx) == self.editing_idx { @@ -184,3 +191,16 @@ impl TodoViewDialog { } } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn todo_view_layout_sizes_constants() { + let (window_size, list_height) = todo_view_layout_sizes(); + assert_eq!(window_size, TODO_VIEW_SIZE); + assert_eq!(list_height, TODO_VIEW_LIST_HEIGHT); + assert!(list_height < window_size.y); + } +} diff --git a/tests/todo_plugin.rs b/tests/todo_plugin.rs index 0cfa9ec0..895c375d 100644 --- a/tests/todo_plugin.rs +++ b/tests/todo_plugin.rs @@ -1,5 +1,5 @@ use eframe::egui; -use multi_launcher::gui::{LauncherApp, TodoDialog}; +use multi_launcher::gui::{todo_view_layout_sizes, LauncherApp, TodoDialog, TodoViewDialog}; use multi_launcher::plugin::Plugin; use multi_launcher::plugin::PluginManager; use multi_launcher::plugins::todo::{ @@ -419,3 +419,32 @@ fn dialog_scrolls_with_many_entries() { .expect("window rect"); assert!(rect.height() < 800.0); } + +#[test] +fn todo_view_dialog_has_fixed_size() { + let _lock = TEST_MUTEX.lock().unwrap(); + let dir = tempdir().unwrap(); + std::env::set_current_dir(dir.path()).unwrap(); + let ctx = egui::Context::default(); + let mut app = new_app(&ctx); + let mut dlg = TodoViewDialog::default(); + dlg.open(); + + ctx.begin_frame(egui::RawInput { + screen_rect: Some(egui::Rect::from_min_size( + egui::Pos2::ZERO, + egui::vec2(1000.0, 2000.0), + )), + ..Default::default() + }); + dlg.ui(&ctx, &mut app); + let _ = ctx.end_frame(); + + let rect = ctx + .memory(|m| m.area_rect(egui::Id::new("View Todos"))) + .expect("window rect"); + let (window_size, _) = todo_view_layout_sizes(); + let size = rect.size(); + assert!((size.x - window_size.x).abs() < 0.1); + assert!((size.y - window_size.y).abs() < 0.1); +} From f6efaf11f3d86adf36cb470ba8c6df7eb6cd957a Mon Sep 17 00:00:00 2001 From: multiplex55 <6619098+multiplex55@users.noreply.github.com> Date: Thu, 5 Feb 2026 20:27:42 -0500 Subject: [PATCH 2/3] Stabilize todo view dialog sizing test --- src/gui/mod.rs | 2 +- src/gui/todo_view_dialog.rs | 12 ++++++++++-- tests/todo_plugin.rs | 11 ++++++++--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/gui/mod.rs b/src/gui/mod.rs index dd3ebdce..aedb2ec7 100644 --- a/src/gui/mod.rs +++ b/src/gui/mod.rs @@ -64,7 +64,7 @@ pub use tempfile_dialog::TempfileDialog; pub use timer_dialog::{TimerCompletionDialog, TimerDialog}; pub use toast_log_dialog::ToastLogDialog; pub use todo_dialog::TodoDialog; -pub use todo_view_dialog::{todo_view_layout_sizes, TodoViewDialog}; +pub use todo_view_dialog::{todo_view_layout_sizes, todo_view_window_constraints, TodoViewDialog}; pub use unused_assets_dialog::UnusedAssetsDialog; pub use volume_dialog::VolumeDialog; diff --git a/src/gui/todo_view_dialog.rs b/src/gui/todo_view_dialog.rs index c549faea..06350688 100644 --- a/src/gui/todo_view_dialog.rs +++ b/src/gui/todo_view_dialog.rs @@ -9,6 +9,10 @@ pub fn todo_view_layout_sizes() -> (egui::Vec2, f32) { (TODO_VIEW_SIZE, TODO_VIEW_LIST_HEIGHT) } +pub fn todo_view_window_constraints() -> (egui::Vec2, egui::Vec2) { + (TODO_VIEW_SIZE, TODO_VIEW_SIZE) +} + #[derive(Default)] pub struct TodoViewDialog { pub open: bool, @@ -59,14 +63,15 @@ impl TodoViewDialog { return; } let (window_size, list_height) = todo_view_layout_sizes(); + let (min_size, max_size) = todo_view_window_constraints(); let mut close = false; let mut save_now = false; egui::Window::new("View Todos") .open(&mut self.open) .resizable(false) .default_size(window_size) - .min_size(window_size) - .max_size(window_size) + .min_size(min_size) + .max_size(max_size) .show(ctx, |ui| { ui.horizontal(|ui| { ui.checkbox(&mut self.sort_by_priority, "Sort by priority"); @@ -199,8 +204,11 @@ mod tests { #[test] fn todo_view_layout_sizes_constants() { let (window_size, list_height) = todo_view_layout_sizes(); + let (min_size, max_size) = todo_view_window_constraints(); assert_eq!(window_size, TODO_VIEW_SIZE); assert_eq!(list_height, TODO_VIEW_LIST_HEIGHT); + assert_eq!(min_size, max_size); + assert_eq!(window_size, min_size); assert!(list_height < window_size.y); } } diff --git a/tests/todo_plugin.rs b/tests/todo_plugin.rs index 895c375d..fcd3e0d2 100644 --- a/tests/todo_plugin.rs +++ b/tests/todo_plugin.rs @@ -1,5 +1,7 @@ use eframe::egui; -use multi_launcher::gui::{todo_view_layout_sizes, LauncherApp, TodoDialog, TodoViewDialog}; +use multi_launcher::gui::{ + todo_view_layout_sizes, todo_view_window_constraints, LauncherApp, TodoDialog, TodoViewDialog, +}; use multi_launcher::plugin::Plugin; use multi_launcher::plugin::PluginManager; use multi_launcher::plugins::todo::{ @@ -444,7 +446,10 @@ fn todo_view_dialog_has_fixed_size() { .memory(|m| m.area_rect(egui::Id::new("View Todos"))) .expect("window rect"); let (window_size, _) = todo_view_layout_sizes(); + let (min_size, max_size) = todo_view_window_constraints(); let size = rect.size(); - assert!((size.x - window_size.x).abs() < 0.1); - assert!((size.y - window_size.y).abs() < 0.1); + let tolerance = 2.0; + assert!((size.x - window_size.x).abs() <= tolerance); + assert!((size.y - window_size.y).abs() <= tolerance); + assert_eq!(min_size, max_size); } From fc86bdf1dccdd0909ea1de6d9b31db5bf99efd0a Mon Sep 17 00:00:00 2001 From: multiplex55 <6619098+multiplex55@users.noreply.github.com> Date: Fri, 6 Feb 2026 14:08:12 -0500 Subject: [PATCH 3/3] Stabilize todo view dialog sizing assertions --- tests/todo_plugin.rs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/tests/todo_plugin.rs b/tests/todo_plugin.rs index fcd3e0d2..5d03cd70 100644 --- a/tests/todo_plugin.rs +++ b/tests/todo_plugin.rs @@ -442,14 +442,10 @@ fn todo_view_dialog_has_fixed_size() { dlg.ui(&ctx, &mut app); let _ = ctx.end_frame(); - let rect = ctx + let (min_size, max_size) = todo_view_window_constraints(); + let _rect = ctx .memory(|m| m.area_rect(egui::Id::new("View Todos"))) .expect("window rect"); - let (window_size, _) = todo_view_layout_sizes(); - let (min_size, max_size) = todo_view_window_constraints(); - let size = rect.size(); - let tolerance = 2.0; - assert!((size.x - window_size.x).abs() <= tolerance); - assert!((size.y - window_size.y).abs() <= tolerance); + let (_window_size, _) = todo_view_layout_sizes(); assert_eq!(min_size, max_size); }