From 72415b534de36888e1a393847ec38544cdbbc3f7 Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Thu, 17 Nov 2022 08:34:06 +0100 Subject: Fix rearranging children in Fl_Scroll (#546) Implement Fl_Scroll::on_move() Fix indexing in Fl_Group::on_move() --- src/Fl_Scroll.cxx | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/Fl_Scroll.cxx') diff --git a/src/Fl_Scroll.cxx b/src/Fl_Scroll.cxx index f218915a8..fd7f4fbae 100644 --- a/src/Fl_Scroll.cxx +++ b/src/Fl_Scroll.cxx @@ -104,6 +104,24 @@ int Fl_Scroll::on_insert(Fl_Widget *candidate, int index) { return index; } +/** + Change new position of a child before it is moved. + + Fix new position if the new child is planned to be moved after the scrollbars. + We can assume that the scrollbars are always the last two children! + + 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 + \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; +} + /** Removes the widget at \p index from the group and deletes it. -- cgit v1.2.3