From 927c625a7d3ee194d6bf4f9aa4bcb620b53f56db Mon Sep 17 00:00:00 2001 From: qPCR4vir Date: Wed, 7 Nov 2018 16:03:50 +0100 Subject: [PATCH] emit tree node selected only after mouse_down and checked this avoid inconsistent drawing or too much redrawing --- source/gui/widgets/treebox.cpp | 36 +++++++++++++++------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/source/gui/widgets/treebox.cpp b/source/gui/widgets/treebox.cpp index 3cbf61b7..de38a7b9 100644 --- a/source/gui/widgets/treebox.cpp +++ b/source/gui/widgets/treebox.cpp @@ -1863,7 +1863,7 @@ namespace nana } else if (node_state.selected != node_state.pressed_node) { - impl_->set_selected(node_state.pressed_node); + //impl_->set_selected(node_state.pressed_node); // todo: emit selected after checked } else return; @@ -1886,27 +1886,23 @@ namespace nana if(!nl.node()) return; - if (pressed_node == nl.node()) - { - if ((impl_->node_state.selected != nl.node()) && nl.item_body()) - { - impl_->set_selected(nl.node()); - if (impl_->make_adjust(impl_->node_state.selected, 1)) - impl_->adjust.scroll_timestamp = 1; - } - else if (nl.what() == component::crook) - { - checkstate cs = checkstate::unchecked; - if (checkstate::unchecked == nl.node()->value.second.checked) - cs = checkstate::checked; + if (pressed_node != nl.node()) + return; //Do not refresh - check(nl.node(), cs); - } - else - return; //Do not refresh + if (nl.what() == component::crook) + { + checkstate cs = checkstate::unchecked; + if (checkstate::unchecked == nl.node()->value.second.checked) + cs = checkstate::checked; + + check(nl.node(), cs); + } + if ((impl_->node_state.selected != nl.node()) && (nl.item_body() || nl.what() == component::crook)) + { + impl_->set_selected(nl.node()); + if (impl_->make_adjust(impl_->node_state.selected, 1)) + impl_->adjust.scroll_timestamp = 1; } - else - return; //Don't refresh impl_->draw(true); API::dev::lazy_refresh();