changeset 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 dfec7af844fd
children 5f535fe782b3
files libgui/src/gui-preferences-dw.h libgui/src/octave-dock-widget.cc libgui/src/octave-dock-widget.h
diffstat 3 files changed, 17 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/gui-preferences-dw.h	Fri Nov 20 18:16:12 2020 +0100
+++ b/libgui/src/gui-preferences-dw.h	Sun Nov 22 16:49:30 2020 +0100
@@ -62,7 +62,8 @@
 const gui_pref dw_float_geometry ("DockWidgets/%1_floating_geometry",
                                   QVariant (QRect (50, 50, 480, 640)));
 
-const gui_pref dw_dock_geometry ("DockWidgets/%1", QVariant (QByteArray ()));
+const gui_pref dw_dock_geometry ("DockWidgets/%1",
+                                 QVariant (QRect (10, 10, 240, 320)));
 
 const gui_pref dw_is_visible ("DockWidgets/%1Visible", QVariant (true));
 
--- 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 ();
       }
   }
 
--- a/libgui/src/octave-dock-widget.h	Fri Nov 20 18:16:12 2020 +0100
+++ b/libgui/src/octave-dock-widget.h	Sun Nov 22 16:49:30 2020 +0100
@@ -184,7 +184,7 @@
     QString m_icon_color_active;
     octave_dock_widget *m_predecessor_widget;
     QRect m_recent_float_geom;
-    QByteArray m_recent_dock_geom;
+    QRect m_recent_dock_geom;
     bool m_waiting_for_mouse_button_release;
 
   };