diff libgui/src/octave-dock-widget.cc @ 29088:909d68d27892 stable

fix restoring dock widgets geometry in full screen main window * gui-preferences-dw.h: change type of dw_dock_geometry setting from QByteArray into QRect * octave-dock-widget.cc (make_widget): use setGeometry for restoring the size of a docked widget; (handle_settings): read stored dock geometry as QRect and take care of old entries given as QByteArray; (store_geometry): use geometry for saving the current dock geometry * octave-dock-widget.h: dock geometry is saved as QRect in the related class variable
author Torsten Lilge <ttl-octave@mailbox.org>
date Sun, 22 Nov 2020 16:49:30 +0100
parents 20a9b99d515c
children 1153f47f29a7
line wrap: on
line diff
--- a/libgui/src/octave-dock-widget.cc	Fri Nov 20 18:16:12 2020 +0100
+++ b/libgui/src/octave-dock-widget.cc	Sun Nov 22 16:49:30 2020 +0100
@@ -355,6 +355,10 @@
     // recover old window states, hide and re-show new added widget
     m_parent->restoreState (settings->value (mw_state.key).toByteArray ());
     setFloating (false);
+     // restore size using setGeometry instead of restoreGeometry following
+     // this post:
+     // https://forum.qt.io/topic/79326/qdockwidget-restoregeometry-not-working-correctly-when-qmainwindow-is-maximized/5
+    setGeometry (m_recent_dock_geom);
 
     // adjust the (un)dock icon
     connect (m_dock_action, SIGNAL (triggered (bool)),
@@ -494,9 +498,16 @@
     if (QApplication::desktop ()->screenNumber (&dummy) == -1)
       m_recent_float_geom = default_size;
 
-    m_recent_dock_geom
+    // The following is required for ensure smooth transition from old
+    // saveGeomety to new QRect setting (see comment for restoring size
+    // of docked widgets)
+    QVariant dock_geom
       = settings->value (dw_dock_geometry.key.arg (objectName ()),
-                         dw_dock_geometry.def).toByteArray ();
+                         dw_dock_geometry.def);
+    if (dock_geom.canConvert (QMetaType::QRect))
+      m_recent_dock_geom = dock_geom.toRect ();
+    else
+      m_recent_dock_geom = dw_dock_geometry.def.toRect ();
 
     notice_settings (settings);  // call individual handler
 
@@ -577,7 +588,7 @@
       }
     else
       {
-        m_recent_dock_geom = saveGeometry ();
+        m_recent_dock_geom = geometry ();
       }
   }