~mfisch/brasero/update-to-3.8.0

« back to all changes in this revision

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

  • Committer: Bazaar Package Importer
  • Author(s): Pedro Fragoso
  • Date: 2008-11-18 11:30:50 UTC
  • mto: (1.4.1 experimental)
  • mto: This revision was merged to the branch mainline in revision 29.
  • Revision ID: james.westby@ubuntu.com-20081118113050-yhrskmatlel0gzfm
Tags: upstream-0.8.3
ImportĀ upstreamĀ versionĀ 0.8.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
182
182
        guint status_ctx;
183
183
 
184
184
        GtkActionGroup *action_group;
 
185
 
 
186
        guint oneshot:1;
185
187
};
186
188
 
187
189
#define BRASERO_PROJECT_MANAGER_CONNECT_CHANGED(manager, container)             \
576
578
        result = gtk_dialog_run (GTK_DIALOG (dialog));
577
579
        if (result != GTK_RESPONSE_OK) {
578
580
                gtk_widget_destroy (dialog);
 
581
 
 
582
                /* Here we may have to close brasero altogether */
 
583
                if (manager->priv->oneshot) {
 
584
                        GtkWidget *toplevel;
 
585
 
 
586
                        toplevel = gtk_widget_get_toplevel (GTK_WIDGET (manager));
 
587
                        gtk_widget_destroy (toplevel);
 
588
                }
 
589
 
579
590
                return;
580
591
        }
581
592
 
582
 
        session = brasero_image_option_dialog_get_session (BRASERO_IMAGE_OPTION_DIALOG (dialog));
 
593
        session = brasero_burn_options_get_session (BRASERO_BURN_OPTIONS (dialog));
583
594
        gtk_widget_destroy (dialog);
584
595
 
585
 
        if (!session)
586
 
                return;
587
 
 
588
596
        brasero_project_manager_burn (manager, session);
589
597
        g_object_unref (session);
 
598
 
 
599
        /* Here we may have to close brasero altogether */
 
600
        if (manager->priv->oneshot) {
 
601
                GtkWidget *toplevel;
 
602
 
 
603
                toplevel = gtk_widget_get_toplevel (GTK_WIDGET (manager));
 
604
                gtk_widget_destroy (toplevel);
 
605
        }
590
606
}
591
607
 
592
608
static void
622
638
        result = gtk_dialog_run (GTK_DIALOG (dialog));
623
639
        if (result != GTK_RESPONSE_OK) {
624
640
                gtk_widget_destroy (dialog);
 
641
 
 
642
                /* Here we may have to close brasero altogether */
 
643
                if (manager->priv->oneshot) {
 
644
                        GtkWidget *toplevel;
 
645
 
 
646
                        toplevel = gtk_widget_get_toplevel (GTK_WIDGET (manager));
 
647
                        gtk_widget_destroy (toplevel);
 
648
                }
 
649
 
625
650
                return;
626
651
        }
627
652
 
628
 
        session = brasero_disc_copy_dialog_get_session (BRASERO_DISC_COPY_DIALOG (dialog));
 
653
        session = brasero_burn_options_get_session (BRASERO_BURN_OPTIONS (dialog));
629
654
        gtk_widget_destroy (dialog);
630
655
 
631
656
        brasero_project_manager_burn (manager, session);
632
657
        g_object_unref (session);
 
658
 
 
659
        /* Here we may have to close brasero altogether */
 
660
        if (manager->priv->oneshot) {
 
661
                GtkWidget *toplevel;
 
662
 
 
663
                toplevel = gtk_widget_get_toplevel (GTK_WIDGET (manager));
 
664
                gtk_widget_destroy (toplevel);
 
665
        }
633
666
}
634
667
 
635
668
static void
642
675
        GtkWidget *toplevel;
643
676
        GtkAction *action;
644
677
 
