Revert "Remove deprecated screen maintenance functions in QPlatformIntegration"

This reverts commit 7a64ffb7738dc975b5008800901c8cd8ab238a0f.

This change landed in 5.13 too early, so there is no baseline with both APIs in
dev. This will be reverted later when the fixes for leaf modules landed.

Task-number: QTBUG-74816
Change-Id: Ie5ee41fbf6be53b8fcb4289ac1ec3974e5bf6e42
Reviewed-by: Jesus Fernandez <Jesus.Fernandez@qt.io>
This commit is contained in:
Liang Qi 2019-03-29 10:11:27 +01:00
parent 6ed2ea86db
commit 300940a6c9
5 changed files with 64 additions and 13 deletions

View File

@ -462,6 +462,44 @@ QList<int> QPlatformIntegration::possibleKeys(const QKeyEvent *) const
return QList<int>(); return QList<int>();
} }
/*!
\deprecated Use QWindowSystemInterface::handleScreenAdded instead.
*/
void QPlatformIntegration::screenAdded(QPlatformScreen *ps, bool isPrimary)
{
QWindowSystemInterface::handleScreenAdded(ps, isPrimary);
}
/*!
\deprecated Use QWindowSystemInterface::handleScreenRemoved instead.
*/
void QPlatformIntegration::removeScreen(QScreen *screen)
{
const bool wasPrimary = (!QGuiApplicationPrivate::screen_list.isEmpty() && QGuiApplicationPrivate::screen_list.at(0) == screen);
QGuiApplicationPrivate::screen_list.removeOne(screen);
QGuiApplicationPrivate::resetCachedDevicePixelRatio();
if (wasPrimary && qGuiApp && !QGuiApplicationPrivate::screen_list.isEmpty())
emit qGuiApp->primaryScreenChanged(QGuiApplicationPrivate::screen_list.at(0));
}
/*!
\deprecated Use QWindowSystemInterface::handleScreenRemoved instead.
*/
void QPlatformIntegration::destroyScreen(QPlatformScreen *platformScreen)
{
QWindowSystemInterface::handleScreenRemoved(platformScreen);
}
/*!
\deprecated Use QWindowSystemInterface::handlePrimaryScreenChanged instead.
*/
void QPlatformIntegration::setPrimaryScreen(QPlatformScreen *newPrimary)
{
QWindowSystemInterface::handlePrimaryScreenChanged(newPrimary);
}
QStringList QPlatformIntegration::themeNames() const QStringList QPlatformIntegration::themeNames() const
{ {
return QStringList(); return QStringList();

View File

@ -192,6 +192,10 @@ public:
#endif #endif
virtual void setApplicationIcon(const QIcon &icon) const; virtual void setApplicationIcon(const QIcon &icon) const;
#if QT_DEPRECATED_SINCE(5, 12)
QT_DEPRECATED_X("Use QWindowSystemInterface::handleScreenRemoved") void removeScreen(QScreen *screen);
#endif
virtual void beep() const; virtual void beep() const;
#if QT_CONFIG(vulkan) || defined(Q_CLANG_QDOC) #if QT_CONFIG(vulkan) || defined(Q_CLANG_QDOC)
@ -200,6 +204,12 @@ public:
protected: protected:
QPlatformIntegration() = default; QPlatformIntegration() = default;
#if QT_DEPRECATED_SINCE(5, 12)
QT_DEPRECATED_X("Use QWindowSystemInterface::handleScreenAdded") void screenAdded(QPlatformScreen *screen, bool isPrimary = false);
QT_DEPRECATED_X("Use QWindowSystemInterface::handleScreenRemoved") void destroyScreen(QPlatformScreen *screen);
QT_DEPRECATED_X("Use QWindowSystemInterface::handlePrimaryScreenChanged") void setPrimaryScreen(QPlatformScreen *newPrimary);
#endif
}; };
QT_END_NAMESPACE QT_END_NAMESPACE

View File

@ -62,6 +62,10 @@ QPlatformScreen::~QPlatformScreen()
Q_D(QPlatformScreen); Q_D(QPlatformScreen);
if (d->screen) { if (d->screen) {
qWarning("Manually deleting a QPlatformScreen. Call QWindowSystemInterface::handleScreenRemoved instead."); qWarning("Manually deleting a QPlatformScreen. Call QWindowSystemInterface::handleScreenRemoved instead.");
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
QGuiApplicationPrivate::platformIntegration()->removeScreen(d->screen);
QT_WARNING_POP
delete d->screen; delete d->screen;
} }
} }

View File

@ -106,18 +106,9 @@ void QScreenPrivate::setPlatformScreen(QPlatformScreen *screen)
*/ */
QScreen::~QScreen() QScreen::~QScreen()
{ {
// Remove screen if (!qApp)
const bool wasPrimary = QGuiApplication::primaryScreen() == this;
QGuiApplicationPrivate::screen_list.removeOne(this);
QGuiApplicationPrivate::resetCachedDevicePixelRatio();
if (!qGuiApp)
return; return;
QScreen *newPrimaryScreen = QGuiApplication::primaryScreen();
if (wasPrimary && newPrimaryScreen)
emit qGuiApp->primaryScreenChanged(newPrimaryScreen);
// Allow clients to manage windows that are affected by the screen going // Allow clients to manage windows that are affected by the screen going
// away, before we fall back to moving them to the primary screen. // away, before we fall back to moving them to the primary screen.
emit qApp->screenRemoved(this); emit qApp->screenRemoved(this);
@ -125,8 +116,11 @@ QScreen::~QScreen()
if (QGuiApplication::closingDown()) if (QGuiApplication::closingDown())
return; return;
bool movingFromVirtualSibling = newPrimaryScreen QScreen *primaryScreen = QGuiApplication::primaryScreen();
&& newPrimaryScreen->handle()->virtualSiblings().contains(handle()); if (this == primaryScreen)
return;
bool movingFromVirtualSibling = primaryScreen && primaryScreen->handle()->virtualSiblings().contains(handle());
// Move any leftover windows to the primary screen // Move any leftover windows to the primary screen
const auto allWindows = QGuiApplication::allWindows(); const auto allWindows = QGuiApplication::allWindows();
@ -135,7 +129,7 @@ QScreen::~QScreen()
continue; continue;
const bool wasVisible = window->isVisible(); const bool wasVisible = window->isVisible();
window->setScreen(newPrimaryScreen); window->setScreen(primaryScreen);
// Re-show window if moved from a virtual sibling screen. Otherwise // Re-show window if moved from a virtual sibling screen. Otherwise
// leave it up to the application developer to show the window. // leave it up to the application developer to show the window.

View File

@ -818,6 +818,11 @@ void QWindowSystemInterface::handleScreenAdded(QPlatformScreen *ps, bool isPrima
*/ */
void QWindowSystemInterface::handleScreenRemoved(QPlatformScreen *platformScreen) void QWindowSystemInterface::handleScreenRemoved(QPlatformScreen *platformScreen)
{ {
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
QGuiApplicationPrivate::platformIntegration()->removeScreen(platformScreen->screen());
QT_WARNING_POP
// Important to keep this order since the QSceen doesn't own the platform screen // Important to keep this order since the QSceen doesn't own the platform screen
delete platformScreen->screen(); delete platformScreen->screen();
delete platformScreen; delete platformScreen;