From: jstebbins Date: Mon, 30 Jun 2008 16:51:20 +0000 (+0000) Subject: LinGui: add detected dvd drives to file menu for quick access. this is a X-Git-Url: http://git.osdn.jp/view?a=commitdiff_plain;h=b8e21cd47965976ea737d161cee2dba207b30fd0;hp=50f18f305bd08008848cbe9bc22e602473a1c08c;p=handbrake-jp%2Fhandbrake-jp-git.git LinGui: add detected dvd drives to file menu for quick access. this is a variation of a request saintdev made. hope he likes it. git-svn-id: svn://localhost/HandBrake/trunk@1545 b64f7644-9d1e-0410-96f1-a4d463321fa5 --- diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c index 582c930d..3a16386e 100644 --- a/gtk/src/callbacks.c +++ b/gtk/src/callbacks.c @@ -581,6 +581,30 @@ source_dialog_extra_widgets(GtkWidget *dialog, gboolean checkbutton_active) return GTK_WIDGET(vbox); } +static void +do_scan(signal_user_data_t *ud, const gchar *filename) +{ + if (filename != NULL) + { + ghb_settings_set_string(ud->settings, "source", filename); + if (update_source_label(ud, filename)) + { + GtkProgressBar *progress; + progress = GTK_PROGRESS_BAR(GHB_WIDGET(ud->builder, "progressbar")); + const gchar *path; + path = ghb_settings_get_string( ud->settings, "source"); + gtk_progress_bar_set_fraction (progress, 0); + gtk_progress_bar_set_text (progress, "Scanning ..."); + ud->state |= GHB_STATE_SCANNING; + ghb_backend_scan (path, 0); + } + else + { + // TODO: error dialog + } + } +} + void source_button_clicked_cb(GtkButton *button, signal_user_data_t *ud) { @@ -621,21 +645,7 @@ source_button_clicked_cb(GtkButton *button, signal_user_data_t *ud) filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); if (filename != NULL) { - ghb_settings_set_string(ud->settings, "source", filename); - if (update_source_label(ud, filename)) - { - GtkProgressBar *progress; - progress = GTK_PROGRESS_BAR(GHB_WIDGET (ud->builder, "progressbar")); - const gchar *path = ghb_settings_get_string( ud->settings, "source"); - gtk_progress_bar_set_fraction (progress, 0); - gtk_progress_bar_set_text (progress, "Scanning ..."); - ud->state |= GHB_STATE_SCANNING; - ghb_backend_scan (path, 0); - } - else - { - // TODO: error dialog - } + do_scan(ud, filename); if (strcmp(sourcename, filename) != 0) { ghb_settings_set_string (ud->settings, "default_source", filename); @@ -648,6 +658,23 @@ source_button_clicked_cb(GtkButton *button, signal_user_data_t *ud) gtk_widget_destroy(dialog); } +void +dvd_source_activate_cb(GtkAction *action, signal_user_data_t *ud) +{ + const gchar *filename; + const gchar *sourcename; + + sourcename = ghb_settings_get_string(ud->settings, "source"); + filename = gtk_action_get_name(action); + do_scan(ud, filename); + if (strcmp(sourcename, filename) != 0) + { + ghb_settings_set_string (ud->settings, "default_source", filename); + ghb_prefs_save (ud->settings); + ghb_dvd_set_current (filename, ud); + } +} + static void update_destination_extension(signal_user_data_t *ud) { @@ -3104,6 +3131,44 @@ hbfd_toggled_cb(GtkWidget *widget, signal_user_data_t *ud) ghb_prefs_save(ud->settings); } +void +ghb_file_menu_add_dvd(signal_user_data_t *ud) +{ + GList *link, *drives; + + GtkActionGroup *agroup = GTK_ACTION_GROUP( + gtk_builder_get_object(ud->builder, "actiongroup1")); + GtkUIManager *ui = GTK_UI_MANAGER( + gtk_builder_get_object(ud->builder, "uimanager1")); + guint merge_id = gtk_ui_manager_new_merge_id(ui); + + link = drives = dvd_device_list(); + while (link != NULL) + { + gchar *name = (gchar*)link->data; + // Create action for this drive + GtkAction *action = gtk_action_new(name, name, + "Scan this DVD source", "gtk-cdrom"); + // Add action to action group + gtk_action_group_add_action_with_accel(agroup, action, ""); + // Add to ui manager + gtk_ui_manager_add_ui(ui, merge_id, + "ui/menubar1/menuitem1/quit1", name, name, + GTK_UI_MANAGER_AUTO, TRUE); + // Connect signal to action (menu item) + g_signal_connect(action, "activate", + (GCallback)dvd_source_activate_cb, ud); + g_free(name); + link = link->next; + } + g_list_free(drives); + + // Add separator + gtk_ui_manager_add_ui(ui, merge_id, + "ui/menubar1/menuitem1/quit1", "", NULL, + GTK_UI_MANAGER_AUTO, TRUE); +} + gboolean ghb_is_cd(GDrive *gd); static GList* diff --git a/gtk/src/callbacks.h b/gtk/src/callbacks.h index 53c8ed25..3e4359e4 100644 --- a/gtk/src/callbacks.h +++ b/gtk/src/callbacks.h @@ -35,6 +35,7 @@ gboolean ghb_log_cb(GIOChannel *source, GIOCondition cond, gpointer data); void ghb_select_preset(GtkBuilder *builder, const gchar *preset); void debug_log_handler(const gchar *domain, GLogLevelFlags flags, const gchar *msg, gpointer ud); void ghb_hbfd(signal_user_data_t *ud, gboolean hbfd); +void ghb_file_menu_add_dvd(signal_user_data_t *ud); void ghb_hal_init(); gboolean ghb_message_dialog(GtkMessageType type, const gchar *message, const gchar *no, const gchar *yes); diff --git a/gtk/src/main.c b/gtk/src/main.c index 2d3e0603..541c5d97 100644 --- a/gtk/src/main.c +++ b/gtk/src/main.c @@ -513,6 +513,7 @@ main (int argc, char *argv[]) ud->builder = create_builder_or_die (BUILDER_NAME, builder_file); g_free(builder_file); } + ghb_file_menu_add_dvd(ud); ghb_backend_init(ud->builder, 1, 0); g_debug("ud %p\n", ud);