~ubuntu-branches/debian/experimental/brasero/experimental

« back to all changes in this revision

Viewing changes to src/brasero-project-manager.c

  • Committer: Bazaar Package Importer
  • Author(s): Josselin Mouette
  • Date: 2011-03-29 16:33:51 UTC
  • mfrom: (1.3.18 upstream) (5.2.8 sid)
  • Revision ID: james.westby@ubuntu.com-20110329163351-ac3wgbh4mplmhnht
Tags: 2.91.93-1
* Only depend on growisofs instead of dvd+rw-tools.
* New upstream pre-release.
* Update build-dependencies, package names, and paths.
* Require totem-plparser 2.32 since its soname changed.
* Do not include GIR package for now, since the versioning is broken 
  (see Bugzilla #646069).
* 01_pkglibdir.patch: dropped, upstream now has a variable we can use 
  for that effect.
* 11_nautilus_menu_no_display.patch, 31_link_libice.patch, 
  50_checksum.patch: dropped, merged upstream.
* 90_relibtoolize.patch: dropped, unnecessary.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
 
2
 
1
3
/***************************************************************************
2
4
 *            brasero-project-manager.c
3
5
 *
50
52
#include "brasero-uri-container.h"
51
53
#include "brasero-project-type-chooser.h"
52
54
 
53
 
#ifdef BUILD_SEARCH
54
 
#include "brasero-search-beagle.h"
55
 
#endif
56
 
 
57
55
#ifdef BUILD_PLAYLIST
58
56
#include "brasero-playlist.h"
59
57
#endif
89
87
brasero_project_manager_open_cb (GtkAction *action, BraseroProjectManager *manager);
90
88
 
91
89
static void
92
 
brasero_project_manager_switch (BraseroProjectManager *manager,
93
 
                                BraseroProjectType type,
94
 
                                GSList *uris,
95
 
                                const gchar *uri,
96
 
                                gboolean reset);
97
 
 
98
 
void
99
90
brasero_project_manager_selected_uris_changed (BraseroURIContainer *container,
100
91
                                               BraseroProjectManager *manager);
101
92
 
112
103
        {"NewData", "media-optical-data-new", N_("New _Data Project"), NULL,
113
104
         N_("Create a CD/DVD containing any type of data that can only be read on a computer"), G_CALLBACK (brasero_project_manager_new_data_prj_cb)},
114
105
        {"NewVideo", "media-optical-video-new", N_("New _Video Project"), NULL,
115
 
         N_("Create a video DVD or a SVCD that are readable on TV readers"), G_CALLBACK (brasero_project_manager_new_video_prj_cb)},
116
 
        {"NewCopy", "media-optical-copy", N_("Copy _Disc..."), NULL,
 
106
         N_("Create a video DVD or an SVCD that is readable on TV readers"), G_CALLBACK (brasero_project_manager_new_video_prj_cb)},
 
107
        {"NewCopy", "media-optical-copy", N_("Copy _Disc…"), NULL,
117
108
         N_("Create a 1:1 copy of an audio CD or a data CD/DVD on your hard disk or on another CD/DVD"), G_CALLBACK (brasero_project_manager_new_copy_prj_cb)},
118
 
        {"NewIso", "iso-image-burn", N_("_Burn Image..."), NULL,
 
109
        {"NewIso", "iso-image-burn", N_("_Burn Image…"), NULL,
119
110
         N_("Burn an existing CD/DVD image to disc"), G_CALLBACK (brasero_project_manager_new_iso_prj_cb)},
120
111
 
121
 
        {"Open", GTK_STOCK_OPEN, N_("_Open..."), NULL,
 
112
        {"Open", GTK_STOCK_OPEN, N_("_Open…"), NULL,
122
113
         N_("Open a project"), G_CALLBACK (brasero_project_manager_open_cb)},
123
114
};
124
115
 
223
214
 
224
215
        toplevel = gtk_widget_get_toplevel (GTK_WIDGET (manager));
225
216
        dialog = brasero_jacket_edit_dialog_new (toplevel, &edit);
226
 
        gtk_dialog_run (GTK_DIALOG (dialog));
 
217
 
 
218
        /* This strange hack is a way to workaround #568358.
 
219
         * At one point we'll need to hide the dialog which means it
 
220
         * will anwer with a GTK_RESPONSE_NONE */
 
221
        while (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_NONE)
 
222
                gtk_widget_show (GTK_WIDGET (dialog));
 
223
 
227
224
        gtk_widget_destroy (dialog);
228
225
}
229
226
 
