changeset 24318:a17862b28f0d

handle floating widgets on all platforms as done on windows (bug #52378) * main-window.cc (set_window_layout): remove conditional compilations depending on the platform, fix overwriting of the geometry for floating widgets * octave-dock-widget.cc (octave_dock_widget, make widget, make_window, set_title, save_settings, set_style): remove conditional compilations and only use the code formerly used in windows * octave-dock-widget.h: remove conditional compilations and only use the code formerly used in windows, declaring internal variables now needed for all platforms
author Torsten <mttl@mailbox.org>
date Mon, 27 Nov 2017 20:38:35 +0100
parents 221f1eacd66a
children c381bca75c64
files libgui/src/main-window.cc libgui/src/octave-dock-widget.cc libgui/src/octave-dock-widget.h
diffstat 3 files changed, 19 insertions(+), 97 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/main-window.cc	Sun Nov 26 21:30:46 2017 -0800
+++ b/libgui/src/main-window.cc	Mon Nov 27 20:38:35 2017 +0100
@@ -1282,27 +1282,25 @@
 
           // If floating, make window from widget.
           if (floating)
-            widget->make_window ();
-          else if (! widget->parent ())  // should not be floating but is
-            widget->make_widget (false); // no docking, just reparent
-#if ! defined (Q_OS_WIN32)
-          // restore geometry
-          QVariant val = settings->value ("DockWidgets/" + name);
-          widget->restoreGeometry (val.toByteArray ());
-#endif
-          // make widget visible if desired
-          if (floating && visible)              // floating and visible
             {
-              if (settings->value ("DockWidgets/" + widget->objectName ()
-                                   + "_minimized").toBool ())
-                widget->showMinimized ();
-              else
-                widget->setVisible (true);
+              widget->make_window ();
+
+              if (visible)
+                {
+                  if (settings->value ("DockWidgets/" + widget->objectName ()
+                                      + "_minimized").toBool ())
+                    widget->showMinimized ();
+                  else
+                    widget->setVisible (true);
+                }
             }
-          else
+          else  // not floating
             {
+              if (! widget->parent ())        // should not be floating but is
+                widget->make_widget (false);  // no docking, just reparent
+
               widget->make_widget ();
-              widget->setVisible (visible);     // not floating -> show
+              widget->setVisible (visible);   // not floating -> show
             }
         }
     }
--- a/libgui/src/octave-dock-widget.cc	Sun Nov 26 21:30:46 2017 -0800
+++ b/libgui/src/octave-dock-widget.cc	Mon Nov 27 20:38:35 2017 +0100
@@ -58,8 +58,7 @@
   QStyle *st = style ();
   m_icon_size = 0.75*st->pixelMetric (QStyle::PM_SmallIconSize);
 
-#if defined (Q_OS_WIN32)
-  // windows: add an extra title bar that persists when floating
+  // add an extra title bar that persists when floating
 
   setFeatures (QDockWidget::DockWidgetMovable); // not floatable or closeable
 
@@ -98,18 +97,6 @@
   m_title_widget->setLayout (h_layout);
   setTitleBarWidget (m_title_widget);
 
-#else
-
-  // non windows: qt takes control of floating widgets
-  setFeatures (QDockWidget::DockWidgetMovable |
-               QDockWidget::DockWidgetClosable |
-               QDockWidget::DockWidgetFloatable); // floatable and closeable
-
-  connect (this, SIGNAL (topLevelChanged (bool)),
-           this, SLOT (change_floating (bool)));
-
-#endif
-
   // copy & paste handling
   connect (p, SIGNAL (copyClipboard_signal ()),
            this, SLOT (copyClipboard ()));
@@ -138,9 +125,7 @@
 void
 octave_dock_widget::make_window (void)
 {
-#if defined (Q_OS_WIN32)
-
-  // windows: the widget has to be reparented (parent = 0)
+  // the widget has to be reparented (parent = 0)
 
   QSettings *settings = resource_manager::get_settings ();
 
@@ -162,17 +147,6 @@
                                 + "_floating_geometry",
                                 QRect (50,100,480,480)).toRect ());
 
-#else
-
-  // non windows: Just set the appripriate window flag
-  setWindowFlags (Qt::Window);
-
-  QString css = styleSheet ();
-  css.replace ("widget-undock", "widget-dock");
-  setStyleSheet (css);
-
-#endif
-
   m_floating = true;
 
   set_focus_predecessor ();  // set focus previously active widget if tabbed
