Hello community, here is the log from the commit of package kmix for openSUSE:Factory checked in at 2013-07-22 17:17:04 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kmix (Old) and /work/SRC/openSUSE:Factory/.kmix.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kmix" Changes: -------- --- /work/SRC/openSUSE:Factory/kmix/kmix.changes 2013-07-08 07:32:03.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.kmix.new/kmix.changes 2013-07-22 17:17:15.000000000 +0200 @@ -1,0 +2,7 @@ +Mon Jul 15 08:13:30 UTC 2013 - [email protected] + +- Update to 4.10.95 + * KDE 4.11 RC 1 release + * See http://www.kde.org/announcements/announce-4.11-rc1.php + +------------------------------------------------------------------- Old: ---- kmix-4.10.90.tar.xz New: ---- kmix-4.10.95.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kmix.spec ++++++ --- /var/tmp/diff_new_pack.XhIFab/_old 2013-07-22 17:17:16.000000000 +0200 +++ /var/tmp/diff_new_pack.XhIFab/_new 2013-07-22 17:17:16.000000000 +0200 @@ -27,7 +27,7 @@ License: GPL-2.0+ Group: Productivity/Multimedia/Sound/Mixers Url: http://www.kde.org -Version: 4.10.90 +Version: 4.10.95 Release: 0 Source0: %{name}-%{version}.tar.xz BuildRoot: %{_tmppath}/%{name}-%{version}-build ++++++ kmix-4.10.90.tar.xz -> kmix-4.10.95.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.10.90/backends/mixer_backend.cpp new/kmix-4.10.95/backends/mixer_backend.cpp --- old/kmix-4.10.90/backends/mixer_backend.cpp 2013-06-25 20:35:45.000000000 +0200 +++ new/kmix-4.10.95/backends/mixer_backend.cpp 2013-07-10 01:19:39.000000000 +0200 @@ -170,7 +170,8 @@ foreach (shared_ptr<MixDevice> md, m_mixDevices ) { - bool debugMe = (md->id() == "PCM:0" ); + //bool debugMe = (md->id() == "PCM:0" ); + bool debugMe = false; if (debugMe) kDebug() << "Old PCM:0 playback state" << md->isMuted() << ", vol=" << md->playbackVolume().getAvgVolumePercent(Volume::MALL); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.10.90/backends/mixer_mpris2.cpp new/kmix-4.10.95/backends/mixer_mpris2.cpp --- old/kmix-4.10.90/backends/mixer_mpris2.cpp 2013-06-10 20:54:14.000000000 +0200 +++ new/kmix-4.10.95/backends/mixer_mpris2.cpp 2013-07-10 01:19:39.000000000 +0200 @@ -52,6 +52,8 @@ _id = "Playback Streams"; _mixer->setDynamic(); addAllRunningPlayersAndInitHotplug(); + + //connect(this, SIGNAL(controlChanged()), SLOT(readSetFromHW()), Qt::QueuedConnection); return 0; } @@ -154,7 +156,12 @@ } - +/** + * A slot that processes data from the MPrisAppdata that emit the signal. + * + * @param The emitting MPrisAppdata + * @param newVolume The new volume + */ void Mixer_MPRIS2::volumeChanged(MPrisAppdata* mad, double newVolume) { shared_ptr<MixDevice> md = m_mixDevices.get(mad->id); @@ -175,11 +182,14 @@ Volume& vol = md->playbackVolume(); vol.setVolume( Volume::LEFT, volumePercentage); md->setMuted(volumePercentage == 0); - emit controlChanged(); +// emit controlChanged(); + ControlManager::instance().announce(_mixer->id(), ControlChangeType::Volume, QString("MixerMPRIS2.volumeChanged")); + kDebug() << "changed i2" << volumePercentage; // md->playbackVolume().setVolume(vol); } +// The following is an example message for an incoming volume change: /* signal sender=:1.125 -> dest=(null destination) serial=503 path=/org/mpris/MediaPlayer2; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.mpris.MediaPlayer2.Player" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.10.90/backends/mixer_mpris2.h new/kmix-4.10.95/backends/mixer_mpris2.h --- old/kmix-4.10.90/backends/mixer_mpris2.h 2013-06-10 20:54:14.000000000 +0200 +++ new/kmix-4.10.95/backends/mixer_mpris2.h 2013-07-10 01:19:39.000000000 +0200 @@ -67,10 +67,7 @@ virtual void setEnumIdHW(const QString& id, unsigned int); virtual unsigned int enumIdHW(const QString& id); virtual bool moveStream( const QString& id, const QString& destId ); -#ifdef __GNUC__ -#warning MPRIS2 currently uses Polling mode. Method needsPolling() must be overwritten again. Polling needs too much CPU. -#endif - //virtual bool needsPolling() { return false; } // TODO cesken + virtual bool needsPolling() { return false; } virtual int mediaPlay(QString id); virtual int mediaPrev(QString id); @@ -80,6 +77,13 @@ public slots: void volumeChanged(MPrisAppdata *mad, double); void newMediaPlayer(QString name, QString oldOwner, QString newOwner); +//private slots: + /** + * This transports any changes to the world outside this bakcend. It is connected to the slot readSetFromHW() + * from the base class. + */ +// void controlChanged(); + private: int addAllRunningPlayersAndInitHotplug(); void notifyToReconfigureControls(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.10.90/backends/mixer_pulse.cpp new/kmix-4.10.95/backends/mixer_pulse.cpp --- old/kmix-4.10.90/backends/mixer_pulse.cpp 2013-05-28 21:31:29.000000000 +0200 +++ new/kmix-4.10.95/backends/mixer_pulse.cpp 2013-07-10 01:19:39.000000000 +0200 @@ -769,9 +769,59 @@ void Mixer_PULSE::emitControlsReconfigured() { + // emit controlsReconfigured(_mixer->id()); + // Do not emit directly to ensure all connected slots are executed + // in their own event loop. + + /* + * Bug 309464: + * + * Comment by cesken: I am not really sure what the comment above means. + * 1) IIRC coling told me "otherwise KMix crashes". + * 2) There are also bug reports that heavily indicate the crash when operation the "move stream" from a popup + * menu. + * 3) I don't know what the "executed in their own event loop" means. Are we in a "wrong" thread here (PA), + * which is not suitable for GUI code?!? + * + * Work note: Ouch. it means PA thread makes direct calls via announce(), and do even GUI code. OUCH. Redo this comments! + * + * Conclusions: + * a) It seems there seems to be some object deletion hazard with a QMenu (the one for "move stream") + * b) I do not see why executing it Queued is better, because you can never know when it is actually being + * executed: it could be "right now". It looks like Qt currently executes it after the QMenu hazard has + * resolved itselves miracously. + * c) I am definitely strongly opposed on this "execute later" approach. It is pure gambling IMO and might be + * broken any time (from DEBUG to RELEASE build, or by a new Qt or KDE version). + * + * TODO Somebody with more Qt and PA internal insight might help to clear up things here. + * + * Temporary solution: Do the QueuedConnection until we really know hat is going on. But the called code + * pulseControlsReconfigured() will then do the standard announce() so that every part of + * KMix automatically gets updated. + * + */ + QMetaObject::invokeMethod(this, + "pulseControlsReconfigured", + Qt::QueuedConnection); + +// QMetaObject::invokeMethod(this, +// "pulseControlsReconfigured", +// Qt::QueuedConnection, +// Q_ARG(QString, _mixer->id())); +} + +void Mixer_PULSE::pulseControlsReconfigured() +{ + kDebug() << "Reconfigure " << _mixer->id(); ControlManager::instance().announce(_mixer->id(), ControlChangeType::ControlList, getDriverName()); } +void Mixer_PULSE::pulseControlsReconfigured(QString mixerId) +{ + kDebug() << "Reconfigure " << mixerId; + ControlManager::instance().announce(mixerId, ControlChangeType::ControlList, getDriverName()); +} + void Mixer_PULSE::addWidget(int index, bool isAppStream) { devmap* map = get_widget_map(m_devnum, index); @@ -1366,3 +1416,4 @@ return "PulseAudio"; } +#include "mixer_pulse.moc" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kmix-4.10.90/backends/mixer_pulse.h new/kmix-4.10.95/backends/mixer_pulse.h --- old/kmix-4.10.90/backends/mixer_pulse.h 2013-05-28 21:31:29.000000000 +0200 +++ new/kmix-4.10.95/backends/mixer_pulse.h 2013-07-10 01:19:39.000000000 +0200 @@ -45,6 +45,8 @@ class Mixer_PULSE : public Mixer_Backend { + Q_OBJECT + public: Mixer_PULSE(Mixer *mixer, int devnum); virtual ~Mixer_PULSE(); @@ -77,6 +79,11 @@ void addDevice(devinfo& dev, bool = false); bool connectToDaemon(); void emitControlsReconfigured(); + + protected slots: + void pulseControlsReconfigured(QString mixerId); + void pulseControlsReconfigured(); + public: void reinit(); Files old/kmix-4.10.90/doc/index.cache.bz2 and new/kmix-4.10.95/doc/index.cache.bz2 differ -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
