summaryrefslogtreecommitdiff
path: root/src/Fl_Tree.cxx
diff options
context:
space:
mode:
authorGreg Ercolano <erco@seriss.com>2012-04-19 08:50:04 +0000
committerGreg Ercolano <erco@seriss.com>2012-04-19 08:50:04 +0000
commit055a7d47ed3e41d1195827fa660ded232dbd8100 (patch)
tree759b0617f15562ff91f3e5358cea0c18443e2dac /src/Fl_Tree.cxx
parent55b3b19bbcefec749bf44b20772fe9b4b87b01a4 (diff)
STR# 2827 cont'd:
> Prevent 'changed' flag from being set during reselect > test/tree.fl: added chooser so user can test with item reselect enabled|disabled (Chooser deactivated if the ABI option is not enabled) git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@9358 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/Fl_Tree.cxx')
-rw-r--r--src/Fl_Tree.cxx38
1 files changed, 21 insertions, 17 deletions
diff --git a/src/Fl_Tree.cxx b/src/Fl_Tree.cxx
index b058df055..588e58894 100644
--- a/src/Fl_Tree.cxx
+++ b/src/Fl_Tree.cxx
@@ -102,7 +102,7 @@ Fl_Tree::Fl_Tree(int X, int Y, int W, int H, const char *L) : Fl_Group(X,Y,W,H,L
#if FLTK_ABI_VERSION >= 10302
// NEW
_lastselect = 0;
- _itemReselectMode = FL_TREE_SELECTABLE_ONCE;
+ _itemReselectMode = FL_TREE_SELECTABLE_ONCE;
#else
// OLD: data initialized static inside handle()
#endif
@@ -1019,24 +1019,23 @@ int Fl_Tree::is_close(const char *path) const {
///
int Fl_Tree::select(Fl_Tree_Item *item, int docallback) {
int alreadySelected = item->is_selected();
- if ( !alreadySelected
-#if FLTK_ABI_VERSION >= 10302
- || item_reselect_mode()==FL_TREE_SELECTABLE_ALWAYS
-#endif
- ) {
+ if ( !alreadySelected ) {
item->select();
set_changed();
if ( docallback ) {
- do_callback_for_item(item,
-#if FLTK_ABI_VERSION >= 10302
- alreadySelected ? FL_TREE_REASON_RESELECTED : FL_TREE_REASON_SELECTED);
-#else
- FL_TREE_REASON_SELECTED);
-#endif
+ do_callback_for_item(item, FL_TREE_REASON_SELECTED);
}
redraw();
return(1);
}
+#if FLTK_ABI_VERSION >= 10302
+ // NEW
+ if ( alreadySelected ) {
+ if ( (item_reselect_mode() == FL_TREE_SELECTABLE_ALWAYS) && docallback ) {
+ do_callback_for_item(item, FL_TREE_REASON_RESELECTED);
+ }
+ }
+#endif
return(0);
}
@@ -1198,13 +1197,18 @@ int Fl_Tree::select_only(Fl_Tree_Item *selitem, int docallback) {
int changed = 0;
for ( Fl_Tree_Item *item = first(); item; item = item->next() ) {
if ( item == selitem ) {
- if ( item->is_selected()
-
#if FLTK_ABI_VERSION >= 10302
- && item_reselect_mode()!=FL_TREE_SELECTABLE_ALWAYS
+ // NEW
+ if ( item->is_selected() ) { // already selected?
+ if ( item_reselect_mode() == FL_TREE_SELECTABLE_ALWAYS ) {
+ select(item, docallback); // handles callback with reason==reselect
+ }
+ continue; // leave 'changed' unmodified (nothing changed)
+ }
+#else
+ // OLD
+ if ( item->is_selected() ) continue; // don't count if already selected
#endif
-
- ) continue; // don't count if already selected
select(item, docallback);
++changed;
} else {