changeset 29090:f61d1faacfca

maint: merge stable to default.
author Kai T. Ohlhus <k.ohlhus@gmail.com>
date Mon, 23 Nov 2020 12:41:34 +0900
parents 944fd6fca864 (current diff) 5f535fe782b3 (diff)
children b924b916dc91
files libgui/src/main-window.cc
diffstat 4 files changed, 29 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/gui-preferences-dw.h	Fri May 29 10:05:36 2020 +0100
+++ b/libgui/src/gui-preferences-dw.h	Mon Nov 23 12:41:34 2020 +0900
@@ -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/main-window.cc	Fri May 29 10:05:36 2020 +0100
+++ b/libgui/src/main-window.cc	Mon Nov 23 12:41:34 2020 +0900
@@ -1596,8 +1596,19 @@
           }
       }
 
-    if (! settings)
+    if (settings)
       {
+        // Restore main window state and geometry after creating all
+        // dock widgets
+        if (! restoreState (settings->value (mw_state).toByteArray ()))
+          restoreState (mw_state.def.toByteArray ());
+
+        if (! restoreGeometry (settings->value (mw_geometry).toByteArray ()))
+          restoreGeometry (mw_geometry.def.toByteArray ());
+      }
+    else
+      {
+        // Reset to the initial window layout and size
         restoreGeometry (mw_geometry.def.toByteArray ());
         restoreState (mw_state.def.toByteArray ());
 
--- a/libgui/src/octave-dock-widget.cc	Fri May 29 10:05:36 2020 +0100
+++ b/libgui/src/octave-dock-widget.cc	Mon Nov 23 12:41:34 2020 +0900
@@ -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 May 29 10:05:36 2020 +0100
+++ b/libgui/src/octave-dock-widget.h	Mon Nov 23 12:41:34 2020 +0900
@@ -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;
 
   };