summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FL/Fl_Tree.H2
-rw-r--r--src/Fl_Tree.cxx17
2 files changed, 18 insertions, 1 deletions
diff --git a/FL/Fl_Tree.H b/FL/Fl_Tree.H
index d6f7bc1b2..7a9111114 100644
--- a/FL/Fl_Tree.H
+++ b/FL/Fl_Tree.H
@@ -199,6 +199,8 @@ class FL_EXPORT Fl_Tree : public Fl_Group {
Fl_Tree_Prefs _prefs; // all the tree's settings
int _scrollbar_size; // size of scrollbar trough
+ void fix_scrollbar_order();
+
protected:
Fl_Scrollbar *_vscroll; ///< Vertical scrollbar
void item_clicked(Fl_Tree_Item* val);
diff --git a/src/Fl_Tree.cxx b/src/Fl_Tree.cxx
index fa78940a1..d70b5539f 100644
--- a/src/Fl_Tree.cxx
+++ b/src/Fl_Tree.cxx
@@ -329,6 +329,7 @@ int Fl_Tree::handle(int e) {
/// Standard FLTK draw() method, handles draws the tree widget.
void Fl_Tree::draw() {
+ fix_scrollbar_order();
// Let group draw box+label but *NOT* children.
// We handle drawing children ourselves by calling each item's draw()
//
@@ -381,9 +382,11 @@ void Fl_Tree::draw() {
_vscroll->hide();
}
}
- fl_push_clip(cx,cy,cw,ch);
+ // Draw children
+ fl_push_clip(cx,cy,cw-(_vscroll->visible()?_vscroll->w():0),ch);
Fl_Group::draw_children(); // draws any FLTK children set via Fl_Tree::widget()
fl_pop_clip();
+ draw_child(*_vscroll); // draw scroll last
}
/// Print the tree as 'ascii art' to stdout.
@@ -1758,6 +1761,18 @@ void Fl_Tree::load(Fl_Preferences &prefs)
}
}
+/// Ensure the scrollbars are the last children
+void Fl_Tree::fix_scrollbar_order() {
+ Fl_Widget** a = (Fl_Widget**)array();
+ if (a[children()-1] != _vscroll) {
+ int i,j;
+ for (i = j = 0; j < children(); j++) {
+ if (a[j] != _vscroll) a[i++] = a[j];
+ }
+ a[i++] = _vscroll;
+ }
+}
+
//
// End of "$Id$".
//