63
65
static void rb_statusbar_sync_status (RBStatusbar *status);
64
66
static gboolean poll_status (RBStatusbar *status);
65
static void rb_statusbar_toggle_changed_cb (GtkToggleButton *toggle,
66
RBStatusbar *statusbar);
67
67
static void rb_statusbar_view_statusbar_changed_cb (GtkAction *action,
68
68
RBStatusbar *statusbar);
69
static void rb_statusbar_entry_view_changed_cb (RBEntryView *view,
70
RBStatusbar *statusbar);
69
static void rb_statusbar_source_status_changed_cb (RBSource *source,
70
RBStatusbar *statusbar);
72
72
static GtkToggleActionEntry rb_statusbar_toggle_entries [] =
201
201
rb_statusbar_init (RBStatusbar *statusbar)
203
statusbar->priv = g_new0 (RBStatusbarPrivate, 1);
203
statusbar->priv = RB_STATUSBAR_GET_PRIVATE (statusbar);
205
205
statusbar->priv->tooltips = gtk_tooltips_new ();
206
206
gtk_tooltips_enable (statusbar->priv->tooltips);
208
208
gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (statusbar), TRUE);
210
statusbar->priv->shuffle = gtk_check_button_new_with_mnemonic (_("Sh_uffle"));
211
gtk_tooltips_set_tip (GTK_TOOLTIPS (statusbar->priv->tooltips),
212
GTK_WIDGET (statusbar->priv->shuffle),
213
_("Play songs in a random order"), NULL);
215
statusbar->priv->repeat = gtk_check_button_new_with_mnemonic (_("_Repeat"));
216
gtk_tooltips_set_tip (GTK_TOOLTIPS (statusbar->priv->tooltips),
217
GTK_WIDGET (statusbar->priv->repeat),
218
_("Play first song again after all songs are played"), NULL);
219
g_signal_connect_object (G_OBJECT (statusbar->priv->shuffle), "toggled",
220
G_CALLBACK (rb_statusbar_toggle_changed_cb), statusbar, 0);
221
g_signal_connect_object (G_OBJECT (statusbar->priv->repeat), "toggled",
222
G_CALLBACK (rb_statusbar_toggle_changed_cb), statusbar, 0);
224
210
statusbar->priv->progress = gtk_progress_bar_new ();
225
211
statusbar->priv->progress_fraction = 1.0;
230
216
gtk_widget_hide (statusbar->priv->progress);
232
218
gtk_box_pack_start (GTK_BOX (statusbar),
233
GTK_WIDGET (statusbar->priv->repeat), FALSE, TRUE, 0);
234
gtk_box_pack_start (GTK_BOX (statusbar),
235
GTK_WIDGET (statusbar->priv->shuffle), FALSE, TRUE, 0);
236
gtk_box_pack_start (GTK_BOX (statusbar),
237
219
GTK_WIDGET (statusbar->priv->progress), FALSE, TRUE, 0);
239
221
statusbar->priv->notify_id =
353
333
case PROP_SOURCE:
354
334
if (statusbar->priv->selected_source != NULL) {
355
RBEntryView *songs = rb_source_get_entry_view (statusbar->priv->selected_source);
357
g_signal_handlers_disconnect_by_func (G_OBJECT (songs),
358
G_CALLBACK (rb_statusbar_entry_view_changed_cb),
335
g_signal_handlers_disconnect_by_func (G_OBJECT (statusbar->priv->selected_source),
336
G_CALLBACK (rb_statusbar_source_status_changed_cb),
362
340
statusbar->priv->selected_source = g_value_get_object (value);
363
341
rb_debug ("selected source %p", g_value_get_object (value));
365
343
if (statusbar->priv->selected_source != NULL) {
366
RBEntryView *songs = rb_source_get_entry_view (statusbar->priv->selected_source);
368
g_signal_connect_object (G_OBJECT (songs),
370
G_CALLBACK (rb_statusbar_entry_view_changed_cb),
344
g_signal_connect_object (G_OBJECT (statusbar->priv->selected_source),
346
G_CALLBACK (rb_statusbar_source_status_changed_cb),
374
349
rb_statusbar_sync_with_source (statusbar);
490
465
pulse_progress = TRUE;
493
/* 3. entry view busy? */
468
/* 3. query model busy? */
494
469
if (status_text == NULL && status->priv->selected_source) {
496
view = rb_source_get_entry_view (status->priv->selected_source);
497
if (rb_entry_view_busy (view))
470
RhythmDBQueryModel *model;
472
g_object_get (G_OBJECT (status->priv->selected_source), "query-model", &model, NULL);
473
if (rhythmdb_query_model_has_pending_changes (model))
498
474
pulse_progress = TRUE;
500
476
show_progress = FALSE;
477
g_object_unref (G_OBJECT (model));
503
480
/* set up the status text */
606
583
rb_statusbar_sync_state (RBStatusbar *statusbar)
608
585
GtkAction *action;
609
gboolean hidden, consistent;
612
588
rb_debug ("syncing state");
614
590
statusbar->priv->syncing_state = TRUE;
615
consistent = rb_shell_player_get_playback_state (statusbar->priv->player,
618
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (statusbar->priv->shuffle),
620
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (statusbar->priv->repeat),
623
gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (statusbar->priv->shuffle),
625
gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (statusbar->priv->repeat),
628
592
hidden = eel_gconf_get_boolean (CONF_UI_STATUSBAR_HIDDEN);
665
rb_statusbar_toggle_changed_cb (GtkToggleButton *toggle,
666
RBStatusbar *statusbar)
668
RBShellPlayer *player = statusbar->priv->player;
669
gboolean shuffle, repeat;
671
if (statusbar->priv->syncing_state)
673
statusbar->priv->syncing_state = TRUE;
675
rb_debug ("toggle changed");
677
shuffle = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (statusbar->priv->shuffle));
678
repeat = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (statusbar->priv->repeat));
680
rb_shell_player_set_playback_state (player, shuffle, repeat);
681
statusbar->priv->syncing_state = FALSE;
685
629
rb_statusbar_view_statusbar_changed_cb (GtkAction *action,
686
630
RBStatusbar *statusbar)
696
rb_statusbar_entry_view_changed_cb (RBEntryView *view,
697
RBStatusbar *statusbar)
640
rb_statusbar_source_status_changed_cb (RBSource *source, RBStatusbar *statusbar)
699
rb_debug ("entry view changed");
700
if (statusbar->priv->idle)
701
rb_statusbar_sync_with_source (statusbar);
642
rb_debug ("source status changed");
643
if (statusbar->priv->idle)
644
rb_statusbar_sync_with_source (statusbar);