# HG changeset patch # User Torsten Lilge # Date 1621540925 -7200 # Node ID 54c0eb5548eeff0b555c8ab00127682b29e750c7 # Parent 3f07c0696a97b75ce9a409edd9407c2c26f965c3 restore previous widget geometry when invoked from cli (bug #60630) * octave-dock-widget.cc (handle_settings): read previous dock- and float geometry from the settings even though there is no main window diff -r 3f07c0696a97 -r 54c0eb5548ee libgui/src/octave-dock-widget.cc --- a/libgui/src/octave-dock-widget.cc Wed May 19 22:42:04 2021 +0200 +++ b/libgui/src/octave-dock-widget.cc Thu May 20 22:02:05 2021 +0200 @@ -508,38 +508,48 @@ else m_icon_color_active = ""; + + QWidget *ref_widget = m_main_window; + if (! ref_widget) + ref_widget = this; + + int x, y, w, h; + QApplication::desktop ()->availableGeometry (ref_widget).getRect (&x, &y, &w, &h); + QRect default_floating_size = QRect (x+16, y+32, w/3, h/2); + + QRect default_dock_size; if (m_main_window) { - QRect available_size - = QApplication::desktop ()->availableGeometry (m_main_window); + // We have a main window, dock size depends on size of main window + m_main_window->geometry ().getRect (&x, &y, &w, &h); + default_dock_size = QRect (x+16, y+32, w/3, h/3); + } + else + { + // No main window, default dock size should never be used + default_dock_size = QRect (0, 0, w/10, h/10); + } - int x, y, w, h; - available_size.getRect (&x, &y, &w, &h); - QRect default_floating_size = QRect (x+16, y+32, w/3, h/2); - m_main_window->geometry ().getRect (&x, &y, &w, &h); - QRect default_dock_size = QRect (x+16, y+32, w/3, h/3); - - m_recent_float_geom - = settings->value (dw_float_geometry.key.arg (objectName ()), + m_recent_float_geom + = settings->value (dw_float_geometry.key.arg (objectName ()), default_floating_size).toRect (); - QWidget dummy; - dummy.setGeometry (m_recent_float_geom); + QWidget dummy; + dummy.setGeometry (m_recent_float_geom); - if (QApplication::desktop ()->screenNumber (&dummy) == -1) - m_recent_float_geom = default_floating_size; + if (QApplication::desktop ()->screenNumber (&dummy) == -1) + m_recent_float_geom = default_floating_size; - // 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 ()), - default_dock_size); - if (dock_geom.canConvert (QMetaType::QRect)) - m_recent_dock_geom = dock_geom.toRect (); - else - m_recent_dock_geom = dw_dock_geometry.def.toRect (); - } + // 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 ()), + default_dock_size); + 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