Qt: Force redraw the display when restoring after minimized
This commit is contained in:
parent
361bedc2c3
commit
1d9bcb2a48
|
@ -14,6 +14,7 @@
|
|||
#include <QtCore/QFileInfo>
|
||||
#include <QtCore/QUrl>
|
||||
#include <QtGui/QDesktopServices>
|
||||
#include <QtGui/QWindowStateChangeEvent>
|
||||
#include <QtWidgets/QFileDialog>
|
||||
#include <QtWidgets/QMessageBox>
|
||||
#include <cmath>
|
||||
|
@ -568,3 +569,15 @@ void MainWindow::closeEvent(QCloseEvent* event)
|
|||
m_host_interface->synchronousPowerOffSystem();
|
||||
QMainWindow::closeEvent(event);
|
||||
}
|
||||
|
||||
void MainWindow::changeEvent(QEvent* event)
|
||||
{
|
||||
if (static_cast<QWindowStateChangeEvent*>(event)->oldState()& Qt::WindowMinimized)
|
||||
{
|
||||
// TODO: This should check the render-to-main option.
|
||||
if (m_display_widget)
|
||||
m_host_interface->redrawDisplayWindow();
|
||||
}
|
||||
|
||||
QMainWindow::changeEvent(event);
|
||||
}
|
||||
|
|
|
@ -55,6 +55,7 @@ private Q_SLOTS:
|
|||
|
||||
protected:
|
||||
void closeEvent(QCloseEvent* event) override;
|
||||
void changeEvent(QEvent* event) override;
|
||||
|
||||
private:
|
||||
void setupAdditionalUi();
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include <QtGui/QKeyEvent>
|
||||
#include <QtGui/QScreen>
|
||||
#include <QtGui/QWindow>
|
||||
#include <QtGui/QWindowStateChangeEvent>
|
||||
#include <cmath>
|
||||
|
||||
QtDisplayWidget::QtDisplayWidget(QtHostInterface* host_interface, QWidget* parent)
|
||||
|
@ -144,6 +145,16 @@ bool QtDisplayWidget::event(QEvent* event)
|
|||
return true;
|
||||
}
|
||||
|
||||
case QEvent::WindowStateChange:
|
||||
{
|
||||
QWidget::event(event);
|
||||
|
||||
if (static_cast<QWindowStateChangeEvent*>(event)->oldState() & Qt::WindowMinimized)
|
||||
emit windowRestoredEvent();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
default:
|
||||
return QWidget::event(event);
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ public:
|
|||
|
||||
Q_SIGNALS:
|
||||
void windowResizedEvent(int width, int height);
|
||||
void windowRestoredEvent();
|
||||
|
||||
protected:
|
||||
qreal getDevicePixelRatioFromScreen() const;
|
||||
|
|
|
@ -189,6 +189,7 @@ QtDisplayWidget* QtHostInterface::createDisplayWidget()
|
|||
m_display_widget = new OpenGLDisplayWidget(this, nullptr);
|
||||
#endif
|
||||
connect(m_display_widget, &QtDisplayWidget::windowResizedEvent, this, &QtHostInterface::onDisplayWidgetResized);
|
||||
connect(m_display_widget, &QtDisplayWidget::windowRestoredEvent, this, &QtHostInterface::redrawDisplayWindow);
|
||||
return m_display_widget;
|
||||
}
|
||||
|
||||
|
@ -242,6 +243,20 @@ void QtHostInterface::onDisplayWidgetResized(int width, int height)
|
|||
renderDisplay();
|
||||
}
|
||||
|
||||
void QtHostInterface::redrawDisplayWindow()
|
||||
{
|
||||
if (!isOnWorkerThread())
|
||||
{
|
||||
QMetaObject::invokeMethod(this, "redrawDisplayWindow", Qt::QueuedConnection);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!m_display_widget || !m_system)
|
||||
return;
|
||||
|
||||
renderDisplay();
|
||||
}
|
||||
|
||||
bool QtHostInterface::AcquireHostDisplay()
|
||||
{
|
||||
DebugAssert(!m_display_widget);
|
||||
|
|
|
@ -102,6 +102,7 @@ public Q_SLOTS:
|
|||
void startDumpingAudio();
|
||||
void stopDumpingAudio();
|
||||
void saveScreenshot();
|
||||
void redrawDisplayWindow();
|
||||
|
||||
/// Enables controller polling even without a system active. Must be matched by a call to
|
||||
/// disableBackgroundControllerPolling.
|
||||
|
|
Loading…
Reference in New Issue