fix issue that event handler remains after closing

This commit is contained in:
Jinhao 2016-09-13 01:24:47 +08:00
parent 6eece91fce
commit 318f0ec570
2 changed files with 23 additions and 4 deletions

View File

@ -150,8 +150,8 @@ namespace nana
~widget_base(); ~widget_base();
window handle() const override; window handle() const override;
private: protected:
void _m_notify_destroy() override final; void _m_notify_destroy() override;
protected: protected:
window handle_{ nullptr }; window handle_{ nullptr };
}; };
@ -228,6 +228,13 @@ namespace nana
{ {
return *events_; return *events_;
} }
void _m_notify_destroy() override final
{
widget_base::_m_notify_destroy();
events_ = std::make_shared<Events>();
API::dev::set_events(handle_, events_);
}
private: private:
DrawerTrigger trigger_; DrawerTrigger trigger_;
std::shared_ptr<Events> events_; std::shared_ptr<Events> events_;
@ -281,6 +288,13 @@ namespace nana
{ {
return *events_; return *events_;
} }
void _m_notify_destroy() override final
{
widget_base::_m_notify_destroy();
events_ = std::make_shared<Events>();
API::dev::set_events(handle_, events_);
}
private: private:
std::shared_ptr<Events> events_; std::shared_ptr<Events> events_;
std::unique_ptr<scheme_type> scheme_; std::unique_ptr<scheme_type> scheme_;
@ -415,6 +429,13 @@ namespace nana
{ {
return *events_; return *events_;
} }
void _m_notify_destroy() override final
{
widget_base::_m_notify_destroy();
events_ = std::make_shared<Events>();
API::dev::set_events(handle_, events_);
}
private: private:
DrawerTrigger trigger_; DrawerTrigger trigger_;
std::shared_ptr<Events> events_; std::shared_ptr<Events> events_;

View File

@ -442,8 +442,6 @@ namespace nana
bool basic_window::set_events(const std::shared_ptr<general_events>& p) bool basic_window::set_events(const std::shared_ptr<general_events>& p)
{ {
if (annex.events_ptr)
return false;
annex.events_ptr = p; annex.events_ptr = p;
return true; return true;
} }