Changeset View
Changeset View
Standalone View
Standalone View
krfb/rfbservermanager.cpp
Show First 20 Lines • Show All 84 Lines • ▼ Show 20 Line(s) | |||||
85 | 85 | | |||
86 | Q_GLOBAL_STATIC(RfbServerManagerStatic, s_instance) | 86 | Q_GLOBAL_STATIC(RfbServerManagerStatic, s_instance) | ||
87 | 87 | | |||
88 | RfbServerManager* RfbServerManager::instance() | 88 | RfbServerManager* RfbServerManager::instance() | ||
89 | { | 89 | { | ||
90 | return &s_instance->server; | 90 | return &s_instance->server; | ||
91 | } | 91 | } | ||
92 | 92 | | |||
93 | | ||||
94 | struct RfbServerManager::Private | 93 | struct RfbServerManager::Private | ||
95 | { | 94 | { | ||
96 | QSharedPointer<FrameBuffer> fb; | 95 | QSharedPointer<FrameBuffer> fb; | ||
97 | rfbCursorPtr myCursor; | 96 | rfbCursorPtr myCursor; | ||
98 | QByteArray desktopName; | 97 | QByteArray desktopName; | ||
99 | QTimer rfbUpdateTimer; | 98 | QTimer rfbUpdateTimer; | ||
100 | QSet<RfbServer*> servers; | 99 | QSet<RfbServer*> servers; | ||
101 | QSet<RfbClient*> clients; | 100 | QSet<RfbClient*> clients; | ||
102 | }; | 101 | }; | ||
103 | 102 | | |||
104 | 103 | | |||
105 | RfbServerManager::RfbServerManager() | 104 | RfbServerManager::RfbServerManager() | ||
106 | : QObject(), d(new Private) | 105 | : QObject(), d(new Private) | ||
107 | { | 106 | { | ||
108 | init(); | 107 | init(); | ||
109 | } | 108 | } | ||
110 | 109 | | |||
111 | RfbServerManager::~RfbServerManager() | 110 | RfbServerManager::~RfbServerManager() | ||
112 | { | 111 | { | ||
113 | delete d; | 112 | delete d; | ||
114 | } | 113 | } | ||
115 | 114 | | |||
115 | QSharedPointer<FrameBuffer> RfbServerManager::framebuffer() const | ||||
116 | { | ||||
117 | return d->fb; | ||||
118 | } | ||||
119 | | ||||
116 | void RfbServerManager::init() | 120 | void RfbServerManager::init() | ||
117 | { | 121 | { | ||
118 | //qDebug(); | 122 | //qDebug(); | ||
119 | 123 | | |||
120 | d->fb = FrameBufferManager::instance()->frameBuffer(QApplication::desktop()->winId()); | 124 | d->fb = FrameBufferManager::instance()->frameBuffer(QApplication::desktop()->winId()); | ||
121 | d->myCursor = rfbMakeXCursor(19, 19, (char *) cur, (char *) mask); | 125 | d->myCursor = rfbMakeXCursor(19, 19, (char *) cur, (char *) mask); | ||
122 | d->myCursor->cleanup = false; | 126 | d->myCursor->cleanup = false; | ||
123 | d->desktopName = QStringLiteral("%1@%2 (shared desktop)") //FIXME check if we can use utf8 | 127 | d->desktopName = QStringLiteral("%1@%2 (shared desktop)") //FIXME check if we can use utf8 | ||
124 | .arg(KUser().loginName(),QHostInfo::localHostName()).toLatin1(); | 128 | .arg(KUser().loginName(),QHostInfo::localHostName()).toLatin1(); | ||
125 | 129 | | |||
130 | connect(d->fb.data(), &FrameBuffer::frameBufferChanged, this, &RfbServerManager::updateFrameBuffer); | ||||
126 | connect(&d->rfbUpdateTimer, &QTimer::timeout, this, &RfbServerManager::updateScreens); | 131 | connect(&d->rfbUpdateTimer, &QTimer::timeout, this, &RfbServerManager::updateScreens); | ||
127 | connect(qApp, &QApplication::aboutToQuit, this, &RfbServerManager::cleanup); | 132 | connect(qApp, &QApplication::aboutToQuit, this, &RfbServerManager::cleanup); | ||
128 | } | 133 | } | ||
129 | 134 | | |||
135 | void RfbServerManager::updateFrameBuffer() | ||||
136 | { | ||||
137 | Q_FOREACH(RfbServer *server, d->servers) { | ||||
Kanedias: Not sure KRfb codebase was converted but we are using C++11 for 8 years now, we can have `for… | |||||
138 | server->updateFrameBuffer(d->fb->data(), d->fb->width(), d->fb->height(), d->fb->depth()); | ||||
139 | } | ||||
140 | } | ||||
141 | | ||||
130 | void RfbServerManager::updateScreens() | 142 | void RfbServerManager::updateScreens() | ||
131 | { | 143 | { | ||
132 | QList<QRect> rects = d->fb->modifiedTiles(); | 144 | QList<QRect> rects = d->fb->modifiedTiles(); | ||
133 | QPoint currentCursorPos = QCursor::pos(); | 145 | QPoint currentCursorPos = QCursor::pos(); | ||
134 | 146 | | |||
135 | for (RfbServer* server : qAsConst(d->servers)) { | 147 | for (RfbServer* server : qAsConst(d->servers)) { | ||
136 | server->updateScreen(rects); | 148 | server->updateScreen(rects); | ||
137 | server->updateCursorPosition(currentCursorPos); | 149 | server->updateCursorPosition(currentCursorPos); | ||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Line(s) | 191 | if (!d->fb.isNull()) { | |||
189 | //qDebug() << "bpp: " << bpp; | 201 | //qDebug() << "bpp: " << bpp; | ||
190 | 202 | | |||
191 | rfbLogEnable(0); | 203 | rfbLogEnable(0); | ||
192 | 204 | | |||
193 | screen = rfbGetScreen(nullptr, nullptr, w, h, 8, 3, bpp); | 205 | screen = rfbGetScreen(nullptr, nullptr, w, h, 8, 3, bpp); | ||
194 | screen->paddedWidthInBytes = d->fb->paddedWidth(); | 206 | screen->paddedWidthInBytes = d->fb->paddedWidth(); | ||
195 | d->fb->getServerFormat(screen->serverFormat); | 207 | d->fb->getServerFormat(screen->serverFormat); | ||
196 | screen->frameBuffer = d->fb->data(); | 208 | screen->frameBuffer = d->fb->data(); | ||
197 | | ||||
198 | screen->desktopName = d->desktopName.constData(); | 209 | screen->desktopName = d->desktopName.constData(); | ||
199 | screen->cursor = d->myCursor; | 210 | screen->cursor = d->myCursor; | ||
200 | } | 211 | } | ||
201 | 212 | | |||
202 | return screen; | 213 | return screen; | ||
203 | } | 214 | } | ||
204 | 215 | | |||
205 | void RfbServerManager::addClient(RfbClient* cc) | 216 | void RfbServerManager::addClient(RfbClient* cc) | ||
Show All 27 Lines |
Not sure KRfb codebase was converted but we are using C++11 for 8 years now, we can have for (auto server: d->servers)