257
254
                else
258
255
                        return;
259
256
 
 
257
                /* Translators: the %s is a string representing the total size
 
258
                 * of the file selection */
260
259
                status_string = g_strdup_printf (ngettext ("%d file selected (%s)", "%d files selected (%s)", files_num),
261
260
                                                 files_num,
262
261
                                                 size_string);
289
288
                                                                   "No file can be added (%i selected files)",
290
289
                                                                   files_num),
291
290
                                                         files_num);
292
 
                else if (manager->priv->type == BRASERO_PROJECT_TYPE_AUDIO)
 
291
                else if (manager->priv->type == BRASERO_PROJECT_TYPE_AUDIO
 
292
                     ||  manager->priv->type == BRASERO_PROJECT_TYPE_VIDEO)
293
293
                        status_string = g_strdup_printf (ngettext ("No file is supported (%i selected file)",
294
294
                                                                   "No file is supported (%i selected files)",
295
295
                                                                   files_num),
354
354
                                                                   brasero_project_manager_size_preview,
355
355
                                                                   NULL,
356
356
                                                                   NULL);
357
 
    
 
357
 
358
358
        for (iter = manager->priv->selected; iter && *iter; iter ++)
359
359
                list = g_slist_prepend (list, *iter);
360
360
 
459
459
                                                   manager);
460
460
}
461
461
 
462
 
void
 
462
static void
463
463
brasero_project_manager_sidepane_changed (BraseroLayout *layout,
464
464
                                          gboolean visible,
465
465
                                          BraseroProjectManager *manager)
503
503
        brasero_layout_register_ui (BRASERO_LAYOUT (manager->priv->layout), ui_manager);
504
504
}
505
505
 
506
 
static void
 
506
void
507
507
brasero_project_manager_switch (BraseroProjectManager *manager,
508
508
                                BraseroProjectType type,
509
 
                                GSList *uris,
510
 
                                const gchar *uri,
511
509
                                gboolean reset)
