OSDN Git Service

LinGui: don't disable subme 10 when psy-rd is 0
[handbrake-jp/handbrake-jp-git.git] / gtk / src / callbacks.c
index 0daa257..0d2aa76 100644 (file)
@@ -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