FLTK logo

[master] 3a7c9fe - STR 2639 Fixes Fl_Pack resize behaviour

FLTK matrix user chat room
(using Element browser app)   FLTK gitter user chat room   GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 All Forums  |  Back to fltk.commit  ]
 
Previous Message ]Next Message ]

[master] 3a7c9fe - STR 2639 Fixes Fl_Pack resize behaviour "Matthias Melcher" Jan 23, 2023  
 
commit 3a7c9fe9781067075c38393b6599d8095a777483
Author:     Matthias Melcher <github@matthiasm.com>
AuthorDate: Mon Jan 23 16:08:51 2023 +0100
Commit:     Matthias Melcher <github@matthiasm.com>
CommitDate: Mon Jan 23 16:08:59 2023 +0100

    STR 2639 Fixes Fl_Pack resize behaviour
    
    FLUID cleanups
    FLUID Fl_Pack support improvement
    FLUID fix error in handling live mode resizables

 FL/Fl_Pack.H                  |   5 +
 fltk-options/fltk-options.cxx |   1 +
 fluid/Fl_Group_Type.cxx       | 274 +++++++++++++++++++-----------------------
 fluid/Fl_Group_Type.h         |  46 ++++---
 fluid/Fl_Widget_Type.cxx      |  19 ++-
 fluid/Fl_Widget_Type.h        |   1 +
 fluid/Fl_Window_Type.cxx      |  12 +-
 src/Fl_Pack.cxx               |  14 +++
 8 files changed, 191 insertions(+), 181 deletions(-)

diff --git FL/Fl_Pack.H FL/Fl_Pack.H
index 1e38c41..1f8db01 100644
--- FL/Fl_Pack.H
+++ FL/Fl_Pack.H
@@ -65,16 +65,19 @@ protected:
 
 public:
   Fl_Pack(int X, int Y, int W, int H, const char *L = 0);
+
   /**
     Gets the number of extra pixels of blank space that are added
     between the children.
   */
   int spacing() const {return spacing_;}
+
   /**
     Sets the number of extra pixels of blank space that are added
     between the children.
   */
   void spacing(int i) {spacing_ = i;}
+
   /** Returns non-zero if Fl_Pack alignment is horizontal.
 
     \returns non-zero if Fl_Pack alignment is horizontal (Fl_Pack::HORIZONTAL)
@@ -88,6 +91,8 @@ public:
     See class Fl_Pack documentation for details.
   */
   uchar horizontal() const {return type();}
+
+  void resize(int X, int Y, int W, int H) FL_OVERRIDE;
 };
 
 #endif
diff --git fltk-options/fltk-options.cxx fltk-options/fltk-options.cxx
index 8107d91..b0fe886 100644
--- fltk-options/fltk-options.cxx
+++ fltk-options/fltk-options.cxx
@@ -615,6 +615,7 @@ void select_headline_cb(Fl_Widget*, void*) {
     }
     g_option_scroll->label("All Options");
   }
+  g_option_scroll->scroll_to(-FO_SCROLL_W+Fl::box_dy(g_option_scroll->box()), 0);
   g_window->redraw();
 }
 
diff --git fluid/Fl_Group_Type.cxx fluid/Fl_Group_Type.cxx
index 21ab550..8db3076 100644
--- fluid/Fl_Group_Type.cxx
+++ fluid/Fl_Group_Type.cxx
@@ -37,14 +37,16 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+// ---- Fl_Group_Type -------------------------------------------------- MARK: -
+
+Fl_Group_Type Fl_Group_type;    // the "factory"
+
 // Override group's resize behavior to do nothing to children:
 void igroup::resize(int X, int Y, int W, int H) {
   Fl_Widget::resize(X,Y,W,H);
   redraw();
 }
 
