changeset 24275:e9fe31118542

improve re-docking of a floating widget under windows * octave-dock-widget.cc (make_widget): save window state before adding the widget, restore this state after adding, hide and re-show the widget in order to make it visible again * main-window.cc (set_window_layout): restore state and geometry on windows for not storing the default state when calling make_widget
author Torsten <mttl@mailbox.org>
date Sat, 18 Nov 2017 11:50:16 +0100
parents c1940e9e3399
children 8f26ef2688bc
files libgui/src/main-window.cc libgui/src/octave-dock-widget.cc
diffstat 2 files changed, 6 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/main-window.cc	Fri Nov 17 13:46:15 2017 -0500
+++ b/libgui/src/main-window.cc	Sat Nov 18 11:50:16 2017 +0100
@@ -1265,10 +1265,8 @@
 void
 main_window::set_window_layout (QSettings *settings)
 {
-#if ! defined (Q_OS_WIN32)
   restoreState (settings->value ("MainWindow/windowState").toByteArray ());
   restoreGeometry (settings->value ("MainWindow/geometry").toByteArray ());
-#endif
 
   // Restore the geometry of all dock-widgets
   foreach (octave_dock_widget *widget, dock_widget_list ())
@@ -1309,10 +1307,8 @@
         }
     }
 
-#if defined (Q_OS_WIN32)
   restoreState (settings->value ("MainWindow/windowState").toByteArray ());
   restoreGeometry (settings->value ("MainWindow/geometry").toByteArray ());
-#endif
 
   show ();
 }
--- a/libgui/src/octave-dock-widget.cc	Fri Nov 17 13:46:15 2017 -0500
+++ b/libgui/src/octave-dock-widget.cc	Sat Nov 18 11:50:16 2017 +0100
@@ -196,16 +196,12 @@
 
   if (dock)
     {
-      // add widget to last saved docking area (dock=true is default)
-      int area
-        = settings->value ("DockWidgets/" + objectName () + "_dock_area",
-                           Qt::TopDockWidgetArea).toInt ();
-      m_parent->addDockWidget (static_cast<Qt::DockWidgetArea> (area), this);
-
-      // FIXME: restoreGeometry is ignored for docked widgets
-      //        and its child widget
-      restoreGeometry (settings->value
-             ("DockWidgets/" + objectName ()).toByteArray ());
+      settings->setValue ("MainWindow/windowState", m_parent->saveState ());
+      m_parent->addDockWidget (Qt::TopDockWidgetArea, this);
+      // recover old window states, hide and re-show new added widget
+      m_parent->restoreState (settings->value ("MainWindow/windowState").toByteArray ());
+      focus ();
+      QApplication::setActiveWindow (this);
     }
   else  // only reparent, no docking
     setParent (m_parent);