From c50d78fce2cbacda9b6700d44d77dab98074b676 Mon Sep 17 00:00:00 2001 From: Morten Sorvig Date: Mon, 24 Aug 2009 15:04:22 +0200 Subject: Add (1,1)-sized root widget so Qt doesnt create a large backing store buffer --- src/sessionserver.cpp | 14 +++++++++++++- src/sessionserver.h | 1 + src/widgeteventhandler.cpp | 9 +++++++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/sessionserver.cpp b/src/sessionserver.cpp index 6550501..922638b 100644 --- a/src/sessionserver.cpp +++ b/src/sessionserver.cpp @@ -6,7 +6,17 @@ SessionServer::SessionServer(QWidget *widget, Session *session, Server *server) { - rootWidget = widget; + // Crate a "fake" root widget sized (1,1) + // This will prevent Qt from creating a large + // backing store. + fakeRoot = new QWidget(); + fakeRoot->resize(1, 1); + fakeRoot->move(0, 0); + + rootWidget = fakeRoot; + widget->setParent(fakeRoot); + widget->move(0, 0); + widgetEventHandler = new WidgetEventHandler(rootWidget, server); rootWidget->setAttribute(Qt::WA_DontShowOnScreen); @@ -35,6 +45,8 @@ SessionServer::SessionServer(QWidget *widget, Session *session, Server *server) SessionServer::~SessionServer() { delete widgetEventHandler; + rootWidget->setParent(0); + delete fakeRoot; } void SessionServer::handleRequest(HttpRequest *request, HttpResponse *response) diff --git a/src/sessionserver.h b/src/sessionserver.h index d312453..7a8a635 100644 --- a/src/sessionserver.h +++ b/src/sessionserver.h @@ -16,6 +16,7 @@ private slots: public: QWidget *rootWidget; + QWidget *fakeRoot; WidgetEventHandler *widgetEventHandler; }; diff --git a/src/widgeteventhandler.cpp b/src/widgeteventhandler.cpp index a45ec84..45b6b94 100644 --- a/src/widgeteventhandler.cpp +++ b/src/widgeteventhandler.cpp @@ -64,7 +64,7 @@ void WidgetEventHandler::recursivelyInstallEventHandler(QWidget *widget) { if (server->sendUpdatesForPlainQWidgets == false && qstrcmp(widget->metaObject()->className(), "QWidget") == 0) { - qDebug() << "skip plain widget" << widget; + //qDebug() << "skip plain widget" << widget; } else { widget->installEventFilter(this); } @@ -113,7 +113,7 @@ bool WidgetEventHandler::eventFilter(QObject *object, QEvent *event) if (event->type() == QEvent::Paint) { if (server->sendUpdatesForPlainQWidgets == false && qstrcmp(widget->metaObject()->className(), "QWidget") == 0) { - qDebug() << "skip plain widget" << widget; + // qDebug() << "skip plain widget" << widget; return false; } @@ -314,6 +314,11 @@ void WidgetEventHandler::handlePositionUpdate(json_object *request) void WidgetEventHandler::widgetPaint(QWidget *widget, const QRect &updateRect) { + if (server->sendUpdatesForPlainQWidgets == false && + qstrcmp(widget->metaObject()->className(), "QWidget") == 0) { + return ; + } + QImage image(widget->size(), QImage::Format_ARGB32_Premultiplied); DEBUG << "widget->size" << widget->size(); image.fill(QColor(0,0,0,0).rgba()); // fill with transparent pixels -- cgit v1.2.3