summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael R Sweet <michael.r.sweet@gmail.com>1999-02-17 16:31:47 +0000
committerMichael R Sweet <michael.r.sweet@gmail.com>1999-02-17 16:31:47 +0000
commitc8dbb60e8042d4384fb94168864a1cf6593ad350 (patch)
tree46f55af3df563db098c366e03ee6fb11ede4468b
parent334494d06876cdd2c5658fc40d8f1332e076f8aa (diff)
Fix from Bill for infinite loop problem when moving groups of widgets.
git-svn-id: file:///fltk/svn/fltk/trunk@281 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
-rw-r--r--fluid/Fl_Type.cxx28
1 files changed, 18 insertions, 10 deletions
diff --git a/fluid/Fl_Type.cxx b/fluid/Fl_Type.cxx
index 3fb77ff61..49b814bf5 100644
--- a/fluid/Fl_Type.cxx
+++ b/fluid/Fl_Type.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: Fl_Type.cxx,v 1.5 1999/01/07 19:17:10 mike Exp $"
+// "$Id: Fl_Type.cxx,v 1.6 1999/02/17 16:31:47 mike Exp $"
//
// Widget type code for the Fast Light Tool Kit (FLTK).
//
@@ -560,19 +560,27 @@ void Fl_Type::move_before(Fl_Type* g) {
// move selected widgets in their parent's list:
void earlier_cb(Fl_Widget*,void*) {
Fl_Type *f;
- for (f = Fl_Type::first; f; f=f->next) if (f->selected) {
- Fl_Type *g;
- for (g = f->prev; g && g->level > f->level; g = g->prev);
- if (g && g->level == f->level) f->move_before(g);
+ for (f = Fl_Type::first; f; ) {
+ Fl_Type* nxt = f->next;
+ if (f->selected) {
+ Fl_Type* g;
+ for (g = f->prev; g && g->level > f->level; g = g->prev);
+ if (g && g->level == f->level && !g->selected) f->move_before(g);
+ }
+ f = nxt;
}
}
void later_cb(Fl_Widget*,void*) {
Fl_Type *f;
- for (f = Fl_Type::last; f; f=f->prev) if (f->selected) {
- Fl_Type *g;
- for (g = f->next; g && g->level > f->level; g = g->next);
- if (g && g->level == f->level && !g->selected) g->move_before(f);
+ for (f = Fl_Type::last; f; ) {
+ Fl_Type* prv = f->prev;
+ if (f->selected) {
+ Fl_Type* g;
+ for (g = f->next; g && g->level > f->level; g = g->next);
+ if (g && g->level == f->level && !g->selected) g->move_before(f);
+ }
+ f = prv;
}
}
@@ -640,5 +648,5 @@ void Fl_Type::read_property(const char *c) {
int Fl_Type::read_fdesign(const char*, const char*) {return 0;}
//
-// End of "$Id: Fl_Type.cxx,v 1.5 1999/01/07 19:17:10 mike Exp $".
+// End of "$Id: Fl_Type.cxx,v 1.6 1999/02/17 16:31:47 mike Exp $".
//