# HG changeset patch # User Torsten # Date 1371932720 -7200 # Node ID 81344ade678f3301416da1644e812339defc7bd8 # Parent 62fa28af28428a09d1f60ca70836574c2f1c8de3 fix resetting the window layout when some widgets are floating * main-window.cc(set_window_layout): use dock_widget list instead of children of the main-window, check for floating widgets that shouldn't be floating from the settings and reparent them before restoring geometry diff --git a/libgui/src/main-window.cc b/libgui/src/main-window.cc --- a/libgui/src/main-window.cc +++ b/libgui/src/main-window.cc @@ -542,33 +542,33 @@ void main_window::set_window_layout (QSettings *settings) { - restoreState (settings->value ("MainWindow/windowState").toByteArray ()); - // Restore the geometry of all dock-widgets - foreach (QObject *obj, children ()) + foreach (octave_dock_widget *widget, dock_widget_list ()) { - QString name = obj->objectName (); + QString name = widget->objectName (); - if (obj->inherits ("QDockWidget") && ! name.isEmpty ()) + if (! name.isEmpty ()) { - octave_dock_widget *widget = qobject_cast (obj); - QVariant val = settings->value (name); - - widget->restoreGeometry (val.toByteArray ()); - // If floating, make window from widget. bool floating = settings->value ("DockWidgets/" + name + "Floating", false).toBool (); + if (floating) + widget->make_window (false); + else if (! widget->parent ()) // should not be floating but is + widget->setParent (this); // reparent + + // restore geometry + QVariant val = settings->value (name); + widget->restoreGeometry (val.toByteArray ()); + + // make widget visible if desired bool visible = settings->value ("DockWidgets/" + name + "Visible", true).toBool (); - if (floating) - widget->make_window (visible); - - // make widget visible if desired widget->setVisible (visible); } } + restoreState (settings->value ("MainWindow/windowState").toByteArray ()); restoreGeometry (settings->value ("MainWindow/geometry").toByteArray ()); }