512
510
{
513
511
        GtkWidget *toplevel;
518
516
        if (manager->priv->type == BRASERO_PROJECT_TYPE_AUDIO
519
517
        ||  manager->priv->type == BRASERO_PROJECT_TYPE_DATA
520
518
        ||  manager->priv->type == BRASERO_PROJECT_TYPE_VIDEO) {
521
 
                if (!brasero_project_confirm_switch (BRASERO_PROJECT (manager->priv->project)))
 
519
                BraseroBurnResult result;
 
520
                gboolean keep_files = FALSE;
 
521
 
 
522
                if (type == BRASERO_PROJECT_TYPE_AUDIO
 
523
                ||  type == BRASERO_PROJECT_TYPE_DATA
 
524
                ||  type == BRASERO_PROJECT_TYPE_VIDEO) {
 
525
                        if (manager->priv->type != type
 
526
                        && (((manager->priv->type == BRASERO_PROJECT_TYPE_AUDIO ||
 
527
                              manager->priv->type == BRASERO_PROJECT_TYPE_VIDEO) &&
 
528
                             type == BRASERO_PROJECT_TYPE_DATA)
 
529
                        ||  manager->priv->type == BRASERO_PROJECT_TYPE_DATA))
 
530
                                keep_files = TRUE;
 
531
                }
 
532
 
 
533
                result = brasero_project_confirm_switch (BRASERO_PROJECT (manager->priv->project), keep_files);
 
534
                if (result == BRASERO_BURN_CANCEL)
522
535
                        return;
 
536
 
 
537
                if (result == BRASERO_BURN_RETRY) {
 
538
                        if (manager->priv->type == BRASERO_PROJECT_TYPE_AUDIO
 
539
                        ||  manager->priv->type == BRASERO_PROJECT_TYPE_VIDEO)
 
540
                                type = brasero_project_convert_to_data (BRASERO_PROJECT (manager->priv->project));
 
541
                        else if (manager->priv->type == BRASERO_PROJECT_TYPE_DATA) {
 
542
                                BraseroProjectType new_type;
 
543
 
 
544
                                /* Keep type untouched */
 
545
                                new_type = brasero_project_convert_to_stream (BRASERO_PROJECT (manager->priv->project),
 
546
                                                                              type == BRASERO_PROJECT_TYPE_VIDEO);
 
547
                                if (new_type == BRASERO_PROJECT_TYPE_INVALID)
 
548
                                        type = new_type;
 
549
                        }
 
550
 
 
551
                        if (type != BRASERO_PROJECT_TYPE_INVALID)
 
552
                                reset = FALSE;
 
553
                        else
 
554
                                reset = TRUE;
 
555
                }
523
556
        }
524
557
 
525
558
        if (manager->priv->status_ctx) {
550
583
 
551
584
                if (reset) {
552
585
                        /* tell the BraseroProject object that we want an audio selection */
553
 
                        brasero_project_set_audio (BRASERO_PROJECT (manager->priv->project), uris);
 
586
                        brasero_project_set_audio (BRASERO_PROJECT (manager->priv->project));
554
587
                }
555
588
 
556
589
                if (toplevel)
557
 
                        gtk_window_set_title (GTK_WINDOW (toplevel), _("Brasero - New Audio Disc Project"));
 
590
                        gtk_window_set_title (GTK_WINDOW (toplevel), _("Brasero — New Audio Disc Project"));
558
591
        }
559
592
        else if (type == BRASERO_PROJECT_TYPE_DATA) {
560
593
                brasero_layout_load (BRASERO_LAYOUT (manager->priv->layout), BRASERO_LAYOUT_DATA);
564
597
 
565
598
                if (reset) {
566
599
                        /* tell the BraseroProject object that we want a data selection */
567
 
                        brasero_project_set_data (BRASERO_PROJECT (manager->priv->project), uris);
 
600
                        brasero_project_set_data (BRASERO_PROJECT (manager->priv->project));
568
601
                }
569
602
 
570
603
                if (toplevel)
571
 
                        gtk_window_set_title (GTK_WINDOW (toplevel), _("Brasero - New Data Disc Project"));
 
604
                        gtk_window_set_title (GTK_WINDOW (toplevel), _("Brasero — New Data Disc Project"));
572
605
        }
573
606
        else if (type == BRASERO_PROJECT_TYPE_VIDEO) {
574
607
                brasero_layout_load (BRASERO_LAYOUT (manager->priv->layout), BRASERO_LAYOUT_VIDEO);
578
611
 
579
612
                if (reset) {
580
613
                        /* tell the BraseroProject object that we want a data selection */
581
 
                        brasero_project_set_video (BRASERO_PROJECT (manager->priv->project), uris);
 
614
                        brasero_project_set_video (BRASERO_PROJECT (manager->priv->project));
582
615
                }
583
616
 
584
617
                if (toplevel)
585
 
                        gtk_window_set_title (GTK_WINDOW (toplevel), _("Brasero - New Video Disc Project"));
 
618
                        gtk_window_set_title (GTK_WINDOW (toplevel), _("Brasero — New Video Disc Project"));
586
619
        }
587
620
        else if (type == BRASERO_PROJECT_TYPE_ISO) {
588
621
                brasero_layout_load (BRASERO_LAYOUT (manager->priv->layout), BRASERO_LAYOUT_NONE);
592
625
                gtk_action_set_sensitive (action, FALSE);
593
626
 
594
627
                if (toplevel)
595
 
                        gtk_window_set_title (GTK_WINDOW (toplevel), _("Brasero - New Image File"));
 
628
                        gtk_window_set_title (GTK_WINDOW (toplevel), _("Brasero — New Image File"));
596
629
 
597
630
                brasero_project_manager_switch (manager,
598
631
                                                BRASERO_PROJECT_TYPE_INVALID,
599
 
                                                NULL,
600
 
                                                NULL,
601
632
                                                TRUE);
602
 
                brasero_app_burn_image (brasero_app_get_default (), uri);
 
633
                brasero_app_image (brasero_app_get_default (), NULL, NULL, FALSE);
603
634
        }
604
635
        else if (type == BRASERO_PROJECT_TYPE_COPY) {
605
636
                brasero_layout_load (BRASERO_LAYOUT (manager->priv->layout), BRASERO_LAYOUT_NONE);
609
640
                gtk_action_set_sensitive (action, FALSE);
610
641
 
611
642
                if (toplevel)
612
 
                        gtk_window_set_title (GTK_WINDOW (toplevel), _("Brasero - Disc Copy"));
 
643
                        gtk_window_set_title (GTK_WINDOW (toplevel), _("Brasero — Disc Copy"));
613
644
 
614
645
                brasero_project_manager_switch (manager,
615
646
                                                BRASERO_PROJECT_TYPE_INVALID,
616
 
                                                NULL,
617
 
                                                NULL,
618
647
                                                TRUE);
619
 
                brasero_app_copy_disc (brasero_app_get_default (), uri, NULL);
 
648
                brasero_app_copy_disc (brasero_app_get_default (), NULL, NULL, NULL, FALSE);
620
649
        }
621
650
}
622
651
 
