Mercurial > octave
changeset 29088:909d68d27892 stable
fix restoring dock widgets geometry in full screen main window
* gui-preferences-dw.h: change type of dw_dock_geometry setting from
QByteArray into QRect
* octave-dock-widget.cc (make_widget): use setGeometry for restoring
the size of a docked widget;
(handle_settings): read stored dock geometry as QRect and take care
of old entries given as QByteArray;
(store_geometry): use geometry for saving the current dock geometry
* octave-dock-widget.h: dock geometry is saved as QRect in the related
class variable
author | Torsten Lilge <ttl-octave@mailbox.org> |
---|---|
date | Sun, 22 Nov 2020 16:49:30 +0100 |
parents | dfec7af844fd |
children | 5f535fe782b3 |
files | libgui/src/gui-preferences-dw.h libgui/src/octave-dock-widget.cc libgui/src/octave-dock-widget.h |
diffstat | 3 files changed, 17 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/src/gui-preferences-dw.h Fri Nov 20 18:16:12 2020 +0100 +++ b/libgui/src/gui-preferences-dw.h Sun Nov 22 16:49:30 2020 +0100 @@ -62,7 +62,8 @@ const gui_pref dw_float_geometry ("DockWidgets/%1_floating_geometry", QVariant (QRect (50, 50, 480, 640))); -const gui_pref dw_dock_geometry ("DockWidgets/%1", QVariant (QByteArray ())); +const gui_pref dw_dock_geometry ("DockWidgets/%1", + QVariant (QRect (10, 10, 240, 320))); const gui_pref dw_is_visible ("DockWidgets/%1Visible", QVariant (true));
--- a/libgui/src/octave-dock-widget.cc Fri Nov 20 18:16:12 2020 +0100 +++ b/libgui/src/octave-dock-widget.cc Sun Nov 22 16:49:30 2020 +0100 @@ -355,6 +355,10 @@ // recover old window states, hide and re-show new added widget m_parent->restoreState (settings->value (mw_state.key).toByteArray ()); setFloating (false); + // restore size using setGeometry instead of restoreGeometry following + // this post: + // https://forum.qt.io/topic/79326/qdockwidget-restoregeometry-not-working-correctly-when-qmainwindow-is-maximized/5 + setGeometry (m_recent_dock_geom); // adjust the (un)dock icon connect (m_dock_action, SIGNAL (triggered (bool)), @@ -494,9 +498,16 @@ if (QApplication::desktop ()->screenNumber (&dummy) == -1) m_recent_float_geom = default_size; - m_recent_dock_geom + // 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 ()), - dw_dock_geometry.def).toByteArray (); + dw_dock_geometry.def); + 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 @@ -577,7 +588,7 @@ } else { - m_recent_dock_geom = saveGeometry (); + m_recent_dock_geom = geometry (); } }
--- a/libgui/src/octave-dock-widget.h Fri Nov 20 18:16:12 2020 +0100 +++ b/libgui/src/octave-dock-widget.h Sun Nov 22 16:49:30 2020 +0100 @@ -184,7 +184,7 @@ QString m_icon_color_active; octave_dock_widget *m_predecessor_widget; QRect m_recent_float_geom; - QByteArray m_recent_dock_geom; + QRect m_recent_dock_geom; bool m_waiting_for_mouse_button_release; };