~matttbe/ubuntu/raring/rhythmbox/lp1010619_RB_2.98

« back to all changes in this revision

Viewing changes to widgets/rb-header.c

  • Committer: Package Import Robot
  • Author(s): Jeremy Bicha
  • Date: 2012-11-06 20:52:57 UTC
  • mfrom: (1.1.67) (214.1.1 quantal-proposed)
  • Revision ID: package-import@ubuntu.com-20121106205257-0btjh8jqley153el
Tags: 2.98-0ubuntu1
* New upstream release (LP: #1060601)
* debian/control.in:
  - Bump minimum glib, gtk, totem-plparser, clutter, and clutter-gst
  - Drop no longer needed musicbrainz dependency
* Refreshed 09_keywords.patch
* Updated 11_fix_cd_pausing.patch with fix from git
* Dropped patches applied in new version:
  - 00git_musicbrainz5.patch
  - 08_CVE-2012-3355.patch
  - dont_free_consumed_floating_gvariant.patch
  - git_scale_click.patch
  - git_crash_during_monitor.patch

Show diffs side-by-side

added added

removed removed

Lines of Context:
85
85
static gboolean slider_release_callback (GtkWidget *widget, GdkEventButton *event, RBHeader *header);
86
86
static void slider_changed_callback (GtkWidget *widget, RBHeader *header);
87
87
static gboolean slider_scroll_callback (GtkWidget *widget, GdkEventScroll *event, RBHeader *header);
 
88
static gboolean slider_focus_out_callback (GtkWidget *widget, GdkEvent *event, RBHeader *header);
88
89
static void time_button_clicked_cb (GtkWidget *button, RBHeader *header);
89
90
 
90
91
static void rb_header_elapsed_changed_cb (RBShellPlayer *player, gint64 elapsed, RBHeader *header);
114
115
        GtkAdjustment *adjustment;
115
116
        gboolean slider_dragging;
116
117
        gboolean slider_locked;
 
118
        gboolean slider_drag_moved;
117
119
        guint slider_moved_timeout;
118
120
        long latest_set_time;
119
121
 
296
298
                                 "scroll_event",
297
299
                                 G_CALLBACK (slider_scroll_callback),
298
300
                                 header, 0);
 
301
        g_signal_connect_object (G_OBJECT (header->priv->scale),
 
302
                                 "focus-out-event",
 
303
                                 G_CALLBACK (slider_focus_out_callback),
 
304
                                 header, 0);
299
305
        gtk_scale_set_draw_value (GTK_SCALE (header->priv->scale), FALSE);
300
306
        gtk_widget_set_size_request (header->priv->scale, 150, -1);
301
307
 
322
328
        /* elapsed time / duration display */
323
329
        header->priv->timelabel = gtk_label_new ("");
324
330
        gtk_widget_set_halign (header->priv->timelabel, GTK_ALIGN_END);
 
331
        gtk_widget_set_no_show_all (header->priv->timelabel, TRUE);
325
332
 
326
333
        header->priv->timebutton = gtk_button_new ();
 
334
        gtk_button_set_relief (GTK_BUTTON (header->priv->timebutton), GTK_RELIEF_NONE);
327
335
        gtk_container_add (GTK_CONTAINER (header->priv->timebutton), header->priv->timelabel);
328
336
        g_signal_connect_object (header->priv->timebutton,
329
337
                                 "clicked",
441
449
        if (header->priv->entry == entry)
442
450
                return;
443
451
 
 
452
        rb_fading_image_start (RB_FADING_IMAGE (header->priv->image), 2000);
 
453
 
444
454
        header->priv->entry = entry;
445
455
        if (header->priv->entry) {
446
456
                RBExtDBKey *key;
463
473
 
464
474
        g_free (header->priv->image_path);
465
475
        header->priv->image_path = NULL;
466
 
 
467
 
        rb_fading_image_start (RB_FADING_IMAGE (header->priv->image), 2000);
468
476
}
469
477
 
470
478
static GtkSizeRequestMode
548
556
 
549
557
        /* time button gets its minimum size */
550
558
        gtk_widget_get_preferred_width (RB_HEADER (widget)->priv->songbox, NULL, &info_width);
551
 
        gtk_widget_get_preferred_width (RB_HEADER (widget)->priv->timebutton, &time_width, NULL);
 
559
        if (gtk_widget_get_visible (RB_HEADER (widget)->priv->timelabel)) {
 
560
                gtk_widget_get_preferred_width (RB_HEADER (widget)->priv->timebutton, &time_width, NULL);
 
561
        } else {
 
562
                time_width = 0;
 
563
        }
552
564
 
553
565
        info_width = allocation->width - (scale_width + time_width) - (2 * spacing);
554
566
 
569
581
                info_width = 0;
570
582
        }