625
654
                                         BraseroProjectType type,
626
655
                                         BraseroProjectManager *manager)
627
656
{
628
 
        brasero_project_manager_switch (manager, type, NULL, NULL, TRUE);
 
657
        brasero_project_manager_switch (manager, type, TRUE);
629
658
}
630
659
 
631
660
static void
632
661
brasero_project_manager_new_empty_prj_cb (GtkAction *action, BraseroProjectManager *manager)
633
662
{
634
 
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_INVALID, NULL, NULL, TRUE);
 
663
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_INVALID, TRUE);
635
664
}
636
665
 
637
666
static void
638
667
brasero_project_manager_new_audio_prj_cb (GtkAction *action, BraseroProjectManager *manager)
639
668
{
640
 
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_AUDIO, NULL, NULL, TRUE);
 
669
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_AUDIO, TRUE);
641
670
}
642
671
 
643
672
static void
644
673
brasero_project_manager_new_data_prj_cb (GtkAction *action, BraseroProjectManager *manager)
645
674
{
646
 
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_DATA, NULL, NULL, TRUE);
 
675
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_DATA, TRUE);
647
676
}
648
677
 
649
678
static void
650
679
brasero_project_manager_new_video_prj_cb (GtkAction *action, BraseroProjectManager *manager)
651
680
{
652
 
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_VIDEO, NULL, NULL, TRUE);
 
681
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_VIDEO, TRUE);
653
682
}
654
683
 
655
684
static void
656
685
brasero_project_manager_new_copy_prj_cb (GtkAction *action, BraseroProjectManager *manager)
657
686
{
658
 
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_COPY, NULL, NULL, TRUE);
 
687
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_COPY, TRUE);
659
688
}
660
689
 
661
690
static void
662
691
brasero_project_manager_new_iso_prj_cb (GtkAction *action, BraseroProjectManager *manager)
663
692
{
664
 
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_ISO, NULL, NULL, TRUE);
665
 
}
666
 
 
667
 
void
668
 
brasero_project_manager_data (BraseroProjectManager *manager,
669
 
                              GSList *uris,
670
 
                              gboolean burn)
671
 
{
672
 
        gchar *burn_URI = NULL;
673
 
 
674
 
        /* always add the contents of burn:/// URI if list is empty */
675
 
        if (!uris) {
676
 
                burn_URI = g_strdup ("burn:///");
677
 
                uris = g_slist_prepend (NULL, burn_URI);
678
 
        }
679
 
 
680
 
        if (burn) {
681
 
                brasero_project_set_data (BRASERO_PROJECT (manager->priv->project), uris);
682
 
                brasero_project_burn (BRASERO_PROJECT (manager->priv->project));
683
 
        }
684
 
        else
685
 
                brasero_project_manager_switch (manager,
686
 
                                                BRASERO_PROJECT_TYPE_DATA,
687
 
                                                uris,
688
 
                                                NULL,
689
 
                                                TRUE);
690
 
 
691
 
        if (burn_URI) {
692
 
                g_slist_free (uris);
693
 
                g_free (burn_URI);
694
 
        }
695
 
}
696
 
 
697
 
void
698
 
brasero_project_manager_audio (BraseroProjectManager *manager,
699
 
                               GSList *uris,
700
 
                               gboolean burn)
701
 
{
702
 
        if (burn) {
703
 
                brasero_project_set_audio (BRASERO_PROJECT (manager->priv->project), uris);
704
 
                brasero_project_burn (BRASERO_PROJECT (manager->priv->project));
705
 
        }
706
 
        else
707
 
                brasero_project_manager_switch (manager,
708
 
                                                BRASERO_PROJECT_TYPE_AUDIO,
709
 
                                                uris,
710
 
                                                NULL,
711
 
                                                TRUE);
712
 
}
713
 
 
714
 
void
715
 
brasero_project_manager_video (BraseroProjectManager *manager,
716
 
                               GSList *uris,
717
 
                               gboolean burn)
718
 
{
719
 
        if (burn) {
720
 
                brasero_project_set_video (BRASERO_PROJECT (manager->priv->project), uris);
721
 
                brasero_project_burn (BRASERO_PROJECT (manager->priv->project));
722
 
        }
723
 
        else
724
 
                brasero_project_manager_switch (manager,
725
 
                                                BRASERO_PROJECT_TYPE_VIDEO,
726
 
                                                uris,
727
 
                                                NULL,
728
 
                                                TRUE);
729
 
}
730
 
 
731
 
