Ensure kdesktop signal handlers execute in the main GUI thread

pull/2/head
Timothy Pearson 9 years ago
parent 0fcff03e30
commit 755776b6c4

@ -95,7 +95,7 @@ set( ${target}_SRCS
tde_add_tdeinit_executable( ${target} AUTOMOC
SOURCES ${${target}_SRCS}
LINK
kdesktopsettings-static bgnd-static dmctl-static
pthread kdesktopsettings-static bgnd-static dmctl-static
konq-shared tdeutils-shared
${XRENDER_LIBRARIES} ${XCURSOR_LIBRARIES} Xext ${DL_LIBRARIES}
${XSS_LIBRARIES} ${DBUS_1_TQT_LIBRARIES}

@ -77,10 +77,12 @@ KRootWm::KRootWm(KDesktop* _desktop) : TQObject(_desktop), startup(FALSE)
m_helperThread->start();
m_threadHelperObject = new KRootWmThreadHelperObject;
m_threadHelperObject->moveToThread(m_helperThread);
connect(this, TQT_SIGNAL(initializeHelperThread()), m_threadHelperObject, TQT_SLOT(initializeThread()));
connect(this, TQT_SIGNAL(terminateHelperThread()), m_threadHelperObject, TQT_SLOT(terminateThread()));
connect(this, TQT_SIGNAL(asyncLock()), m_threadHelperObject, TQT_SLOT(slotLock()));
connect(this, TQT_SIGNAL(asyncLockAndDoNewSession()), m_threadHelperObject, TQT_SLOT(lockAndDoNewSession()));
connect(this, TQT_SIGNAL(asyncSlotSessionActivated(int)), m_threadHelperObject, TQT_SLOT(slotSessionActivated(int)));
initializeHelperThread();
s_rootWm = this;
m_actionCollection = new TDEActionCollection(_desktop, this, "KRootWm::m_actionCollection");
@ -880,6 +882,16 @@ void KRootWm::slotPopulateSessions()
}
}
void KRootWmThreadHelperObject::initializeThread() {
// Prevent kdesktop_lock signals from being handled by the wrong (non-GUI) thread
sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGUSR1);
sigaddset(&set, SIGUSR2);
sigaddset(&set, SIGTTIN);
pthread_sigmask(SIG_BLOCK, &set, NULL);
}
void KRootWmThreadHelperObject::terminateThread() {
TQEventLoop* eventLoop = TQApplication::eventLoop();
if (eventLoop) {

@ -127,6 +127,7 @@ public slots:
void slotLockNNewSession();
signals:
void initializeHelperThread();
void terminateHelperThread();
void asyncLock();
void asyncLockAndDoNewSession();
@ -192,6 +193,7 @@ class KRootWmThreadHelperObject : public TQObject
TQ_OBJECT
public slots:
void initializeThread();
void terminateThread();
void slotLock();
void lockAndDoNewSession();

Loading…
Cancel
Save