Mercurial > hg > octave-nkf
changeset 17899:14c427b5c5c1
Restore geometry of floating widgets after restart in windows (bug #40485)
* main-window.cc(set_window_layout): non-window systems: restore geometry of
all non-floating widgets, make widgets floating after restoring main window
* octave_dock_widget.h: new class variable for floating state
* octave_dock_widget.cc(constructor): initialize floating to false;
(destructor): use this new state variable for saving settings;
(make_window): store last docked geometry, set last floating geometry with
setGeometry instead of restoreGeometry, set floating state true;
(make_widget): save last geometry with geometry only, restore last docked
geometry, set floating state false;
(change_floating): determine necessary action from floating state;
author | Torsten <ttl@justmail.de> |
---|---|
date | Mon, 11 Nov 2013 07:32:19 +0100 |
parents | 8c33abdd2f9a |
children | 8e9532632838 |
files | libgui/src/main-window.cc libgui/src/octave-dock-widget.cc libgui/src/octave-dock-widget.h |
diffstat | 3 files changed, 40 insertions(+), 35 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/src/main-window.cc +++ b/libgui/src/main-window.cc @@ -665,21 +665,23 @@ if (! name.isEmpty ()) { - // If floating, make window from widget. bool floating = settings->value ("DockWidgets/" + name + "Floating", false).toBool (); + bool visible = settings->value + ("DockWidgets/" + name + "Visible", true).toBool (); + +#if defined (Q_OS_WIN32) + // If floating, make window from widget. if (floating) widget->make_window (); else if (! widget->parent ()) // should not be floating but is widget->make_widget (false); // no docking, just reparent - +#else // restore geometry QVariant val = settings->value ("DockWidgets/" + name); widget->restoreGeometry (val.toByteArray ()); - +#endif // make widget visible if desired - bool visible = settings->value - ("DockWidgets/" + name + "Visible", true).toBool (); if (floating && visible) // floating and visible float_and_visible.append (widget); // not show before main win else @@ -696,7 +698,12 @@ // show floating widgets after main win to ensure "Octave" in central menu foreach (octave_dock_widget *widget, float_and_visible) - widget->setVisible (true); + { +#if not defined (Q_OS_WIN32) + widget->make_window (); +#endif + widget->setVisible (true); + } }
--- a/libgui/src/octave-dock-widget.cc +++ b/libgui/src/octave-dock-widget.cc @@ -38,6 +38,7 @@ { _parent = static_cast<QMainWindow *> (p); // store main window + _floating = false; connect (this, SIGNAL (visibilityChanged (bool)), this, SLOT (handle_visibility_changed (bool))); @@ -104,25 +105,20 @@ octave_dock_widget::~octave_dock_widget () { // save state of this dock-widget - bool floating = false; - bool visible; QString name = objectName (); QSettings *settings = resource_manager::get_settings (); settings->beginGroup ("DockWidgets"); - if (!parent ()) - { - // widget is floating (windows), save actual floating geometry - floating = true; - settings->setValue (name+"_floating_geometry", saveGeometry ()); - } - else // not floating save docked (normal) geometry +#if defined (Q_OS_WIN32) + if (_floating) // widget is floating (windows), save actual floating geometry + settings->setValue (name+"_floating_geometry", geometry ()); + else // not floating save docked (normal) geometry +#endif settings->setValue (name, saveGeometry ()); - visible = isVisible (); - settings->setValue (name+"Floating", floating); // store floating state - settings->setValue (name+"Visible", visible); // store visibility + settings->setValue (name+"Visible", isVisible ()); // store visibility + settings->setValue (name+"Floating", _floating); // store visibility settings->endGroup (); settings->sync (); @@ -161,10 +157,11 @@ QSettings *settings = resource_manager::get_settings (); - // save the docking area for later redocking + // save the docking area and geometry for later redocking // FIXME: dockWidgetArea always returns 2 settings->setValue ("DockWidgets/" + objectName () + "_dock_area", _parent->dockWidgetArea (this)); + settings->setValue ("DockWidgets/" + objectName (), saveGeometry ()); settings->sync (); // remove parent and adjust the (un)dock icon @@ -172,9 +169,9 @@ _dock_action->setIcon (QIcon (":/actions/icons/widget-dock.png")); _dock_action->setToolTip (tr ("Dock widget")); - // restore the last geometry when floating - restoreGeometry (settings->value ("DockWidgets/" + objectName () - + "_floating_geometry").toByteArray ()); + // restore the last geometry( when floating + setGeometry (settings->value ("DockWidgets/" + objectName () + + "_floating_geometry",QRect(50,100,480,480)).toRect ()); #else @@ -183,6 +180,7 @@ #endif + _floating = true; } // dock the widget @@ -195,9 +193,10 @@ QSettings *settings = resource_manager::get_settings (); - // save last floating geometry - settings->setValue ("DockWidgets/" + objectName () + "_floating_geometry", - saveGeometry ()); + // save last floating geometry if widget really was floating + if (_floating) + settings->setValue ("DockWidgets/" + objectName () + "_floating_geometry", + geometry ()); settings->sync (); if (dock) @@ -209,8 +208,8 @@ // FIXME: restoreGeometry is ignored for docked widgets // and its child widget - // restoreGeometry (settings->value - // ("DockWidgets/" + objectName ()).toByteArray ()); + restoreGeometry (settings->value + ("DockWidgets/" + objectName ()).toByteArray ()); } else // only reparent, no docking setParent (_parent); @@ -225,23 +224,21 @@ setWindowFlags (Qt::Widget); #endif + + _floating = false; } // slot for (un)dock action void -octave_dock_widget::change_floating (bool floating) +octave_dock_widget::change_floating (bool) { -#if defined (Q_OS_WIN32) - if (parent ()) -#else - if (floating) -#endif + if (_floating) + make_widget (); + else { make_window (); focus (); } - else - make_widget (); } // slot for hiding the widget