X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=gtk%2Fsrc%2Fcallbacks.c;h=0d2aa7697b16a70deb4f8d2e48d039c011a703d5;hb=44946a6f8be82a70e65ca534541183a26fdb804b;hp=0daa2573cd6a2b5286889adce350e7d48bbf4c47;hpb=edd4c1cc609a1bf5f3e061fc8085f367c8cf4f70;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c index 0daa2573..0d2aa769 100644 --- a/gtk/src/callbacks.c +++ b/gtk/src/callbacks.c @@ -393,7 +393,7 @@ get_direct_dvd_volume_name(const gchar *drive) gchar *result = NULL; gchar vname[51], fsname[51]; - if (GetVolumeInformation(drive, vname, 50, NULL, NULL, NULL, fsname, 51)) + if (GetVolumeInformation(drive, vname, 50, NULL, NULL, NULL, fsname, 50)) { result = g_strdup_printf("%s", vname); } @@ -599,21 +599,17 @@ set_destination(signal_user_data_t *ud) static gchar* get_file_label(const gchar *filename) { - static gchar *containers[] = - {".vob", ".mpg", ".m2ts", ".mkv", ".mp4", ".m4v", ".avi", ".ogm", NULL}; - gchar *base; - gint ii; + gchar *base, *pos, *end; base = g_path_get_basename(filename); - for (ii = 0; containers[ii] != NULL; ii++) + pos = strrchr(base, '.'); + if (pos != NULL) { - if (g_str_has_suffix(base, containers[ii])) - { - gchar *pos; - pos = strrchr(base, '.'); + // If the last '.' is within 4 chars of end of name, assume + // there is an extension we want to strip. + end = &base[strlen(base) - 1]; + if (end - pos <= 4) *pos = 0; - break; - } } return base; } @@ -656,7 +652,6 @@ update_source_label(signal_user_data_t *ud, const gchar *source, gboolean update g_debug("update_source_label()"); len = strlen(filename); - if (filename[len-1] == G_DIR_SEPARATOR) filename[len-1] = 0; if (g_file_test(filename, G_FILE_TEST_IS_DIR)) { // Skip dos drive letters @@ -671,6 +666,7 @@ update_source_label(signal_user_data_t *ud, const gchar *source, gboolean update } else { + if (filename[len-1] == G_DIR_SEPARATOR) filename[len-1] = 0; if (start != NULL) start++; else @@ -873,6 +869,30 @@ show_scan_progress(signal_user_data_t *ud) gtk_label_set_text( label, "Scanning ..." ); } +static void +start_scan( + signal_user_data_t *ud, + const gchar *path, + gint titlenum, + gint preview_count) +{ + GtkWidget *widget; + GtkAction *action; + ghb_status_t status; + + ghb_get_status(&status); + if (status.scan.state != GHB_STATE_IDLE) + return; + + widget = GHB_WIDGET(ud->builder, "sourcetoolbutton"); + gtk_widget_set_sensitive(widget, FALSE); + action = GHB_ACTION(ud->builder, "source_action"); + gtk_action_set_sensitive(action, FALSE); + action = GHB_ACTION(ud->builder, "source_single_action"); + gtk_action_set_sensitive(action, FALSE); + ghb_backend_scan(path, titlenum, preview_count); +} + void ghb_do_scan( signal_user_data_t *ud, @@ -917,7 +937,7 @@ ghb_do_scan( prune_logs(ud); preview_count = ghb_settings_get_int(ud->settings, "preview_count"); - ghb_backend_scan(path, titlenum, preview_count); + start_scan(ud, path, titlenum, preview_count); g_free(path); } else @@ -2374,6 +2394,16 @@ ghb_backend_events(signal_user_data_t *ud) GtkProgressBar *scan_prog; GtkLabel *label; + GtkWidget *widget; + GtkAction *action; + + widget = GHB_WIDGET(ud->builder, "sourcetoolbutton"); + gtk_widget_set_sensitive(widget, TRUE); + action = GHB_ACTION(ud->builder, "source_action"); + gtk_action_set_sensitive(action, TRUE); + action = GHB_ACTION(ud->builder, "source_single_action"); + gtk_action_set_sensitive(action, TRUE); + source = ghb_settings_get_string(ud->settings, "source"); update_source_label(ud, source, FALSE); @@ -3422,7 +3452,7 @@ handle_media_change(const gchar *device, gboolean insert, signal_user_data_t *ud update_source_label(ud, device, TRUE); gint preview_count; preview_count = ghb_settings_get_int(ud->settings, "preview_count"); - ghb_backend_scan(device, 0, preview_count); + start_scan(ud, device, 0, preview_count); } } } @@ -3439,7 +3469,7 @@ handle_media_change(const gchar *device, gboolean insert, signal_user_data_t *ud ghb_hb_cleanup(TRUE); prune_logs(ud); ghb_settings_set_string(ud->settings, "source", "/dev/null"); - ghb_backend_scan("/dev/null", 0, 1); + start_scan(ud, "/dev/null", 0, 1); } } } @@ -3525,7 +3555,7 @@ drive_changed_cb(GVolumeMonitor *gvm, GDrive *gd, signal_user_data_t *ud) update_source_label(ud, device, TRUE); gint preview_count; preview_count = ghb_settings_get_int(ud->settings, "preview_count"); - ghb_backend_scan(device, 0, preview_count); + start_scan(ud, device, 0, preview_count); } } else @@ -3533,7 +3563,7 @@ drive_changed_cb(GVolumeMonitor *gvm, GDrive *gd, signal_user_data_t *ud) ghb_hb_cleanup(TRUE); prune_logs(ud); ghb_settings_set_string(ud->settings, "source", "/dev/null"); - ghb_backend_scan("/dev/null", 0, 1); + start_scan(ud, "/dev/null", 0, 1); } } #endif