OSDN Git Service

MacGui: Remove Target Size as a rate control option as it doesn't really work correct...
[handbrake-jp/handbrake-jp-git.git] / gtk / src / main.c
index fc52e2a..72617eb 100644 (file)
@@ -1,7 +1,7 @@
 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
 /*
  * main.c
- * Copyright (C) John Stebbins 2008 <stebbins@stebbins>
+ * Copyright (C) John Stebbins 2008-2011 <stebbins@stebbins>
  * 
  * main.c is free software.
  * 
 
 #include <gtk/gtk.h>
 
-#if !defined(_WIN32)
+#if defined(_ENABLE_GST)
 #include <gst/gst.h>
+#endif
+
+#if !defined(_WIN32)
 #include <libnotify/notify.h>
+#include <dbus/dbus-glib.h>
 #else
 #include <windows.h>
 #include <io.h>
-//#include <pthread/pthread.h>
 #define pipe(phandles) _pipe (phandles, 4096, _O_BINARY)
 #endif
 
@@ -330,12 +333,9 @@ bind_audio_tree_model (signal_user_data_t *ud)
        selection = gtk_tree_view_get_selection (treeview);
        // 12 columns in model.  6 are visible, the other 6 are for storing
        // values that I need
-       treestore = gtk_list_store_new(12, G_TYPE_STRING, G_TYPE_STRING, 
-                                                                  G_TYPE_STRING, G_TYPE_STRING, 
-                                                                  G_TYPE_STRING, G_TYPE_STRING,
+       treestore = gtk_list_store_new(6, G_TYPE_STRING, G_TYPE_STRING, 
                                                                   G_TYPE_STRING, G_TYPE_STRING, 
-                                                                  G_TYPE_STRING, G_TYPE_STRING,
-                                                                  G_TYPE_STRING, G_TYPE_DOUBLE);
+                                                                  G_TYPE_STRING, G_TYPE_STRING);
        gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(treestore));
 
        cell = gtk_cell_renderer_text_new();
@@ -406,10 +406,10 @@ bind_subtitle_tree_model (signal_user_data_t *ud)
        // values that I need
        // Track, force, burn, default, type, srt offset, track short, source
        // force visible, burn visible, offset visible
-       treestore = gtk_list_store_new(11
+       treestore = gtk_list_store_new(10
                                                                        G_TYPE_STRING,
                                                                        G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
-                                                                       G_TYPE_BOOLEAN, G_TYPE_STRING,  
+                                                                       G_TYPE_BOOLEAN,
                                                                        G_TYPE_INT,     G_TYPE_STRING,
                                                                        G_TYPE_INT,
                                                                        G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
@@ -420,19 +420,19 @@ bind_subtitle_tree_model (signal_user_data_t *ud)
        column = gtk_tree_view_column_new_with_attributes(
                                                                        _("Track"), cell, "text", 0, NULL);
        gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
-       gtk_tree_view_column_set_min_width (column, 190);
-       gtk_tree_view_column_set_max_width (column, 190);
+       gtk_tree_view_column_set_min_width (column, 350);
+       gtk_tree_view_column_set_max_width (column, 350);
 
        cell = gtk_cell_renderer_toggle_new();
        column = gtk_tree_view_column_new_with_attributes(
-                       _("Forced Only"), cell, "active", 1, "visible", 8, NULL);
+                       _("Forced Only"), cell, "active", 1, "visible", 7, NULL);
        gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
        g_signal_connect(cell, "toggled", subtitle_forced_toggled_cb, ud);
 
        cell = gtk_cell_renderer_toggle_new();
        gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(cell), TRUE);
        column = gtk_tree_view_column_new_with_attributes(
-                       _("Burned In"), cell, "active", 2, "visible", 9, NULL);
+                       _("Burned In"), cell, "active", 2, "visible", 8, NULL);
        gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
        g_signal_connect(cell, "toggled", subtitle_burned_toggled_cb, ud);
 
@@ -445,14 +445,7 @@ bind_subtitle_tree_model (signal_user_data_t *ud)
 
        cell = gtk_cell_renderer_text_new();
        column = gtk_tree_view_column_new_with_attributes(
-                                                                       _("Type"), cell, "text", 4, NULL);
-       gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
-       gtk_tree_view_column_set_min_width (column, 190);
-       gtk_tree_view_column_set_max_width (column, 190);
-
-       cell = gtk_cell_renderer_text_new();
-       column = gtk_tree_view_column_new_with_attributes(
-                       _("Srt Offset"), cell, "text", 5, "visible", 10, NULL);
+                       _("Srt Offset"), cell, "text", 4, "visible", 9, NULL);
        gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
 
 
@@ -521,6 +514,7 @@ bind_presets_tree_model (signal_user_data_t *ud)
 static void
 clean_old_logs()
 {
+#if !defined(_WIN32)
        const gchar *file;
        gchar *config;
 
@@ -543,7 +537,7 @@ clean_old_logs()
                                path = g_strdup_printf("%s/ghb.pid.%d", config, pid);
                                if (g_file_test(path, G_FILE_TEST_EXISTS))
                                {
-                                       fd = g_open(path, O_RDWR);
+                                       fd = open(path, O_RDWR);
                                        if (fd >= 0)
                                        {
                                                lock = lockf(fd, F_TLOCK, 0);
@@ -570,6 +564,60 @@ clean_old_logs()
                g_dir_close(gdir);
        }
        g_free(config);
+#else
+       const gchar *file;
+       gchar *config;
+
+       config = ghb_get_user_config_dir(NULL);
+
+       if (g_file_test(config, G_FILE_TEST_IS_DIR))
+       {
+               GDir *gdir = g_dir_open(config, 0, NULL);
+               file = g_dir_read_name(gdir);
+               while (file)
+               {
+                       if (strncmp(file, "Activity.log.", 13) == 0)
+                       {
+                               gchar *path;
+                               int pid;
+
+                               sscanf(file, "Activity.log.%d", &pid);
+
+#if 0
+                               int fd, lock = 1;
+
+                               path = g_strdup_printf("%s/ghb.pid.%d", config, pid);
+                               if (g_file_test(path, G_FILE_TEST_EXISTS))
+                               {
+                                       fd = open(path, O_RDWR);
+                                       if (fd >= 0)
+                                       {
+                                               lock = lockf(fd, F_TLOCK, 0);
+                                       }
+                                       g_free(path);
+                                       close(fd);
+                                       if (lock == 0)
+                                       {
+                                               path = g_strdup_printf("%s/%s", config, file);
+                                               g_unlink(path);
+                                               g_free(path);
+                                       }
+                               }
+                               else
+#endif
+                               {
+                                       //g_free(path);
+                                       path = g_strdup_printf("%s/%s", config, file);
+                                       g_unlink(path);
+                                       g_free(path);
+                               }
+                       }
+                       file = g_dir_read_name(gdir);
+               }
+               g_dir_close(gdir);
+       }
+       g_free(config);
+#endif
 }
 
 static void
@@ -603,7 +651,12 @@ IoRedirect(signal_user_data_t *ud)
        // Set encoding to raw.
        g_io_channel_set_encoding (ud->activity_log, NULL, NULL);
        // redirect stderr to the writer end of the pipe
+#if defined(_WIN32)
+       // dup2 doesn't work on windows for some stupid reason
+       stderr->_file = pfd[1];
+#else
        dup2(pfd[1], /*stderr*/2);
