summaryrefslogtreecommitdiffstats
path: root/src/sessionserver.cpp
blob: 922638b5903f82bc33e75ccbb93f368afaea2929 (plain)
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);
}