Fix Fl_Group::insert() and Fl_Scroll::on_move()

This commit is contained in:
Albrecht Schlosser
2022-11-20 14:11:19 +01:00
parent 8a53fc9611
commit be928430a6
2 changed files with 9 additions and 7 deletions
+5 -2
View File
@@ -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
+4 -5
View File
@@ -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);
}
/**