diff options
Diffstat (limited to '')
| -rw-r--r-- | src/main.rs | 7 | ||||
| -rw-r--r-- | src/panes/element_list.rs | 8 | ||||
| -rwxr-xr-x | src/types/rendered_element.rs | 1 |
3 files changed, 12 insertions, 4 deletions
diff --git a/src/main.rs b/src/main.rs index 4df5922..aaddf1f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -231,16 +231,19 @@ impl IcedBuilder { Message::HandleNew(name, zones) => { let ids: Vec<Id> = zones.into_iter().map(|z| z.0).collect(); if !ids.is_empty() { + self.is_dirty = true; + let action = Action::new( &ids, self.project.element_tree.as_ref(), None, ); + let result = name.handle_action( self.project.element_tree.as_mut(), action, ); - self.is_dirty = true; + match result { Ok(Some(ref element)) => { self.project.element_tree = Some(element.clone()); @@ -269,10 +272,12 @@ impl IcedBuilder { self.project.element_tree.as_ref(), Some(element.id()), ); + let result = element.handle_action( self.project.element_tree.as_mut(), action, ); + if let Err(error) = result { self.dialog = Dialog::error(error); } diff --git a/src/panes/element_list.rs b/src/panes/element_list.rs index 5e7d99d..b18c275 100644 --- a/src/panes/element_list.rs +++ b/src/panes/element_list.rs @@ -14,9 +14,11 @@ fn items_list_view<'a>() -> Element<'a, Message> { for item in ElementName::ALL { column = column.push( - droppable(text(item.clone().to_string())).on_drop(|point, rect| { - Message::DropNewElement(item.clone(), point, rect) - }), + droppable(text(item.clone().to_string())) + .drag_center(true) + .on_drop(|point, rect| { + Message::DropNewElement(item.clone(), point, rect) + }), ); } diff --git a/src/types/rendered_element.rs b/src/types/rendered_element.rs index be2a004..9f51e7e 100755 --- a/src/types/rendered_element.rs +++ b/src/types/rendered_element.rs @@ -392,6 +392,7 @@ impl<'a> From<RenderedElement> for Element<'a, Message> { iced_drop::droppable(content) .id(value.id().clone()) .drag_hide(true) + .drag_center(true) .on_drop(move |point, rect| { Message::MoveElement(value.clone(), point, rect) }) |
