Hello community,
here is the log from the commit of package kdenetwork4
checked in at Mon Sep 17 22:42:59 CEST 2007.
--------
--- KDE/kdenetwork4/kdenetwork4.changes 2007-09-14 23:15:30.000000000 +0200
+++ /mounts/work_src_done/STABLE/kdenetwork4/kdenetwork4.changes 2007-09-17 22:22:12.000000000 +0200
@@ -1,0 +2,5 @@
+Mon Sep 17 22:22:01 CEST 2007 - dmueller@suse.de
+
+- fix threading issues in krdc (#310766)
+
+-------------------------------------------------------------------
New:
----
r713569.diff
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kdenetwork4.spec ++++++
--- /var/tmp/diff_new_pack.g15870/_old 2007-09-17 22:42:52.000000000 +0200
+++ /var/tmp/diff_new_pack.g15870/_new 2007-09-17 22:42:52.000000000 +0200
@@ -16,7 +16,7 @@
Summary: KDE Network Base Package
Url: http://www.kde.org
Version: 3.93.0.svn712057
-Release: 3
+Release: 7
%define rversion 3.93.0
Source0: kdenetwork-%rversion.tar.bz2
Source1: _upstream
@@ -24,6 +24,7 @@
Requires: kdebase4-runtime
Patch: desktop-files.diff
Patch1: disable-kopete.diff
+Patch2: r713569.diff
%define with_kopete 0
Suggests: kde4-kget
%if %with_kopete
@@ -53,6 +54,7 @@
%setup -q -n kdenetwork-%rversion
%patch
%patch1
+%patch2
%build
%cmake_kde4 -d build
@@ -513,6 +515,8 @@
%_libdir/libkgetcore.so
%changelog
+* Mon Sep 17 2007 - dmueller@suse.de
+- fix threading issues in krdc (#310766)
* Fri Sep 14 2007 - stbinner@suse.de
- link krfb and krdc icons so that all 10.3 default apps have icons
* Thu Sep 13 2007 - stbinner@suse.de
++++++ r713569.diff ++++++
------------------------------------------------------------------------
r713569 | mueller | 2007-09-17 22:17:08 +0200 (Mon, 17 Sep 2007) | 3 lines
Changed paths:
M /trunk/KDE/kdenetwork/krdc/vnc/vncclientthread.cpp
M /trunk/KDE/kdenetwork/krdc/vnc/vncclientthread.h
fix threading issues with keyboard/mouse events
BUG: 149810
------------------------------------------------------------------------
--- krdc/vnc/vncclientthread.h
+++ krdc/vnc/vncclientthread.h
@@ -34,6 +34,41 @@ extern "C" {
#include
}
+class ClientEvent
+{
+public:
+ virtual ~ClientEvent();
+
+ virtual void fire(rfbClient*) = 0;
+};
+
+class KeyClientEvent : public ClientEvent
+{
+public:
+ KeyClientEvent(int key, int pressed)
+ : m_key(key), m_pressed(pressed) {}
+
+ void fire(rfbClient*);
+
+private:
+ int m_key;
+ int m_pressed;
+};
+
+class PointerClientEvent : public ClientEvent
+{
+public:
+ PointerClientEvent(int x, int y, int buttonMask)
+ : m_x(x), m_y(y), m_buttonMask(buttonMask) {}
+
+ void fire(rfbClient*);
+
+private:
+ int m_x;
+ int m_y;
+ int m_buttonMask;
+};
+
class VncClientThread: public QThread
{
Q_OBJECT
@@ -76,6 +111,8 @@ private:
int m_port;
QMutex mutex;
RemoteView::Quality m_quality;
+ // when I'm grown up, I become a QQueue
+ ClientEvent* m_event;
volatile bool m_stopped;
volatile bool m_passwordError;
--- krdc/vnc/vncclientthread.cpp
+++ krdc/vnc/vncclientthread.cpp
@@ -139,6 +139,7 @@ VncClientThread::VncClientThread()
{
QMutexLocker locker(&mutex);
m_stopped = false;
+ m_event = 0;
QTimer *outputErrorMessagesCheckTimer = new QTimer(this);
outputErrorMessagesCheckTimer->setInterval(500);
@@ -259,6 +260,15 @@ void VncClientThread::run()
if (i)
if (!HandleRFBServerMessage(cl))
break;
+
+ locker.relock();
+
+ if (m_event) {
+ m_event->fire(cl);
+ delete m_event;
+ m_event = 0;
+ }
+ locker.unlock();
}
// Cleanup allocated resources
@@ -269,14 +279,34 @@ void VncClientThread::run()
m_stopped = true;
}
+ClientEvent::~ClientEvent()
+{
+}
+
+void PointerClientEvent::fire(rfbClient* cl)
+{
+ SendPointerEvent(cl, m_x, m_y, m_buttonMask);
+}
+
+void KeyClientEvent::fire(rfbClient* cl)
+{
+ SendKeyEvent(cl, m_key, m_pressed);
+}
+
void VncClientThread::mouseEvent(int x, int y, int buttonMask)
{
- SendPointerEvent(cl, x, y, buttonMask);
+ QMutexLocker lock (&mutex);
+
+ delete m_event;
+ m_event = new PointerClientEvent(x, y, buttonMask);
}
void VncClientThread::keyEvent(int key, bool pressed)
{
- SendKeyEvent(cl, key, pressed);
+ QMutexLocker lock(&mutex);
+
+ delete m_event;
+ m_event = new KeyClientEvent(key, pressed);
}
#include "vncclientthread.moc"
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org