Index: kdemultimedia/kmix/backends/mixer_pulse.cpp =================================================================== --- kdemultimedia/kmix/backends/mixer_pulse.cpp (revision 1241345) +++ kdemultimedia/kmix/backends/mixer_pulse.cpp (revision 1241346) @@ -754,7 +754,12 @@ return; } addDevice((*map)[index]); - emit controlsReconfigured(_mixer->id()); + // Do not emit directly to ensure all connected slots are executed + // in their own event loop. + QMetaObject::invokeMethod(this, + "controlsReconfigured", + Qt::QueuedConnection, + Q_ARG(QString, _mixer->id())); } void Mixer_PULSE::removeWidget(int index) @@ -778,7 +783,12 @@ { delete *iter; m_mixDevices.erase(iter); - emit controlsReconfigured(_mixer->id()); + // Do not emit directly to ensure all connected slots are executed + // in their own event loop. + QMetaObject::invokeMethod(this, + "controlsReconfigured", + Qt::QueuedConnection, + Q_ARG(QString, _mixer->id())); return; } } @@ -799,7 +809,12 @@ delete *iter; m_mixDevices.erase(iter); } - emit controlsReconfigured(_mixer->id()); + // Do not emit directly to ensure all connected slots are executed + // in their own event loop. + QMetaObject::invokeMethod(this, + "controlsReconfigured", + Qt::QueuedConnection, + Q_ARG(QString, _mixer->id())); } void Mixer_PULSE::addDevice(devinfo& dev) @@ -990,7 +1005,7 @@ kDebug(67100) << "Using PulseAudio for mixer: " << m_mixerName; m_isOpen = true; } - + return 0; }