diff libgui/src/octave-dock-widget.cc @ 25355:5bb07f6e3707

fix uninitialized settings of octave dock widgets at startup (bug #53835) * octave-dock-widget.cc (octave_dock_widget): new parameter for object name allowing to set the object name as very first action, call handle_settings already in the ctor of this class; (qdockwidget_css): minor update of the dock/hide icon geometry (make_widget): do not use stored dock area for re-docking; (handle_settings): do not read dock area but do read last dock geometry; (save_settings): get latest geometry before saving the settings, do not save the dock area; * octave-dock-widget.h: object name as new parameter for ctor, delete class variable for storing dock area * documentation-dock-widget.cc (documentation_dock_widget): provide object name as new parameter to octave_dock_widget * files-dock-widget.cc (files_dock_widget): dito * history-dock-widget.cc (history_dock_widget): dito * file-editor-interface.h (file_editor_interface): dito * terminal-dock-widget.cc (terminal_dock_widget): dito * variable-editor.cc (variable_editor): dito * workspace-view.cc (workspace_view): dito * variable-editor-model.cc (base_ve_model::data): remove code snippets that were previously canceled by #if 0 statement
author Torsten <mttl@mailbox.org>
date Sun, 06 May 2018 16:27:18 +0200
parents 05a690606fd5
children 1008b4797a6e
line wrap: on
line diff
--- a/libgui/src/octave-dock-widget.cc	Sun May 06 00:19:03 2018 -0500
+++ b/libgui/src/octave-dock-widget.cc	Sun May 06 16:27:18 2018 +0200
@@ -169,14 +169,15 @@
                     ).arg (close_icon).arg (float_icon).arg (icon_size)
                      .arg (close_tooltip).arg (float_tooltip)
                      .arg (titlebar_foreground). arg (titlebar_background)
-                     .arg ((icon_size*2)/3). arg((icon_size*8)/3);
+                     .arg ((icon_size*2)/3). arg((icon_size*7)/3);
   }
 
-  octave_dock_widget::octave_dock_widget (QWidget *p)
-    : label_dock_widget (p), m_recent_float_geom (),
-      m_recent_dock_area (Qt::NoDockWidgetArea), m_recent_dock_geom (),
+  octave_dock_widget::octave_dock_widget (const QString& obj_name, QWidget *p)
+    : label_dock_widget (p), m_recent_float_geom (), m_recent_dock_geom (),
       m_waiting_for_mouse_button_release (false)
   {
+    setObjectName (obj_name);
+
     m_parent = static_cast<QMainWindow *> (p);     // store main window
     m_predecessor_widget = nullptr;
 
@@ -229,6 +230,8 @@
     setFocusPolicy (Qt::StrongFocus);
 
     setFeatures (QDockWidget::AllDockWidgetFeatures);
+
+    handle_settings (resource_manager::get_settings ());
   }
 
   // connect signal visibility changed to related slot (called from main-window)
@@ -298,7 +301,7 @@
     // Stay window, otherwise will bounce back to window by default because
     // there is no layout information for this widget in the saved settings.
     setParent (m_parent, Qt::Window);
-    m_parent->addDockWidget (m_recent_dock_area, this);
+    m_parent->addDockWidget (Qt::BottomDockWidgetArea, this);
     // recover old window states, hide and re-show new added widget
     m_parent->restoreState (settings->value ("MainWindow/windowState").toByteArray ());
     setFloating (false);
@@ -429,19 +432,8 @@
                                            + "_floating_geometry",
                                            QRect (50,100,480,480)).toRect ();
 
-#if 0
-    m_recent_dock_area = settings->value ("DockWidgets/" + objectName ()
-                                          + "_dock_area", Qt::NoDockWidgetArea).toInt ();
-#else
-    m_recent_dock_area = Qt::NoDockWidgetArea;
-#endif
-
-#if 0
     m_recent_dock_geom = settings->value ("DockWidgets/" + objectName (),
-                                          QByteArray ()).toRect ();
-#else
-    m_recent_dock_geom = QByteArray ();
-#endif
+                                          QByteArray ()).toByteArray ();
 
     notice_settings (settings);  // call individual handler
 
@@ -475,6 +467,8 @@
     if (! settings)
       return;
 
+    store_geometry ();
+
     settings->beginGroup ("DockWidgets");
 
     // conditional needed?
@@ -482,10 +476,7 @@
       settings->setValue (name + "_floating_geometry", m_recent_float_geom);
 
     if (! m_recent_dock_geom.isEmpty ())
-      {
-        settings->setValue (name + "_dock_area", m_recent_dock_area);
-        settings->setValue (name, m_recent_dock_geom);
-      }
+      settings->setValue (name, m_recent_dock_geom);
     settings->setValue (name+"Visible", isVisible ()); // store visibility
     settings->setValue (name+"Floating", isFloating ()); // store floating
     settings->setValue (name+"_minimized", isMinimized ()); // store minimized
@@ -515,7 +506,6 @@
       }
     else
       {
-        m_recent_dock_area = m_parent->dockWidgetArea (this);
         m_recent_dock_geom = saveGeometry ();
       }
   }