diff --git a/include/nana/gui/widgets/widget.hpp b/include/nana/gui/widgets/widget.hpp index 5e1ad652..992a780f 100644 --- a/include/nana/gui/widgets/widget.hpp +++ b/include/nana/gui/widgets/widget.hpp @@ -150,8 +150,8 @@ namespace nana ~widget_base(); window handle() const override; - private: - void _m_notify_destroy() override final; + protected: + void _m_notify_destroy() override; protected: window handle_{ nullptr }; }; @@ -228,6 +228,13 @@ namespace nana { return *events_; } + + void _m_notify_destroy() override final + { + widget_base::_m_notify_destroy(); + events_ = std::make_shared(); + API::dev::set_events(handle_, events_); + } private: DrawerTrigger trigger_; std::shared_ptr events_; @@ -281,6 +288,13 @@ namespace nana { return *events_; } + + void _m_notify_destroy() override final + { + widget_base::_m_notify_destroy(); + events_ = std::make_shared(); + API::dev::set_events(handle_, events_); + } private: std::shared_ptr events_; std::unique_ptr scheme_; @@ -415,6 +429,13 @@ namespace nana { return *events_; } + + void _m_notify_destroy() override final + { + widget_base::_m_notify_destroy(); + events_ = std::make_shared(); + API::dev::set_events(handle_, events_); + } private: DrawerTrigger trigger_; std::shared_ptr events_; diff --git a/source/gui/detail/basic_window.cpp b/source/gui/detail/basic_window.cpp index 525f5e57..715f7158 100644 --- a/source/gui/detail/basic_window.cpp +++ b/source/gui/detail/basic_window.cpp @@ -442,8 +442,6 @@ namespace nana bool basic_window::set_events(const std::shared_ptr& p) { - if (annex.events_ptr) - return false; annex.events_ptr = p; return true; }