571
583
 
572
 
        if (info_width + scale_width + (2 * spacing) + time_width > allocation->width) {
 
584
        if (time_width == 0) {
 
585
                gtk_widget_hide (RB_HEADER (widget)->priv->timebutton);
 
586
        } else if (info_width + scale_width + (2 * spacing) + time_width > allocation->width) {
573
587
                gtk_widget_hide (RB_HEADER (widget)->priv->timebutton);
574
588
        } else {
575
589
                if (rtl) {
872
886
                       RBHeader *header)
873
887
{
874
888
        header->priv->slider_dragging = TRUE;
 
889
        header->priv->slider_drag_moved = FALSE;
875
890
        header->priv->latest_set_time = -1;
876
891
        g_object_notify (G_OBJECT (header), "slider-dragging");
877
892
 
895
910
 
896
911
        apply_slider_position (header);
897
912
        header->priv->slider_moved_timeout = 0;
 
913
        header->priv->slider_drag_moved = FALSE;
898
914
 
899
915
        GDK_THREADS_LEAVE ();
900
916
 
912
928
                rb_debug ("slider is not dragging");
913
929
                return FALSE;
914
930
        }
 
931
        header->priv->slider_drag_moved = TRUE;
915
932
 
916
933
        progress = gtk_adjustment_get_value (header->priv->adjustment);
917
934
        header->priv->elapsed_time = (gint64) ((progress+0.5) * RB_PLAYER_SECOND);
965
982
                header->priv->slider_moved_timeout = 0;
966
983
        }
967
984
 
968
 
        apply_slider_position (header);
 
985
        if (header->priv->slider_drag_moved)
 
986
                apply_slider_position (header);
 
987
 
969
988
        header->priv->slider_dragging = FALSE;
 
989
        header->priv->slider_drag_moved = FALSE;
970
990
        g_object_notify (G_OBJECT (header), "slider-dragging");
971
991
        return FALSE;
972
992
}
982
1002
        if (header->priv->slider_dragging == FALSE &&
983
1003
            header->priv->slider_locked == FALSE) {
984
1004
                apply_slider_position (header);
 
1005
        } else if (header->priv->slider_dragging) {
 
1006
                header->priv->slider_drag_moved = TRUE;
985
1007
        }
986
1008
}
987
1009
 
1010
1032
        return retval;
1011
1033
}
1012
1034
 
 
1035
static gboolean
 
1036
slider_focus_out_callback (GtkWidget *widget, GdkEvent *event, RBHeader *header)
 
1037
{
 
1038
        if (header->priv->slider_dragging) {
 
1039
                if (header->priv->slider_drag_moved)
 
1040
                        apply_slider_position (header);
 
1041
 
 
1042
                header->priv->slider_dragging = FALSE;
 
1043
                header->priv->slider_drag_moved = FALSE;
 
1044
                g_object_notify (G_OBJECT (header), "slider-dragging");
 
1045
        }
 
1046
        return FALSE;
 
1047
}
 
1048
 
1013
1049
static void
1014
1050
rb_header_update_elapsed (RBHeader *header)
1015
1051
{
1020
1056
 
1021
1057
        if (header->priv->entry == NULL) {
1022
1058
                gtk_label_set_text (GTK_LABEL (header->priv->timelabel), "");
 
1059
                gtk_widget_hide (header->priv->timelabel);
1023
1060
                return;
1024
1061
        }
 
1062
        gtk_widget_show (header->priv->timelabel);
1025
1063
 
1026
1064
        seconds = header->priv->elapsed_time / RB_PLAYER_SECOND;
1027
1065
        if (header->priv->duration == 0) {
1040
1078
 
1041
1079
                /* Translators: remaining time / total time */
1042
1080
                label = g_strdup_printf (_("-%s / %s"), elapsed, duration);
 
1081
                gtk_widget_show (header->priv->timebutton);
1043
1082
                gtk_label_set_text (GTK_LABEL (header->priv->timelabel), label);
1044
1083
 
1045
1084
                g_free (elapsed);