diff --git a/include/nana/any.hpp b/include/nana/any.hpp index 149be255..c9b3b33f 100644 --- a/include/nana/any.hpp +++ b/include/nana/any.hpp @@ -74,7 +74,7 @@ namespace nana any(Value && value, typename std::enable_if::value>::type * = nullptr, typename std::enable_if::value>::type* = nullptr) - : content_(new holder::type>(static_cast(value))) + : content_(new holder::type>(std::forward(value))) { } @@ -87,7 +87,7 @@ namespace nana template any& operator=(Value&& other) { - any(other).swap(*this); + any(std::forward(other)).swap(*this); return *this; } diff --git a/source/gui/widgets/listbox.cpp b/source/gui/widgets/listbox.cpp index 2db0e5ab..d04b6c65 100644 --- a/source/gui/widgets/listbox.cpp +++ b/source/gui/widgets/listbox.cpp @@ -2395,7 +2395,9 @@ namespace nana nana::rectangle r; if (rect_lister(r)) { - auto top = new_where.second * item_h + header_visible_px(); + //potential displacement due to partially visible first visible item + auto disp = origin.y - first_display().item * item_h; + auto top = new_where.second * item_h + header_visible_px() - disp; if (checkarea(item_xpos(r), static_cast(top)).is_hit(pos)) new_where.first = parts::checker; } @@ -5960,6 +5962,7 @@ namespace nana { internal_scope_guard lock; _m_ess().lister.sort_column(col, &reverse); + _m_ess().update(); } auto listbox::sort_col() const -> size_type diff --git a/source/gui/widgets/treebox.cpp b/source/gui/widgets/treebox.cpp index 377d0e7a..7e4a880e 100644 --- a/source/gui/widgets/treebox.cpp +++ b/source/gui/widgets/treebox.cpp @@ -1274,7 +1274,10 @@ namespace nana item_proxy item_proxy::operator++(int) { - return sibling(); + item_proxy ip(*this); + if(trigger_ && node_) + node_ = node_->next; + return ip; } item_proxy& item_proxy::operator*() @@ -1952,7 +1955,7 @@ namespace nana impl_->attr.tree_cont.for_each(shape.first, nl); auto const node = nl.node(); - if (!node) + if (!node || !node->child) return; switch (nl.what())