summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gtk/src/callbacks.c167
-rw-r--r--gtk/src/callbacks.h5
-rw-r--r--gtk/src/ghb.ui185
-rw-r--r--gtk/src/hb-backend.c4
-rw-r--r--gtk/src/internal_defaults.xml4
-rw-r--r--gtk/src/main.c2
-rw-r--r--gtk/src/queuehandler.c2
-rw-r--r--gtk/src/resource_data.h284
-rw-r--r--gtk/src/resources.plist189
9 files changed, 770 insertions, 72 deletions
diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c
index 1898271af..acb434e7e 100644
--- a/gtk/src/callbacks.c
+++ b/gtk/src/callbacks.c
@@ -467,18 +467,18 @@ update_source_label(signal_user_data_t *ud, const gchar *source)
return TRUE;
}
-static GtkWidget *dvd_device_combo = NULL;
-
void
-chooser_file_selected_cb(GtkFileChooser *dialog, GtkComboBox *combo)
+chooser_file_selected_cb(GtkFileChooser *dialog, signal_user_data_t *ud)
{
const gchar *name = gtk_file_chooser_get_filename (dialog);
GtkTreeModel *store;
GtkTreeIter iter;
const gchar *device;
gboolean foundit = FALSE;
+ GtkComboBox *combo;
if (name == NULL) return;
+ combo = GTK_COMBO_BOX(GHB_WIDGET(ud->builder, "source_device"));
store = gtk_combo_box_get_model(combo);
if (gtk_tree_model_get_iter_first(store, &iter))
{
@@ -499,28 +499,39 @@ chooser_file_selected_cb(GtkFileChooser *dialog, GtkComboBox *combo)
}
void
-dvd_device_changed_cb(GtkComboBox *combo, GtkWidget *dialog)
+dvd_device_changed_cb(GtkComboBox *combo, signal_user_data_t *ud)
{
- gint ii = gtk_combo_box_get_active (combo);
- if (ii != 0)
+ GtkWidget *dialog;
+ gint ii;
+
+ ii = gtk_combo_box_get_active (combo);
+ if (ii > 0)
{
- const gchar *device = gtk_combo_box_get_active_text (combo);
- const gchar *name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(dialog));
+ const gchar *device, *name;
+
+ dialog = GHB_WIDGET(ud->builder, "source_dialog");
+ device = gtk_combo_box_get_active_text (combo);
+ name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(dialog));
if (name == NULL || strcmp(name, device) != 0)
gtk_file_chooser_select_filename (GTK_FILE_CHOOSER(dialog), device);
}
}
void
-source_type_changed_cb(GtkToggleButton *toggle, GtkFileChooser *chooser)
+source_type_changed_cb(GtkToggleButton *toggle, signal_user_data_t *ud)
{
gchar *folder;
+ GtkFileChooser *chooser;
+ GtkWidget *dvd_device_combo;
g_debug("source_type_changed_cb ()");
+ chooser = GTK_FILE_CHOOSER(GHB_WIDGET(ud->builder, "source_dialog"));
+ dvd_device_combo = GHB_WIDGET(ud->builder, "source_device");
folder = gtk_file_chooser_get_current_folder (chooser);
if (gtk_toggle_button_get_active (toggle))
{
- gtk_file_chooser_set_action (chooser, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
+ gtk_file_chooser_set_action (chooser,
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
gtk_widget_set_sensitive (dvd_device_combo, FALSE);
gtk_combo_box_set_active (GTK_COMBO_BOX(dvd_device_combo), 0);
}
@@ -536,61 +547,44 @@ source_type_changed_cb(GtkToggleButton *toggle, GtkFileChooser *chooser)
}
}
-static GtkWidget*
-source_dialog_extra_widgets(GtkWidget *dialog, gboolean checkbutton_active)
+static void
+source_dialog_extra_widgets(
+ signal_user_data_t *ud,
+ GtkWidget *dialog,
+ gboolean checkbutton_active)
{
- GtkBox *vbox;
- GtkWidget *checkbutton;
-
- vbox = GTK_BOX(gtk_vbox_new (FALSE, 2));
- checkbutton = gtk_check_button_new_with_label ("Open VIDEO_TS folder");
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(checkbutton), checkbutton_active);
- gtk_box_pack_start (vbox, checkbutton, FALSE, FALSE, 1);
- gtk_widget_show(checkbutton);
-
- GtkWidget *combo;
- GtkBox *hbox;
+ GtkToggleButton *checkbutton;
+ GtkComboBox *combo;
GList *drives, *link;
- GtkWidget *label, *blank;
+
+ checkbutton = GTK_TOGGLE_BUTTON(
+ GHB_WIDGET(ud->builder, "source_folder_flag"));
+ gtk_toggle_button_set_active(checkbutton, checkbutton_active);
+ combo = GTK_COMBO_BOX(GHB_WIDGET(ud->builder, "source_device"));
+ gtk_list_store_clear(GTK_LIST_STORE(
+ gtk_combo_box_get_model(combo)));
- hbox = GTK_BOX(gtk_hbox_new (FALSE, 2));
- combo = gtk_combo_box_new_text();
- label = gtk_label_new("Detected DVD devices:");
- blank = gtk_label_new("");
link = drives = dvd_device_list();
- gtk_combo_box_append_text (GTK_COMBO_BOX(combo), "Not Selected");
+ gtk_combo_box_append_text (combo, "Not Selected");
while (link != NULL)
{
gchar *name = (gchar*)link->data;
- gtk_combo_box_append_text (GTK_COMBO_BOX(combo), name);
+ gtk_combo_box_append_text(combo, name);
g_free(name);
link = link->next;
}
g_list_free(drives);
- gtk_combo_box_set_active (GTK_COMBO_BOX(combo), 0);
- gtk_box_pack_start (vbox, GTK_WIDGET(hbox), FALSE, FALSE, 1);
- gtk_widget_show(GTK_WIDGET(hbox));
- gtk_box_pack_start (hbox, label, FALSE, FALSE, 1);
- gtk_widget_show(label);
- gtk_box_pack_start (hbox, combo, FALSE, FALSE, 2);
- gtk_widget_show(combo);
- gtk_box_pack_start (hbox, blank, TRUE, TRUE, 1);
- gtk_widget_show(blank);
-
- // Ugly hackish global alert
- dvd_device_combo = combo;
- g_signal_connect(combo, "changed", (GCallback)dvd_device_changed_cb, dialog);
- g_signal_connect(dialog, "selection-changed", (GCallback)chooser_file_selected_cb, combo);
-
- g_signal_connect(checkbutton, "toggled", (GCallback)source_type_changed_cb, dialog);
- return GTK_WIDGET(vbox);
}
extern GValue *ghb_queue_edit_settings;
static gchar *last_scan_file = NULL;
void
-ghb_do_scan(signal_user_data_t *ud, const gchar *filename, gboolean force)
+ghb_do_scan(
+ signal_user_data_t *ud,
+ const gchar *filename,
+ gint titlenum,
+ gboolean force)
{
if (!force && last_scan_file != NULL &&
strcmp(last_scan_file, filename) == 0)
@@ -629,7 +623,7 @@ ghb_do_scan(signal_user_data_t *ud, const gchar *filename, gboolean force)
prune_logs(ud);
gint preview_count;
preview_count = ghb_settings_get_int(ud->settings, "preview_count");
- ghb_backend_scan(path, 0, preview_count);
+ ghb_backend_scan(path, titlenum, preview_count);
g_free(path);
}
else
@@ -639,11 +633,24 @@ ghb_do_scan(signal_user_data_t *ud, const gchar *filename, gboolean force)
}
}
-void
-source_button_clicked_cb(GtkButton *button, signal_user_data_t *ud)
+static gboolean
+update_source_name(gpointer data)
+{
+ signal_user_data_t *ud = (signal_user_data_t*)data;
+ GtkWidget *dialog;
+ gchar *sourcename;
+
+ sourcename = ghb_settings_get_string(ud->settings, "source");
+ dialog = GHB_WIDGET(ud->builder, "source_dialog");
+ gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), sourcename);
+ g_free(sourcename);
+ return FALSE;
+}
+
+static void
+do_source_dialog(GtkButton *button, gboolean single, signal_user_data_t *ud)
{
GtkWidget *dialog;
- GtkWidget *widget;
gchar *sourcename;
gint response;
GtkFileChooserAction action;
@@ -661,15 +668,20 @@ source_button_clicked_cb(GtkButton *button, signal_user_data_t *ud)
{
action = GTK_FILE_CHOOSER_ACTION_OPEN;
}
- dialog = gtk_file_chooser_dialog_new ("Select Source",
- NULL,
- action,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
- NULL);
- widget = source_dialog_extra_widgets(dialog, checkbutton_active);
- gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER(dialog), widget);
- gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), sourcename);
+ GtkWidget *widget;
+ widget = GHB_WIDGET(ud->builder, "single_title_box");
+ if (single)
+ gtk_widget_show(widget);
+ else
+ gtk_widget_hide(widget);
+ dialog = GHB_WIDGET(ud->builder, "source_dialog");
+ source_dialog_extra_widgets(ud, dialog, checkbutton_active);
+ gtk_file_chooser_set_action(GTK_FILE_CHOOSER(dialog), action);
+ // Updating the filename in the file chooser dialog doesn't seem
+ // to work unless the dialog is running for some reason.
+ // So handle it in an "idle" event.
+ //gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), sourcename);
+ g_idle_add((GSourceFunc)update_source_name, ud);
response = gtk_dialog_run(GTK_DIALOG (dialog));
gtk_widget_hide(dialog);
if (response == GTK_RESPONSE_ACCEPT)
@@ -679,10 +691,17 @@ 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_do_scan(ud, filename, TRUE);
+ gint titlenum;
+
+ if (single)
+ titlenum = ghb_settings_get_int(ud->settings, "single_title");
+ else
+ titlenum = 0;
+ ghb_do_scan(ud, filename, titlenum, TRUE);
if (strcmp(sourcename, filename) != 0)
{
- ghb_settings_set_string (ud->settings, "default_source", filename);
+ ghb_settings_set_string (ud->settings,
+ "default_source", filename);
ghb_pref_save (ud->settings, "default_source");
ghb_dvd_set_current (filename, ud);
}
@@ -690,7 +709,18 @@ source_button_clicked_cb(GtkButton *button, signal_user_data_t *ud)
}
}
g_free(sourcename);
- gtk_widget_destroy(dialog);
+}
+
+void
+source_button_clicked_cb(GtkButton *button, signal_user_data_t *ud)
+{
+ do_source_dialog(button, FALSE, ud);
+}
+
+void
+single_title_source_cb(GtkButton *button, signal_user_data_t *ud)
+{
+ do_source_dialog(button, TRUE, ud);
}
void
@@ -701,7 +731,7 @@ dvd_source_activate_cb(GtkAction *action, signal_user_data_t *ud)
sourcename = ghb_settings_get_string(ud->settings, "source");
filename = gtk_action_get_name(action);
- ghb_do_scan(ud, filename, TRUE);
+ ghb_do_scan(ud, filename, 0, TRUE);
if (strcmp(sourcename, filename) != 0)
{
ghb_settings_set_string (ud->settings, "default_source", filename);
@@ -2337,6 +2367,13 @@ debug_log_handler(const gchar *domain, GLogLevelFlags flags, const gchar *msg, g
}
void
+warn_log_handler(const gchar *domain, GLogLevelFlags flags, const gchar *msg, gpointer data)
+{
+ printf("mywarning\n");
+ printf("%s: %s\n", domain, msg);
+}
+
+void
ghb_hbfd(signal_user_data_t *ud, gboolean hbfd)
{
GtkWidget *widget;
diff --git a/gtk/src/callbacks.h b/gtk/src/callbacks.h
index 1e7ad2f86..2c17e50e2 100644
--- a/gtk/src/callbacks.h
+++ b/gtk/src/callbacks.h
@@ -31,6 +31,8 @@
void ghb_check_all_depencencies(signal_user_data_t *ud);
gboolean ghb_timer_cb(gpointer data);
gboolean ghb_log_cb(GIOChannel *source, GIOCondition cond, gpointer data);
+void warn_log_handler(
+ const gchar *domain, GLogLevelFlags flags, const gchar *msg, gpointer ud);
void debug_log_handler(
const gchar *domain, GLogLevelFlags flags, const gchar *msg, gpointer ud);
void ghb_hbfd(signal_user_data_t *ud, gboolean hbfd);
@@ -44,7 +46,8 @@ gboolean ghb_reload_queue(signal_user_data_t *ud);
gboolean ghb_cancel_encode(const gchar *extra_msg);
GValue* ghb_start_next_job(signal_user_data_t *ud, gboolean find_first);
void ghb_check_dependency(signal_user_data_t *ud, GtkWidget *widget);
-void ghb_do_scan(signal_user_data_t *ud, const gchar *filename, gboolean force);
+void ghb_do_scan( signal_user_data_t *ud, const gchar *filename,
+ gint titlenum, gboolean force);
void ghb_log(gchar *log, ...);
gpointer ghb_check_update(signal_user_data_t *ud);
void ghb_uninhibit_gpm(void);
diff --git a/gtk/src/ghb.ui b/gtk/src/ghb.ui
index ea7ff7634..7cc27df59 100644
--- a/gtk/src/ghb.ui
+++ b/gtk/src/ghb.ui
@@ -185,6 +185,14 @@
<property name="page_size">0</property>
<property name="value">0</property>
</object>
+ <object class="GtkAdjustment" id="adjustment24">
+ <property name="upper">100</property>
+ <property name="lower">1</property>
+ <property name="page_increment">1</property>
+ <property name="step_increment">1</property>
+ <property name="page_size">0</property>
+ <property name="value">1</property>
+ </object>
<object class="GtkAdjustment" id="preview_progress_adj">
<property name="upper">100</property>
<property name="lower">0</property>
@@ -218,6 +226,14 @@
</object>
</child>
<child>
+ <object class="GtkAction" id="source_single">
+ <property name="icon-name">gtk-open</property>
+ <property name="name">source_single</property>
+ <property name="label">Single _Title</property>
+ <signal handler="single_title_source_cb" name="activate"/>
+ </object>
+ </child>
+ <child>
<object class="GtkAction" id="destination1">
<property name="stock_id">gtk-save-as</property>
<property name="name">destination1</property>
@@ -354,6 +370,7 @@
<menubar name="menubar1">
<menu action="menuitem1">
<menuitem action="source1"/>
+ <menuitem action="source_single"/>
<menuitem action="destination1"/>
<separator/>
<menuitem action="preferences"/>
@@ -380,6 +397,12 @@
</menubar>
</ui>
</object>
+ <object class="GtkListStore" id="device_list">
+ <columns>
+ <!-- column-name device -->
+ <column type="gchararray"/>
+ </columns>
+ </object>
<object class="GtkWindow" id="hb_window">
<property name="visible">True</property>
<property name="title" translatable="yes">HandBrake</property>
@@ -5385,4 +5408,166 @@ libxvidcore authors:
<action-widget response="0">update_remind</action-widget>
</action-widgets>
</object>
+ <object class="GtkFileChooserDialog" id="source_dialog">
+ <property name="border_width">5</property>
+ <property name="modal">True</property>
+ <property name="type_hint">dialog</property>
+ <property name="skip_taskbar_hint">True</property>
+ <property name="skip_pager_hint">True</property>
+ <property name="has_separator">False</property>
+ <signal handler="chooser_file_selected_cb" name="selection-changed"/>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox6">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkVBox" id="source_extra">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkHBox" id="single_title_box">
+ <property name="visible">True</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="label89">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Title Number:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xscale">0</property>
+ <child>
+ <object class="GtkSpinButton" id="single_title">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="adjustment">adjustment24</property>
+ <signal name="value_changed" handler="setting_widget_changed_cb"/>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="source_folder_flag">
+ <property name="label" translatable="yes">Open VIDEO_TS folder</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ <signal handler="source_type_changed_cb" name="toggled"/>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox74">
+ <property name="visible">True</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="label90">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Detected DVD devices:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment2">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xscale">0</property>
+ <child>
+ <object class="GtkComboBox" id="source_device">
+ <property name="visible">True</property>
+ <property name="model">device_list</property>
+ <signal handler="dvd_device_changed_cb" name="changed"/>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderertext1"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area6">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="source_cancel">
+ <property name="label" translatable="yes">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="source_ok">
+ <property name="label" translatable="yes">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-6">source_cancel</action-widget>
+ <action-widget response="-3">source_ok</action-widget>
+ </action-widgets>
+ </object>
</interface>
diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c
index 9f889ad79..518d1b44d 100644
--- a/gtk/src/hb-backend.c
+++ b/gtk/src/hb-backend.c
@@ -198,8 +198,8 @@ combo_opts_t direct_opts =
static options_map_t d_badapt_opts[] =
{
{"Off", "0", 0, "0"},
- {"Faster", "1", 1, "1"},
- {"More Effecient", "2", 2, "2"},
+ {"Fast", "1", 1, "1"},
+ {"Optimal", "2", 2, "2"},
};
combo_opts_t badapt_opts =
{
diff --git a/gtk/src/internal_defaults.xml b/gtk/src/internal_defaults.xml
index 1bc553f2d..8aaa284f6 100644
--- a/gtk/src/internal_defaults.xml
+++ b/gtk/src/internal_defaults.xml
@@ -32,6 +32,8 @@
<integer>0</integer>
<key>scale_width</key>
<integer>0</integer>
+ <key>single_title</key>
+ <integer>1</integer>
<key>start_chapter</key>
<integer>1</integer>
<key>start_frame</key>
@@ -123,7 +125,7 @@
<key>update_skip_version</key>
<integer>0</integer>
<key>VideoQualityGranularity</key>
- <string>0.2</string>
+ <string>1</string>
<key>version</key>
<string>0.1</string>
</dict>
diff --git a/gtk/src/main.c b/gtk/src/main.c
index 779e8c5d6..72deb03a7 100644
--- a/gtk/src/main.c
+++ b/gtk/src/main.c
@@ -524,6 +524,8 @@ main (int argc, char *argv[])
ud = g_malloc0(sizeof(signal_user_data_t));
ud->debug = ghb_debug;
g_log_set_handler (NULL, G_LOG_LEVEL_DEBUG, debug_log_handler, ud);
+ g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, warn_log_handler, ud);
+ //g_log_set_handler ("Gtk", G_LOG_LEVEL_CRITICAL, warn_log_handler, ud);
ud->settings = ghb_settings_new();
// Enable events that alert us to media change events
watch_volumes (ud);
diff --git a/gtk/src/queuehandler.c b/gtk/src/queuehandler.c
index bed650262..848364d0e 100644
--- a/gtk/src/queuehandler.c
+++ b/gtk/src/queuehandler.c
@@ -1193,7 +1193,7 @@ queue_edit_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
}
gchar *source;
source = ghb_settings_get_string(ghb_queue_edit_settings, "source");
- ghb_do_scan(ud, source, FALSE);
+ ghb_do_scan(ud, source, 0, FALSE);
g_free(source);
}
}
diff --git a/gtk/src/resource_data.h b/gtk/src/resource_data.h
index 4c480cf71..98530766d 100644
--- a/gtk/src/resource_data.h
+++ b/gtk/src/resource_data.h
@@ -238,6 +238,15 @@
" &lt;property name=&quot;page_size&quot;&gt;0&lt;/property&gt;\n"
" &lt;property name=&quot;value&quot;&gt;0&lt;/property&gt;\n"
" &lt;/object&gt;\n"
+" &lt;object class=&quot;GtkAdjustment&quot; id=&quot;adjustment24&quot"
+";&gt;\n"
+" &lt;property name=&quot;upper&quot;&gt;100&lt;/property&gt;\n"
+" &lt;property name=&quot;lower&quot;&gt;1&lt;/property&gt;\n"
+" &lt;property name=&quot;page_increment&quot;&gt;1&lt;/property&gt;\n"
+" &lt;property name=&quot;step_increment&quot;&gt;1&lt;/property&gt;\n"
+" &lt;property name=&quot;page_size&quot;&gt;0&lt;/property&gt;\n"
+" &lt;property name=&quot;value&quot;&gt;1&lt;/property&gt;\n"
+" &lt;/object&gt;\n"
" &lt;object class=&quot;GtkAdjustment&quot; id=&quot;preview_progress_"
"adj&quot;&gt;\n"
" &lt;property name=&quot;upper&quot;&gt;100&lt;/property&gt;\n"
@@ -285,6 +294,19 @@
" &lt;/object&gt;\n"
" &lt;/child&gt;\n"
" &lt;child&gt;\n"
+" &lt;object class=&quot;GtkAction&quot; id=&quot;source_single"
+"&quot;&gt;\n"
+" &lt;property name=&quot;icon-name&quot;&gt;gtk-open&lt;/pro"
+"perty&gt;\n"
+" &lt;property name=&quot;name&quot;&gt;source_single&lt;/pro"
+"perty&gt;\n"
+" &lt;property name=&quot;label&quot;&gt;Single _Title&lt;/pr"
+"operty&gt;\n"
+" &lt;signal handler=&quot;single_title_source_cb&quot; name="
+"&quot;activate&quot;/&gt;\n"
+" &lt;/object&gt;\n"
+" &lt;/child&gt;\n"
+" &lt;child&gt;\n"
" &lt;object class=&quot;GtkAction&quot; id=&quot;destination1&"
"quot;&gt;\n"
" &lt;property name=&quot;stock_id&quot;&gt;gtk-save-as&lt;/p"
@@ -501,6 +523,7 @@
" &lt;menubar name=&quot;menubar1&quot;&gt;\n"
" &lt;menu action=&quot;menuitem1&quot;&gt;\n"
" &lt;menuitem action=&quot;source1&quot;/&gt;\n"
+" &lt;menuitem action=&quot;source_single&quot;/&gt;\n"
" &lt;menuitem action=&quot;destination1&quot;/&gt;\n"
" &lt;separator/&gt;\n"
" &lt;menuitem action=&quot;preferences&quot;/&gt;\n"
@@ -527,6 +550,13 @@
" &lt;/menubar&gt;\n"
" &lt;/ui&gt;\n"
" &lt;/object&gt;\n"
+" &lt;object class=&quot;GtkListStore&quot; id=&quot;device_list&quot;&"
+"gt;\n"
+" &lt;columns&gt;\n"
+" &lt;!-- column-name device --&gt;\n"
+" &lt;column type=&quot;gchararray&quot;/&gt;\n"
+" &lt;/columns&gt;\n"
+" &lt;/object&gt;\n"
" &lt;object class=&quot;GtkWindow&quot; id=&quot;hb_window&quot;&gt;\n"
" &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;\n"
" &lt;property name=&quot;title&quot; translatable=&quot;yes&quot;&gt"
@@ -8622,6 +8652,256 @@
"ion-widget&gt;\n"
" &lt;/action-widgets&gt;\n"
" &lt;/object&gt;\n"
+" &lt;object class=&quot;GtkFileChooserDialog&quot; id=&quot;source_dia"
+"log&quot;&gt;\n"
+" &lt;property name=&quot;border_width&quot;&gt;5&lt;/property&gt;\n"
+" &lt;property name=&quot;modal&quot;&gt;True&lt;/property&gt;\n"
+" &lt;property name=&quot;type_hint&quot;&gt;dialog&lt;/property&gt;\n"
+" &lt;property name=&quot;skip_taskbar_hint&quot;&gt;True&lt;/propert"
+"y&gt;\n"
+" &lt;property name=&quot;skip_pager_hint&quot;&gt;True&lt;/property&"
+"gt;\n"
+" &lt;property name=&quot;has_separator&quot;&gt;False&lt;/property&g"
+"t;\n"
+" &lt;signal handler=&quot;chooser_file_selected_cb&quot; name=&quot;"
+"selection-changed&quot;/&gt;\n"
+" &lt;child internal-child=&quot;vbox&quot;&gt;\n"
+" &lt;object class=&quot;GtkVBox&quot; id=&quot;dialog-vbox6&quot;&"
+"gt;\n"
+" &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;\n"
+" &lt;property name=&quot;spacing&quot;&gt;2&lt;/property&gt;\n"
+" &lt;child&gt;\n"
+" &lt;object class=&quot;GtkVBox&quot; id=&quot;source_extra&qu"
+"ot;&gt;\n"
+" &lt;property name=&quot;visible&quot;&gt;True&lt;/property&"
+"gt;\n"
+" &lt;child&gt;\n"
+" &lt;object class=&quot;GtkHBox&quot; id=&quot;single_titl"
+"e_box&quot;&gt;\n"
+" &lt;property name=&quot;visible&quot;&gt;True&lt;/prope"
+"rty&gt;\n"
+" &lt;property name=&quot;spacing&quot;&gt;4&lt;/property"
+"&gt;\n"
+" &lt;child&gt;\n"
+" &lt;object class=&quot;GtkLabel&quot; id=&quot;label8"
+"9&quot;&gt;\n"
+" &lt;property name=&quot;visible&quot;&gt;True&lt;/p"
+"roperty&gt;\n"
+" &lt;property name=&quot;label&quot; translatable=&q"
+"uot;yes&quot;&gt;Title Number:&lt;/property&gt;\n"
+" &lt;/object&gt;\n"
+" &lt;packing&gt;\n"
+" &lt;property name=&quot;expand&quot;&gt;False&lt;/p"
+"roperty&gt;\n"
+" &lt;property name=&quot;position&quot;&gt;0&lt;/pro"
+"perty&gt;\n"
+" &lt;/packing&gt;\n"
+" &lt;/child&gt;\n"
+" &lt;child&gt;\n"
+" &lt;object class=&quot;GtkAlignment&quot; id=&quot;al"
+"ignment1&quot;&gt;\n"
+" &lt;property name=&quot;visible&quot;&gt;True&lt;/p"
+"roperty&gt;\n"
+" &lt;property name=&quot;xalign&quot;&gt;0&lt;/prope"
+"rty&gt;\n"
+" &lt;property name=&quot;xscale&quot;&gt;0&lt;/prope"
+"rty&gt;\n"
+" &lt;child&gt;\n"
+" &lt;object class=&quot;GtkSpinButton&quot; id=&qu"
+"ot;single_title&quot;&gt;\n"
+" &lt;property name=&quot;visible&quot;&gt;True&l"
+"t;/property&gt;\n"
+" &lt;property name=&quot;can_focus&quot;&gt;True"
+"&lt;/property&gt;\n"
+" &lt;property name=&quot;events&quot;&gt;GDK_POI"
+"NTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK"
+" | GDK_BUTTON_RELEASE_MASK&lt;/property&gt;\n"
+" &lt;property name=&quot;adjustment&quot;&gt;adj"
+"ustment24&lt;/property&gt;\n"
+" &lt;signal name=&quot;value_changed&quot; handl"
+"er=&quot;setting_widget_changed_cb&quot;/&gt;\n"
+" &lt;/object&gt;\n"
+" &lt;/child&gt;\n"
+" &lt;/object&gt;\n"
+" &lt;packing&gt;\n"
+" &lt;property name=&quot;position&quot;&gt;1&lt;/pro"
+"perty&gt;\n"
+" &lt;/packing&gt;\n"
+" &lt;/child&gt;\n"
+" &lt;/object&gt;\n"
+" &lt;packing&gt;\n"
+" &lt;property name=&quot;position&quot;&gt;0&lt;/propert"
+"y&gt;\n"
+" &lt;/packing&gt;\n"
+" &lt;/child&gt;\n"
+" &lt;child&gt;\n"
+" &lt;object class=&quot;GtkCheckButton&quot; id=&quot;sour"
+"ce_folder_flag&quot;&gt;\n"
+" &lt;property name=&quot;label&quot; translatable=&quot;"
+"yes&quot;&gt;Open VIDEO_TS folder&lt;/property&gt;\n"
+" &lt;property name=&quot;visible&quot;&gt;True&lt;/prope"
+"rty&gt;\n"
+" &lt;property name=&quot;can_focus&quot;&gt;True&lt;/pro"
+"perty&gt;\n"
+" &lt;property name=&quot;receives_default&quot;&gt;False"
+"&lt;/property&gt;\n"
+" &lt;property name=&quot;events&quot;&gt;GDK_POINTER_MOT"
+"ION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_B"
+"UTTON_RELEASE_MASK&lt;/property&gt;\n"
+" &lt;property name=&quot;xalign&quot;&gt;0&lt;/property&"
+"gt;\n"
+" &lt;property name=&quot;draw_indicator&quot;&gt;True&lt"
+";/property&gt;\n"
+" &lt;signal handler=&quot;source_type_changed_cb&quot; n"
+"ame=&quot;toggled&quot;/&gt;\n"
+" &lt;/object&gt;\n"
+" &lt;packing&gt;\n"
+" &lt;property name=&quot;position&quot;&gt;1&lt;/propert"
+"y&gt;\n"
+" &lt;/packing&gt;\n"
+" &lt;/child&gt;\n"
+" &lt;child&gt;\n"
+" &lt;object class=&quot;GtkHBox&quot; id=&quot;hbox74&quot"
+";&gt;\n"
+" &lt;property name=&quot;visible&quot;&gt;True&lt;/prope"
+"rty&gt;\n"
+" &lt;property name=&quot;spacing&quot;&gt;4&lt;/property"
+"&gt;\n"
+" &lt;child&gt;\n"
+" &lt;object class=&quot;GtkLabel&quot; id=&quot;label9"
+"0&quot;&gt;\n"
+" &lt;property name=&quot;visible&quot;&gt;True&lt;/p"
+"roperty&gt;\n"
+" &lt;property name=&quot;label&quot; translatable=&q"
+"uot;yes&quot;&gt;Detected DVD devices:&lt;/property&gt;\n"
+" &lt;/object&gt;\n"
+" &lt;packing&gt;\n"
+" &lt;property name=&quot;expand&quot;&gt;False&lt;/p"
+"roperty&gt;\n"
+" &lt;property name=&quot;position&quot;&gt;0&lt;/pro"
+"perty&gt;\n"
+" &lt;/packing&gt;\n"
+" &lt;/child&gt;\n"
+" &lt;child&gt;\n"
+" &lt;object class=&quot;GtkAlignment&quot; id=&quot;al"
+"ignment2&quot;&gt;\n"
+" &lt;property name=&quot;visible&quot;&gt;True&lt;/p"
+"roperty&gt;\n"
+" &lt;property name=&quot;xalign&quot;&gt;0&lt;/prope"
+"rty&gt;\n"
+" &lt;property name=&quot;xscale&quot;&gt;0&lt;/prope"
+"rty&gt;\n"
+" &lt;child&gt;\n"
+" &lt;object class=&quot;GtkComboBox&quot; id=&quot"
+";source_device&quot;&gt;\n"
+" &lt;property name=&quot;visible&quot;&gt;True&l"
+"t;/property&gt;\n"
+" &lt;property name=&quot;model&quot;&gt;device_l"
+"ist&lt;/property&gt;\n"
+" &lt;signal handler=&quot;dvd_device_changed_cb&"
+"quot; name=&quot;changed&quot;/&gt;\n"
+" &lt;child&gt;\n"
+" &lt;object class=&quot;GtkCellRendererText&qu"
+"ot; id=&quot;cellrenderertext1&quot;/&gt;\n"
+" &lt;attributes&gt;\n"
+" &lt;attribute name=&quot;text&quot;&gt;0&lt"
+";/attribute&gt;\n"
+" &lt;/attributes&gt;\n"
+" &lt;/child&gt;\n"
+" &lt;/object&gt;\n"
+" &lt;/child&gt;\n"
+" &lt;/object&gt;\n"
+" &lt;packing&gt;\n"
+" &lt;property name=&quot;position&quot;&gt;1&lt;/pro"
+"perty&gt;\n"
+" &lt;/packing&gt;\n"
+" &lt;/child&gt;\n"
+" &lt;/object&gt;\n"
+" &lt;packing&gt;\n"
+" &lt;property name=&quot;position&quot;&gt;2&lt;/propert"
+"y&gt;\n"
+" &lt;/packing&gt;\n"
+" &lt;/child&gt;\n"
+" &lt;/object&gt;\n"
+" &lt;packing&gt;\n"
+" &lt;property name=&quot;expand&quot;&gt;False&lt;/property&"
+"gt;\n"
+" &lt;property name=&quot;position&quot;&gt;2&lt;/property&gt"
+";\n"
+" &lt;/packing&gt;\n"
+" &lt;/child&gt;\n"
+" &lt;child internal-child=&quot;action_area&quot;&gt;\n"
+" &lt;object class=&quot;GtkHButtonBox&quot; id=&quot;dialog-ac"
+"tion_area6&quot;&gt;\n"
+" &lt;property name=&quot;visible&quot;&gt;True&lt;/property&"
+"gt;\n"
+" &lt;property name=&quot;layout_style&quot;&gt;end&lt;/prope"
+"rty&gt;\n"
+" &lt;child&gt;\n"
+" &lt;object class=&quot;GtkButton&quot; id=&quot;source_ca"
+"ncel&quot;&gt;\n"
+" &lt;property name=&quot;label&quot; translatable=&quot;"
+"yes&quot;&gt;gtk-cancel&lt;/property&gt;\n"
+" &lt;property name=&quot;visible&quot;&gt;True&lt;/prope"
+"rty&gt;\n"
+" &lt;property name=&quot;can_focus&quot;&gt;True&lt;/pro"
+"perty&gt;\n"
+" &lt;property name=&quot;can_default&quot;&gt;True&lt;/p"
+"roperty&gt;\n"
+" &lt;property name=&quot;has_default&quot;&gt;True&lt;/p"
+"roperty&gt;\n"
+" &lt;property name=&quot;receives_default&quot;&gt;True&"
+"lt;/property&gt;\n"
+" &lt;property name=&quot;use_stock&quot;&gt;True&lt;/pro"
+"perty&gt;\n"
+" &lt;/object&gt;\n"
+" &lt;packing&gt;\n"
+" &lt;property name=&quot;position&quot;&gt;0&lt;/propert"
+"y&gt;\n"
+" &lt;/packing&gt;\n"
+" &lt;/child&gt;\n"
+" &lt;child&gt;\n"
+" &lt;object class=&quot;GtkButton&quot; id=&quot;source_ok"
+"&quot;&gt;\n"
+" &lt;property name=&quot;label&quot; translatable=&quot;"
+"yes&quot;&gt;gtk-ok&lt;/property&gt;\n"
+" &lt;property name=&quot;visible&quot;&gt;True&lt;/prope"
+"rty&gt;\n"
+" &lt;property name=&quot;can_focus&quot;&gt;True&lt;/pro"
+"perty&gt;\n"
+" &lt;property name=&quot;can_default&quot;&gt;True&lt;/p"
+"roperty&gt;\n"
+" &lt;property name=&quot;has_default&quot;&gt;True&lt;/p"
+"roperty&gt;\n"
+" &lt;property name=&quot;receives_default&quot;&gt;True&"
+"lt;/property&gt;\n"
+" &lt;property name=&quot;use_stock&quot;&gt;True&lt;/pro"
+"perty&gt;\n"
+" &lt;/object&gt;\n"
+" &lt;packing&gt;\n"
+" &lt;property name=&quot;position&quot;&gt;1&lt;/propert"
+"y&gt;\n"
+" &lt;/packing&gt;\n"
+" &lt;/child&gt;\n"
+" &lt;/object&gt;\n"
+" &lt;packing&gt;\n"
+" &lt;property name=&quot;expand&quot;&gt;False&lt;/property&"
+"gt;\n"
+" &lt;property name=&quot;pack_type&quot;&gt;end&lt;/property"
+"&gt;\n"
+" &lt;property name=&quot;position&quot;&gt;0&lt;/property&gt"
+";\n"
+" &lt;/packing&gt;\n"
+" &lt;/child&gt;\n"
+" &lt;/object&gt;\n"
+" &lt;/child&gt;\n"
+" &lt;action-widgets&gt;\n"
+" &lt;action-widget response=&quot;-6&quot;&gt;source_cancel&lt;/ac"
+"tion-widget&gt;\n"
+" &lt;action-widget response=&quot;-3&quot;&gt;source_ok&lt;/action"
+"-widget&gt;\n"
+" &lt;/action-widgets&gt;\n"
+" &lt;/object&gt;\n"
"&lt;/interface&gt;\n"
"</string>\n"
" <key>icons</key>\n"
@@ -11147,6 +11427,8 @@
" <integer>0</integer>\n"
" <key>scale_width</key>\n"
" <integer>0</integer>\n"
+" <key>single_title</key>\n"
+" <integer>1</integer>\n"
" <key>start_chapter</key>\n"
" <integer>1</integer>\n"
" <key>start_frame</key>\n"
@@ -11205,7 +11487,7 @@
" <key>LoggingLevel</key>\n"
" <string>1</string>\n"
" <key>VideoQualityGranularity</key>\n"
-" <string>0.2</string>\n"
+" <string>1</string>\n"
" <key>allow_tweaks</key>\n"
" <false />\n"
" <key>chapters_in_destination</key>\n"
diff --git a/gtk/src/resources.plist b/gtk/src/resources.plist
index 11fa87c5b..d0bc0c2f2 100644
--- a/gtk/src/resources.plist
+++ b/gtk/src/resources.plist
@@ -190,6 +190,14 @@
&lt;property name=&quot;page_size&quot;&gt;0&lt;/property&gt;
&lt;property name=&quot;value&quot;&gt;0&lt;/property&gt;
&lt;/object&gt;
+ &lt;object class=&quot;GtkAdjustment&quot; id=&quot;adjustment24&quot;&gt;
+ &lt;property name=&quot;upper&quot;&gt;100&lt;/property&gt;
+ &lt;property name=&quot;lower&quot;&gt;1&lt;/property&gt;
+ &lt;property name=&quot;page_increment&quot;&gt;1&lt;/property&gt;
+ &lt;property name=&quot;step_increment&quot;&gt;1&lt;/property&gt;
+ &lt;property name=&quot;page_size&quot;&gt;0&lt;/property&gt;
+ &lt;property name=&quot;value&quot;&gt;1&lt;/property&gt;
+ &lt;/object&gt;
&lt;object class=&quot;GtkAdjustment&quot; id=&quot;preview_progress_adj&quot;&gt;
&lt;property name=&quot;upper&quot;&gt;100&lt;/property&gt;
&lt;property name=&quot;lower&quot;&gt;0&lt;/property&gt;
@@ -223,6 +231,14 @@
&lt;/object&gt;
&lt;/child&gt;
&lt;child&gt;
+ &lt;object class=&quot;GtkAction&quot; id=&quot;source_single&quot;&gt;
+ &lt;property name=&quot;icon-name&quot;&gt;gtk-open&lt;/property&gt;
+ &lt;property name=&quot;name&quot;&gt;source_single&lt;/property&gt;
+ &lt;property name=&quot;label&quot;&gt;Single _Title&lt;/property&gt;
+ &lt;signal handler=&quot;single_title_source_cb&quot; name=&quot;activate&quot;/&gt;
+ &lt;/object&gt;
+ &lt;/child&gt;
+ &lt;child&gt;
&lt;object class=&quot;GtkAction&quot; id=&quot;destination1&quot;&gt;
&lt;property name=&quot;stock_id&quot;&gt;gtk-save-as&lt;/property&gt;
&lt;property name=&quot;name&quot;&gt;destination1&lt;/property&gt;
@@ -359,6 +375,7 @@
&lt;menubar name=&quot;menubar1&quot;&gt;
&lt;menu action=&quot;menuitem1&quot;&gt;
&lt;menuitem action=&quot;source1&quot;/&gt;
+ &lt;menuitem action=&quot;source_single&quot;/&gt;
&lt;menuitem action=&quot;destination1&quot;/&gt;
&lt;separator/&gt;
&lt;menuitem action=&quot;preferences&quot;/&gt;
@@ -385,6 +402,12 @@
&lt;/menubar&gt;
&lt;/ui&gt;
&lt;/object&gt;
+ &lt;object class=&quot;GtkListStore&quot; id=&quot;device_list&quot;&gt;
+ &lt;columns&gt;
+ &lt;!-- column-name device --&gt;
+ &lt;column type=&quot;gchararray&quot;/&gt;
+ &lt;/columns&gt;
+ &lt;/object&gt;
&lt;object class=&quot;GtkWindow&quot; id=&quot;hb_window&quot;&gt;
&lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
&lt;property name=&quot;title&quot; translatable=&quot;yes&quot;&gt;HandBrake&lt;/property&gt;
@@ -5390,6 +5413,168 @@ libxvidcore authors:
&lt;action-widget response=&quot;0&quot;&gt;update_remind&lt;/action-widget&gt;
&lt;/action-widgets&gt;
&lt;/object&gt;
+ &lt;object class=&quot;GtkFileChooserDialog&quot; id=&quot;source_dialog&quot;&gt;
+ &lt;property name=&quot;border_width&quot;&gt;5&lt;/property&gt;
+ &lt;property name=&quot;modal&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;type_hint&quot;&gt;dialog&lt;/property&gt;
+ &lt;property name=&quot;skip_taskbar_hint&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;skip_pager_hint&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;has_separator&quot;&gt;False&lt;/property&gt;
+ &lt;signal handler=&quot;chooser_file_selected_cb&quot; name=&quot;selection-changed&quot;/&gt;
+ &lt;child internal-child=&quot;vbox&quot;&gt;
+ &lt;object class=&quot;GtkVBox&quot; id=&quot;dialog-vbox6&quot;&gt;
+ &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;spacing&quot;&gt;2&lt;/property&gt;
+ &lt;child&gt;
+ &lt;object class=&quot;GtkVBox&quot; id=&quot;source_extra&quot;&gt;
+ &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
+ &lt;child&gt;
+ &lt;object class=&quot;GtkHBox&quot; id=&quot;single_title_box&quot;&gt;
+ &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;spacing&quot;&gt;4&lt;/property&gt;
+ &lt;child&gt;
+ &lt;object class=&quot;GtkLabel&quot; id=&quot;label89&quot;&gt;
+ &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;label&quot; translatable=&quot;yes&quot;&gt;Title Number:&lt;/property&gt;
+ &lt;/object&gt;
+ &lt;packing&gt;
+ &lt;property name=&quot;expand&quot;&gt;False&lt;/property&gt;
+ &lt;property name=&quot;position&quot;&gt;0&lt;/property&gt;
+ &lt;/packing&gt;
+ &lt;/child&gt;
+ &lt;child&gt;
+ &lt;object class=&quot;GtkAlignment&quot; id=&quot;alignment1&quot;&gt;
+ &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;xalign&quot;&gt;0&lt;/property&gt;
+ &lt;property name=&quot;xscale&quot;&gt;0&lt;/property&gt;
+ &lt;child&gt;
+ &lt;object class=&quot;GtkSpinButton&quot; id=&quot;single_title&quot;&gt;
+ &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;can_focus&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;events&quot;&gt;GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK&lt;/property&gt;
+ &lt;property name=&quot;adjustment&quot;&gt;adjustment24&lt;/property&gt;
+ &lt;signal name=&quot;value_changed&quot; handler=&quot;setting_widget_changed_cb&quot;/&gt;
+ &lt;/object&gt;
+ &lt;/child&gt;
+ &lt;/object&gt;
+ &lt;packing&gt;
+ &lt;property name=&quot;position&quot;&gt;1&lt;/property&gt;
+ &lt;/packing&gt;
+ &lt;/child&gt;
+ &lt;/object&gt;
+ &lt;packing&gt;
+ &lt;property name=&quot;position&quot;&gt;0&lt;/property&gt;
+ &lt;/packing&gt;
+ &lt;/child&gt;
+ &lt;child&gt;
+ &lt;object class=&quot;GtkCheckButton&quot; id=&quot;source_folder_flag&quot;&gt;
+ &lt;property name=&quot;label&quot; translatable=&quot;yes&quot;&gt;Open VIDEO_TS folder&lt;/property&gt;
+ &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;can_focus&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;receives_default&quot;&gt;False&lt;/property&gt;
+ &lt;property name=&quot;events&quot;&gt;GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK&lt;/property&gt;
+ &lt;property name=&quot;xalign&quot;&gt;0&lt;/property&gt;
+ &lt;property name=&quot;draw_indicator&quot;&gt;True&lt;/property&gt;
+ &lt;signal handler=&quot;source_type_changed_cb&quot; name=&quot;toggled&quot;/&gt;
+ &lt;/object&gt;
+ &lt;packing&gt;
+ &lt;property name=&quot;position&quot;&gt;1&lt;/property&gt;
+ &lt;/packing&gt;
+ &lt;/child&gt;
+ &lt;child&gt;
+ &lt;object class=&quot;GtkHBox&quot; id=&quot;hbox74&quot;&gt;
+ &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;spacing&quot;&gt;4&lt;/property&gt;
+ &lt;child&gt;
+ &lt;object class=&quot;GtkLabel&quot; id=&quot;label90&quot;&gt;
+ &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;label&quot; translatable=&quot;yes&quot;&gt;Detected DVD devices:&lt;/property&gt;
+ &lt;/object&gt;
+ &lt;packing&gt;
+ &lt;property name=&quot;expand&quot;&gt;False&lt;/property&gt;
+ &lt;property name=&quot;position&quot;&gt;0&lt;/property&gt;
+ &lt;/packing&gt;
+ &lt;/child&gt;
+ &lt;child&gt;
+ &lt;object class=&quot;GtkAlignment&quot; id=&quot;alignment2&quot;&gt;
+ &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;xalign&quot;&gt;0&lt;/property&gt;
+ &lt;property name=&quot;xscale&quot;&gt;0&lt;/property&gt;
+ &lt;child&gt;
+ &lt;object class=&quot;GtkComboBox&quot; id=&quot;source_device&quot;&gt;
+ &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;model&quot;&gt;device_list&lt;/property&gt;
+ &lt;signal handler=&quot;dvd_device_changed_cb&quot; name=&quot;changed&quot;/&gt;
+ &lt;child&gt;
+ &lt;object class=&quot;GtkCellRendererText&quot; id=&quot;cellrenderertext1&quot;/&gt;
+ &lt;attributes&gt;
+ &lt;attribute name=&quot;text&quot;&gt;0&lt;/attribute&gt;
+ &lt;/attributes&gt;
+ &lt;/child&gt;
+ &lt;/object&gt;
+ &lt;/child&gt;
+ &lt;/object&gt;
+ &lt;packing&gt;
+ &lt;property name=&quot;position&quot;&gt;1&lt;/property&gt;
+ &lt;/packing&gt;
+ &lt;/child&gt;
+ &lt;/object&gt;
+ &lt;packing&gt;
+ &lt;property name=&quot;position&quot;&gt;2&lt;/property&gt;
+ &lt;/packing&gt;
+ &lt;/child&gt;
+ &lt;/object&gt;
+ &lt;packing&gt;
+ &lt;property name=&quot;expand&quot;&gt;False&lt;/property&gt;
+ &lt;property name=&quot;position&quot;&gt;2&lt;/property&gt;
+ &lt;/packing&gt;
+ &lt;/child&gt;
+ &lt;child internal-child=&quot;action_area&quot;&gt;
+ &lt;object class=&quot;GtkHButtonBox&quot; id=&quot;dialog-action_area6&quot;&gt;
+ &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;layout_style&quot;&gt;end&lt;/property&gt;
+ &lt;child&gt;
+ &lt;object class=&quot;GtkButton&quot; id=&quot;source_cancel&quot;&gt;
+ &lt;property name=&quot;label&quot; translatable=&quot;yes&quot;&gt;gtk-cancel&lt;/property&gt;
+ &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;can_focus&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;can_default&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;has_default&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;receives_default&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;use_stock&quot;&gt;True&lt;/property&gt;
+ &lt;/object&gt;
+ &lt;packing&gt;
+ &lt;property name=&quot;position&quot;&gt;0&lt;/property&gt;
+ &lt;/packing&gt;
+ &lt;/child&gt;
+ &lt;child&gt;
+ &lt;object class=&quot;GtkButton&quot; id=&quot;source_ok&quot;&gt;
+ &lt;property name=&quot;label&quot; translatable=&quot;yes&quot;&gt;gtk-ok&lt;/property&gt;
+ &lt;property name=&quot;visible&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;can_focus&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;can_default&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;has_default&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;receives_default&quot;&gt;True&lt;/property&gt;
+ &lt;property name=&quot;use_stock&quot;&gt;True&lt;/property&gt;
+ &lt;/object&gt;
+ &lt;packing&gt;
+ &lt;property name=&quot;position&quot;&gt;1&lt;/property&gt;
+ &lt;/packing&gt;
+ &lt;/child&gt;
+ &lt;/object&gt;
+ &lt;packing&gt;
+ &lt;property name=&quot;expand&quot;&gt;False&lt;/property&gt;
+ &lt;property name=&quot;pack_type&quot;&gt;end&lt;/property&gt;
+ &lt;property name=&quot;position&quot;&gt;0&lt;/property&gt;
+ &lt;/packing&gt;
+ &lt;/child&gt;
+ &lt;/object&gt;
+ &lt;/child&gt;
+ &lt;action-widgets&gt;
+ &lt;action-widget response=&quot;-6&quot;&gt;source_cancel&lt;/action-widget&gt;
+ &lt;action-widget response=&quot;-3&quot;&gt;source_ok&lt;/action-widget&gt;
+ &lt;/action-widgets&gt;
+ &lt;/object&gt;
&lt;/interface&gt;
</string>
<key>icons</key>
@@ -5534,6 +5719,8 @@ R2RrUAAABBgBAQACAAAAQAAAABAAAAAQ////AP///wD///8A////AP///wD///8A////AP///wD///8A
<integer>0</integer>
<key>scale_width</key>
<integer>0</integer>
+ <key>single_title</key>
+ <integer>1</integer>
<key>start_chapter</key>
<integer>1</integer>
<key>start_frame</key>
@@ -5592,7 +5779,7 @@ R2RrUAAABBgBAQACAAAAQAAAABAAAAAQ////AP///wD///8A////AP///wD///8A////AP///wD///8A
<key>LoggingLevel</key>
<string>1</string>
<key>VideoQualityGranularity</key>
- <string>0.2</string>
+ <string>1</string>
<key>allow_tweaks</key>
<false />
<key>chapters_in_destination</key>