rendered paste bodydiff --git a/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp b/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp
index 4f85f79..5775c71 100644
--- a/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp
+++ b/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp
@@ -99,6 +99,19 @@ gboolean mediaPlayerPrivateMessageCallback(GstBus* bus, GstMessage* message, gpo
return true;
}
+gboolean notify_mute_idle_cb(MediaPlayer* mp)
+{
+ g_printerr("changing volume\n");
+ mp->volumeChanged();
+ return FALSE;
+}
+
+static void mediaPlayerPrivateMuteCallback(GObject *element, GParamSpec *pspec, MediaPlayer* mp)
+{
+ g_printerr("mute changed\n");
+ g_idle_add((GSourceFunc) notify_mute_idle_cb, mp);
+}
+
static float playbackPosition(GstElement* playbin)
{
@@ -383,7 +396,9 @@ void MediaPlayerPrivate::setVolume(float volume)
if (!m_playBin)
return;
- g_object_set(G_OBJECT(m_playBin), "volume", static_cast<double>(volume), NULL);
+ bool mute = static_cast<bool>(volume == 0);
+ g_object_set(G_OBJECT(m_playBin), "volume", static_cast<double>(volume),
+ "mute", mute, NULL);
}
void MediaPlayerPrivate::setRate(float rate)
@@ -855,7 +870,10 @@ void MediaPlayerPrivate::createGSTPlayBin(String url)
gst_object_unref(bus);
g_object_set(G_OBJECT(m_playBin), "uri", url.utf8().data(),
- "volume", static_cast<double>(m_player->volume()), NULL);
+ "volume", static_cast<double>(m_player->volume()),
+ "mute", false, NULL);
+
+ g_signal_connect(G_OBJECT(m_playBin), "notify::mute", G_CALLBACK(mediaPlayerPrivateMuteCallback), m_player);
m_videoSink = webkit_video_sink_new();