645
 
        if ((manager->priv->type == BRASERO_PROJECT_TYPE_AUDIO
646
 
        ||   manager->priv->type == BRASERO_PROJECT_TYPE_DATA
647
 
        ||   manager->priv->type == BRASERO_PROJECT_TYPE_VIDEO)
648
 
        &&  !brasero_project_confirm_switch (BRASERO_PROJECT (manager->priv->project)))
649
 
                return;
650
 
 
651
678
        toplevel = gtk_widget_get_toplevel (GTK_WIDGET (manager));
652
679
 
 
680
        if (manager->priv->type == BRASERO_PROJECT_TYPE_AUDIO
 
681
        ||  manager->priv->type == BRASERO_PROJECT_TYPE_DATA
 
682
        ||  manager->priv->type == BRASERO_PROJECT_TYPE_VIDEO) {
 
683
                if (!brasero_project_confirm_switch (BRASERO_PROJECT (manager->priv->project)))
 
684
                        return;
 
685
 
 
686
                if (manager->priv->oneshot) {
 
687
                        /* Here we may have to close brasero altogether */
 
688
                        gtk_widget_destroy (toplevel);
 
689
                        return;
 
690
                }
 
691
        }
 
692
 
653
693
        if (manager->priv->status_ctx) {
654
694
                GtkWidget *status;
655
695
 
743
783
                                         BraseroProjectType type,
744
784
                                         BraseroProjectManager *manager)
745
785
{
 
786
        manager->priv->oneshot = FALSE;
746
787
        brasero_project_manager_switch (manager, type, NULL, NULL, TRUE);
747
788
}
748
789
 
749
790
static void
750
791
brasero_project_manager_new_empty_prj_cb (GtkAction *action, BraseroProjectManager *manager)
751
792
{
 
793
        manager->priv->oneshot = FALSE;
752
794
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_INVALID, NULL, NULL, TRUE);
753
795
}
754
796
 
755
797
static void
756
798
brasero_project_manager_new_audio_prj_cb (GtkAction *action, BraseroProjectManager *manager)
757
799
{
 
800
        manager->priv->oneshot = FALSE;
758
801
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_AUDIO, NULL, NULL, TRUE);
759
802
}
760
803
 
761
804
static void
762
805
brasero_project_manager_new_data_prj_cb (GtkAction *action, BraseroProjectManager *manager)
763
806
{
 
807
        manager->priv->oneshot = FALSE;
764
808
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_DATA, NULL, NULL, TRUE);
765
809
}
766
810
 
767
811
static void
768
812
brasero_project_manager_new_video_prj_cb (GtkAction *action, BraseroProjectManager *manager)
769
813
{
 
814
        manager->priv->oneshot = FALSE;
770
815
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_VIDEO, NULL, NULL, TRUE);
771
816
}
772
817
 
773
818
static void
774
819
brasero_project_manager_new_copy_prj_cb (GtkAction *action, BraseroProjectManager *manager)
775
820
{
 
821
        manager->priv->oneshot = FALSE;
776
822
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_COPY, NULL, NULL, TRUE);
777
823
}
778
824
 
779
825
static void
780
826
brasero_project_manager_new_iso_prj_cb (GtkAction *action, BraseroProjectManager *manager)
781
827
{
 
828
        manager->priv->oneshot = FALSE;
782
829
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_ISO, NULL, NULL, TRUE);
783
830
}
784
831
 
785
832
void
786
 
brasero_project_manager_audio (BraseroProjectManager *manager, GSList *uris)
 
833
brasero_project_manager_audio (BraseroProjectManager *manager,
 
834
                               GSList *uris)
