Mercurial > octave
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