@@ -182,9 +156,7 @@
 void
 octave_dock_widget::make_widget (bool dock)
 {
-#if defined (Q_OS_WIN32)
-
-  // windows: Since floating widget has no parent, we have to read it
+  // Since floating widget has no parent, we have to read it
 
   QSettings *settings = resource_manager::get_settings ();
 
@@ -211,20 +183,6 @@
                                 + m_icon_color + ".png"));
   m_dock_action->setToolTip (tr ("Undock widget"));
 
-#else
-
-  // non windows: just say we are a docked widget again
-
-  Q_UNUSED (dock);
-
-  setWindowFlags (Qt::Widget);
-
-  QString css = styleSheet ();
-  css.replace ("widget-dock", "widget-undock");
-  setStyleSheet (css);
-
-#endif
-
   m_floating = false;
 }
 
@@ -232,13 +190,11 @@
 void
 octave_dock_widget::set_title (const QString& title)
 {
-#if defined (Q_OS_WIN32)
   QHBoxLayout *h_layout
     = static_cast<QHBoxLayout *> (titleBarWidget ()->layout ());
   QLabel *label = new QLabel (title);
   label->setStyleSheet ("background: transparent;");
   h_layout->insertWidget (0,label);
-#endif
   setWindowTitle (title);
 }
 
@@ -337,12 +293,10 @@
 
   settings->beginGroup ("DockWidgets");
 
-#if defined (Q_OS_WIN32)
   if (m_floating) // widget is floating (windows), save actual floating geometry
     settings->setValue (name+"_floating_geometry", geometry ());
   else           // not floating save docked (normal) geometry
-#endif
-    settings->setValue (name, saveGeometry ());
+  settings->setValue (name, saveGeometry ());
 
   settings->setValue (name+"Visible", isVisible ()); // store visibility
   settings->setValue (name+"Floating", m_floating);    // store visibility
@@ -440,38 +394,13 @@
         arg (bg_col.name ()).
         arg (bg_col_bottom.name ());
 
-#if defined (Q_OS_WIN32)
       css = background + QString (" color: %1 ;").arg (fg_col.name ());
-#else
-      css = QString ("QDockWidget::title { " + background +
-                     "                     text-align: " + alignment + ";"
-                     "                     padding: 0px 0px 0px 4px;}\n"
-                     "QDockWidget { color: %1 ; "
-                     "  titlebar-close-icon: url(:/actions/icons/widget-close%2.png);"
-                     "  titlebar-normal-icon: url(:/actions/icons/"+dock_icon+"%2); }"
-                     "QDockWidget::close-button,"
-                     "QDockWidget::float-button { border: 0px; icon-size: %3px; width: %3px}"
-                     ).
-                     arg (fg_col.name ()).arg (icon_col).arg (m_icon_size);
-#endif
     }
   else
     {
-#if defined (Q_OS_WIN32)
       css = QString ("");
-#else
-      css = QString ("QDockWidget::title { text-align: " + alignment + ";"
-                     "                     padding: 0px 0px 0px 4px;}"
-                     "QDockWidget {"
-                     "  titlebar-close-icon: url(:/actions/icons/widget-close.png);"
-                     "  titlebar-normal-icon: url(:/actions/icons/"+dock_icon+"); }"
-                     "QDockWidget::close-button,"
-                     "QDockWidget::float-button { border: 0px; icon-size: %1px; width: %1px}"
-                    ).arg (m_icon_size);
-#endif
     }
 
-#if defined (Q_OS_WIN32)
   m_title_widget->setStyleSheet (css);
   css_button = QString ("background: transparent; border: 0px;");
   m_dock_button->setStyleSheet (css_button);
@@ -480,9 +409,6 @@
                                 ".png"));
   m_close_action->setIcon (QIcon (":/actions/icons/widget-close" + icon_col +
                                  ".png"));
-#else
-  setStyleSheet (css);
-#endif
 }
 
 // set focus to previously active widget in tabbed widget stack
--- a/libgui/src/octave-dock-widget.h	Sun Nov 26 21:30:46 2017 -0800
+++ b/libgui/src/octave-dock-widget.h	Mon Nov 27 20:38:35 2017 +0100
@@ -139,13 +139,11 @@
   QString m_icon_color_active;
   octave_dock_widget *m_predecessor_widget;
 
-#if defined (Q_OS_WIN32)
   QWidget *m_title_widget;
   QToolButton *m_dock_button;
   QToolButton *m_close_button;
   QAction *m_dock_action;
   QAction *m_close_action;
-#endif
 };
 
 #endif