changeset 29694:54c0eb5548ee

restore previous widget geometry when invoked from cli (bug #60630) * octave-dock-widget.cc (handle_settings): read previous dock- and float geometry from the settings even though there is no main window
author Torsten Lilge <ttl-octave@mailbox.org>
date Thu, 20 May 2021 22:02:05 +0200
parents 3f07c0696a97
children cc9bda97ac3f
files libgui/src/octave-dock-widget.cc
diffstat 1 files changed, 35 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/octave-dock-widget.cc	Wed May 19 22:42:04 2021 +0200
+++ b/libgui/src/octave-dock-widget.cc	Thu May 20 22:02:05 2021 +0200
@@ -508,38 +508,48 @@
     else
       m_icon_color_active = "";
 
+
+    QWidget *ref_widget = m_main_window;
+    if (! ref_widget)
+      ref_widget = this;
+
+    int x, y, w, h;
+    QApplication::desktop ()->availableGeometry (ref_widget).getRect (&x, &y, &w, &h);
+    QRect default_floating_size = QRect (x+16, y+32, w/3, h/2);
+
+    QRect default_dock_size;
     if (m_main_window)
       {
-        QRect available_size
-          = QApplication::desktop ()->availableGeometry (m_main_window);
+        // We have a main window, dock size depends on size of main window
+        m_main_window->geometry ().getRect (&x, &y, &w, &h);
+        default_dock_size = QRect (x+16, y+32, w/3, h/3);
+      }
+    else
+      {
+        // No main window, default dock size should never be used
+        default_dock_size = QRect (0, 0, w/10, h/10);
+      }
 
-        int x, y, w, h;
-        available_size.getRect (&x, &y, &w, &h);
-        QRect default_floating_size = QRect (x+16, y+32, w/3, h/2);
-        m_main_window->geometry ().getRect (&x, &y, &w, &h);
-        QRect default_dock_size = QRect (x+16, y+32, w/3, h/3);
-
-        m_recent_float_geom
-          = settings->value (dw_float_geometry.key.arg (objectName ()),
+      m_recent_float_geom
+        = settings->value (dw_float_geometry.key.arg (objectName ()),
                              default_floating_size).toRect ();
 
-        QWidget dummy;
-        dummy.setGeometry (m_recent_float_geom);
+      QWidget dummy;
+      dummy.setGeometry (m_recent_float_geom);
 
-        if (QApplication::desktop ()->screenNumber (&dummy) == -1)
-          m_recent_float_geom = default_floating_size;
+      if (QApplication::desktop ()->screenNumber (&dummy) == -1)
+        m_recent_float_geom = default_floating_size;
 
-        // 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 ()),
-                             default_dock_size);
-        if (dock_geom.canConvert (QMetaType::QRect))
-          m_recent_dock_geom = dock_geom.toRect ();
-        else
-          m_recent_dock_geom = dw_dock_geometry.def.toRect ();
-      }
+      // 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 ()),
+                           default_dock_size);
+      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