+#endif
        setvbuf(stderr, NULL, _IONBF, 0);
        channel = g_io_channel_unix_new (pfd[0]);
        // I was getting an this error:
@@ -666,10 +719,6 @@ watch_volumes(signal_user_data_t *ud)
 #endif
 }
 
-// Hack to avoid a segfault in libavcodec
-extern int mm_flags;
-int mm_support();
-
 G_MODULE_EXPORT void x264_entry_changed_cb(GtkWidget *widget, signal_user_data_t *ud);
 void preview_window_expose_cb(void);
 
@@ -715,28 +764,27 @@ main (int argc, char *argv[])
        GError *error = NULL;
        GOptionContext *context;
 
-       mm_flags = mm_support();
 #ifdef ENABLE_NLS
        bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
        bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
        textdomain (GETTEXT_PACKAGE);
 #endif
 
-#ifdef PTW32_STATIC_LIB
-       pthread_win32_process_attach_np();
-       pthread_win32_thread_attach_np();
-#endif
-
        if (!g_thread_supported())
                g_thread_init(NULL);
        context = g_option_context_new ("- Rip and encode DVD or MPEG file");
        g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
        g_option_context_add_group (context, gtk_get_option_group (TRUE));
-#if !defined(_WIN32)
+#if defined(_ENABLE_GST)
        g_option_context_add_group (context, gst_init_get_option_group ());
 #endif
        g_option_context_parse (context, &argc, &argv, &error);
        g_option_context_free(context);
+
+       if (argc > 1 && dvd_device == NULL && argv[1][0] != '-')
+       {
+               dvd_device = argv[1];
+       }
        
        gtk_set_locale ();
        gtk_init (&argc, &argv);
@@ -751,8 +799,9 @@ main (int argc, char *argv[])
        ghb_load_icons();
 
 #if !defined(_WIN32)
-       ghb_hal_init();
+       dbus_g_thread_init();
 #endif
+       ghb_udev_init();
 
        ghb_write_pid_file();
        ud = g_malloc0(sizeof(signal_user_data_t));
@@ -771,6 +820,11 @@ main (int argc, char *argv[])
        // Since GtkBuilder no longer assigns object ids to widget names
        // Assign a few that are necessary for style overrides to work
        GtkWidget *widget;
+#if defined(_NO_UPDATE_CHECK)
+       widget = GHB_WIDGET(ud->builder, "check_updates_box");
+       gtk_widget_hide(widget);
+#endif
+
        widget = GHB_WIDGET(ud->builder, "preview_hud");
        gtk_widget_set_name(widget, "preview_hud");
        widget = GHB_WIDGET(ud->builder, "preview_window");
@@ -867,7 +921,8 @@ main (int argc, char *argv[])
        if (dvd_device != NULL)
        {
                // Source overridden from command line option
-               ghb_settings_set_string(ud->settings, "source", dvd_device);
+               ghb_settings_set_string(ud->settings, "scan_source", dvd_device);
+               g_idle_add((GSourceFunc)ghb_idle_scan, ud);
        }
        // Reload and check status of the last saved queue
        g_idle_add((GSourceFunc)ghb_reload_queue, ud);
@@ -921,9 +976,6 @@ main (int argc, char *argv[])
        notify_uninit();
 #endif
        g_free(ud);
-#ifdef PTW32_STATIC_LIB
-       pthread_win32_thread_detach_np();
-       pthread_win32_process_detach_np();
-#endif
+
        return 0;
 }