From 4f04fbda1109ca5bd1866082d64e769c5015be0f Mon Sep 17 00:00:00 2001 From: Halit Can Date: Wed, 15 Jul 2026 15:17:25 +0300 Subject: [PATCH] fix(iced): clear selection handle on deselect and Escape - Deselect handler now clears selection_transform and transform_drag_handle - Escape key (MenuClose) now cancels active transform before closing menus - Ensures selection handles are properly cleaned up when deselecting --- hcie-iced-app/crates/hcie-iced-gui/src/app.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/hcie-iced-app/crates/hcie-iced-gui/src/app.rs b/hcie-iced-app/crates/hcie-iced-gui/src/app.rs index 829bdd8..9fb6ab3 100644 --- a/hcie-iced-app/crates/hcie-iced-gui/src/app.rs +++ b/hcie-iced-app/crates/hcie-iced-gui/src/app.rs @@ -1995,6 +1995,8 @@ impl HcieIcedApp { Message::Deselect => { self.documents[self.active_doc].selection_rect = None; self.documents[self.active_doc].selection_bounds = None; + self.documents[self.active_doc].selection_transform = None; + self.documents[self.active_doc].transform_drag_handle = TransformHandle::None; self.documents[self.active_doc].engine.selection_clear(); } Message::SelectInverse => { @@ -2535,6 +2537,16 @@ impl HcieIcedApp { && self.documents[self.active_doc].crop_state.active { self.documents[self.active_doc].crop_state.cancel(); + } else if self.documents[self.active_doc].selection_transform.is_some() { + // Cancel transform if active + let doc = &mut self.documents[self.active_doc]; + if let Some(original) = doc.transform_original.take() { + doc.selection_transform = Some(original); + } else { + doc.selection_transform = None; + } + doc.transform_drag_start = None; + doc.transform_drag_handle = TransformHandle::None; } else if self.active_menu.is_some() { self.active_menu = None; } else if self.active_dialog != ActiveDialog::None {