-Fl_Group_Type Fl_Group_type;    // the "factory"
-
 /**
  Create and add a new Group node.
  \param[in] strategy add after current or as last child
@@ -129,8 +131,6 @@ void ungroup_cb(Fl_Widget *, void *) {
   set_modflag(1);
 }
 
-////////////////////////////////////////////////////////////////
-
 void Fl_Group_Type::write_code1() {
   Fl_Widget_Type::write_code1();
 }
@@ -145,16 +145,63 @@ void Fl_Group_Type::write_code2() {
   write_block_close();
 }
 
-////////////////////////////////////////////////////////////////
+// This is called when o is created.  If it is in the tab group make
+// sure it is visible:
+void Fl_Group_Type::add_child(Fl_Type* cc, Fl_Type* before) {
+  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
+  Fl_Widget* b = before ? ((Fl_Widget_Type*)before)->o : 0;
+  ((Fl_Group*)o)->insert(*(c->o), b);
+  o->redraw();
+}
+
+// This is called when o is deleted.  If it is in the tab group make
+// sure it is not visible:
+void Fl_Group_Type::remove_child(Fl_Type* cc) {
+  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
+  ((Fl_Group*)o)->remove(c->o);
+  o->redraw();
+}
+
+// move, don't change selected value:
+void Fl_Group_Type::move_child(Fl_Type* cc, Fl_Type* before) {
+  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
+  Fl_Widget* b = before ? ((Fl_Widget_Type*)before)->o : 0;
+  ((Fl_Group*)o)->insert(*(c->o), b);
+  o->redraw();
+}
+
+// live mode support
+Fl_Widget* Fl_Group_Type::enter_live_mode(int) {
+  Fl_Group *grp = new Fl_Group(o->x(), o->y(), o->w(), o->h());
+  return propagate_live_mode(grp);
+}
+
+void Fl_Group_Type::leave_live_mode() {
+}
+
+/**
+ copy all properties from the edit widget to the live widget
+ */
+void Fl_Group_Type::copy_properties() {
+  Fl_Widget_Type::copy_properties();
+}
+
+// ---- Fl_Pack_Type --------------------------------------------------- MARK: -
+
+Fl_Pack_Type Fl_Pack_type;      // the "factory"
 
 const char pack_type_name[] = "Fl_Pack";
 
 Fl_Menu_Item pack_type_menu[] = {
   {"HORIZONTAL", 0, 0, (void*)Fl_Pack::HORIZONTAL},
   {"VERTICAL", 0, 0, (void*)Fl_Pack::VERTICAL},
-  {0}};
+  {0}
+};
 
-Fl_Pack_Type Fl_Pack_type;      // the "factory"
+Fl_Widget *Fl_Pack_Type::enter_live_mode(int) {
+  Fl_Group *grp = new Fl_Pack(o->x(), o->y(), o->w(), o->h());
+  return propagate_live_mode(grp);
+}
 
 void Fl_Pack_Type::copy_properties()
 {
@@ -163,7 +210,7 @@ void Fl_Pack_Type::copy_properties()
   d->spacing(s->spacing());
 }
 
-////////////////////////////////////////////////////////////////
+// ---- Fl_Flex_Type --------------------------------------------------- MARK: -
 
 const char flex_type_name[] = "Fl_Flex";
 
@@ -176,14 +223,7 @@ Fl_Flex_Type Fl_Flex_type;      // the "factory"
 
 Fl_Widget *Fl_Flex_Type::enter_live_mode(int) {
   Fl_Flex *grp = new Fl_Flex(o->x(), o->y(), o->w(), o->h());
-  live_widget = grp;
-  copy_properties();
-  suspend_auto_layout = 1;
-  Fl_Type *n;
-  for (n = next; n && n->level > level; n = n->next) {
-    if (n->level == level+1)
-      n->enter_live_mode();
-  }
+  propagate_live_mode(grp);
   suspend_auto_layout = 0;
   Fl_Flex *d = grp, *s =(Fl_Flex*)o;
   int nc = s->children(), nd = d->children();
@@ -194,8 +234,7 @@ Fl_Widget *Fl_Flex_Type::enter_live_mode(int) {
       d->fixed(d->child(i), s->horizontal() ? dc->w() : dc->h());
     }
   }
