QNX: Don't create a platform window for a desktop widget
As I understand it the QDesktopWidget does only serve the purpose of returning the screen size and number. It does not need a real platform window. This removes some overhead, because a desktop widget is always created. Change-Id: I8c0d86bbb46b1f32094fda1592df795af6bb423f Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
This commit is contained in:
parent
c7ed644fd1
commit
d032ff6388
@ -64,10 +64,13 @@ QQnxRasterWindow::QQnxRasterWindow(QWindow *window, screen_context_t context, bo
|
|||||||
initWindow();
|
initWindow();
|
||||||
|
|
||||||
// Set window usage
|
// Set window usage
|
||||||
|
if (window->type() == Qt::Desktop)
|
||||||
|
return;
|
||||||
|
|
||||||
const int val = SCREEN_USAGE_NATIVE | SCREEN_USAGE_READ | SCREEN_USAGE_WRITE;
|
const int val = SCREEN_USAGE_NATIVE | SCREEN_USAGE_READ | SCREEN_USAGE_WRITE;
|
||||||
const int result = screen_set_window_property_iv(nativeHandle(), SCREEN_PROPERTY_USAGE, &val);
|
const int result = screen_set_window_property_iv(nativeHandle(), SCREEN_PROPERTY_USAGE, &val);
|
||||||
if (result != 0)
|
if (result != 0)
|
||||||
qFatal("QQnxEglWindow: failed to set window alpha usage, errno=%d", errno);
|
qFatal("QQnxRasterWindow: failed to set window alpha usage, errno=%d", errno);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QQnxRasterWindow::post(const QRegion &dirty)
|
void QQnxRasterWindow::post(const QRegion &dirty)
|
||||||
|
@ -174,7 +174,7 @@ QQnxWindow::QQnxWindow(QWindow *window, screen_context_t context, bool needRootW
|
|||||||
// indication that we want to create a child window and join that window group.
|
// indication that we want to create a child window and join that window group.
|
||||||
const QVariant windowGroup = window->property("qnxInitialWindowGroup");
|
const QVariant windowGroup = window->property("qnxInitialWindowGroup");
|
||||||
|
|
||||||
if (window->type() == Qt::CoverWindow || window->type() == Qt::Desktop) {
|
if (window->type() == Qt::CoverWindow) {
|
||||||
// Cover windows have to be top level to be accessible to window delegate (i.e. navigator)
|
// Cover windows have to be top level to be accessible to window delegate (i.e. navigator)
|
||||||
// Desktop windows also need to be toplevel because they are not
|
// Desktop windows also need to be toplevel because they are not
|
||||||
// supposed to be part of the window hierarchy tree
|
// supposed to be part of the window hierarchy tree
|
||||||
@ -189,10 +189,13 @@ QQnxWindow::QQnxWindow(QWindow *window, screen_context_t context, bool needRootW
|
|||||||
m_isTopLevel = !needRootWindow || !platformScreen->rootWindow();
|
m_isTopLevel = !needRootWindow || !platformScreen->rootWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (window->type() == Qt::Desktop) // A desktop widget does not need a libscreen window
|
||||||
|
return;
|
||||||
|
|
||||||
if (m_isTopLevel) {
|
if (m_isTopLevel) {
|
||||||
Q_SCREEN_CRITICALERROR(screen_create_window(&m_window, m_screenContext),
|
Q_SCREEN_CRITICALERROR(screen_create_window(&m_window, m_screenContext),
|
||||||
"Could not create top level window"); // Creates an application window
|
"Could not create top level window"); // Creates an application window
|
||||||
if (window->type() != Qt::CoverWindow && window->type() != Qt::Desktop) {
|
if (window->type() != Qt::CoverWindow) {
|
||||||
if (needRootWindow)
|
if (needRootWindow)
|
||||||
platformScreen->setRootWindow(this);
|
platformScreen->setRootWindow(this);
|
||||||
}
|
}
|
||||||
@ -245,7 +248,8 @@ void QQnxWindow::setGeometry(const QRect &rect)
|
|||||||
if (shouldMakeFullScreen())
|
if (shouldMakeFullScreen())
|
||||||
newGeometry = screen()->geometry();
|
newGeometry = screen()->geometry();
|
||||||
|
|
||||||
setGeometryHelper(newGeometry);
|
if (window()->type() != Qt::Desktop)
|
||||||
|
setGeometryHelper(newGeometry);
|
||||||
|
|
||||||
if (isExposed())
|
if (isExposed())
|
||||||
QWindowSystemInterface::handleExposeEvent(window(), newGeometry);
|
QWindowSystemInterface::handleExposeEvent(window(), newGeometry);
|
||||||
@ -285,7 +289,7 @@ void QQnxWindow::setVisible(bool visible)
|
|||||||
{
|
{
|
||||||
qWindowDebug() << Q_FUNC_INFO << "window =" << window() << "visible =" << visible;
|
qWindowDebug() << Q_FUNC_INFO << "window =" << window() << "visible =" << visible;
|
||||||
|
|
||||||
if (m_visible == visible)
|
if (m_visible == visible || window()->type() == Qt::Desktop)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// The first time through we join a window group if appropriate.
|
// The first time through we join a window group if appropriate.
|
||||||
@ -668,6 +672,9 @@ void QQnxWindow::setRotation(int rotation)
|
|||||||
|
|
||||||
void QQnxWindow::initWindow()
|
void QQnxWindow::initWindow()
|
||||||
{
|
{
|
||||||
|
if (window()->type() == Qt::Desktop)
|
||||||
|
return;
|
||||||
|
|
||||||
// Alpha channel is always pre-multiplied if present
|
// Alpha channel is always pre-multiplied if present
|
||||||
int val = SCREEN_PRE_MULTIPLIED_ALPHA;
|
int val = SCREEN_PRE_MULTIPLIED_ALPHA;
|
||||||
Q_SCREEN_CHECKERROR(screen_set_window_property_iv(m_window, SCREEN_PROPERTY_ALPHA_MODE, &val),
|
Q_SCREEN_CHECKERROR(screen_set_window_property_iv(m_window, SCREEN_PROPERTY_ALPHA_MODE, &val),
|
||||||
|
@ -75,7 +75,7 @@ public:
|
|||||||
|
|
||||||
bool isExposed() const;
|
bool isExposed() const;
|
||||||
|
|
||||||
WId winId() const { return (WId)m_window; }
|
WId winId() const { return window()->type() == Qt::Desktop ? -1 : (WId)m_window; }
|
||||||
screen_window_t nativeHandle() const { return m_window; }
|
screen_window_t nativeHandle() const { return m_window; }
|
||||||
|
|
||||||
void setBufferSize(const QSize &size);
|
void setBufferSize(const QSize &size);
|
||||||
|
Loading…
Reference in New Issue
Block a user