summaryrefslogtreecommitdiffstats
path: root/krdc/vnc/threads.h
diff options
context:
space:
mode:
Diffstat (limited to 'krdc/vnc/threads.h')
-rw-r--r--krdc/vnc/threads.h126
1 files changed, 126 insertions, 0 deletions
diff --git a/krdc/vnc/threads.h b/krdc/vnc/threads.h
new file mode 100644
index 00000000..5f38b71f
--- /dev/null
+++ b/krdc/vnc/threads.h
@@ -0,0 +1,126 @@
+/***************************************************************************
+ threads.h - threads for kvncview
+ -------------------
+ begin : Thu May 09 16:01:42 CET 2002
+ copyright : (C) 2002 by Tim Jansen
+ email : tim@tjansen.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef THREADS_H
+#define THREADS_H
+
+#include <qthread.h>
+#include <qregion.h>
+#include <qrect.h>
+#include <qmutex.h>
+#include <qwaitcondition.h>
+#include <qevent.h>
+#include <qvaluelist.h>
+#include <qdatetime.h>
+
+#include <stdlib.h>
+
+#include "events.h"
+#include "vnctypes.h"
+
+class KVncView;
+
+enum EventType {
+ MouseEventType,
+ KeyEventType
+};
+
+
+struct MouseEvent {
+ int x, y, buttons;
+};
+
+struct KeyEvent {
+ unsigned int k;
+ bool down;
+};
+
+struct InputEvent {
+ EventType type;
+ union {
+ MouseEvent m;
+ KeyEvent k;
+ } e;
+};
+
+
+class WriterThread : public QThread {
+private:
+ QMutex m_lock;
+ QWaitCondition m_waiter;
+ volatile bool &m_quitFlag;
+ KVncView *m_view;
+
+ QTime m_lastIncrUpdate; // start()ed when a incr update is sent
+ bool m_lastIncrUpdatePostponed;
+
+ // all things that can be send follow:
+ bool m_incrementalUpdateRQ; // for sending an incremental request
+ bool m_incrementalUpdateAnnounced; // set when a RQ will come soon
+ QRegion m_updateRegionRQ; // for sending updates, null if it is done
+ QValueList<InputEvent> m_inputEvents; // list of unsent input events
+ MouseEvent m_lastMouseEvent;
+ int m_mouseEventNum, m_keyEventNum;
+ QString m_clientCut;
+
+ void sendFatalError(ErrorCode s);
+
+public:
+ WriterThread(KVncView *v, volatile bool &quitFlag);
+
+ void queueIncrementalUpdateRequest();
+ void announceIncrementalUpdateRequest();
+ void queueUpdateRequest(const QRegion &r);
+ void queueMouseEvent(int x, int y, int buttonMask);
+ void queueKeyEvent(unsigned int k, bool down);
+ void queueClientCut(const QString &text);
+ void kick();
+
+protected:
+ void run();
+ bool sendIncrementalUpdateRequest();
+ bool sendUpdateRequest(const QRegion &r);
+ bool sendInputEvents(const QValueList<InputEvent> &events);
+};
+
+
+
+class ControllerThread : public QThread {
+private:
+ KVncView *m_view;
+ enum RemoteViewStatus m_status;
+ WriterThread &m_wthread;
+ volatile bool &m_quitFlag;
+ volatile bool m_desktopInitialized;
+ QWaitCondition m_waiter;
+
+ void changeStatus(RemoteViewStatus s);
+ void sendFatalError(ErrorCode s);
+
+public:
+ ControllerThread(KVncView *v, WriterThread &wt, volatile bool &quitFlag);
+ enum RemoteViewStatus status();
+ void desktopInit();
+ void kick();
+
+protected:
+ void run();
+};
+
+
+
+#endif