summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp
diff options
context:
space:
mode:
authorSergio Martins <sergio.martins.qnx@kdab.com>2013-01-30 13:58:12 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-01-31 18:24:16 +0100
commit29a78d48d0d3c162fad11b050cb50c951d4a484c (patch)
tree46ae0a1171f46eb41f73db15cbb2c01eb208234c /src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp
parent3dc47622a469ded1c99397fdedc2053b73d57189 (diff)
QNX: Don't crash if we unplug the primary display.
The QPA plugin assumes in several places that we have at least one QScreen. Even if patching the plugin to support 0 screens, Qt itself crashes when dereferencing a null paint device while synching the backing store. Change-Id: I2ac504a447aff811d6c07ab857340a3433557cdc Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp')
-rw-r--r--src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp b/src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp
index 8b41465add..4412bb34bd 100644
--- a/src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp
+++ b/src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp
@@ -42,6 +42,7 @@
#include "qqnxscreeneventhandler.h"
#include "qqnxintegration.h"
#include "qqnxkeytranslator.h"
+#include "qqnxscreen.h"
#include <QDebug>
#include <QGuiApplication>
@@ -487,9 +488,18 @@ void QQnxScreenEventHandler::handleDisplayEvent(screen_event_t event)
m_qnxIntegration->createDisplay(nativeDisplay, false /* not primary, we assume */);
}
} else if (!isAttached) {
- // libscreen display is deactivated, let's remove the QQnxScreen / QScreen
- qScreenEventDebug() << "removing display";
- m_qnxIntegration->removeDisplay(screen);
+ // We never remove the primary display, the qpa plugin doesn't support that and it crashes.
+ // To support it, this would be needed:
+ // - Adjust all qnx qpa code which uses screens
+ // - Make QWidgetBackingStore not dereference a null paint device
+ // - Create platform resources ( QQnxWindow ) for all QWindow because they would be deleted
+ // when you delete the screen
+
+ if (!screen->isPrimaryScreen()) {
+ // libscreen display is deactivated, let's remove the QQnxScreen / QScreen
+ qScreenEventDebug() << "removing display";
+ m_qnxIntegration->removeDisplay(screen);
+ }
}
}