summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorten Sorvig <msorvig@trolltech.com>2009-08-24 15:04:22 +0200
committerMorten Sorvig <msorvig@trolltech.com>2009-08-24 15:04:22 +0200
commitc50d78fce2cbacda9b6700d44d77dab98074b676 (patch)
tree2b38b547380a2e1a3090d7de6a78b5ee86f3350b
parentaa8e48249df0a1590db2af563b779e968635bbe6 (diff)
Add (1,1)-sized root widget so Qt doesnt create a large backing store buffer
-rw-r--r--src/sessionserver.cpp14
-rw-r--r--src/sessionserver.h1
-rw-r--r--src/widgeteventhandler.cpp9
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