I can't reproduce here with scilinux 6.3 + flwm.
As wrong as making child widgets larger than the window might be,
we should determine the cause and fix this, whatever it is,
as it certainly shouldn't hang.
Is the cpu spinning during the hang?
If so, there might be a resize loop going on, possibly induced
by the window manager, or within FLTK.
You might try replacing Fl_Window and Fl_Group instances
with custom classes, and implement resize() with printf()'s
to see if there's a resize() war going on. For instance, try
the following code. On my system the output is:
MyWindow::resize(910,558,100,100), old: 0,0,100,100
MyWindow::resize(910,558,100,100), old: 910,558,100,100
MyWindow::resize(910,558,100,100), old: 910,558,100,100
Here's the code with the implemented resize() / printf()s:
#include <stdio.h>
#include <FL/Fl_Window.H>
#include <FL/Fl_Group.H>
#include <FL/Fl.H>
class MyWindow : public Fl_Window {
public:
MyWindow(int W,int H,const char *L=0) : Fl_Window(W,H,L) { }
MyWindow(int X,int Y,int W,int H,const char *L=0) : Fl_Window(X,Y,W,H,L) { }
void resize(int X,int Y,int W,int H) {
printf("MyWindow::resize(%d,%d,%d,%d), old: %d,%d,%d,%d\n",
X,Y,W,H, x(),y(),w(),h());
Fl_Window::resize(X,Y,W,H);
}
};
class MyGroup : public Fl_Group {
public:
MyGroup(int X,int Y,int W,int H,const char *L=0) : Fl_Group(X,Y,W,H,L) { }
void resize(int X,int Y,int W,int H) {
printf("MyGroup::resize(%d,%d,%d,%d), old: %d,%d,%d,%d\n",
X,Y,W,H, x(),y(),w(),h());
Fl_Group::resize(X,Y,W,H);
}
};
int main()
{
MyWindow *win = new MyWindow(100, 100);
MyGroup *group = new MyGroup(0, 0, 300, 300);
win->resizable(group);
win->end();
win->show();
return Fl::run();
}