From 74dd5164d3da59c99efc451438091c6a40327e0b Mon Sep 17 00:00:00 2001 From: Greg Ercolano Date: Sun, 5 Dec 2021 12:26:25 -0800 Subject: Fixes STR #3352: "tiny window problem if child group larger than window" --- src/Fl_cocoa.mm | 8 +++++--- src/Fl_win32.cxx | 14 ++++++-------- src/Fl_x.cxx | 8 +++++--- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm index e15115026..5cf74ea3e 100644 --- a/src/Fl_cocoa.mm +++ b/src/Fl_cocoa.mm @@ -2954,9 +2954,11 @@ Fl_X* Fl_Cocoa_Window_Driver::makeWindow() } else { if (w->resizable()) { Fl_Widget *o = w->resizable(); - int minw = o->w(); if (minw > 100) minw = 100; - int minh = o->h(); if (minh > 100) minh = 100; - w->size_range(w->w() - o->w() + minw, w->h() - o->h() + minh, 0, 0); + int minw = w->w(); // minw is window's initial width + int minh = w->h(); // minh is window's initial height + int maxw = (o->w() == 0) ? minw : 0; // if resizable w()==0, disable resize w() + int maxh = (o->h() == 0) ? minh : 0; // if resizable h()==0, disable resize h() + w->size_range(minw, minh, maxw, maxh); if (w->border()) winstyle |= NSResizableWindowMask; } else { w->size_range(w->w(), w->h(), w->w(), w->h()); diff --git a/src/Fl_win32.cxx b/src/Fl_win32.cxx index 9abbb5d58..ec8cca9ae 100644 --- a/src/Fl_win32.cxx +++ b/src/Fl_win32.cxx @@ -2069,14 +2069,12 @@ Fl_X *Fl_WinAPI_Window_Driver::makeWindow() { } else { if (!size_range_set()) { if (w->resizable()) { - Fl_Widget *o = w->resizable(); - int minw = o->w(); - if (minw > 100) - minw = 100; - int minh = o->h(); - if (minh > 100) - minh = 100; - w->size_range(w->w() - o->w() + minw, w->h() - o->h() + minh, 0, 0); + Fl_Widget *o = w->resizable(); + int minw = w->w(); // minw is window's initial width + int minh = w->h(); // minh is window's initial height + int maxw = (o->w() == 0) ? minw : 0; // if resizable w()==0, disable resize w() + int maxh = (o->h() == 0) ? minh : 0; // if resizable h()==0, disable resize h() + w->size_range(minw, minh, maxw, maxh); } else { w->size_range(w->w(), w->h(), w->w(), w->h()); } diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx index a57316207..55c249ecd 100644 --- a/src/Fl_x.cxx +++ b/src/Fl_x.cxx @@ -2791,9 +2791,11 @@ void Fl_X11_Window_Driver::sendxjunk() { if (!size_range_set()) { // default size_range based on resizable(): if (w->resizable()) { Fl_Widget *o = w->resizable(); - int minw = o->w(); if (minw > 100) minw = 100; - int minh = o->h(); if (minh > 100) minh = 100; - w->size_range(w->w() - o->w() + minw, w->h() - o->h() + minh, 0, 0); + int minw = w->w(); // minw is window's initial width + int minh = w->h(); // minh is window's initial height + int maxw = (o->w() == 0) ? minw : 0; // if resizable w()==0, disable resize w() + int maxh = (o->h() == 0) ? minh : 0; // if resizable h()==0, disable resize h() + w->size_range(minw, minh, maxw, maxh); } else { w->size_range(w->w(), w->h(), w->w(), w->h()); } -- cgit v1.2.3