diff --git a/libs/ui/source/default_element_factory.cpp b/libs/ui/source/default_element_factory.cpp index a4c14745..91da60d1 100644 --- a/libs/ui/source/default_element_factory.cpp +++ b/libs/ui/source/default_element_factory.cpp @@ -311,17 +311,31 @@ namespace psemek::ui bool on_event(mouse_click const & e) override { - if (!mouse_ || !shape().contains(geom::cast(*mouse_))) + if (!mouse_) return false; if (e.button == mouse_button::left && mouse_) { - if (e.down) + if (e.down && shape().contains(geom::cast(*mouse_))) + { drag_ = *mouse_; - else + return true; + } + + if (!e.down && drag_) + { drag_ = std::nullopt; + return true; + } } - return true; + + if (e.button == mouse_button::left && mouse_) + { + if (shape().contains(geom::cast(*mouse_))) + return true; + } + + return false; } bool on_event(mouse_wheel const &) override