1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
#include "webclient.h"
#include <json.h>
#include <eventqueue.h>
#include <webclientserver.h>
SessionServer::SessionServer(QWidget *widget, Session *session, Server *server)
{
// 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);
// try to avoid creating the backingstore
rootWidget->setAttribute(Qt::WA_PaintOnScreen);
#ifdef QT_WS_X11
qt_x11_set_global_double_buffer(false);
#endif
rootWidget->show();
// Make the initial show non-special by processing the show events
// before enabling the event handler. We want to support refreshing
// the ui, every request of "/content" should give a complete ui refresh.
qApp->processEvents();
qApp->processEvents();
widgetEventHandler->setRootWidget(rootWidget);
widgetEventHandler->setSession(session);
connect(session, SIGNAL(requestContent(HttpRequest *, HttpResponse *)),
this, SLOT(handleRequest(HttpRequest *, HttpResponse *)));
}
SessionServer::~SessionServer()
{
delete widgetEventHandler;
rootWidget->setParent(0);
delete fakeRoot;
}
void SessionServer::handleRequest(HttpRequest *request, HttpResponse *response)
{
DEBUG << "SingleUserServer::handleRequest!" << request->path();
widgetEventHandler->handleRequest(request, response);
}
|