diff options
author | Morten Sorvig <msorvig@trolltech.com> | 2009-08-21 16:09:17 +0200 |
---|---|---|
committer | Morten Sorvig <msorvig@trolltech.com> | 2009-08-21 16:09:17 +0200 |
commit | aa8e48249df0a1590db2af563b779e968635bbe6 (patch) | |
tree | 459c665a8442aad22dd3d060bbdd0dda2f9f5dc6 | |
parent | 70e576f0ab0eff8b8d2ef596a4d73992d15259b9 (diff) |
Add option to skip updating plain QWidgets
-rw-r--r-- | src/sessionserver.cpp | 4 | ||||
-rw-r--r-- | src/sessionserver.h | 2 | ||||
-rw-r--r-- | src/webclient.cpp | 2 | ||||
-rw-r--r-- | src/webclientserver.cpp | 3 | ||||
-rw-r--r-- | src/webclientserver.h | 1 | ||||
-rw-r--r-- | src/widgeteventhandler.cpp | 19 | ||||
-rw-r--r-- | src/widgeteventhandler.h | 4 |
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 |