SVN commit 768759 by jbache: Fixes multiple emits of the same meta tags M +9 -4 mediaobject.cpp --- trunk/kdereview/phonon/gstreamer/mediaobject.cpp #768758:768759 @@ -498,8 +498,8 @@ Phonon::State oldState = m_state; m_state = newstate; // m_state must be set before emitting, since // Error state requires that state() will return the new value + m_pendingState = newstate; emit stateChanged(newstate, oldState); - m_pendingState = newstate; switch (newstate) { case Phonon::PausedState: @@ -910,8 +910,11 @@ //qDebug("Unsupported tag type: %s", g_type_name(type)); break; } - if (!value.isEmpty()) - newData->insert(QString(tag).toUpper(), value); + + QString key = QString(tag).toUpper(); + QString currVal = newData->value(key); + if (!value.isEmpty() && !(newData->contains(key) && currVal == value)) + newData->insert(key, value); } /** @@ -955,10 +958,12 @@ GstTagList* tag_list = 0; gst_message_parse_tag(gstMessage, &tag_list); if (tag_list) { + TagMap oldMap = m_metaData; // Keep a copy of the old one for reference // Append any new meta tags to the existing tag list gst_tag_list_foreach (tag_list, &foreach_tag_function, &m_metaData); m_backend->logMessage("Meta tags found", Backend::Info, this); - emit metaDataChanged(m_metaData); + if (oldMap != m_metaData) + emit metaDataChanged(m_metaData); gst_tag_list_free(tag_list); } }