fix a crash
a crash caused by a splitbar would be created by place when the window is destorying; add some checks whether the parent is destorying in create widget functions
This commit is contained in:
parent
1600d73856
commit
ff7a1f9510
@ -213,6 +213,9 @@ namespace detail
|
||||
|
||||
if (impl_->wd_register.available(owner))
|
||||
{
|
||||
if (owner->flags.destroying)
|
||||
throw std::logic_error("the specified owner is destory");
|
||||
|
||||
native = (owner->other.category == category::frame_tag::value ?
|
||||
owner->other.attribute.frame->container : owner->root_widget->root);
|
||||
r.x += owner->pos_root.x;
|
||||
@ -303,6 +306,9 @@ namespace detail
|
||||
if (impl_->wd_register.available(parent) == false)
|
||||
throw std::invalid_argument("invalid parent/owner handle");
|
||||
|
||||
if (parent->flags.destroying)
|
||||
throw std::logic_error("the specified parent is destory");
|
||||
|
||||
auto wdg_notifier = widget_notifier_interface::get_notifier(wdg);
|
||||
|
||||
core_window_t * wd;
|
||||
|
@ -776,10 +776,13 @@ namespace nana
|
||||
//It will delete the element and recollocate when the window destroyed.
|
||||
event_handle _m_make_destroy(window wd)
|
||||
{
|
||||
return API::events(wd).destroy.connect([this](const arg_destroy& arg)
|
||||
return API::events(wd).destroy.connect([this, wd](const arg_destroy& arg)
|
||||
{
|
||||
if (erase_element(elements, arg.window_handle))
|
||||
{
|
||||
if (!API::is_destroying(API::get_parent_window(wd)))
|
||||
place_ptr_->collocate();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -1524,6 +1527,9 @@ namespace nana
|
||||
private:
|
||||
void collocate(window wd) override
|
||||
{
|
||||
if (API::is_destroying(wd))
|
||||
return;
|
||||
|
||||
if (splitter_.empty())
|
||||
{
|
||||
splitter_.create(wd);
|
||||
|
Loading…
x
Reference in New Issue
Block a user