diff -Nru --exclude reference --exclude '*.xml' --exclude configure --exclude '*.spec' totem-2.30.1/browser-plugin/totemPlugin.cpp totem-2.30.2/browser-plugin/totemPlugin.cpp --- totem-2.30.1/browser-plugin/totemPlugin.cpp 2010-04-27 11:17:30.000000000 +0200 +++ totem-2.30.2/browser-plugin/totemPlugin.cpp 2010-05-12 17:41:20.000000000 +0200 @@ -1042,7 +1042,6 @@ /* Prefer filename over src */ if (mURLURI) { requestURI = mURLURI; - baseURI = mSrcURI; /* FIXME: that correct? */ } #endif /* TOTEM_GMP_PLUGIN */ @@ -1277,9 +1276,12 @@ scriptable->mPluginState = totemNarrowSpacePlayer::eState_Playable; break; case TOTEM_STATE_STOPPED: - if (scriptable->mPluginState == totemNarrowSpacePlayer::eState_Playable) + if (scriptable->mPluginState == totemNarrowSpacePlayer::eState_Playable) { scriptable->mPluginState = totemNarrowSpacePlayer::eState_Complete; - else + /* The QuickTime plugin expects the duration to be the + * length of the file on EOS */ + plugin->mTime = plugin->mDuration; + } else scriptable->mPluginState = totemNarrowSpacePlayer::eState_Waiting; break; default: @@ -1655,7 +1657,23 @@ mURLURI = g_strdup (aURL); - /* FIXME: what is the correct base for the URL param? mSrcURI or mBaseURI? */ + /* FIXME: security checks? */ + /* FIXMEchpe: resolve the URI here? */ +} + +void +totemPlugin::SetBaseURL (const char *aBaseURL) +{ + g_free (mBaseURI); + + /* Don't allow empty URL */ + if (!aBaseURL || !aBaseURL[0]) { + mBaseURI = NULL; + return; + } + + mBaseURI = g_strdup (aBaseURL); + /* FIXME: security checks? */ /* FIXMEchpe: resolve the URI here? */ } @@ -2006,6 +2024,12 @@ if (filename) { SetURL (filename); } + + /* http://msdn.microsoft.com/en-us/library/dd564090(v=VS.85).aspx */ + const char *base = (const char *) g_hash_table_lookup (args, "baseurl"); + if (base) + SetBaseURL (base); + #endif /* TOTEM_GMP_PLUGIN */ #ifdef TOTEM_NARROWSPACE_PLUGIN @@ -2141,6 +2165,7 @@ /* Dump some disagnostics */ D ("mSrcURI: %s", mSrcURI ? mSrcURI : ""); + D ("mBaseURI: %s", mBaseURI ? mBaseURI : ""); D ("mCache: %d", mCache); D ("mControllerHidden: %d", mControllerHidden); D ("mShowStatusbar: %d", mShowStatusbar); diff -Nru --exclude reference --exclude '*.xml' --exclude configure --exclude '*.spec' totem-2.30.1/browser-plugin/totemPlugin.h totem-2.30.2/browser-plugin/totemPlugin.h --- totem-2.30.1/browser-plugin/totemPlugin.h 2010-04-27 11:17:30.000000000 +0200 +++ totem-2.30.2/browser-plugin/totemPlugin.h 2010-05-12 17:41:20.000000000 +0200 @@ -284,6 +284,7 @@ #ifdef TOTEM_GMP_PLUGIN public: void SetURL (const char* aURL); + void SetBaseURL (const char* aBaseURL); const char* URL() const { return mURLURI; } private: diff -Nru --exclude reference --exclude '*.xml' --exclude configure --exclude '*.spec' totem-2.30.1/browser-plugin/totem-plugin-viewer.c totem-2.30.2/browser-plugin/totem-plugin-viewer.c --- totem-2.30.1/browser-plugin/totem-plugin-viewer.c 2010-04-27 11:17:30.000000000 +0200 +++ totem-2.30.2/browser-plugin/totem-plugin-viewer.c 2010-05-12 17:41:20.000000000 +0200 @@ -1804,8 +1804,6 @@ GtkWidget *menu; BvwUseType type; GError *err = NULL; - GConfClient *gc; - double volume; emb->xml = totem_interface_load ("mozilla-viewer.ui", TRUE, GTK_WINDOW (emb->window), emb); @@ -1947,20 +1945,13 @@ g_signal_connect (G_OBJECT (popup_button), "button-press-event", G_CALLBACK (on_popup_button_button_pressed), emb); - gc = gconf_client_get_default (); - volume = ((double) gconf_client_get_int (gc, GCONF_PREFIX"/volume", NULL)) / 100.0; - g_object_unref (G_OBJECT (gc)); - emb->volume = GTK_WIDGET (gtk_builder_get_object (emb->xml, "volume_button")); gtk_scale_button_set_adjustment (GTK_SCALE_BUTTON (emb->fs->volume), gtk_scale_button_get_adjustment (GTK_SCALE_BUTTON (emb->volume))); gtk_button_set_focus_on_click (GTK_BUTTON (emb->volume), FALSE); - gtk_scale_button_set_value (GTK_SCALE_BUTTON (emb->volume), volume); g_signal_connect (G_OBJECT (emb->volume), "value-changed", G_CALLBACK (cb_vol), emb); - bacon_video_widget_set_volume (emb->bvw, volume); - totem_embedded_volume_changed (emb, volume); emb->statusbar = TOTEM_STATUSBAR (gtk_builder_get_object (emb->xml, "statusbar")); gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (emb->statusbar), FALSE); diff -Nru --exclude reference --exclude '*.xml' --exclude configure --exclude '*.spec' totem-2.30.1/ChangeLog totem-2.30.2/ChangeLog --- totem-2.30.1/ChangeLog 2010-04-27 11:37:35.000000000 +0200 +++ totem-2.30.2/ChangeLog 2010-05-12 17:53:24.000000000 +0200 @@ -1,3 +1,252 @@ +commit 4e1ef19112377ad36e71cf77c2e6794124a8feb1 +Author: Bastien Nocera +Date: Wed May 12 13:13:59 2010 +0100 + + 2.30.2 + + NEWS | 18 ++++++++++++++++++ + configure.in | 2 +- + 2 files changed, 19 insertions(+), 1 deletions(-) + +commit d2b245e147d5c9343a579437ec71ecc037590b5d +Author: Bastien Nocera +Date: Fri May 7 16:32:06 2010 +0100 + + Fix loading OSD icons when there's no SVG version + + In gnome-icon-theme in 2.30.x, there's no SVG icons anymore, + so the OSD popups won't look like the rest of the system, + as "hand-drawn" icons will be used instead. + + https://bugzilla.gnome.org/show_bug.cgi?id=618023 + + src/gsd-media-keys-window.c | 15 +-------------- + 1 files changed, 1 insertions(+), 14 deletions(-) + +commit aeeb165117a80080b044d54d5dc8b64df3128c26 +Author: Jonathan Matthew +Date: Fri May 7 13:23:17 2010 +0100 + + Fix version requirements for PyGTK + + pygtk.require() actually needs the major GTK+ version, and + doesn't use the minor version in the require. + + Also make sure to check for the return value to avoid surprises. + + https://bugzilla.gnome.org/show_bug.cgi?id=617821 + + src/plugins/totem-python-module.c | 9 +++++++-- + 1 files changed, 7 insertions(+), 2 deletions(-) + +commit f6fa6e869330bb2e64b67f966f6873412c3ca081 +Author: Bastien Nocera +Date: Fri May 7 10:10:55 2010 +0100 + + Fix position when QT gets to EOS + + When QuickTime reaches the end of a stream, the expected behaviour + is for the position to stay at the end of the file, rather than + back at 0. + + browser-plugin/totemPlugin.cpp | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +commit 261b53120fea3ba2e1959ce56533e7a4d207ae45 +Author: Bastien Nocera +Date: Thu May 6 10:43:34 2010 +0100 + + Fix constant buffering when playing live streams + + When playing Ogg Theora live streams, we should wait until the + buffer reaches 100% before we start the actual playback. + Otherwise the buffer will be consumed as it is downloaded, and + we'll be constantly buffering, which is problematic visually, + and could cause hiccups during playback. + + Fixes constant buffering with the streams at: + http://dir.xiph.org/by_format/Ogg_Theora + + https://bugzilla.gnome.org/show_bug.cgi?id=617791 + + src/backend/bacon-video-widget-gst-0.10.c | 21 ++++++++++++--------- + 1 files changed, 12 insertions(+), 9 deletions(-) + +commit d3b494595f7be012c400a4426bc89dcca1528f66 +Author: Bastien Nocera +Date: Wed May 5 17:50:52 2010 +0100 + + Fix URL parameter usage in GMP plugin + + The URL parameter is never the baseURI, it's the same as the SRC + parameter, so some websites use both. + + Add support for the actual "baseURL" parameter instead. + + Fixes playback at: + http://www.ta3.com/sk/relacie/23_hlavne-spravy/9167_hlavne-spravy-z-27-aprila + + https://bugzilla.gnome.org/show_bug.cgi?id=617639 + + browser-plugin/totemPlugin.cpp | 26 ++++++++++++++++++++++++-- + browser-plugin/totemPlugin.h | 1 + + 2 files changed, 25 insertions(+), 2 deletions(-) + +commit 5094bc8374a4789baead4603d2153162711b65a4 +Author: Bastien Nocera +Date: Wed May 5 17:10:37 2010 +0100 + + Remove use of GConf volume variable + + Seeing as it's not set anywhere anymore, and PulseAudio is + supposed to remember the volume of the previous stream. + + https://bugzilla.gnome.org/show_bug.cgi?id=617525 + + browser-plugin/totem-plugin-viewer.c | 9 --------- + 1 files changed, 0 insertions(+), 9 deletions(-) + +commit d2ac95ec42d439a6cf1c0106baa0695dc0ead86a +Author: Bastien Nocera +Date: Tue Apr 27 18:17:28 2010 +0100 + + Fix compilation + + src/totem-object.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 4fd29a1dbc368fd993b55a885ff8b55d0bbdfd76 +Author: Bastien Nocera +Date: Tue Apr 27 18:04:32 2010 +0100 + + Really remove the border width + + src/totem-object.c | 13 +++---------- + 1 files changed, 3 insertions(+), 10 deletions(-) + +commit 03d9c44cc1a839f56063cb1e724005a0c59f7236 +Author: Bastien Nocera +Date: Tue Apr 27 17:18:07 2010 +0100 + + Avoid slight resize when showing the sidebar + + for the first time. + + We didn't take the box' border into account it seems. + + data/totem.ui | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +commit 0363ed723bef88b9fd134c8a8070c5655b450aa0 +Author: Sean Neakums +Date: Tue Apr 27 17:26:12 2010 +0100 + + Fix window height when showing controls again + + Fix regression due to commit eb74e996 + + When hiding and then showing the controls again with the 'H' + hotkey, the window height will be huge, because the wrong + allocation was used to calculate the new window height. + + https://bugzilla.gnome.org/show_bug.cgi?id=614514 + + src/totem-object.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +commit 6999f947caa5a8d656039a50f007d3f57dfc7db4 +Author: Bastien Nocera +Date: Tue Apr 27 13:28:34 2010 +0100 + + Revert "Update version number for development branch" + + This reverts commit facf142f0d28400812603485f0fdb30dfc33d88a. + + configure.in | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit b8cdcefa0351f6f0723901531c39dc4ad4a75c1c +Author: Bastien Nocera +Date: Tue Apr 27 13:28:28 2010 +0100 + + Revert "Bug 559628 — Support async loading of playlists" + + This reverts commit 81a459d8d28d3a4b8ca6463859a53b34dbd0d416. + + src/plugins/publish/totem-publish.c | 2 +- + src/totem-object.c | 79 +++++------------ + src/totem-playlist.c | 166 ++++++++++------------------------- + src/totem-playlist.h | 18 ++--- + src/totem-session.c | 4 +- + src/totem-video-list.c | 2 +- + 6 files changed, 79 insertions(+), 192 deletions(-) + +commit b071d879f171dbdf052e6b19fd5852fc433590f9 +Author: Bastien Nocera +Date: Tue Apr 27 13:28:20 2010 +0100 + + Revert "Fix some strings in the BBC iPlayer plugin" + + This reverts commit 44ec0266dfdb28976da064680e1b508d0fed584e. + + src/plugins/iplayer/iplayer.py | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit facf142f0d28400812603485f0fdb30dfc33d88a +Author: Bastien Nocera +Date: Tue Apr 27 12:53:24 2010 +0100 + + Update version number for development branch + + configure.in | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit 81a459d8d28d3a4b8ca6463859a53b34dbd0d416 +Author: Philip Withnall +Date: Sun Apr 25 14:43:00 2010 +0100 + + Bug 559628 — Support async loading of playlists + + Add async playlist support. This converts most calls to the playlist + add MRL function to be async, dealing with the cursor appropriately + (such that concurrent operations using a busy cursor don't trample on + each others' cursors when they finish). Closes: bgo#559628 + + src/plugins/publish/totem-publish.c | 2 +- + src/totem-object.c | 79 ++++++++++++----- + src/totem-playlist.c | 166 +++++++++++++++++++++++++---------- + src/totem-playlist.h | 18 +++-- + src/totem-session.c | 4 +- + src/totem-video-list.c | 2 +- + 6 files changed, 192 insertions(+), 79 deletions(-) + +commit 44ec0266dfdb28976da064680e1b508d0fed584e +Author: Philip Withnall +Date: Wed Apr 7 19:10:39 2010 +0100 + + Fix some strings in the BBC iPlayer plugin + + https://bugzilla.gnome.org/show_bug.cgi?id=615090 + + src/plugins/iplayer/iplayer.py | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +commit e55b44c636a74fdd836c9755154e59718a755b9e +Author: Bastien Nocera +Date: Fri Mar 19 12:49:17 2010 +0000 + + Don't block main thread in _seek() + + Instead keep hold of the last seek request and apply it + when we've been told that the previous one finished, or + apply it straight away if the previous seek took longer than + 1/10th of a second. + + https://bugzilla.gnome.org/show_bug.cgi?id=588377 + + src/backend/bacon-video-widget-gst-0.10.c | 88 +++++++++++++++++++++++++--- + 1 files changed, 78 insertions(+), 10 deletions(-) + commit 3f8ae7afeb7bbdfb03f039e99eb5b259e892936d Author: Bastien Nocera Date: Tue Apr 27 10:24:12 2010 +0100 diff -Nru --exclude reference --exclude '*.xml' --exclude configure --exclude '*.spec' totem-2.30.1/configure.in totem-2.30.2/configure.in --- totem-2.30.1/configure.in 2010-04-27 11:17:40.000000000 +0200 +++ totem-2.30.2/configure.in 2010-05-12 17:41:20.000000000 +0200 @@ -2,7 +2,7 @@ m4_define(totem_version_major, 2) m4_define(totem_version_minor, 30) -m4_define(totem_version_micro, 1) +m4_define(totem_version_micro, 2) AC_INIT([totem], [totem_version_major.totem_version_minor.totem_version_micro], diff -Nru --exclude reference --exclude '*.xml' --exclude configure --exclude '*.spec' totem-2.30.1/data/totem.ui totem-2.30.2/data/totem.ui --- totem-2.30.1/data/totem.ui 2009-11-19 16:13:58.000000000 +0100 +++ totem-2.30.2/data/totem.ui 2010-05-10 17:50:03.000000000 +0200 @@ -2049,7 +2049,7 @@ - 1 + 0 True True False diff -Nru --exclude reference --exclude '*.xml' --exclude configure --exclude '*.spec' totem-2.30.1/debian/changelog totem-2.30.2/debian/changelog --- totem-2.30.1/debian/changelog 2010-05-18 11:39:48.000000000 +0200 +++ totem-2.30.2/debian/changelog 2010-05-18 11:39:48.000000000 +0200 @@ -1,3 +1,10 @@ +totem (2.30.2-0ubuntu1) lucid-proposed; urgency=low + + * New upstream version: + - Fix volume being at zero when starting playback (lp: #514658) + + -- Sebastien Bacher Tue, 18 May 2010 11:26:39 +0200 + totem (2.30.1-0ubuntu1) lucid-proposed; urgency=low [ Martin Pitt ] diff -Nru --exclude reference --exclude '*.xml' --exclude configure --exclude '*.spec' totem-2.30.1/NEWS totem-2.30.2/NEWS --- totem-2.30.1/NEWS 2010-04-27 11:24:03.000000000 +0200 +++ totem-2.30.2/NEWS 2010-05-12 17:41:20.000000000 +0200 @@ -1,5 +1,23 @@ New features and significant updates in version... +2.30.2: +* Movie Player: + - Fix huge window height when hiding then showing controls again + - Fix slight resize when showing the sidebar for the first time + - Fix possible crash when loading PytGTK + - Fix loading OSD icons when there's no SVG versions + +* Browser Plugin: + - Fix volume being at zero when starting playback + - Fix use of URL parameter for the Window Media Player + compatibility plugin + - Fix position on End-Of-Stream when using the QuickTime + compatibility plugin + +* GStreamer backend: + - Try not to block the UI when seeking + - Fix constant buffering when playing live streams + 2.30.1: * Movie Player: - Fix artifacts and flashing or black screen when paused diff -Nru --exclude reference --exclude '*.xml' --exclude configure --exclude '*.spec' totem-2.30.1/src/backend/bacon-video-widget-gst-0.10.c totem-2.30.2/src/backend/bacon-video-widget-gst-0.10.c --- totem-2.30.1/src/backend/bacon-video-widget-gst-0.10.c 2010-04-27 11:17:32.000000000 +0200 +++ totem-2.30.2/src/backend/bacon-video-widget-gst-0.10.c 2010-05-12 17:41:24.000000000 +0200 @@ -93,6 +93,8 @@ #define SMALL_STREAM_HEIGHT 120 /* Maximum size of the logo */ #define LOGO_SIZE 256 +#define NANOSECS_IN_SEC 1000000000 +#define SEEK_TIMEOUT NANOSECS_IN_SEC / 10 #define is_error(e, d, c) \ (e->domain == GST_##d##_ERROR && \ @@ -241,6 +243,12 @@ gint eos_id; + /* When seeking, queue up the seeks if they happen before + * the previous one finished */ + GMutex *seek_mutex; + GstClock *clock; + GstClockTime seek_req_time; + gint64 seek_time; /* state we want to be in, as opposed to actual pipeline state * which may change asynchronously or during buffering */ GstState target_state; @@ -295,6 +303,7 @@ static gboolean bvw_check_for_cover_pixbuf (BaconVideoWidget * bvw); static const GdkPixbuf * bvw_get_logo_pixbuf (BaconVideoWidget * bvw); static gboolean bvw_set_playback_direction (BaconVideoWidget *bvw, gboolean forward); +static gboolean bacon_video_widget_seek_time_no_lock (BaconVideoWidget *bvw, gint64 _time, GError **error); static GtkWidgetClass *parent_class = NULL; @@ -1297,6 +1306,11 @@ priv->lock = g_mutex_new (); + priv->seek_mutex = g_mutex_new (); + priv->clock = gst_system_clock_obtain (); + priv->seek_req_time = GST_CLOCK_TIME_NONE; + priv->seek_time = -1; + bvw->priv->missing_plugins = NULL; bvw->priv->plugin_install_in_progress = FALSE; @@ -1942,7 +1956,7 @@ } static gboolean -bvw_buffering_done (BaconVideoWidget *bvw) +bvw_download_buffering_done (BaconVideoWidget *bvw) { /* When we set buffering left to 0, that means it's ready to play */ if (bvw->priv->buffering_left == 0) { @@ -2007,20 +2021,17 @@ /* if the desired state is playing, go back */ if (bvw->priv->target_state == GST_STATE_PLAYING) { GST_DEBUG ("Buffering done, setting pipeline back to PLAYING"); - gst_element_set_state (bvw->priv->play, GST_STATE_PLAYING); + bacon_video_widget_play (bvw, NULL); } else { GST_DEBUG ("Buffering done, keeping pipeline PAUSED"); } - } else if (bvw->priv->buffering == FALSE && - bvw->priv->target_state == GST_STATE_PLAYING) { + } else if (bvw->priv->target_state == GST_STATE_PLAYING) { GstState cur_state; gst_element_get_state (bvw->priv->play, &cur_state, NULL, 0); - if (cur_state == GST_STATE_PLAYING) { + if (cur_state != GST_STATE_PAUSED) { GST_DEBUG ("Buffering ... temporarily pausing playback"); gst_element_set_state (bvw->priv->play, GST_STATE_PAUSED); - } else { - GST_DEBUG ("Buffering ... prerolling, not doing anything"); } bvw->priv->buffering = TRUE; } else { @@ -2178,6 +2189,24 @@ break; } + case GST_MESSAGE_ASYNC_DONE: { + gint64 _time; + /* When a seek has finished, set the playing state again */ + g_mutex_lock (bvw->priv->seek_mutex); + + bvw->priv->seek_req_time = gst_clock_get_internal_time (bvw->priv->clock); + _time = bvw->priv->seek_time; + bvw->priv->seek_time = -1; + + g_mutex_unlock (bvw->priv->seek_mutex); + + if (_time >= 0) { + GST_DEBUG ("Have an old seek to schedule, doing it now"); + bacon_video_widget_seek_time_no_lock (bvw, _time, NULL); + } + break; + } + /* FIXME: at some point we might want to handle CLOCK_LOST and set the * pipeline back to PAUSED and then PLAYING again to select a different * clock (this seems to trip up rtspsrc though so has to wait until @@ -2471,7 +2500,7 @@ bvw->priv->buffering_left = 0; /* Start playing when we've downloaded enough */ - if (bvw_buffering_done (bvw) != FALSE && + if (bvw_download_buffering_done (bvw) != FALSE && bvw->priv->target_state == GST_STATE_PLAYING) { GST_DEBUG ("Starting playback because the download buffer is filled enough"); bacon_video_widget_play (bvw, NULL); @@ -2649,6 +2678,11 @@ g_free (bvw->priv->vis_element_name); bvw->priv->vis_element_name = NULL; + if (bvw->priv->clock) { + g_object_unref (bvw->priv->clock); + bvw->priv->clock = NULL; + } + if (bvw->priv->vis_plugins_list) { g_list_free (bvw->priv->vis_plugins_list); bvw->priv->vis_plugins_list = NULL; @@ -2708,6 +2742,7 @@ } g_mutex_free (bvw->priv->lock); + g_mutex_free (bvw->priv->seek_mutex); G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -3810,11 +3845,17 @@ /* Lie when trying to play a file whilst we're download buffering */ if (bvw->priv->download_buffering != FALSE && - bvw_buffering_done (bvw) == FALSE) { + bvw_download_buffering_done (bvw) == FALSE) { GST_DEBUG ("download buffering in progress, not playing"); return TRUE; } + /* Or when we're buffering */ + if (bvw->priv->buffering != FALSE) { + GST_DEBUG ("buffering in progress, not playing"); + return TRUE; + } + /* just lie and do nothing in this case */ if (bvw->priv->plugin_install_in_progress && cur_state != GST_STATE_PAUSED) { GST_DEBUG ("plugin install in progress and nothing to play, not playing"); @@ -3871,6 +3912,23 @@ return FALSE; } +static gboolean +bacon_video_widget_seek_time_no_lock (BaconVideoWidget *bvw, gint64 _time, GError **error) +{ + if (bvw_set_playback_direction (bvw, TRUE) == FALSE) + return FALSE; + + bvw->priv->seek_time = -1; + bvw->priv->rate = FORWARD_RATE; + + gst_element_seek (bvw->priv->play, FORWARD_RATE, + GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, + GST_SEEK_TYPE_SET, _time * GST_MSECOND, + GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE); + + return TRUE; +} + /** * bacon_video_widget_seek_time: * @bvw: a #BaconVideoWidget @@ -3884,6 +3942,8 @@ gboolean bacon_video_widget_seek_time (BaconVideoWidget *bvw, gint64 _time, GError **error) { + GstClockTime cur_time; + g_return_val_if_fail (bvw != NULL, FALSE); g_return_val_if_fail (BACON_IS_VIDEO_WIDGET (bvw), FALSE); g_return_val_if_fail (GST_IS_ELEMENT (bvw->priv->play), FALSE); @@ -3902,16 +3962,24 @@ /* Emit a time tick of where we are going, we are paused */ got_time_tick (bvw->priv->play, _time * GST_MSECOND, bvw); - if (bvw_set_playback_direction (bvw, TRUE) == FALSE) - return FALSE; - - gst_element_seek (bvw->priv->play, FORWARD_RATE, - GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, - GST_SEEK_TYPE_SET, _time * GST_MSECOND, - GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE); - bvw->priv->rate = FORWARD_RATE; + /* Is there a pending seek? */ + g_mutex_lock (bvw->priv->seek_mutex); + /* If there's no pending seek, or + * it's been too long since the seek */ + cur_time = gst_clock_get_internal_time (bvw->priv->clock); + if (bvw->priv->seek_req_time == GST_CLOCK_TIME_NONE || + cur_time > bvw->priv->seek_req_time + SEEK_TIMEOUT) { + bvw->priv->seek_time = -1; + bvw->priv->seek_req_time = cur_time; + g_mutex_unlock (bvw->priv->seek_mutex); + } else { + GST_LOG ("Not long enough since last seek, queuing it"); + bvw->priv->seek_time = _time; + g_mutex_unlock (bvw->priv->seek_mutex); + return TRUE; + } - gst_element_get_state (bvw->priv->play, NULL, NULL, 100 * GST_MSECOND); + bacon_video_widget_seek_time_no_lock (bvw, _time, error); return TRUE; } @@ -4089,6 +4157,9 @@ bvw->priv->window_resized = FALSE; bvw->priv->rate = FORWARD_RATE; + bvw->priv->seek_req_time = GST_CLOCK_TIME_NONE; + bvw->priv->seek_time = -1; + if (bvw->priv->tagcache) { gst_tag_list_free (bvw->priv->tagcache); bvw->priv->tagcache = NULL; @@ -4374,8 +4445,8 @@ } GST_LOG ("Pausing"); - gst_element_set_state (GST_ELEMENT (bvw->priv->play), GST_STATE_PAUSED); bvw->priv->target_state = GST_STATE_PAUSED; + gst_element_set_state (GST_ELEMENT (bvw->priv->play), GST_STATE_PAUSED); } /** diff -Nru --exclude reference --exclude '*.xml' --exclude configure --exclude '*.spec' totem-2.30.1/src/gsd-media-keys-window.c totem-2.30.2/src/gsd-media-keys-window.c --- totem-2.30.1/src/gsd-media-keys-window.c 2010-04-27 11:17:32.000000000 +0200 +++ totem-2.30.2/src/gsd-media-keys-window.c 2010-05-12 17:41:24.000000000 +0200 @@ -357,22 +357,9 @@ pixbuf = gtk_icon_theme_load_icon (theme, name, icon_size, - GTK_ICON_LOOKUP_FORCE_SVG, + GTK_ICON_LOOKUP_FORCE_SIZE, NULL); - /* make sure the pixbuf is close to the requested size - * this is necessary because GTK_ICON_LOOKUP_FORCE_SVG - * seems to be broken */ - if (pixbuf != NULL) { - int width; - - width = gdk_pixbuf_get_width (pixbuf); - if (width < (float)icon_size * 0.75) { - g_object_unref (pixbuf); - pixbuf = NULL; - } - } - return pixbuf; } diff -Nru --exclude reference --exclude '*.xml' --exclude configure --exclude '*.spec' totem-2.30.1/src/plugins/totem-python-module.c totem-2.30.2/src/plugins/totem-python-module.c --- totem-2.30.1/src/plugins/totem-python-module.c 2010-04-14 14:41:26.000000000 +0200 +++ totem-2.30.2/src/plugins/totem-python-module.c 2010-05-12 15:39:01.000000000 +0200 @@ -151,7 +151,7 @@ PySys_SetArgv (1, argv); - /* pygtk.require("2.8") */ + /* pygtk.require("2.0") */ pygtk = PyImport_ImportModule ("pygtk"); if (pygtk == NULL) { g_warning ("Could not import pygtk, check your installation"); @@ -161,7 +161,12 @@ mdict = PyModule_GetDict (pygtk); require = PyDict_GetItemString (mdict, "require"); - PyObject_CallObject (require, Py_BuildValue ("(S)", PyString_FromString ("2.8"))); + PyObject_CallObject (require, Py_BuildValue ("(S)", PyString_FromString ("2.0"))); + if (PyErr_Occurred ()) { + g_warning ("Could not get required pygtk version, check your installation"); + PyErr_Print(); + return; + } /* import gobject */ init_pygobject (); diff -Nru --exclude reference --exclude '*.xml' --exclude configure --exclude '*.spec' totem-2.30.1/src/totem-object.c totem-2.30.2/src/totem-object.c --- totem-2.30.1/src/totem-object.c 2010-04-27 11:17:33.000000000 +0200 +++ totem-2.30.2/src/totem-object.c 2010-05-12 17:41:26.000000000 +0200 @@ -90,8 +90,6 @@ #define VOLUME_EPSILON (1e-10) -#define BVW_VBOX_BORDER_WIDTH 1 - /* casts are to shut gcc up */ static const GtkTargetEntry target_table[] = { { (gchar*) "text/uri-list", 0, 0 }, @@ -2820,7 +2818,7 @@ if (totem->controls_visibility == TOTEM_CONTROLS_VISIBLE) { if (was_fullscreen == FALSE) { height = allocation.height; - width = allocation.width; + width = allocation.width; } gtk_widget_set_sensitive (menubar, TRUE); @@ -2844,7 +2842,7 @@ &value); handle_size = g_value_get_int (&value); g_value_unset (&value); - + gtk_widget_show (totem->sidebar); gtk_widget_get_allocation (totem->sidebar, &allocation_sidebar); width += allocation_sidebar.width + handle_size; @@ -2852,9 +2850,6 @@ gtk_widget_hide (totem->sidebar); } - gtk_container_set_border_width (GTK_CONTAINER (bvw_box), - BVW_VBOX_BORDER_WIDTH); - if (was_fullscreen == FALSE) { GtkAllocation allocation_menubar; GtkAllocation allocation_controlbar; @@ -2863,11 +2858,9 @@ gtk_widget_get_allocation (menubar, &allocation_menubar); gtk_widget_get_allocation (controlbar, &allocation_controlbar); gtk_widget_get_allocation (statusbar, &allocation_statusbar); - height += allocation.height - + allocation.height - + allocation.height - + 2 * BVW_VBOX_BORDER_WIDTH; - width += 2 * BVW_VBOX_BORDER_WIDTH; + height += allocation_menubar.height + + allocation_controlbar.height + + allocation_statusbar.height; gtk_window_resize (GTK_WINDOW(totem->win), width, height); }