diff --git a/src/config.c b/src/config.c index 13cd82a9e..391d1d301 100644 --- a/src/config.c +++ b/src/config.c @@ -938,12 +938,12 @@ load_monitor(int monitor_index) if (monitor_index == 0) { /* Migrate configs */ - ptr = config_get_string("General", "window_coordinates", "0, 0, 0, 0"); + ptr = config_get_string("General", "window_coordinates", NULL); config_delete_var("General", "window_coordinates"); } - if (!ptr) ptr = config_get_string(monitor_config_name, "window_coordinates", "0, 0, 0, 0"); - snprintf(monitor_config_name, sizeof(monitor_config_name), "Monitor #%i", monitor_index + 1); + snprintf(monitor_config_name, sizeof(monitor_config_name), "Monitor #%i", monitor_index + 1); + if (!ptr) ptr = config_get_string(monitor_config_name, "window_coordinates", "0, 0, 0, 0"); if (window_remember || (vid_resize & 2)) sscanf(ptr, "%i, %i, %i, %i", &monitor_settings[monitor_index].mon_window_x, &monitor_settings[monitor_index].mon_window_y, &monitor_settings[monitor_index].mon_window_w, &monitor_settings[monitor_index].mon_window_h); diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index f285b5745..30ca74ecd 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -32,6 +32,7 @@ extern "C" { void HardwareRenderer::resizeGL(int w, int h) { + m_context->makeCurrent(this); glViewport(0, 0, qRound(w * devicePixelRatio()), qRound(h * devicePixelRatio())); } diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 198631d24..b9bf1c3de 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -298,12 +298,17 @@ int main(int argc, char* argv[]) { plat_resize_monitor(monitors[i].mon_scrnsz_x, monitors[i].mon_scrnsz_y, i); } } + + if (is_quit) { + QApplication::quit(); + } }); resizeTimer.start(); auto ret = app.exec(); cpu_thread_run = 0; main_thread->join(); + pc_close(nullptr); socket.close(); return ret; diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index abf3d3dc1..89d33f4ee 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -550,18 +550,26 @@ void MainWindow::closeEvent(QCloseEvent *event) { window_x = this->geometry().x(); window_y = this->geometry().y(); } + for (int i = 1; i < MONITORS_NUM; i++) { + if (renderers[i]) { + monitor_settings[i].mon_window_w = renderers[i]->geometry().width(); + monitor_settings[i].mon_window_h = renderers[i]->geometry().height(); + if (!QApplication::platformName().contains("wayland")) continue; + monitor_settings[i].mon_window_x = renderers[i]->geometry().x(); + monitor_settings[i].mon_window_y = renderers[i]->geometry().y(); + } + } } - qt_nvr_save(); - config_save(); if (ui->stackedWidget->mouse_exit_func) ui->stackedWidget->mouse_exit_func(); ui->stackedWidget->switchRenderer(RendererStack::Renderer::Software); - for (int i = 1; i < MONITORS_NUM; i++) { - if (renderers[i]) renderers[i]->close(); - } + + qt_nvr_save(); + config_save(); QApplication::processEvents(); + cpu_thread_run = 0; event->accept(); } @@ -577,16 +585,17 @@ void MainWindow::initRendererMonitorSlot(int monitor_index) }); secondaryRenderer->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint); secondaryRenderer->setWindowTitle(QObject::tr("86Box Monitor #") + QString::number(monitor_index + 1)); - if (window_remember) { - secondaryRenderer->setGeometry(monitor_settings[monitor_index].mon_window_x, - monitor_settings[monitor_index].mon_window_y, - monitor_settings[monitor_index].mon_window_w, - monitor_settings[monitor_index].mon_window_h); - } + if (vid_resize == 2) { secondaryRenderer->setFixedSize(fixed_size_x, fixed_size_y); } secondaryRenderer->show(); + if (window_remember) { + secondaryRenderer->setGeometry(monitor_settings[monitor_index].mon_window_x < 120 ? 120 : monitor_settings[monitor_index].mon_window_x, + monitor_settings[monitor_index].mon_window_y < 120 ? 120 : monitor_settings[monitor_index].mon_window_y, + monitor_settings[monitor_index].mon_window_w > 2048 ? 2048 : monitor_settings[monitor_index].mon_window_w, + monitor_settings[monitor_index].mon_window_h > 2048 ? 2048 : monitor_settings[monitor_index].mon_window_h); + } secondaryRenderer->switchRenderer((RendererStack::Renderer)vid_api); secondaryRenderer->setWindowIcon(this->windowIcon()); } @@ -614,6 +623,7 @@ void MainWindow::showEvent(QShowEvent *event) { if (shownonce) return; shownonce = true; if (window_remember && !QApplication::platformName().contains("wayland")) { + fprintf(stderr, "Geom: %i, %i, %i, %i\n", window_x, window_y, window_w, window_h); setGeometry(window_x, window_y, window_w, window_h + menuBar()->height() + (hide_status_bar ? 0 : statusBar()->height()) + (hide_tool_bar ? 0 : ui->toolBar->height())); } if (vid_resize == 2) { @@ -625,13 +635,6 @@ void MainWindow::showEvent(QShowEvent *event) { monitors[0].mon_scrnsz_x = fixed_size_x; monitors[0].mon_scrnsz_y = fixed_size_y; } - else if (window_remember && vid_resize == 1) { - ui->stackedWidget->setFixedSize(window_w, window_h); - adjustSize(); - ui->stackedWidget->setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); - monitors[0].mon_scrnsz_x = window_w; - monitors[0].mon_scrnsz_y = window_h; - } } void MainWindow::on_actionKeyboard_requires_capture_triggered() { @@ -1603,7 +1606,6 @@ void MainWindow::on_actionResizable_window_triggered(bool checked) { for (int i = 1; i < MONITORS_NUM; i++) { if (monitors[i].target_buffer) { renderers[i]->setWindowFlag(Qt::WindowMaximizeButtonHint); - renderers[i]->setWindowFlag(Qt::MSWindowsFixedSizeDialogHint, false); renderers[i]->setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); } } @@ -1613,8 +1615,7 @@ void MainWindow::on_actionResizable_window_triggered(bool checked) { setWindowFlag(Qt::MSWindowsFixedSizeDialogHint); for (int i = 1; i < MONITORS_NUM; i++) { if (monitors[i].target_buffer) { - renderers[i]->setWindowFlag(Qt::WindowMaximizeButtonHint); - renderers[i]->setWindowFlag(Qt::MSWindowsFixedSizeDialogHint, false); + renderers[i]->setWindowFlag(Qt::WindowMaximizeButtonHint, false); emit resizeContentsMonitor(monitors[i].mon_scrnsz_x, monitors[i].mon_scrnsz_y, i); } } @@ -1851,6 +1852,14 @@ void MainWindow::on_actionRemember_size_and_position_triggered() window_x = geometry().x(); window_y = geometry().y(); } + for (int i = 1; i < MONITORS_NUM; i++) { + if (window_remember && renderers[i]) { + monitor_settings[i].mon_window_w = renderers[i]->geometry().width(); + monitor_settings[i].mon_window_h = renderers[i]->geometry().height(); + monitor_settings[i].mon_window_x = renderers[i]->geometry().x(); + monitor_settings[i].mon_window_y = renderers[i]->geometry().y(); + } + } ui->actionRemember_size_and_position->setChecked(window_remember); }