787
835
{
788
836
        brasero_project_manager_switch (manager,
789
837
                                        BRASERO_PROJECT_TYPE_AUDIO,
793
841
}
794
842
 
795
843
void
796
 
brasero_project_manager_data (BraseroProjectManager *manager, GSList *uris)
 
844
brasero_project_manager_data (BraseroProjectManager *manager,
 
845
                              GSList *uris)
797
846
{
798
 
        brasero_project_manager_switch (manager,
799
 
                                        BRASERO_PROJECT_TYPE_DATA,
800
 
                                        uris,
801
 
                                        NULL,
802
 
                                        TRUE);
 
847
        gchar *burn_URI = NULL;
 
848
 
 
849
        /* always add the contents of burn:/// URI if list is empty */
 
850
        if (!uris) {
 
851
                burn_URI = g_strdup ("burn:///");
 
852
                uris = g_slist_prepend (NULL, burn_URI);
 
853
        }
 
854
 
 
855
        if (manager->priv->oneshot) {
 
856
                brasero_project_set_data (BRASERO_PROJECT (manager->priv->project),
 
857
                                          uris);
 
858
                brasero_project_burn (BRASERO_PROJECT (manager->priv->project));
 
859
        }
 
860
        else
 
861
                brasero_project_manager_switch (manager,
 
862
                                                BRASERO_PROJECT_TYPE_DATA,
 
863
                                                uris,
 
864
                                                NULL,
 
865
                                                TRUE);
 
866
        
 
867
        if (burn_URI) {
 
868
                g_slist_free (uris);
 
869
                g_free (burn_URI);
 
870
        }
803
871
}
804
872
 
805
873
void
806
 
brasero_project_manager_video (BraseroProjectManager *manager, GSList *uris)
 
874
brasero_project_manager_video (BraseroProjectManager *manager,
 
875
                               GSList *uris)
807
876
{
808
877
        brasero_project_manager_switch (manager,
809
878
                                        BRASERO_PROJECT_TYPE_VIDEO,
816
885
brasero_project_manager_copy (BraseroProjectManager *manager,
817
886
                              const gchar *device)
818
887
{
819
 
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_COPY, NULL, device, TRUE);
 
888
        brasero_project_manager_switch (manager,
 
889
                                        BRASERO_PROJECT_TYPE_COPY,
 
890
                                        NULL,
 
891
                                        device,
 
892
                                        TRUE);
820
893
}
821
894
 
822
895
void
823
 
brasero_project_manager_iso (BraseroProjectManager *manager, const gchar *uri)
 
896
brasero_project_manager_iso (BraseroProjectManager *manager,
 
897
                             const gchar *uri)
824
898
{
825
 
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_ISO, NULL, uri, TRUE);
 
899
        brasero_project_manager_switch (manager,
 
900
                                        BRASERO_PROJECT_TYPE_ISO,
 
901
                                        NULL,
 
902
                                        uri,
 
903
                                        TRUE);
826
904
}
827
905
 
828
906
BraseroProjectType
919
997
        gchar *uri;
920
998
        GFile *file;
921
999
        GFileInfo *info;
922
 
        GtkWidget *dialog;
923
 
        GtkWidget *window;
924
1000
        BraseroProjectType type;
925
1001
 
926
1002
        /* FIXME: make that asynchronous */
 
1003
        /* NOTE: don't follow symlink because we want to identify them */
927
1004
        file = g_file_new_for_commandline_arg (uri_arg);
928
1005
        info = g_file_query_info (file,
929
 
                                  G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
930
 
                                  G_FILE_QUERY_INFO_NONE,
 
1006
                                  G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE ","
 
1007
                                  G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK ","
 
1008
                                  G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET,
 
1009
                                  G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
931
1010
                                  NULL,
932
1011
                                  NULL);
933
1012
 
 
1013
        /* if that's a symlink, redo it on its target to get the real mime type
 
1014
         * that usually also depends on the extension of the target:
 
1015
         * ex: an iso file with the extension .iso will be seen as octet-stream
 
1016
         * if the symlink hasn't got any extention at all */
 
1017
        while (g_file_info_get_is_symlink (info)) {
 
1018
                const gchar *target;
 
1019
                GFileInfo *tmp_info;
 
1020
                GFile *tmp_file;
 
1021
                GError *error = NULL;
 
1022
 
 
1023
                target = g_file_info_get_symlink_target (info);
 
1024
                if (!g_path_is_absolute (target)) {
 
1025
                        gchar *parent;
 
1026
                        gchar *tmp;
 
1027
 
 
1028
                        tmp = g_file_get_path (file);
 
1029
                        parent = g_path_get_dirname (tmp);
 
1030
                        g_free (tmp);
 
1031
 
 
1032
                        target = g_build_filename (parent, target, NULL);
 
1033
                        g_free (parent);
 
1034
                }
 
1035
 
 
1036
                tmp_file = g_file_new_for_commandline_arg (target);
 
1037
                tmp_info = g_file_query_info (tmp_file,
 
1038
                                              G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE ","
 
1039
                                              G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK ","
 
1040
                                              G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET,
 
1041
                                              G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
 
1042
                                              NULL,
 
1043
                                              &error);
 
1044
                if (!tmp_info) {
 
1045
                        g_object_unref (tmp_file);
 
1046
                        break;
 
1047
                }
 
1048
 
 
1049
                g_object_unref (info);
 
1050
                g_object_unref (file);
 
1051
 
 
1052
                info = tmp_info;
 
1053
                file = tmp_file;
 
1054
        }
 
1055
 
934
1056
        uri = g_file_get_uri (file);
935
1057
        if (g_file_query_exists (file, NULL)) {
936
1058
                const gchar *mime;
939
1061
                type = brasero_project_manager_open_by_mime (manager, uri, mime);
940
1062
        } 
941
1063
        else {
942
 
                window = gtk_widget_get_toplevel (GTK_WIDGET (manager));
943
 
                dialog = gtk_message_dialog_new (GTK_WINDOW (window),
944
 
                                                 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
945
 
                                                 GTK_MESSAGE_ERROR,
946
 
                                                 GTK_BUTTONS_CLOSE,
947
 
                                                 "Error loading project");
948
 
                gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
949
 
                                                          _("The project '%s' does not exist."),
950
 
                                                          uri);
951
 
                gtk_dialog_run (GTK_DIALOG (dialog));
952
 
                gtk_widget_destroy (dialog);
 
1064
                gchar *string;
 
1065
 
 
1066
                string = g_strdup_printf (_("The project '%s' does not exist."), uri);
 
1067
                brasero_utils_message_dialog (gtk_widget_get_toplevel (GTK_WIDGET (manager)),
 
1068
                                              _("Error while loading the project:"),
 
1069
                                              string,
 
1070
                                              GTK_MESSAGE_ERROR);
 
1071
                g_free (string);
953
1072
 
954
1073
                type = BRASERO_PROJECT_TYPE_INVALID;
955
1074
        }
991
1110
        uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (chooser));
992
1111
        gtk_widget_destroy (chooser);
993
1112
 
 
1113
        manager->priv->oneshot = FALSE;
994
1114
        type = brasero_project_manager_open_uri (manager, uri);
995
1115
        g_free (uri);
996
1116
}
1000
1120
                                           const gchar *uri,
1001
1121
                                           BraseroProjectManager *manager)
1002
1122
{
 
1123
        manager->priv->oneshot = FALSE;
1003
1124
        brasero_project_manager_open_uri (manager, uri);
1004
1125
}
1005
1126
 
1006
1127
void
 
1128
brasero_project_manager_set_oneshot (BraseroProjectManager *manager,
 
1129
                                     gboolean oneshot)
 
1130
{
 
1131
        manager->priv->oneshot = oneshot;
 
1132
}
 
1133
 
 
1134
void
1007
1135
brasero_project_manager_empty (BraseroProjectManager *manager)
1008
1136
{
1009
1137
        brasero_project_manager_switch (manager, BRASERO_PROJECT_TYPE_INVALID, NULL, NULL, TRUE);