diff --git a/FL/Fl_Tree.H b/FL/Fl_Tree.H index 3768ab8e2..df3897080 100644 --- a/FL/Fl_Tree.H +++ b/FL/Fl_Tree.H @@ -63,6 +63,11 @@ /// The tree items may also contain other FLTK widgets, like buttons, input fields, /// or even "custom" widgets. /// +/// The callback() is invoked depending on the value of when(): +/// +/// - FL_WHEN_RELEASE -- callback invoked when left mouse button is released on an item +/// - FL_WHEN_CHANGED -- callback invoked when left mouse changes selection state +/// /// The simple way to define a tree: /// \code /// #include @@ -101,6 +106,8 @@ /// /// \image html tree-elements.png /// +/// \todo Needs handling of callbacks when items are procedurally select()ed +/// class Fl_Tree : public Fl_Group { Fl_Tree_Item *_root; // can be null! diff --git a/src/Fl_Tree.cxx b/src/Fl_Tree.cxx index 3578778ca..92b4c0123 100644 --- a/src/Fl_Tree.cxx +++ b/src/Fl_Tree.cxx @@ -279,6 +279,7 @@ int Fl_Tree::handle(int e) { break; } case FL_DRAG: { + if ( Fl::event_button() != FL_LEFT_MOUSE ) break; Fl_Tree_Item *o = _root->find_clicked(_prefs); if ( o ) { ret |= 1; // handled @@ -328,11 +329,9 @@ int Fl_Tree::handle(int e) { case FL_RELEASE: { if ( Fl::event_button() == FL_LEFT_MOUSE ) { ret |= 1; - } - if ( when() & FL_WHEN_RELEASE || - ( changed && when() & FL_WHEN_CHANGED) ) { - set_changed(); - do_callback((Fl_Widget*)this, user_data()); // item callback + if ( when() & FL_WHEN_RELEASE || ( this->changed() && (when() & FL_WHEN_CHANGED)) ) { + do_callback((Fl_Widget*)this, user_data()); // item callback + } } break; } diff --git a/test/tree.cxx b/test/tree.cxx index 8cef2551c..859542693 100644 --- a/test/tree.cxx +++ b/test/tree.cxx @@ -458,6 +458,7 @@ static void cb_whenmode_chooser(Fl_Choice*, void*) { switch ( whenmode_chooser->value() ) { case 0: tree->when(FL_WHEN_RELEASE); break; case 1: tree->when(FL_WHEN_CHANGED); break; + case 2: tree->when(FL_WHEN_NEVER); break; default: tree->when(FL_WHEN_RELEASE); break; }; } @@ -465,6 +466,7 @@ static void cb_whenmode_chooser(Fl_Choice*, void*) { Fl_Menu_Item menu_whenmode_chooser[] = { {"Release", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 11, 0}, {"Changed", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 11, 0}, + {"Never", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 11, 0}, {0,0,0,0,0,0,0,0,0} };