diff --git a/LICENSE_1_0.txt b/LICENSE similarity index 100% rename from LICENSE_1_0.txt rename to LICENSE diff --git a/include/nana/gui/widgets/treebox.hpp b/include/nana/gui/widgets/treebox.hpp index ae5e03b1..9901e1bf 100644 --- a/include/nana/gui/widgets/treebox.hpp +++ b/include/nana/gui/widgets/treebox.hpp @@ -421,6 +421,9 @@ namespace nana bool checkable() const; ///< Determinte whether the checkboxs are enabled. + /// Clears the contents + void clear(); + /// \brief Creates an icon scheme with the specified name. /// /// The icon scheme includes 3 images for node states. diff --git a/source/gui/widgets/treebox.cpp b/source/gui/widgets/treebox.cpp index c75aea52..76f6dc20 100644 --- a/source/gui/widgets/treebox.cpp +++ b/source/gui/widgets/treebox.cpp @@ -866,8 +866,7 @@ namespace nana item_proxy& item_proxy::check(bool ck) { trigger_->check(node_, ck ? checkstate::checked : checkstate::unchecked); - if(trigger_->draw()) - API::update_window(trigger_->impl()->data.widget_ptr->handle()); + trigger_->draw(); return *this; } @@ -1664,7 +1663,8 @@ namespace nana if (!impl_->attr.auto_draw) return false; - impl_->draw(false); + if(impl_->draw(false)) + API::update_window(impl_->data.widget_ptr->handle()); return true; } @@ -2198,6 +2198,13 @@ namespace nana return get_drawer_trigger().checkable(); } + void treebox::clear() + { + auto impl = get_drawer_trigger().impl(); + impl->attr.tree_cont.clear(); + get_drawer_trigger().draw(); + } + treebox::node_image_type& treebox::icon(const std::string& id) const { return get_drawer_trigger().icon(id); diff --git a/source/paint/graphics.cpp b/source/paint/graphics.cpp index 2114d69a..201d18a8 100644 --- a/source/paint/graphics.cpp +++ b/source/paint/graphics.cpp @@ -777,12 +777,22 @@ namespace paint ::ReleaseDC(reinterpret_cast(dst), dc); } #elif defined(NANA_X11) - Display * display = nana::detail::platform_spec::instance().open_display(); + auto & spec = nana::detail::platform_spec::instance(); + + Display * display = spec.open_display(); + + nana::detail::platform_scope_guard lock; + ::XCopyArea(display, impl_->handle->pixmap, reinterpret_cast(dst), impl_->handle->context, sx, sy, width, height, dx, dy); - ::XMapWindow(display, reinterpret_cast(dst)); + XWindowAttributes attr; + spec.set_error_handler(); + ::XGetWindowAttributes(display, reinterpret_cast(dst), &attr); + if(BadWindow != spec.rev_error_handler() && attr.map_state != IsUnmapped) + ::XMapWindow(display, reinterpret_cast(dst)); + ::XFlush(display); #endif }