-  grp->end(); //this also updates the layout
-  return live_widget;
+  return grp;
 }
 
 void Fl_Flex_Type::copy_properties()
@@ -383,7 +422,11 @@ int Fl_Flex_Type::is_fixed(Fl_Type *t) {
   return f->fixed(w);
 }
 
-////////////////////////////////////////////////////////////////
+// ---- Fl_Table_Type -------------------------------------------------- MARK: -
+
+Fl_Table_Type Fl_Table_type;    // the "factory"
+
+const char table_type_name[] = "Fl_Table";
 
 static const int MAX_ROWS = 14;
 static const int MAX_COLS = 7;
@@ -461,16 +504,46 @@ public:
   }
 };
 
-const char table_type_name[] = "Fl_Table";
-
-Fl_Table_Type Fl_Table_type;    // the "factory"
-
 Fl_Widget *Fl_Table_Type::widget(int X,int Y,int W,int H) {
   Fluid_Table *table = new Fluid_Table(X, Y, W, H);
   return table;
 }
 
-////////////////////////////////////////////////////////////////
+void Fl_Table_Type::add_child(Fl_Type* cc, Fl_Type* before) {
+  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
+  Fl_Widget* b = before ? ((Fl_Widget_Type*)before)->o : 0;
+  if (((Fl_Table*)o)->children()==1) { // the FLuid_Table has one extra child
+    fl_message("Inserting child widgets into an Fl_Table is not recommended.\n"
+               "Please refer to the documentation on Fl_Table.");
+  }
+  ((Fl_Table*)o)->insert(*(c->o), b);
+  o->redraw();
+}
+
+void Fl_Table_Type::remove_child(Fl_Type* cc) {
+  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
+  ((Fl_Table*)o)->remove(*(c->o));
+  o->redraw();
+}
+
+void Fl_Table_Type::move_child(Fl_Type* cc, Fl_Type* before) {
+  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
+  Fl_Widget* b = before ? ((Fl_Widget_Type*)before)->o : 0;
+  ((Fl_Table*)o)->insert(*(c->o), b);
+  o->redraw();
+}
+
+Fl_Widget *Fl_Table_Type::enter_live_mode(int) {
+  Fl_Group *grp = new Fluid_Table(o->x(), o->y(), o->w(), o->h());
+  live_widget = grp;
+  copy_properties();
+  grp->end();
+  return live_widget;
+}
+
+// ---- Fl_Tabs_Type --------------------------------------------------- MARK: -
+
+Fl_Tabs_Type Fl_Tabs_type;      // the "factory"
 
 const char tabs_type_name[] = "Fl_Tabs";
 
@@ -480,8 +553,6 @@ void itabs::resize(int X, int Y, int W, int H) {
   redraw();
 }
 
-Fl_Tabs_Type Fl_Tabs_type;      // the "factory"
-
 // This is called when user clicks on a widget in the window.  See
 // if it is a tab title, and adjust visibility and return new selection:
 // If none, return o unchanged:
@@ -501,53 +572,10 @@ Fl_Type* Fl_Tabs_Type::click_test(int x, int y) {
   return (Fl_Type*)(t->value()->user_data());
 }
 
-////////////////////////////////////////////////////////////////
-
-const char wizard_type_name[] = "Fl_Wizard";
-
-// Override group's resize behavior to do nothing to children:
-void iwizard::resize(int X, int Y, int W, int H) {
-  Fl_Widget::resize(X,Y,W,H);
-  redraw();
-}
-
-Fl_Wizard_Type Fl_Wizard_type;  // the "factory"
-
-// This is called when o is created.  If it is in the tab group make
-// sure it is visible:
-
-void Fl_Group_Type::add_child(Fl_Type* cc, Fl_Type* before) {
-  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
-  Fl_Widget* b = before ? ((Fl_Widget_Type*)before)->o : 0;
-  ((Fl_Group*)o)->insert(*(c->o), b);
-  o->redraw();
-}
-
 void Fl_Tabs_Type::add_child(Fl_Type* c, Fl_Type* before) {
   Fl_Group_Type::add_child(c, before);
 }
 
