[rhythmbox] RBHeader: update using playing-song-changed signal
- From: Jonathan Matthew <jmatthew src gnome org>
- To: svn-commits-list gnome org
- Subject: [rhythmbox] RBHeader: update using playing-song-changed signal
- Date: Tue, 21 Jul 2009 11:52:38 +0000 (UTC)
commit 36af8332c75ba127e54bdbe9715d6e9b926f8183
Author: Jonathan Matthew <jonathan d14n org>
Date: Tue Jul 21 21:48:16 2009 +1000
RBHeader: update using playing-song-changed signal
The header widget is now updated when the new song is actually playing,
rather than when we ask the player to open it. The difference is most
visible when doing gapless transitions between tracks on the same album.
shell/rb-shell-player.c | 12 +--------
widgets/rb-header.c | 59 ++++++++++++----------------------------------
widgets/rb-header.h | 4 ---
3 files changed, 18 insertions(+), 57 deletions(-)
---
diff --git a/shell/rb-shell-player.c b/shell/rb-shell-player.c
index 009adb0..61c89a3 100644
--- a/shell/rb-shell-player.c
+++ b/shell/rb-shell-player.c
@@ -2928,6 +2928,8 @@ rb_shell_player_sync_with_source (RBShellPlayer *player)
/* override artist from entry */
artist = streaming_artist;
}
+
+ rhythmdb_entry_unref (entry);
}
if ((artist && artist[0] != '\0') || entry_title || stream_name) {
@@ -2958,16 +2960,6 @@ rb_shell_player_sync_with_source (RBShellPlayer *player)
g_signal_emit (G_OBJECT (player), rb_shell_player_signals[ELAPSED_CHANGED], 0,
player->priv->elapsed);
- /* Sync the header */
- rb_header_set_playing_entry (player->priv->header_widget,
- entry,
- TRUE /*rb_player_seekable (player->priv->mmplayer)*/);
- rb_header_sync (player->priv->header_widget);
-
- if (entry != NULL) {
- rhythmdb_entry_unref (entry);
- }
-
g_free (streaming_artist);
g_free (streaming_title);
}
diff --git a/widgets/rb-header.c b/widgets/rb-header.c
index 552c507..55c764d 100644
--- a/widgets/rb-header.c
+++ b/widgets/rb-header.c
@@ -116,7 +116,6 @@ enum
PROP_0,
PROP_DB,
PROP_SHELL_PLAYER,
- PROP_ENTRY,
PROP_SEEKABLE,
PROP_SLIDER_DRAGGING
};
@@ -155,18 +154,6 @@ rb_header_class_init (RBHeaderClass *klass)
G_PARAM_READWRITE));
/**
- * RBHeader:entry:
- *
- * The #RhythmDBEntry to display
- */
- g_object_class_install_property (object_class,
- PROP_ENTRY,
- g_param_spec_boxed ("entry",
- "RhythmDBEntry",
- "RhythmDBEntry pointer",
- RHYTHMDB_TYPE_ENTRY,
- G_PARAM_READWRITE));
- /**
* RBHeader:shell-player:
*
* The #RBShellPlayer instance
@@ -283,6 +270,11 @@ rb_header_init (RBHeader *header)
gtk_scale_set_draw_value (GTK_SCALE (header->priv->scale), FALSE);
gtk_widget_set_size_request (header->priv->scale, 150, -1);
gtk_box_pack_start (GTK_BOX (header->priv->scaleline), header->priv->scale, TRUE, TRUE, 0);
+
+ /* currently, nothing sets this. it should be set on track changes. */
+ header->priv->seekable = TRUE;
+
+ rb_header_sync (header);
}
static void
@@ -300,7 +292,7 @@ rb_header_finalize (GObject *object)
}
static void
-rb_header_set_playing_entry_internal (RBHeader *header, RhythmDBEntry *entry)
+rb_header_playing_song_changed_cb (RBShellPlayer *player, RhythmDBEntry *entry, RBHeader *header)
{
if (header->priv->entry == entry)
return;
@@ -315,6 +307,8 @@ rb_header_set_playing_entry_internal (RBHeader *header, RhythmDBEntry *entry)
header->priv->adjustment->upper = header->priv->duration;
gtk_adjustment_changed (header->priv->adjustment);
+
+ rb_header_sync (header);
}
static void
@@ -329,15 +323,16 @@ rb_header_set_property (GObject *object,
case PROP_DB:
header->priv->db = g_value_get_object (value);
break;
- case PROP_ENTRY:
- rb_header_set_playing_entry_internal (header, g_value_get_boxed (value));
- break;
case PROP_SHELL_PLAYER:
header->priv->shell_player = g_value_get_object (value);
- g_signal_connect (G_OBJECT (header->priv->shell_player),
- "elapsed-nano-changed",
- (GCallback) rb_header_elapsed_changed_cb,
- header);
+ g_signal_connect_object (header->priv->shell_player,
+ "elapsed-nano-changed",
+ G_CALLBACK (rb_header_elapsed_changed_cb),
+ header, 0);
+ g_signal_connect_object (header->priv->shell_player,
+ "playing-song-changed",
+ G_CALLBACK (rb_header_playing_song_changed_cb),
+ header, 0);
break;
case PROP_SEEKABLE:
header->priv->seekable = g_value_get_boolean (value);
@@ -360,9 +355,6 @@ rb_header_get_property (GObject *object,
case PROP_DB:
g_value_set_object (value, header->priv->db);
break;
- case PROP_ENTRY:
- g_value_set_boxed (value, header->priv->entry);
- break;
case PROP_SHELL_PLAYER:
g_value_set_object (value, header->priv->shell_player);
break;
@@ -400,25 +392,6 @@ rb_header_new (RBShellPlayer *shell_player, RhythmDB *db)
return header;
}
-/**
- * rb_header_set_playing_entry:
- * @header: the #RBHeader
- * @entry: the new playing #RhythmDBEntry
- * @seekable: whether the new playing entry is seekable
- *
- * Sets a new playing entry to be displayed in the header.
- */
-void
-rb_header_set_playing_entry (RBHeader *header,
- RhythmDBEntry *entry,
- gboolean seekable)
-{
- g_object_set (header,
- "entry", entry,
- "seekable", seekable,
- NULL);
-}
-
static void
append_and_free (GString *str,
char *text)
diff --git a/widgets/rb-header.h b/widgets/rb-header.h
index 29a6050..e18c4bb 100644
--- a/widgets/rb-header.h
+++ b/widgets/rb-header.h
@@ -67,10 +67,6 @@ GType rb_header_get_type (void);
RBHeader * rb_header_new (RBShellPlayer *shell_player,
RhythmDB *db);
-void rb_header_set_playing_entry (RBHeader *header,
- RhythmDBEntry *entry,
- gboolean seekable);
-
void rb_header_set_show_position_slider (RBHeader *header,
gboolean show);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]