diff options
Diffstat (limited to 'src/Fl_Tree.cxx')
| -rw-r--r-- | src/Fl_Tree.cxx | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/Fl_Tree.cxx b/src/Fl_Tree.cxx index 5d29b7cfe..fe3a8e267 100644 --- a/src/Fl_Tree.cxx +++ b/src/Fl_Tree.cxx @@ -697,10 +697,13 @@ int Fl_Tree::deselect_all(Fl_Tree_Item *item, int docallback) { item = item ? item : first(); // NULL? use first() if ( ! item ) return(0); int count = 0; - for ( ; item; item = next(item) ) { - if ( item->is_selected() ) - if ( deselect(item, docallback) ) - ++count; + // Deselect item + if ( item->is_selected() ) + if ( deselect(item, docallback) ) + ++count; + // Deselect its children + for ( int t=0; t<item->children(); t++ ) { + count += deselect_all(item->child(t), docallback); // recurse } return(count); } @@ -726,10 +729,13 @@ int Fl_Tree::select_all(Fl_Tree_Item *item, int docallback) { item = item ? item : first(); // NULL? use first() if ( ! item ) return(0); int count = 0; - for ( ; item; item = next(item) ) { - if ( !item->is_selected() ) - if ( select(item, docallback) ) - ++count; + // Select item + if ( !item->is_selected() ) + if ( select(item, docallback) ) + ++count; + // Select its children + for ( int t=0; t<item->children(); t++ ) { + count += select_all(item->child(t), docallback); // recurse } return(count); } |
