Delay initialization of QQnxRootWindow until first access.
QtWebProcess, for example, doesn't create any QWindow, so it doesn't need any root window. This fixes Webkit2 rendering on QNX. Change-Id: I1d4c0dd20869798ba2bcd15f9d96e5fca4beb48e Reviewed-by: Sean Harmer <sean.harmer@kdab.com>bb10
parent
edd2d9bd0a
commit
e02ecba61f
|
|
@ -57,7 +57,7 @@
|
|||
|
||||
static const int MAGIC_ZORDER_FOR_NO_NAV = 10;
|
||||
|
||||
QQnxRootWindow::QQnxRootWindow(QQnxScreen *screen)
|
||||
QQnxRootWindow::QQnxRootWindow(const QQnxScreen *screen)
|
||||
: m_screen(screen),
|
||||
m_window(0),
|
||||
m_windowGroupName()
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ class QQnxScreen;
|
|||
class QQnxRootWindow
|
||||
{
|
||||
public:
|
||||
QQnxRootWindow(QQnxScreen *screen);
|
||||
QQnxRootWindow(const QQnxScreen *screen);
|
||||
~QQnxRootWindow();
|
||||
|
||||
screen_window_t nativeHandle() const { return m_window; }
|
||||
|
|
@ -71,7 +71,7 @@ public:
|
|||
private:
|
||||
void createWindowGroup();
|
||||
|
||||
QQnxScreen *m_screen;
|
||||
const QQnxScreen *m_screen;
|
||||
screen_window_t m_window;
|
||||
QByteArray m_windowGroupName;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -106,7 +106,6 @@ static QSize determineScreenSize(screen_display_t display, bool primaryScreen) {
|
|||
QQnxScreen::QQnxScreen(screen_context_t screenContext, screen_display_t display, bool primaryScreen)
|
||||
: m_screenContext(screenContext),
|
||||
m_display(display),
|
||||
m_rootWindow(),
|
||||
m_primaryScreen(primaryScreen),
|
||||
m_posted(false),
|
||||
m_keyboardHeight(0),
|
||||
|
|
@ -145,10 +144,6 @@ QQnxScreen::QQnxScreen(screen_context_t screenContext, screen_display_t display,
|
|||
m_currentPhysicalSize = m_initialPhysicalSize = screenSize;
|
||||
else
|
||||
m_currentPhysicalSize = m_initialPhysicalSize = screenSize.transposed();
|
||||
|
||||
// We only create the root window if we are the primary display.
|
||||
if (primaryScreen)
|
||||
m_rootWindow = QSharedPointer<QQnxRootWindow>(new QQnxRootWindow(this));
|
||||
}
|
||||
|
||||
QQnxScreen::~QQnxScreen()
|
||||
|
|
@ -248,8 +243,8 @@ void QQnxScreen::setRotation(int rotation)
|
|||
// Check if rotation changed
|
||||
if (m_currentRotation != rotation) {
|
||||
// Update rotation of root window
|
||||
if (m_rootWindow)
|
||||
m_rootWindow->setRotation(rotation);
|
||||
if (rootWindow())
|
||||
rootWindow()->setRotation(rotation);
|
||||
|
||||
const QRect previousScreenGeometry = geometry();
|
||||
|
||||
|
|
@ -265,16 +260,16 @@ void QQnxScreen::setRotation(int rotation)
|
|||
// Resize root window if we've rotated 90 or 270 from previous orientation
|
||||
if (isOrthogonal(m_currentRotation, rotation)) {
|
||||
qScreenDebug() << Q_FUNC_INFO << "resize, size =" << m_currentGeometry.size();
|
||||
if (m_rootWindow)
|
||||
m_rootWindow->resize(m_currentGeometry.size());
|
||||
if (rootWindow())
|
||||
rootWindow()->resize(m_currentGeometry.size());
|
||||
|
||||
if (m_primaryScreen)
|
||||
resizeWindows(previousScreenGeometry);
|
||||
} else {
|
||||
// TODO: Find one global place to flush display updates
|
||||
// Force immediate display update if no geometry changes required
|
||||
if (m_rootWindow)
|
||||
m_rootWindow->flush();
|
||||
if (rootWindow())
|
||||
rootWindow()->flush();
|
||||
}
|
||||
|
||||
// Save new rotation
|
||||
|
|
@ -491,8 +486,8 @@ void QQnxScreen::onWindowPost(QQnxWindow *window)
|
|||
// post app window (so navigator will show it) after first child window
|
||||
// has posted; this only needs to happen once as the app window's content
|
||||
// never changes
|
||||
if (!m_posted && m_rootWindow) {
|
||||
m_rootWindow->post();
|
||||
if (!m_posted && rootWindow()) {
|
||||
rootWindow()->post();
|
||||
m_posted = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -573,4 +568,13 @@ void QQnxScreen::deactivateWindowGroup(const QByteArray &id)
|
|||
QWindowSystemInterface::handleWindowActivated(0);
|
||||
}
|
||||
|
||||
QSharedPointer<QQnxRootWindow> QQnxScreen::rootWindow() const
|
||||
{
|
||||
// We only create the root window if we are the primary display.
|
||||
if (m_primaryScreen && !m_rootWindow)
|
||||
m_rootWindow = QSharedPointer<QQnxRootWindow>(new QQnxRootWindow(this));
|
||||
|
||||
return m_rootWindow;
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ public:
|
|||
int nativeFormat() const { return (depth() == 32) ? SCREEN_FORMAT_RGBA8888 : SCREEN_FORMAT_RGB565; }
|
||||
screen_display_t nativeDisplay() const { return m_display; }
|
||||
screen_context_t nativeContext() const { return m_screenContext; }
|
||||
const char *windowGroupName() const { return m_rootWindow->groupName().constData(); }
|
||||
const char *windowGroupName() const { return rootWindow()->groupName().constData(); }
|
||||
|
||||
QQnxWindow *findWindow(screen_window_t windowHandle);
|
||||
|
||||
|
|
@ -93,7 +93,7 @@ public:
|
|||
|
||||
void onWindowPost(QQnxWindow *window);
|
||||
|
||||
QSharedPointer<QQnxRootWindow> rootWindow() const { return m_rootWindow; }
|
||||
QSharedPointer<QQnxRootWindow> rootWindow() const;
|
||||
|
||||
public Q_SLOTS:
|
||||
void setRotation(int rotation);
|
||||
|
|
@ -114,8 +114,8 @@ private:
|
|||
|
||||
screen_context_t m_screenContext;
|
||||
screen_display_t m_display;
|
||||
QSharedPointer<QQnxRootWindow> m_rootWindow;
|
||||
bool m_primaryScreen;
|
||||
mutable QSharedPointer<QQnxRootWindow> m_rootWindow;
|
||||
const bool m_primaryScreen;
|
||||
bool m_posted;
|
||||
|
||||
int m_initialRotation;
|
||||
|
|
|
|||
Loading…
Reference in New Issue