changeset 17092:1d544ac39369

show correct undock-button of widgets when window layout is resetted * octave_dock_widget.cc(make_widget): optional parameter indicating if widget has to be docked to the main window or just reparented (default true) * octave_dock_widget.h: optional parameter for make_widget, default true * main_window.cc(set_window_layout): call make_widget (only for reparenting) when widget is should not be floating but has no parent
author Torsten <ttl@justmail.de>
date Fri, 26 Jul 2013 06:53:17 +0200
parents 3cbbdb49b8ff
children 641c47e8bcae
files libgui/src/main-window.cc libgui/src/octave-dock-widget.cc libgui/src/octave-dock-widget.h
diffstat 3 files changed, 18 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/main-window.cc
+++ b/libgui/src/main-window.cc
@@ -557,7 +557,7 @@
           if (floating)
             widget->make_window ();
           else if (! widget->parent ())  // should not be floating but is
-            widget->setParent (this);    // reparent
+            widget->make_widget (false); // no docking, just reparent
 
           // restore geometry
           QVariant val = settings->value (name);
@@ -569,7 +569,10 @@
           if (floating && visible)              // floating and visible
             float_and_visible.append (widget);  // not show before main win
           else
-            widget->setVisible (visible);       // not floating -> show
+            {
+              widget->make_widget ();
+              widget->setVisible (visible);       // not floating -> show
+            }
         }
     }
 
--- a/libgui/src/octave-dock-widget.cc
+++ b/libgui/src/octave-dock-widget.cc
@@ -154,7 +154,7 @@
 
 // dock the widget
 void
-octave_dock_widget::make_widget ()
+octave_dock_widget::make_widget (bool dock)
 {
   QSettings *settings = resource_manager::get_settings ();
 
@@ -163,14 +163,18 @@
                       saveGeometry ());
   settings->sync ();
 
-  // add widget to last saved docking area
-  int area = settings->value ("DockWidgets/" + objectName () + "_dock_area",
-                               Qt::TopDockWidgetArea).toInt ();
-  _parent->addDockWidget (static_cast<Qt::DockWidgetArea> (area), this);
+  if (dock)
+    { // add widget to last saved docking area (dock=true is default)
+      int area = settings->value ("DockWidgets/" + objectName () + "_dock_area",
+                                   Qt::TopDockWidgetArea).toInt ();
+      _parent->addDockWidget (static_cast<Qt::DockWidgetArea> (area), this);
 
-  // FIXME: restoreGeometry is ignored for docked widgets and its child widget
-  // restoreGeometry (settings->value
-  //        ("DockWidgets/" + objectName ()).toByteArray ());
+      // FIXME: restoreGeometry is ignored for docked widgets and its child widget
+      // restoreGeometry (settings->value
+      //        ("DockWidgets/" + objectName ()).toByteArray ());
+    }
+  else  // only reparent, no docking
+    setParent (_parent);
 
   // adjust the (un)dock icon
   _dock_action->setIcon (QIcon (":/actions/icons/widget-undock.png"));
--- a/libgui/src/octave-dock-widget.h
+++ b/libgui/src/octave-dock-widget.h
@@ -40,7 +40,7 @@
 
   virtual void connect_visibility_changed (void);
   void make_window (void);
-  void make_widget (void);
+  void make_widget (bool dock=true);
   void set_title (const QString&);
 
 signals: