Fit media frames inside monitors and close video before widget teardown

This commit is contained in:
evgeny committed 2026-10-31 18:01:41 +01:00
1 parent 703f4a4a60
commit 8ab294fb30
2 files changed
+27 -9

No files matched your search

+14 -8
View File
@@ -396,22 +396,28 @@ void MainWindow::restoreMediaWindowGeometry(QWidget* window) {
if (!available.isValid()) {
DEBUG_ERROR(DEBUG_CATEGORY_GENERAL, "MediaWindow: monitor has no available area name=%s", qPrintable(display->name())); return;
}
window->setMinimumSize(window->minimumSize().boundedTo(available.size()));
window->winId();
window->windowHandle()->setScreen(display);
const QMargins margins = window->windowHandle()->frameMargins();
const QRect bounds = available.marginsRemoved(margins);
if (!bounds.isValid()) {
DEBUG_ERROR(DEBUG_CATEGORY_GENERAL, "MediaWindow: monitor area cannot fit window frame name=%s frame=%d,%d,%d,%d",
qPrintable(display->name()), margins.left(), margins.top(), margins.right(), margins.bottom()); return;
}
window->setMinimumSize(window->minimumSize().boundedTo(bounds.size()));
const QSize size = QSize(saved ? savedWidth : 800, saved ? savedHeight : 600)
.expandedTo(window->minimumSize()).boundedTo(available.size());
qint64 x = available.x() + (available.width() - size.width()) / 2;
qint64 y = available.y() + (available.height() - size.height()) / 2;
.expandedTo(window->minimumSize()).boundedTo(bounds.size());
qint64 x = bounds.x() + (bounds.width() - size.width()) / 2;
qint64 y = bounds.y() + (bounds.height() - size.height()) / 2;
if (saved) {
x = qint64(m_mediaWindowState.value("x").toInt()) - m_mediaWindowState.value("screen_x").toInt() + available.x();
y = qint64(m_mediaWindowState.value("y").toInt()) - m_mediaWindowState.value("screen_y").toInt() + available.y();
}
const QRect target(int(qBound(qint64(available.left()), x, qint64(available.right() - size.width() + 1))),
int(qBound(qint64(available.top()), y, qint64(available.bottom() - size.height() + 1))), size.width(), size.height());
const QRect target(int(qBound(qint64(bounds.left()), x, qint64(bounds.right() - size.width() + 1))),
int(qBound(qint64(bounds.top()), y, qint64(bounds.bottom() - size.height() + 1))), size.width(), size.height());
if (saved && (target.x() != x || target.y() != y || size != QSize(savedWidth, savedHeight)))
DEBUG_INFO(DEBUG_CATEGORY_GENERAL, "MediaWindow: fitted saved rect into monitor=%s area=%d,%d %dx%d",
qPrintable(display->name()), available.x(), available.y(), available.width(), available.height());
window->winId();
window->windowHandle()->setScreen(display);
window->setGeometry(target);
window->setWindowState(!saved || mode == "normal" ? Qt::WindowNoState
: mode == "fullscreen" ? Qt::WindowFullScreen : Qt::WindowMaximized);