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
This commit is contained in:
2026-07-15 15:17:25 +03:00
parent 1fd0c5291a
commit 4f04fbda11
@@ -1995,6 +1995,8 @@ impl HcieIcedApp {
Message::Deselect => { Message::Deselect => {
self.documents[self.active_doc].selection_rect = None; self.documents[self.active_doc].selection_rect = None;
self.documents[self.active_doc].selection_bounds = 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(); self.documents[self.active_doc].engine.selection_clear();
} }
Message::SelectInverse => { Message::SelectInverse => {
@@ -2535,6 +2537,16 @@ impl HcieIcedApp {
&& self.documents[self.active_doc].crop_state.active && self.documents[self.active_doc].crop_state.active
{ {
self.documents[self.active_doc].crop_state.cancel(); 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() { } else if self.active_menu.is_some() {
self.active_menu = None; self.active_menu = None;
} else if self.active_dialog != ActiveDialog::None { } else if self.active_dialog != ActiveDialog::None {