void
732
 
brasero_project_manager_copy (BraseroProjectManager *manager,
733
 
                              const gchar *device,
734
 
                              const gchar *cover)
735
 
{
736
 
        brasero_project_manager_switch (manager,
737
 
                                        BRASERO_PROJECT_TYPE_COPY,
738
 
                                        NULL,
739
 
                                        device,
740
 
                                        TRUE);
741
 
}
742
 
 
743
 
void
744
 
brasero_project_manager_iso (BraseroProjectManager *manager,
745
 
                             const gchar *uri)
746
 
{
747
 
        brasero_project_manager_switch (manager,
748
 
                                        BRASERO_PROJECT_TYPE_ISO,
749
 
                                        NULL,
750
 
                                        uri,
751
 
                                        TRUE);
 
693
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_ISO, TRUE);
752
694
}
753
695
 
754
696
gboolean
755
697
brasero_project_manager_open_session (BraseroProjectManager *manager,
756
 
                                      BraseroSessionCfg *session,
757
 
                                      gboolean burn)
 
698
                                      BraseroSessionCfg *session)
758
699
{
759
700
        GtkAction *action;
760
701
        BraseroProjectType type;
761
702
 
762
703
        type = brasero_project_open_session (BRASERO_PROJECT (manager->priv->project), session);
763
704
        if (type == BRASERO_PROJECT_TYPE_INVALID) {
764
 
                brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_INVALID, NULL, NULL, TRUE);
 
705
                brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_INVALID, TRUE);
765
706
                return FALSE;
766
707
        }
767
708
 
768
709
        brasero_project_manager_switch (manager,
769
710
                                        type,
770
 
                                        NULL,
771
 
                                        NULL,
772
711
                                        FALSE);
773
712
 
774
 
        if (burn) {
775
 
                brasero_project_burn (BRASERO_PROJECT (manager->priv->project));
776
 
                return TRUE;
777
 
        }
778
 
 
779
713
        action = gtk_action_group_get_action (manager->priv->action_group, "NewChoose");
780
714
        gtk_action_set_sensitive (action, TRUE);
781
715
        return TRUE;
825
759
void
826
760
brasero_project_manager_empty (BraseroProjectManager *manager)
827
761
{
828
 
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_INVALID, NULL, NULL, TRUE);
 
762
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_INVALID, TRUE);
829
763
}
830
764
 
831
765
static void
838
772
 
839
773
                uri = g_filename_to_uri (path, NULL, NULL);
840
774
                brasero_app_open_project (brasero_app_get_default (),
 
775
                                          NULL,
841
776
                                          uri,
842
777
                                          FALSE, // not a playlist
843
778
                                          FALSE, // should work so don't warn user
960
895
                                    obj->priv->project);
961
896
        gtk_widget_show (obj->priv->project);
962
897
 
963
 
#ifdef BUILD_SEARCH
964
 
        GtkWidget *search;
965
 
 
966
 
        search = brasero_search_new ();
967
 
        BRASERO_PROJECT_MANAGER_CONNECT_CHANGED (obj, search);
968
 
 
969
 
        gtk_widget_show_all (search);
970
 
        brasero_layout_add_source (BRASERO_LAYOUT (obj->priv->layout),
971
 
                                   search,
972
 
                                   "Search",
973
 
                                   _("Search files using keywords"),
974
 
                                   GTK_STOCK_FIND,
975
 
                                   BRASERO_LAYOUT_AUDIO|BRASERO_LAYOUT_DATA|BRASERO_LAYOUT_VIDEO);
976
 
 
977
 
#ifdef BUILD_PREVIEW
978
 
        brasero_preview_add_source (BRASERO_PREVIEW (preview),
979
 
                                    BRASERO_URI_CONTAINER (search));
980
 
#endif
981
 
 
982
 
#endif /* BUILD_SEARCH */
983
 
 
984
898
#ifdef BUILD_PLAYLIST
985
899
        GtkWidget *playlist;
986
900
 
1017
931
 
1018
932
        if (cobj->priv->size_preview) {
1019
933
                brasero_io_cancel_by_base (cobj->priv->size_preview);
1020
 
                g_free (cobj->priv->size_preview);
 
934
                brasero_io_job_base_free (cobj->priv->size_preview);
1021
935
                cobj->priv->size_preview = NULL;
1022
936
        }
1023
937