summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMorten Sorvig <msorvig@trolltech.com>2009-06-26 07:58:01 +0200
committerMorten Sorvig <msorvig@trolltech.com>2009-06-26 07:58:01 +0200
commit71b1273c7cb3dea8259d2518cd2ae0f69455c4c5 (patch)
tree36281a191175e05effb2315f8ea5ee43f04fc52e /src
parent11f213b94d0c53378a7159ca2f5701b6565e61dc (diff)
Move widget update handling to the widget event handler
Diffstat (limited to 'src')
-rw-r--r--src/eventqueue.cpp32
-rw-r--r--src/eventqueue.h1
-rw-r--r--src/webclientserver.cpp2
-rw-r--r--src/widgeteventhandler.cpp74
-rw-r--r--src/widgeteventhandler.h4
5 files changed, 77 insertions, 36 deletions
diff --git a/src/eventqueue.cpp b/src/eventqueue.cpp
index cc8c9d6..9914277 100644
--- a/src/eventqueue.cpp
+++ b/src/eventqueue.cpp
@@ -15,12 +15,6 @@ bool imagesEqual(const QImage &a, const QImage &b, QRect rect)
return true;
}
-class QLineEditAccess : public QLineEdit
-{
-public:
- void emitTextEdited(const QString &text) { QLineEdit::textChanged(text); QLineEdit::textEdited(text); }
-};
-
void encodeText(QString &text)
{
// encode "breakout" characters
@@ -94,7 +88,7 @@ void EventQueue::handleRequest(HttpRequest *request, HttpResponse *response)
jsonText.replace("%7D", "}");
jsonText.replace("%22", "\"");
- qDebug() << "json request" << jsonText;
+ DEBUG << "json request" << jsonText;
json_object* request = json_tokener_parse(jsonText.data());
json_object* type = json_object_object_get(request, "type");
@@ -114,29 +108,7 @@ void EventQueue::handleRequest(HttpRequest *request, HttpResponse *response)
response->setBody(block);
response->setContentType("image/png");
- } else if (typeText == "textupdate") {
- json_object* idObject = json_object_object_get(request, "id");
- const int id = json_object_get_int(idObject);
- json_object* tmp = json_object_object_get(request, "text");
- QByteArray text = json_object_get_string(tmp);
- QLineEdit *lineEdit = ((QLineEdit *)(id));
-
- disableUpdates.insert(lineEdit);
- lineEdit->setText(text);
- ((QLineEditAccess *)(id))->emitTextEdited(text);
- disableUpdates.remove(lineEdit);
- } else if (typeText == "positionupdate") {
- const int id = json_object_get_int(json_object_object_get(request, "id"));
- const int x = json_object_get_int(json_object_object_get(request, "x"));
- const int y = json_object_get_int(json_object_object_get(request, "y"));
-
- QWidget *widget = ((QWidget *)(id));
- disableUpdates.insert(widget);
- widget->move(x, y);
- disableUpdates.remove(widget);
-// qDebug() << "position update" << id << x << y;
- }
-
+ }
json_object_put(request); //free
}
}
diff --git a/src/eventqueue.h b/src/eventqueue.h
index d31330b..d54dadf 100644
--- a/src/eventqueue.h
+++ b/src/eventqueue.h
@@ -53,7 +53,6 @@ public:
QQueue<EventEntry> events;
QHash<int, QImage> images;
QHash<int, QRect> geometries;
- QSet<QObject*> disableUpdates;
};
#endif
diff --git a/src/webclientserver.cpp b/src/webclientserver.cpp
index fb01617..3cbd05b 100644
--- a/src/webclientserver.cpp
+++ b/src/webclientserver.cpp
@@ -277,12 +277,10 @@ FileServer::FileServer()
<< ":sessionhandler.js" << ":eventhandler.js";
}
-
void FileServer::handleRequest(HttpRequest *request, HttpResponse *response)
{
if (response->body != QByteArray())
return;
- qDebug() << "foo";
const QByteArray path = request->path();
QByteArray filePath = path.right(path.size() - 1); // remove leading '/'
diff --git a/src/widgeteventhandler.cpp b/src/widgeteventhandler.cpp
index c170569..d0f4bff 100644
--- a/src/widgeteventhandler.cpp
+++ b/src/widgeteventhandler.cpp
@@ -4,6 +4,12 @@
bool takeEvents = true;
+class QLineEditAccess : public QLineEdit
+{
+public:
+ void emitTextEdited(const QString &text) { QLineEdit::textChanged(text); QLineEdit::textEdited(text); }
+};
+
QWidget * findEventTarget(QWidget *root, QPoint pos)
{
QWidget *current = root;
@@ -106,7 +112,7 @@ bool WidgetEventHandler::eventFilter(QObject *object, QEvent *event)
QRect geometry = globalGeometry(widget);
// if (object->metaObject()->className() == "QPushbutton")
// DEBUG << "move geometry" << object->metaObject()->className() << geometry;
- if (events.disableUpdates.contains(sender()) == false)
+ if (disableUpdates.contains(sender()) == false)
events.addGeometryEvent((int)widget, geometry);
}
@@ -141,14 +147,20 @@ void WidgetEventHandler::updatePendingWidgets()
void WidgetEventHandler::handleRequest(HttpRequest *request, HttpResponse *response)
{
const QByteArray path = request->path();
+ bool handled = false;
DEBUG << "request" << path;
if (path.startsWith("/mousepress") || path.startsWith("/mouserelease") || path.startsWith("/mousedoubleclick")) {
// DEBUG << "handle mouse press";
handleMousePress(path);
+ handled = true;
} else if (path.startsWith("/keypress") || path.startsWith("/keyrelease")) {
// DEBUG << "handle key press";
handleKeyPress(path);
- } else {
+ handled = true;
+ } else if (path.startsWith("/json")) {
+ handled = handleJsonMessage(path);
+ }
+ if (!handled) {
if (path.startsWith("/content")) {
events.reset(); // refresh everything
recursivelyAddUpdate(rootWidget);
@@ -157,6 +169,36 @@ void WidgetEventHandler::handleRequest(HttpRequest *request, HttpResponse *respo
}
}
+bool WidgetEventHandler::handleJsonMessage(const QByteArray &message)
+{
+ QByteArray jsonText = message.mid(5); // remove "/json"
+
+ // replace symbols that can't be a part of the url text.
+ jsonText.replace("%7B", "{");
+ jsonText.replace("%7D", "}");
+ jsonText.replace("%22", "\"");
+
+ DEBUG << "json request" << jsonText;
+ json_object* request = json_tokener_parse(jsonText.data());
+ json_object* type = json_object_object_get(request, "type");
+
+ QByteArray typeText = json_object_get_string(type);
+ DEBUG << typeText;
+
+ if (typeText == "textupdate") {
+ handleTextUpdate(request);
+ json_object_put(request); //free
+ return true;
+ } else if (typeText == "positionupdate") {
+ handlePositionUpdate(request);
+ json_object_put(request); //free
+ return true;
+ }
+ json_object_put(request); //free
+ return false;
+}
+
+
void WidgetEventHandler::handleMousePress(const QByteArray &message)
{
QList<QByteArray> tokens = message.split('-');
@@ -206,6 +248,32 @@ void WidgetEventHandler::handleKeyPress(const QByteArray &message)
qApp->processEvents();
}
+void WidgetEventHandler::handleTextUpdate(json_object* request)
+{
+ json_object* idObject = json_object_object_get(request, "id");
+ const int id = json_object_get_int(idObject);
+ json_object* tmp = json_object_object_get(request, "text");
+ QByteArray text = json_object_get_string(tmp);
+ QLineEdit *lineEdit = ((QLineEdit *)(id));
+
+ disableUpdates.insert(lineEdit);
+ lineEdit->setText(text);
+ ((QLineEditAccess *)(id))->emitTextEdited(text);
+ disableUpdates.remove(lineEdit);
+}
+
+void WidgetEventHandler::handlePositionUpdate(json_object *request)
+{
+ const int id = json_object_get_int(json_object_object_get(request, "id"));
+ const int x = json_object_get_int(json_object_object_get(request, "x"));
+ const int y = json_object_get_int(json_object_object_get(request, "y"));
+
+ QWidget *widget = ((QWidget *)(id));
+ disableUpdates.insert(widget);
+ widget->move(x, y);
+ disableUpdates.remove(widget);
+ // qDebug() << "position update" << id << x << y;
+}
void WidgetEventHandler::widgetPaint(QWidget *widget, const QRect &updateRect)
{
@@ -294,6 +362,6 @@ void WidgetEventHandler::addShowEvent(QWidget *widget)
void WidgetEventHandler::lineEditTextChange()
{
- if (events.disableUpdates.contains(sender()) == false)
+ if (disableUpdates.contains(sender()) == false)
events.addEvent((int)sender(), EventEntry::TextUpdate);
}
diff --git a/src/widgeteventhandler.h b/src/widgeteventhandler.h
index 8dab3d2..403ca0f 100644
--- a/src/widgeteventhandler.h
+++ b/src/widgeteventhandler.h
@@ -21,8 +21,11 @@ protected slots:
void lineEditTextChange();
protected:
+ bool handleJsonMessage(const QByteArray &message);
void handleMousePress(const QByteArray &message);
void handleKeyPress(const QByteArray &message);
+ void handleTextUpdate(json_object* object);
+ void handlePositionUpdate(json_object *object);
void addPendingUpdate(QWidget* widget, const QRect &rect);
bool eventFilter(QObject *object, QEvent *event);
void widgetPaint(QWidget *widget, const QRect &updateRect);
@@ -37,6 +40,7 @@ public: //private:
bool grabbing;
QWidget *rootWidget;
QWidget *focusWidget; // hack hack
+ QSet<QObject*> disableUpdates;
};
#endif