Streamline code in QDesktopWidget.

Task-number: QTBUG-44070
Task-number: QTBUG-44213
Change-Id: Icbf0547eb521b9f3fcc725066ee4903226ecc630
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
bb10
Friedemann Kleint 2015-02-04 09:05:27 +01:00
parent b1b262559c
commit 2e1a76a594
2 changed files with 15 additions and 22 deletions

View File

@ -72,29 +72,22 @@ void QDesktopWidgetPrivate::_q_updateScreens()
const QList<QScreen *> screenList = QGuiApplication::screens();
const int targetLength = screenList.length();
const int oldLength = screens.length();
int currentLength = oldLength;
// Add or remove screen widgets as necessary
if(currentLength > targetLength) {
QDesktopScreenWidget *screen;
while (currentLength-- > targetLength) {
screen = screens.takeLast();
delete screen;
}
}
else if (currentLength < targetLength) {
while (currentLength < targetLength) {
QScreen *qScreen = screenList.at(currentLength);
QDesktopScreenWidget *screenWidget = new QDesktopScreenWidget(currentLength++);
screenWidget->setGeometry(qScreen->geometry());
QObject::connect(qScreen, SIGNAL(geometryChanged(QRect)),
q, SLOT(_q_updateScreens()), Qt::QueuedConnection);
QObject::connect(qScreen, SIGNAL(availableGeometryChanged(QRect)),
q, SLOT(_q_availableGeometryChanged()), Qt::QueuedConnection);
QObject::connect(qScreen, SIGNAL(destroyed()),
q, SLOT(_q_updateScreens()), Qt::QueuedConnection);
screens.append(screenWidget);
}
while (screens.size() > targetLength)
delete screens.takeLast();
for (int currentLength = screens.size(); currentLength < targetLength; ++currentLength) {
QScreen *qScreen = screenList.at(currentLength);
QDesktopScreenWidget *screenWidget = new QDesktopScreenWidget(currentLength);
screenWidget->setGeometry(qScreen->geometry());
QObject::connect(qScreen, SIGNAL(geometryChanged(QRect)),
q, SLOT(_q_updateScreens()), Qt::QueuedConnection);
QObject::connect(qScreen, SIGNAL(availableGeometryChanged(QRect)),
q, SLOT(_q_availableGeometryChanged()), Qt::QueuedConnection);
QObject::connect(qScreen, SIGNAL(destroyed()),
q, SLOT(_q_updateScreens()), Qt::QueuedConnection);
screens.append(screenWidget);
}
QRegion virtualGeometry;

View File

@ -65,7 +65,7 @@ class QDesktopWidgetPrivate : public QWidgetPrivate {
Q_DECLARE_PUBLIC(QDesktopWidget)
public:
~QDesktopWidgetPrivate() {foreach(QDesktopScreenWidget *s, screens) delete s; }
~QDesktopWidgetPrivate() { qDeleteAll(screens); }
void _q_updateScreens();
void _q_availableGeometryChanged();