summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorten Sorvig <msorvig@trolltech.com>2009-08-21 16:09:17 +0200
committerMorten Sorvig <msorvig@trolltech.com>2009-08-21 16:09:17 +0200
commitaa8e48249df0a1590db2af563b779e968635bbe6 (patch)
tree459c665a8442aad22dd3d060bbdd0dda2f9f5dc6
parent70e576f0ab0eff8b8d2ef596a4d73992d15259b9 (diff)
Add option to skip updating plain QWidgets
-rw-r--r--src/sessionserver.cpp4
-rw-r--r--src/sessionserver.h2
-rw-r--r--src/webclient.cpp2
-rw-r--r--src/webclientserver.cpp3
-rw-r--r--src/webclientserver.h1
-rw-r--r--src/widgeteventhandler.cpp19
-rw-r--r--src/widgeteventhandler.h4
7 files changed, 25 insertions, 10 deletions
diff --git a/src/sessionserver.cpp b/src/sessionserver.cpp
index 25f7c6d..6550501 100644
--- a/src/sessionserver.cpp
+++ b/src/sessionserver.cpp
@@ -4,10 +4,10 @@
#include <eventqueue.h>
#include <webclientserver.h>
-SessionServer::SessionServer(QWidget *widget, Session *session)
+SessionServer::SessionServer(QWidget *widget, Session *session, Server *server)
{
rootWidget = widget;
- widgetEventHandler = new WidgetEventHandler(rootWidget);
+ widgetEventHandler = new WidgetEventHandler(rootWidget, server);
rootWidget->setAttribute(Qt::WA_DontShowOnScreen);
diff --git a/src/sessionserver.h b/src/sessionserver.h
index d9c3e46..d312453 100644
--- a/src/sessionserver.h
+++ b/src/sessionserver.h
@@ -9,7 +9,7 @@ class SessionServer : public QObject
{
Q_OBJECT
public:
- SessionServer(QWidget *widget, Session *session);
+ SessionServer(QWidget *widget, Session *session, Server *server);
~SessionServer();
private slots:
void handleRequest(HttpRequest *request, HttpResponse *response);
diff --git a/src/webclient.cpp b/src/webclient.cpp
index 3a5320d..fd640f0 100644
--- a/src/webclient.cpp
+++ b/src/webclient.cpp
@@ -55,5 +55,5 @@ void WebClient::newSession_internal(Session *session)
return;
}
- new SessionServer(rootWidget, session);
+ new SessionServer(rootWidget, session, server);
}
diff --git a/src/webclientserver.cpp b/src/webclientserver.cpp
index 3e0f7eb..dc45b56 100644
--- a/src/webclientserver.cpp
+++ b/src/webclientserver.cpp
@@ -187,8 +187,9 @@ Server::Server(quint16 port)
bytesRead = 0;
serverStart = QDateTime::currentDateTime();
totalSessions = 0;
-
+ activeSessionLimit = INT_MAX;
activeSessionLimitHtml = "<html><body>Active session limit exceeded.</body></html>";
+ sendUpdatesForPlainQWidgets = false;
}
Server::~Server()
diff --git a/src/webclientserver.h b/src/webclientserver.h
index ebaf6a4..79faa62 100644
--- a/src/webclientserver.h
+++ b/src/webclientserver.h
@@ -119,6 +119,7 @@ private:
public:
int activeSessionLimit;
QByteArray activeSessionLimitHtml;
+ bool sendUpdatesForPlainQWidgets;
};
#endif
diff --git a/src/widgeteventhandler.cpp b/src/widgeteventhandler.cpp
index ce69de8..a45ec84 100644
--- a/src/widgeteventhandler.cpp
+++ b/src/widgeteventhandler.cpp
@@ -40,8 +40,8 @@ QWidget * findEventTarget(QWidget *root, QPoint pos)
}
-WidgetEventHandler::WidgetEventHandler(QObject *parent)
-: QObject(parent), graphicsWidget(false), grabbing(false)
+WidgetEventHandler::WidgetEventHandler(QObject *parent, Server *server)
+: QObject(parent), graphicsWidget(false), grabbing(false), server(server)
{
focusWidget = 0;
}
@@ -62,9 +62,14 @@ bool WidgetEventHandler::shouldProcessChildWidgets(QWidget *widget)
void WidgetEventHandler::recursivelyInstallEventHandler(QWidget *widget)
{
- widget->installEventFilter(this);
+ if (server->sendUpdatesForPlainQWidgets == false &&
+ qstrcmp(widget->metaObject()->className(), "QWidget") == 0) {
+ qDebug() << "skip plain widget" << widget;
+ } else {
+ widget->installEventFilter(this);
+ }
- DEBUG << "event filter on" << widget->metaObject()->className() << widget->objectName() << int(widget);
+ //qDebug << "event filter on" << widget->metaObject()->className() << widget->objectName() << int(widget);
if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(widget)) {
connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(textChange()));
@@ -106,6 +111,12 @@ bool WidgetEventHandler::eventFilter(QObject *object, QEvent *event)
QWidget *widget = qobject_cast<QWidget *>(object);
if (event->type() == QEvent::Paint) {
+ if (server->sendUpdatesForPlainQWidgets == false &&
+ qstrcmp(widget->metaObject()->className(), "QWidget") == 0) {
+ qDebug() << "skip plain widget" << widget;
+ return false;
+ }
+
if (QLabel *label = qobject_cast<QLabel *>(widget)) {
events.addEvent((int)widget, EventEntry::TextUpdate);
} else if (QTextEdit *textEdit = qobject_cast<QTextEdit *>(widget)) {
diff --git a/src/widgeteventhandler.h b/src/widgeteventhandler.h
index 0583736..2df5e8c 100644
--- a/src/widgeteventhandler.h
+++ b/src/widgeteventhandler.h
@@ -4,11 +4,12 @@
#include <QtGui>
#include <eventqueue.h>
+class Server;
class WidgetEventHandler : public QObject
{
Q_OBJECT
public:
- WidgetEventHandler(QObject *parent = 0);
+ WidgetEventHandler(QObject *parent, Server * server);
void setRootWidget(QWidget *root);
bool shouldProcessChildWidgets(QWidget *widget);
void recursivelyInstallEventHandler(QWidget *widget);
@@ -42,6 +43,7 @@ public: //private:
QWidget *rootWidget;
QWidget *focusWidget; // hack hack
QSet<QObject*> disableUpdates;
+ Server *server;
};
#endif