-void Fl_Table_Type::add_child(Fl_Type* cc, Fl_Type* before) {
-  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
-  Fl_Widget* b = before ? ((Fl_Widget_Type*)before)->o : 0;
-  if (((Fl_Table*)o)->children()==1) { // the FLuid_Table has one extra child
-    fl_message("Inserting child widgets into an Fl_Table is not recommended.\n"
-               "Please refer to the documentation on Fl_Table.");
-  }
-  ((Fl_Table*)o)->insert(*(c->o), b);
-  o->redraw();
-}
-
-
-// This is called when o is deleted.  If it is in the tab group make
-// sure it is not visible:
-
-void Fl_Group_Type::remove_child(Fl_Type* cc) {
-  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
-  ((Fl_Group*)o)->remove(c->o);
-  o->redraw();
-}
-
 void Fl_Tabs_Type::remove_child(Fl_Type* cc) {
   Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
   Fl_Tabs *t = (Fl_Tabs*)o;
@@ -555,95 +583,19 @@ void Fl_Tabs_Type::remove_child(Fl_Type* cc) {
   Fl_Group_Type::remove_child(c);
 }
 
-void Fl_Table_Type::remove_child(Fl_Type* cc) {
-  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
-  ((Fl_Table*)o)->remove(*(c->o));
-  o->redraw();
-}
-
-// move, don't change selected value:
-
-void Fl_Group_Type::move_child(Fl_Type* cc, Fl_Type* before) {
-  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
-  Fl_Widget* b = before ? ((Fl_Widget_Type*)before)->o : 0;
-  ((Fl_Group*)o)->insert(*(c->o), b);
-  o->redraw();
-}
-
-void Fl_Table_Type::move_child(Fl_Type* cc, Fl_Type* before) {
-  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
-  Fl_Widget* b = before ? ((Fl_Widget_Type*)before)->o : 0;
-  ((Fl_Table*)o)->insert(*(c->o), b);
-  o->redraw();
-}
-
-////////////////////////////////////////////////////////////////
-// live mode support
-
-Fl_Widget *Fl_Group_Type::enter_live_mode(int) {
-  Fl_Group *grp = new Fl_Group(o->x(), o->y(), o->w(), o->h());
-  live_widget = grp;
-  copy_properties();
-  Fl_Type *n;
-  for (n = next; n && n->level > level; n = n->next) {
-    if (n->level == level+1)
-      n->enter_live_mode();
-  }
-  grp->end();
-  return live_widget;
-}
-
 Fl_Widget *Fl_Tabs_Type::enter_live_mode(int) {
   Fl_Tabs *grp = new Fl_Tabs(o->x(), o->y(), o->w(), o->h());
-  live_widget = grp;
-  copy_properties();
-  Fl_Type *n;
-  for (n = next; n && n->level > level; n = n->next) {
-    if (n->level == level+1)
-      n->enter_live_mode();
-  }
-  grp->end();
+  propagate_live_mode(grp);
   grp->value(((Fl_Tabs*)o)->value());
-  return live_widget;
-}
-
-Fl_Widget *Fl_Table_Type::enter_live_mode(int) {
-  Fl_Group *grp = new Fluid_Table(o->x(), o->y(), o->w(), o->h());
-  live_widget = grp;
-  copy_properties();
-  grp->end();
-  return live_widget;
+  return grp;
 }
 
-void Fl_Group_Type::leave_live_mode() {
-}
-
-/**
- copy all properties from the edit widget to the live widget
- */
-void Fl_Group_Type::copy_properties() {
-  Fl_Widget_Type::copy_properties();
-}
+// ---- Fl_Scroll_Type ------------------------------------------------- MARK: -
 
-////////////////////////////////////////////////////////////////
-// some other group subclasses that fluid does not treat specially:
+Fl_Scroll_Type Fl_Scroll_type;  // the "factory"
 
 const char scroll_type_name[] = "Fl_Scroll";
 
-Fl_Widget *Fl_Scroll_Type::enter_live_mode(int) {
-  Fl_Group *grp = new Fl_Scroll(o->x(), o->y(), o->w(), o->h());
-  grp->show();
-  live_widget = grp;
-  copy_properties();
-  Fl_Type *n;
-  for (n = next; n && n->level > level; n = n->next) {
-    if (n->level == level+1)
-      n->enter_live_mode();
-  }
-  grp->end();
-  return live_widget;
-}
-
 Fl_Menu_Item scroll_type_menu[] = {
   {"BOTH", 0, 0, 0/*(void*)Fl_Scroll::BOTH*/},
   {"HORIZONTAL", 0, 0, (void*)Fl_Scroll::HORIZONTAL},
@@ -653,7 +605,11 @@ Fl_Menu_Item scroll_type_menu[] = {
   {"BOTH_ALWAYS", 0, 0, (void*)Fl_Scroll::BOTH_ALWAYS},
   {0}};
 
-Fl_Scroll_Type Fl_Scroll_type;  // the "factory"
+Fl_Widget *Fl_Scroll_Type::enter_live_mode(int) {
+  Fl_Group *grp = new Fl_Scroll(o->x(), o->y(), o->w(), o->h());
+  grp->show();
+  return propagate_live_mode(grp);
+}
 
 void Fl_Scroll_Type::copy_properties() {
   Fl_Group_Type::copy_properties();
@@ -664,13 +620,25 @@ void Fl_Scroll_Type::copy_properties() {
   d->hscrollbar.align(s->hscrollbar.align());
 }
 
-////////////////////////////////////////////////////////////////
-
-const char tile_type_name[] = "Fl_Tile";
+// ---- Fl_Tile_Type --------------------------------------------------- MARK: -
 
 Fl_Tile_Type Fl_Tile_type;      // the "factory"
 
+const char tile_type_name[] = "Fl_Tile";
+
 void Fl_Tile_Type::copy_properties() {
   Fl_Group_Type::copy_properties();
   // no additional properties
 }
+
+// ---- Fl_Wizard_Type ------------------------------------------------ MARK: -
+
+Fl_Wizard_Type Fl_Wizard_type;  // the "factory"
+
+const char wizard_type_name[] = "Fl_Wizard";
+
+// Override group's resize behavior to do nothing to children:
+void iwizard::resize(int X, int Y, int W, int H) {
+  Fl_Widget::resize(X,Y,W,H);
+  redraw();
+}
diff --git fluid/Fl_Group_Type.h fluid/Fl_Group_Type.h
index d6a77a4..ec4e139 100644
--- fluid/Fl_Group_Type.h
+++ fluid/Fl_Group_Type.h
@@ -27,6 +27,8 @@
 void group_cb(Fl_Widget *, void *);
 void ungroup_cb(Fl_Widget *, void *);
 
+// ---- Fl_Group_Type -------------------------------------------------- MARK: -
+
 class igroup : public Fl_Group {
 public:
   void resize(int,int,int,int) FL_OVERRIDE;
@@ -34,20 +36,6 @@ public:
   igroup(int X,int Y,int W,int H) : Fl_Group(X,Y,W,H) {Fl_Group::current(0);}
 };
 
-class itabs : public Fl_Tabs {
-public:
-  void resize(int,int,int,int) FL_OVERRIDE;
-  void full_resize(int X, int Y, int W, int H) { Fl_Group::resize(X, Y, W, H); }
-  itabs(int X,int Y,int W,int H) : Fl_Tabs(X,Y,W,H) {}
-};
-
-class iwizard : public Fl_Wizard {
-public:
-  void resize(int,int,int,int) FL_OVERRIDE;
-  void full_resize(int X, int Y, int W, int H) { Fl_Group::resize(X, Y, W, H); }
-  iwizard(int X,int Y,int W,int H) : Fl_Wizard(X,Y,W,H) {}
-};
-
 class Fl_Group_Type : public Fl_Widget_Type {
 public:
   const char *type_name() FL_OVERRIDE {return "Fl_Group";}
@@ -64,12 +52,13 @@ public:
   int is_parent() const FL_OVERRIDE {return 1;}
   int is_group() const FL_OVERRIDE {return 1;}
   int pixmapID() FL_OVERRIDE { return 6; }
-
   Fl_Widget *enter_live_mode(int top=0) FL_OVERRIDE;
   void leave_live_mode() FL_OVERRIDE;
   void copy_properties() FL_OVERRIDE;
 };
 
+// ---- Fl_Pack_Type --------------------------------------------------- MARK: -
+
 extern const char pack_type_name[];
 extern Fl_Menu_Item pack_type_menu[];
 
@@ -80,9 +69,12 @@ public:
   const char *alt_type_name() FL_OVERRIDE {return "fltk::PackedGroup";}
   Fl_Widget_Type *_make() FL_OVERRIDE {return new Fl_Pack_Type();}
   int pixmapID() FL_OVERRIDE { return 22; }
+  Fl_Widget *enter_live_mode(int top=0) FL_OVERRIDE;
   void copy_properties() FL_OVERRIDE;
 };
 
+// ---- Fl_Flex_Type --------------------------------------------------- MARK: -
+
 extern const char flex_type_name[];
 extern Fl_Menu_Item flex_type_menu[];
 
@@ -115,6 +107,8 @@ public:
   static int is_fixed(Fl_Type*);
 };
 
+// ---- Fl_Table_Type -------------------------------------------------- MARK: -
+
 extern const char table_type_name[];
 
 class Fl_Table_Type : public Fl_Group_Type {
@@ -130,8 +124,17 @@ public:
   void remove_child(Fl_Type*) FL_OVERRIDE;
 };
 
+// ---- Fl_Tabs_Type --------------------------------------------------- MARK: -
+
 extern const char tabs_type_name[];
 
+class itabs : public Fl_Tabs {
+public:
+  void resize(int,int,int,int) FL_OVERRIDE;
+  void full_resize(int X, int Y, int W, int H) { Fl_Group::resize(X, Y, W, H); }
+  itabs(int X,int Y,int W,int H) : Fl_Tabs(X,Y,W,H) {}
+};
+
 class Fl_Tabs_Type : public Fl_Group_Type {
 public:
   void ideal_spacing(int &x, int &y) FL_OVERRIDE {
@@ -151,6 +154,8 @@ public:
   Fl_Widget *enter_live_mode(int top=0) FL_OVERRIDE;
 };
 
+// ---- Fl_Scroll_Type ------------------------------------------------- MARK: -
+
 extern const char scroll_type_name[];
 extern Fl_Menu_Item scroll_type_menu[];
 
@@ -165,6 +170,8 @@ public:
   void copy_properties() FL_OVERRIDE;
 };
 
+// ---- Fl_Tile_Type --------------------------------------------------- MARK: -
+
 extern const char tile_type_name[];
 
 class Fl_Tile_Type : public Fl_Group_Type {
@@ -176,6 +183,15 @@ public:
   void copy_properties() FL_OVERRIDE;
 };
 
+// ---- Fl_Wizard_Type ------------------------------------------------- MARK: -
+
+class iwizard : public Fl_Wizard {
+public:
+  void resize(int,int,int,int) FL_OVERRIDE;
+  void full_resize(int X, int Y, int W, int H) { Fl_Group::resize(X, Y, W, H); }
+  iwizard(int X,int Y,int W,int H) : Fl_Wizard(X,Y,W,H) {}
+};
+
 extern const char wizard_type_name[];
 
 class Fl_Wizard_Type : public Fl_Group_Type {
diff --git fluid/Fl_Widget_Type.cxx fluid/Fl_Widget_Type.cxx
index 08396e8..32705b4 100644
--- fluid/Fl_Widget_Type.cxx
+++ fluid/Fl_Widget_Type.cxx
@@ -3556,6 +3556,23 @@ Fl_Widget *Fl_Widget_Type::enter_live_mode(int) {
   return live_widget;
 }
 
+Fl_Widget* Fl_Widget_Type::propagate_live_mode(Fl_Group* grp) {
+  live_widget = grp;
+  copy_properties();
+  Fl_Type *n;
+  for (n = next; n && n->level > level; n = n->next) {
+    if (n->level == level+1) {
+      Fl_Widget* proxy_child = n->enter_live_mode();
+      if (proxy_child && n->is_widget() && ((Fl_Widget_Type*)n)->resizable()) {
+        grp->resizable(proxy_child);
+      }
+    }
+  }
+  grp->end();
+  return live_widget;
+}
+
+
 void Fl_Widget_Type::leave_live_mode() {
 }
 
@@ -3647,7 +3664,5 @@ void Fl_Widget_Type::copy_properties() {
     w->hide();
   if (!o->active())
     w->deactivate();
-  if (resizable() && w->parent())
-    w->parent()->resizable(o);
 }
 
diff --git fluid/Fl_Widget_Type.h fluid/Fl_Widget_Type.h
index c821c7c..23d4ae2 100644
--- fluid/Fl_Widget_Type.h
+++ fluid/Fl_Widget_Type.h
@@ -106,6 +106,7 @@ public:
   int read_fdesign(const char*, const char*) FL_OVERRIDE;
 
   Fl_Widget *enter_live_mode(int top=0) FL_OVERRIDE;
+  Fl_Widget *propagate_live_mode(Fl_Group* grp);
   void leave_live_mode() FL_OVERRIDE;
   void copy_properties() FL_OVERRIDE;
 
diff --git fluid/Fl_Window_Type.cxx fluid/Fl_Window_Type.cxx
index f21e3a2..3aa4bce 100644
--- fluid/Fl_Window_Type.cxx
+++ fluid/Fl_Window_Type.cxx
@@ -1782,17 +1782,7 @@ void Fl_Widget_Class_Type::write_code2() {
 
 Fl_Widget *Fl_Window_Type::enter_live_mode(int) {
   Fl_Window *win = new Fl_Window(o->x(), o->y(), o->w(), o->h());
-  live_widget = win;
-  if (live_widget) {
-    copy_properties();
-    Fl_Type *n;
-    for (n = next; n && n->level > level; n = n->next) {
-      if (n->level == level+1)
-        n->enter_live_mode();
-    }
-    win->end();
-  }
-  return live_widget;
+  return propagate_live_mode(win);
 }
 
 void Fl_Window_Type::leave_live_mode() {
diff --git src/Fl_Pack.cxx src/Fl_Pack.cxx
index 7b42076..5750c22 100644
--- src/Fl_Pack.cxx
+++ src/Fl_Pack.cxx
@@ -152,3 +152,17 @@ void Fl_Pack::draw() {
     draw_label();
   }
 }
+
+/** Override Fl_Group resize behaviour.
+
+ Resizing a Pack will not resize any of its children, but trigger a redraw,
+ which in turn recalculates the dimensions of all children.
+
+ \param[in] X, Y, W, H new posistion and size of Pack
+ */
+void Fl_Pack::resize(int X, int Y, int W, int H) {
+  Fl_Widget::resize(X, Y, W, H);
+  redraw();
+}
+
+
Direct Link to Message ]
 
     
Previous Message ]Next Message ]
 
 

Comments are owned by the poster. All other content is copyright 1998-2024 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.