Skip to content

Commit 5b7dfb9

Browse files
authored
Merge pull request The-OpenROAD-Project#7967 from The-OpenROAD-Project-staging/gui-window-size
gui: delay geometry update to showEvent
2 parents 59ef9a9 + a0e3fca commit 5b7dfb9

File tree

2 files changed

+35
-13
lines changed

2 files changed

+35
-13
lines changed

src/gui/src/mainWindow.cpp

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -92,16 +92,6 @@ MainWindow::MainWindow(bool load_settings, QWidget* parent)
9292
find_dialog_(new FindObjectDialog(this)),
9393
goto_dialog_(new GotoLocationDialog(this, viewers_))
9494
{
95-
// Size and position the window
96-
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
97-
QSize size = screen()->availableGeometry().size();
98-
#else
99-
QSize size = QDesktopWidget().availableGeometry(this).size();
100-
#endif
101-
102-
resize(size * 0.8);
103-
move(size.width() * 0.1, size.height() * 0.1);
104-
10595
QFont font("Monospace");
10696
font.setStyleHint(QFont::Monospace);
10797
script_->setWidgetFont(font);
@@ -399,8 +389,10 @@ MainWindow::MainWindow(bool load_settings, QWidget* parent)
399389
// Restore the settings (if none this is a no-op)
400390
QSettings settings("OpenRoad Project", "openroad");
401391
settings.beginGroup("main");
402-
restoreGeometry(settings.value("geometry").toByteArray());
403-
restoreState(settings.value("state").toByteArray());
392+
// Save these for the showEvent as the window manager may not respect them
393+
// if restore here.
394+
saved_geometry_ = settings.value("geometry").toByteArray();
395+
saved_state_ = settings.value("state").toByteArray();
404396
QApplication::setFont(
405397
settings.value("font", QApplication::font()).value<QFont>());
406398
hide_option_->setChecked(
@@ -438,6 +430,31 @@ MainWindow::MainWindow(bool load_settings, QWidget* parent)
438430
};
439431
}
440432

433+
void MainWindow::showEvent(QShowEvent* event)
434+
{
435+
QWidget::showEvent(event);
436+
437+
if (!first_show_) {
438+
return;
439+
}
440+
441+
if (saved_geometry_.has_value() && saved_state_.has_value()) {
442+
restoreGeometry(saved_geometry_.value());
443+
restoreState(saved_state_.value());
444+
} else {
445+
// Default size and position the window
446+
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
447+
QSize size = screen()->availableGeometry().size();
448+
#else
449+
QSize size = QDesktopWidget().availableGeometry(this).size();
450+
#endif
451+
452+
resize(size * 0.8);
453+
move(size.width() * 0.1, size.height() * 0.1);
454+
}
455+
first_show_ = false;
456+
}
457+
441458
MainWindow::~MainWindow()
442459
{
443460
auto* gui = Gui::get();
@@ -1862,4 +1879,4 @@ void MainWindow::reportSlackHistogramPaths(
18621879

18631880
timing_widget_->reportSlackHistogramPaths(report_pins, path_group_name);
18641881
}
1865-
} // namespace gui
1882+
} // namespace gui

src/gui/src/mainWindow.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@ class MainWindow : public QMainWindow, public odb::dbDatabaseObserver
276276
// used to check if user intends to close Openroad or just the GUI.
277277
void closeEvent(QCloseEvent* event) override;
278278
void keyPressEvent(QKeyEvent* event) override;
279+
void showEvent(QShowEvent* event) override;
279280

280281
private slots:
281282
void setBlock(odb::dbBlock* block);
@@ -307,6 +308,10 @@ class MainWindow : public QMainWindow, public odb::dbDatabaseObserver
307308

308309
int arrow_keys_scroll_step_;
309310

311+
bool first_show_{true};
312+
std::optional<QByteArray> saved_geometry_;
313+
std::optional<QByteArray> saved_state_;
314+
310315
// All but viewer_ are owned by this widget. Qt will
311316
// handle destroying the children.
312317
DisplayControls* controls_;

0 commit comments

Comments
 (0)