diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_Group.cxx | 7 | ||||
| -rw-r--r-- | src/Fl_Scroll.cxx | 9 |
2 files changed, 9 insertions, 7 deletions
diff --git a/src/Fl_Group.cxx b/src/Fl_Group.cxx index f9bbcb541..a492a6ac9 100644 --- a/src/Fl_Group.cxx +++ b/src/Fl_Group.cxx @@ -513,8 +513,11 @@ void Fl_Group::insert(Fl_Widget &o, int index) { if (g == this) { // avoid expensive remove() and add() if we just move a widget within the group index = on_move(n, index); - if ((index == n) || (index < 0)) return; // this includes (children_ == 1) - if (index >= children_) index = children_ - 1; + if (index < 0) return; // don't move: requested by subclass + if (index > children_) + index = children_; + if (index > n) index--; // compensate for removal and re-insertion + if (index == n) return; // same position; this includes (children_ == 1) if (index > n) memmove(array_+n, array_+(n+1), (index-n) * sizeof(Fl_Widget*)); else diff --git a/src/Fl_Scroll.cxx b/src/Fl_Scroll.cxx index fd7f4fbae..bee0d7120 100644 --- a/src/Fl_Scroll.cxx +++ b/src/Fl_Scroll.cxx @@ -113,13 +113,12 @@ int Fl_Scroll::on_insert(Fl_Widget *candidate, int index) { Fl_Group calls this when a widget is moved within the list of children. We return a new index if the widget would be moved after the scrollbars. - \param oldIndex the current index of the child that will be moved - \param newIndex the new index of the child + \param old_index the current index of the child that will be moved + \param new_index the new index of the child \return new index, possibly corrected to avoid last two scrollbar entries */ -int Fl_Scroll::on_move(int oldIndex, int newIndex) { - // Compensate index for the widget that will be removed before it re-inserted - return on_insert( child(oldIndex), newIndex+1 ) - 1; +int Fl_Scroll::on_move(int old_index, int new_index) { + return on_insert(child(old_index), new_index); } /** |
