summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gtk/configure.ac5
-rw-r--r--gtk/src/Makefile.am13
-rw-r--r--gtk/src/audiohandler.c49
-rw-r--r--gtk/src/callbacks.c165
-rw-r--r--gtk/src/ghb3.ui (renamed from gtk/src/ghb.m4)1092
-rw-r--r--gtk/src/ghb4.ui8026
-rw-r--r--gtk/src/ghbcellrenderertext.c13
-rw-r--r--gtk/src/ghbcompat.c36
-rw-r--r--gtk/src/ghbcompat.h246
-rw-r--r--gtk/src/hb-backend.c7
-rw-r--r--gtk/src/main.c80
-rw-r--r--gtk/src/presets.c156
-rw-r--r--gtk/src/preview.c181
-rw-r--r--gtk/src/queuehandler.c150
-rw-r--r--gtk/src/settings.c8
15 files changed, 9123 insertions, 1104 deletions
diff --git a/gtk/configure.ac b/gtk/configure.ac
index f943729bf..1c2119585 100644
--- a/gtk/configure.ac
+++ b/gtk/configure.ac
@@ -125,13 +125,14 @@ esac
PKG_PROG_PKG_CONFIG
-#PKG_CHECK_MODULES([GHB_GTK_4_0], [gtk+-4.0 >= 3.92], [HAVE_GTK_400=1], [HAVE_GTK_400=0])
+PKG_CHECK_MODULES([GHB_GTK_4_0], [gtk4 >= 3.92], [HAVE_GTK_400=1], [HAVE_GTK_400=0])
+# GTK4 disabled until stable release
HAVE_GTK_400=0
PKG_CHECK_MODULES([GHB_GTK_3_16], [gtk+-3.0 >= 3.16], [HAVE_GTK_316=1], [HAVE_GTK_316=0])
PKG_CHECK_MODULES([GHB_GTK_3_14], [gtk+-3.0 >= 3.14], [HAVE_GTK_314=1], [HAVE_GTK_314=0])
PKG_CHECK_MODULES([GHB_GTK_3_12], [gtk+-3.0 >= 3.12], [HAVE_GTK_312=1], [HAVE_GTK_312=0])
if test "$HAVE_GTK_400" -eq 1 ; then
- GHB_PACKAGES="gtk+-4.0 $GHB_PACKAGES"
+ GHB_PACKAGES="gtk4 $GHB_PACKAGES"
else
GHB_PACKAGES="gtk+-3.0 $GHB_PACKAGES"
fi
diff --git a/gtk/src/Makefile.am b/gtk/src/Makefile.am
index e91c0cce8..d5cc6055d 100644
--- a/gtk/src/Makefile.am
+++ b/gtk/src/Makefile.am
@@ -65,6 +65,8 @@ bin_PROGRAMS = ghb
nodist_EXTRA_ghb_SOURCES = dummy.cpp
ghb_SOURCES = \
+ ghbcompat.c \
+ ghbcompat.h \
callbacks.c \
callbacks.h \
queuehandler.c \
@@ -143,27 +145,32 @@ data_res.h : data_res.gresource.xml $(srcdir)/internal_defaults.json widget.deps
if GHB_GTK_4_00
UI=400
+UI_FILE=ghb4.ui
else
if GHB_GTK_3_16
UI=316
+UI_FILE=ghb3.ui
else
if GHB_GTK_3_14
UI=314
+UI_FILE=ghb3.ui
else
if GHB_GTK_3_12
UI=312
+UI_FILE=ghb3.ui
else
UI=300
+UI_FILE=ghb3.ui
endif
endif
endif
endif
-ui_res.c : ui_res.gresource.xml ui_res.h $(srcdir)/ghb.m4
+ui_res.c : ui_res.gresource.xml ui_res.h $(srcdir)/$(UI_FILE)
glib-compile-resources --generate --target=$@ --c-name ghb_ui --manual-register $<
-ui_res.h : ui_res.gresource.xml $(srcdir)/ghb.m4
- m4 -Dgtk_version=$(UI) $(srcdir)/ghb.m4 > ghb.ui
+ui_res.h : ui_res.gresource.xml $(srcdir)/$(UI_FILE)
+ cp $(srcdir)/$(UI_FILE) ghb.ui
glib-compile-resources --generate --target=$@ --c-name ghb_ui --manual-register $<
ui_res.o: ui_res.h ui_res.c
diff --git a/gtk/src/audiohandler.c b/gtk/src/audiohandler.c
index c4dbac716..cab1ff0ca 100644
--- a/gtk/src/audiohandler.c
+++ b/gtk/src/audiohandler.c
@@ -1743,7 +1743,7 @@ GtkWidget * ghb_create_audio_settings_row(signal_user_data_t *ud)
gtk_widget_set_name(GTK_WIDGET(button), "add_button");
gtk_widget_hide(GTK_WIDGET(button));
g_signal_connect(button, "clicked", (GCallback)audio_def_setting_add_cb, ud);
- ghb_box_pack_start(box, GTK_WIDGET(button));
+ ghb_box_append_child(box, GTK_WIDGET(button));
// Hidden widgets box
box2 = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0));
@@ -1764,7 +1764,7 @@ GtkWidget * ghb_create_audio_settings_row(signal_user_data_t *ud)
gtk_widget_set_name(GTK_WIDGET(combo), "AudioEncoder");
gtk_widget_show(GTK_WIDGET(combo));
g_signal_connect(combo, "changed", (GCallback)audio_def_encoder_changed_cb, ud);
- ghb_box_pack_start(box2, GTK_WIDGET(combo));
+ ghb_box_append_child(box2, GTK_WIDGET(combo));
box3 = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0));
gtk_widget_set_name(GTK_WIDGET(box3), "br_q_box");
@@ -1776,15 +1776,15 @@ GtkWidget * ghb_create_audio_settings_row(signal_user_data_t *ud)
radio = GTK_RADIO_BUTTON(gtk_radio_button_new_with_label(NULL, _("Bitrate")));
gtk_widget_set_name(GTK_WIDGET(radio), "AudioTrackBitrateEnable");
gtk_widget_show(GTK_WIDGET(radio));
- ghb_box_pack_start(vbox, GTK_WIDGET(radio));
+ ghb_box_append_child(vbox, GTK_WIDGET(radio));
radio = GTK_RADIO_BUTTON(
gtk_radio_button_new_with_label_from_widget(radio, _("Quality")));
gtk_widget_set_name(GTK_WIDGET(radio), "AudioTrackQualityEnable");
g_signal_connect(radio, "toggled", (GCallback)audio_def_quality_enable_changed_cb, ud);
gtk_widget_show(GTK_WIDGET(radio));
- ghb_box_pack_start(vbox, GTK_WIDGET(radio));
+ ghb_box_append_child(vbox, GTK_WIDGET(radio));
gtk_widget_show(GTK_WIDGET(vbox));
- ghb_box_pack_start(box3, GTK_WIDGET(vbox));
+ ghb_box_append_child(box3, GTK_WIDGET(vbox));
// Audio Bitrate ComboBox
combo = GTK_COMBO_BOX(gtk_combo_box_new());
@@ -1797,7 +1797,7 @@ GtkWidget * ghb_create_audio_settings_row(signal_user_data_t *ud)
gtk_widget_set_name(GTK_WIDGET(combo), "AudioBitrate");
gtk_widget_show(GTK_WIDGET(combo));
g_signal_connect(combo, "changed", (GCallback)audio_def_encode_setting_changed_cb, ud);
- ghb_box_pack_start(box3, GTK_WIDGET(combo));
+ ghb_box_append_child(box3, GTK_WIDGET(combo));
GtkBox *qbox;
qbox = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0));
@@ -1815,8 +1815,7 @@ GtkWidget * ghb_create_audio_settings_row(signal_user_data_t *ud)
"weather-clear",
NULL
};
- scale = GTK_SCALE_BUTTON(gtk_scale_button_new(GTK_ICON_SIZE_BUTTON,
- 0, 10, 0.1, quality_icons));
+ scale = GTK_SCALE_BUTTON(ghb_scale_button_new(0, 10, 0.1, quality_icons));
gtk_widget_set_tooltip_markup(GTK_WIDGET(scale),
_("<b>Audio Quality:</b>\n"
"For encoders that support it, adjust the quality of the output."));
@@ -1825,7 +1824,7 @@ GtkWidget * ghb_create_audio_settings_row(signal_user_data_t *ud)
gtk_widget_set_name(GTK_WIDGET(scale), "AudioTrackQualityX");
gtk_widget_show(GTK_WIDGET(scale));
g_signal_connect(scale, "value-changed", (GCallback)audio_def_quality_changed_cb, ud);
- ghb_box_pack_start(qbox, GTK_WIDGET(scale));
+ ghb_box_append_child(qbox, GTK_WIDGET(scale));
// Audio Quality Label
label = GTK_LABEL(gtk_label_new("0.00"));
@@ -1834,10 +1833,10 @@ GtkWidget * ghb_create_audio_settings_row(signal_user_data_t *ud)
gtk_widget_set_valign(GTK_WIDGET(label), GTK_ALIGN_CENTER);
gtk_widget_set_name(GTK_WIDGET(label), "AudioTrackQualityValue");
gtk_widget_show(GTK_WIDGET(label));
- ghb_box_pack_start(qbox, GTK_WIDGET(label));
+ ghb_box_append_child(qbox, GTK_WIDGET(label));
gtk_widget_hide(GTK_WIDGET(qbox));
- ghb_box_pack_start(box3, GTK_WIDGET(qbox));
- ghb_box_pack_start(box2, GTK_WIDGET(box3));
+ ghb_box_append_child(box3, GTK_WIDGET(qbox));
+ ghb_box_append_child(box2, GTK_WIDGET(box3));
// Audio Mix ComboBox
combo = GTK_COMBO_BOX(gtk_combo_box_new());
@@ -1850,7 +1849,7 @@ GtkWidget * ghb_create_audio_settings_row(signal_user_data_t *ud)
gtk_widget_set_name(GTK_WIDGET(combo), "AudioMixdown");
gtk_widget_show(GTK_WIDGET(combo));
g_signal_connect(combo, "changed", (GCallback)audio_def_encode_setting_changed_cb, ud);
- ghb_box_pack_start(box2, GTK_WIDGET(combo));
+ ghb_box_append_child(box2, GTK_WIDGET(combo));
// Audio Sample Rate ComboBox
combo = GTK_COMBO_BOX(gtk_combo_box_new());
@@ -1863,7 +1862,7 @@ GtkWidget * ghb_create_audio_settings_row(signal_user_data_t *ud)
gtk_widget_set_name(GTK_WIDGET(combo), "AudioSamplerate");
gtk_widget_show(GTK_WIDGET(combo));
g_signal_connect(combo, "changed", (GCallback)audio_def_encode_setting_changed_cb, ud);
- ghb_box_pack_start(box2, GTK_WIDGET(combo));
+ ghb_box_append_child(box2, GTK_WIDGET(combo));
box3 = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0));
gtk_widget_set_name(GTK_WIDGET(box3), "gain_box");
@@ -1877,8 +1876,7 @@ GtkWidget * ghb_create_audio_settings_row(signal_user_data_t *ud)
"audio-volume-medium",
NULL
};
- scale = GTK_SCALE_BUTTON(gtk_scale_button_new(GTK_ICON_SIZE_BUTTON,
- -20, 21, 1, gain_icons));
+ scale = GTK_SCALE_BUTTON(ghb_scale_button_new(-20, 21, 1, gain_icons));
gtk_widget_set_tooltip_markup(GTK_WIDGET(scale),
_("<b>Audio Gain:</b> "
"Adjust the amplification or attenuation of the output audio track."));
@@ -1887,7 +1885,7 @@ GtkWidget * ghb_create_audio_settings_row(signal_user_data_t *ud)
gtk_widget_set_name(GTK_WIDGET(scale), "AudioTrackGainSlider");
gtk_widget_show(GTK_WIDGET(scale));
g_signal_connect(scale, "value-changed", (GCallback)audio_def_gain_changed_cb, ud);
- ghb_box_pack_start(box3, GTK_WIDGET(scale));
+ ghb_box_append_child(box3, GTK_WIDGET(scale));
// Audio Gain Label
label = GTK_LABEL(gtk_label_new(_("0dB")));
@@ -1896,8 +1894,8 @@ GtkWidget * ghb_create_audio_settings_row(signal_user_data_t *ud)
gtk_widget_set_valign(GTK_WIDGET(label), GTK_ALIGN_CENTER);
gtk_widget_set_name(GTK_WIDGET(label), "AudioTrackGainValue");
gtk_widget_show(GTK_WIDGET(label));
- ghb_box_pack_start(box3, GTK_WIDGET(label));
- ghb_box_pack_start(box2, GTK_WIDGET(box3));
+ ghb_box_append_child(box3, GTK_WIDGET(label));
+ ghb_box_append_child(box2, GTK_WIDGET(box3));
box3 = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0));
gtk_widget_set_name(GTK_WIDGET(box3), "drc_box");
@@ -1908,8 +1906,7 @@ GtkWidget * ghb_create_audio_settings_row(signal_user_data_t *ud)
"audio-input-microphone",
NULL
};
- scale = GTK_SCALE_BUTTON(gtk_scale_button_new(GTK_ICON_SIZE_BUTTON,
- 0.9, 4, 0.1, drc_icons));
+ scale = GTK_SCALE_BUTTON(ghb_scale_button_new(0.9, 4, 0.1, drc_icons));
gtk_widget_set_tooltip_markup(GTK_WIDGET(scale),
_("<b>Dynamic Range Compression:</b> "
"Adjust the dynamic range of the output audio track.\n\n"
@@ -1922,7 +1919,7 @@ GtkWidget * ghb_create_audio_settings_row(signal_user_data_t *ud)
gtk_widget_set_name(GTK_WIDGET(scale), "AudioTrackDRCSlider");
gtk_widget_show(GTK_WIDGET(scale));
g_signal_connect(scale, "value-changed", (GCallback)audio_def_drc_changed_cb, ud);
- ghb_box_pack_start(box3, GTK_WIDGET(scale));
+ ghb_box_append_child(box3, GTK_WIDGET(scale));
// Audio DRC Label
label = GTK_LABEL(gtk_label_new(_("Off")));
@@ -1931,8 +1928,8 @@ GtkWidget * ghb_create_audio_settings_row(signal_user_data_t *ud)
gtk_widget_set_valign(GTK_WIDGET(label), GTK_ALIGN_CENTER);
gtk_widget_set_name(GTK_WIDGET(label), "AudioTrackDRCValue");
gtk_widget_show(GTK_WIDGET(label));
- ghb_box_pack_start(box3, GTK_WIDGET(label));
- ghb_box_pack_start(box2, GTK_WIDGET(box3));
+ ghb_box_append_child(box3, GTK_WIDGET(label));
+ ghb_box_append_child(box2, GTK_WIDGET(box3));
// Remove button
button = GTK_BUTTON(gtk_button_new());
@@ -1947,10 +1944,10 @@ GtkWidget * ghb_create_audio_settings_row(signal_user_data_t *ud)
gtk_widget_set_name(GTK_WIDGET(button), "remove_button");
gtk_widget_show(GTK_WIDGET(button));
g_signal_connect(button, "clicked", (GCallback)audio_def_setting_remove_cb, ud);
- ghb_box_pack_start(box2, GTK_WIDGET(button));
+ ghb_box_append_child(box2, GTK_WIDGET(button));
gtk_widget_show(GTK_WIDGET(box2));
- ghb_box_pack_start(box, GTK_WIDGET(box2));
+ ghb_box_append_child(box, GTK_WIDGET(box2));
gtk_widget_show(GTK_WIDGET(box));
diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c
index 1304421ca..6138d280f 100644
--- a/gtk/src/callbacks.c
+++ b/gtk/src/callbacks.c
@@ -62,7 +62,10 @@
#define NOTIFY_CHECK_VERSION(x,y,z) 0
#endif
+#if !GTK_CHECK_VERSION(3, 4, 0)
#include <gdk/gdkx.h>
+#endif
+
#ifndef NOTIFY_CHECK_VERSION
#define NOTIFY_CHECK_VERSION(x,y,z) 0
#endif
@@ -289,6 +292,7 @@ ghb_shutdown_gpm()
}
#endif
+#if !GTK_CHECK_VERSION(3, 4, 0)
guint
ghb_inhibit_gpm()
{
@@ -358,6 +362,7 @@ ghb_uninhibit_gpm(guint cookie)
g_object_unref(G_OBJECT(proxy));
#endif
}
+#endif
#if !defined(_WIN32)
// For inhibit and shutdown
@@ -435,6 +440,7 @@ ghb_shutdown_gsm()
#endif
}
+#if !GTK_CHECK_VERSION(3, 4, 0)
guint
ghb_inhibit_gsm(signal_user_data_t *ud)
{
@@ -508,6 +514,7 @@ ghb_uninhibit_gsm(guint cookie)
g_object_unref(G_OBJECT(proxy));
#endif
}
+#endif
enum {
GHB_SUSPEND_UNINHIBITED = 0,
@@ -559,8 +566,7 @@ ghb_uninhibit_suspend(signal_user_data_t *ud)
case GHB_SUSPEND_INHIBITED_GTK:
gtk_application_uninhibit(ud->app, suspend_cookie);
break;
-#endif
-
+#else
case GHB_SUSPEND_INHIBITED_GPM:
ghb_uninhibit_gpm(suspend_cookie);
break;
@@ -568,7 +574,7 @@ ghb_uninhibit_suspend(signal_user_data_t *ud)
case GHB_SUSPEND_INHIBITED_GSM:
ghb_uninhibit_gsm(suspend_cookie);
break;
-
+#endif
default:
break;
}
@@ -737,7 +743,7 @@ ghb_check_dependency(
{
if (!gtk_widget_get_visible(GTK_WIDGET(dep_object)))
{
- gtk_widget_show_now(GTK_WIDGET(dep_object));
+ gtk_widget_show(GTK_WIDGET(dep_object));
}
}
}
@@ -774,7 +780,7 @@ ghb_check_all_depencencies(signal_user_data_t *ud)
}
else
{
- gtk_widget_show_now(GTK_WIDGET(dep_object));
+ gtk_widget_show(GTK_WIDGET(dep_object));
}
}
}
@@ -1939,7 +1945,7 @@ ghb_update_destination_extension(signal_user_data_t *ud)
busy = TRUE;
extension = get_extension(ud, ud->settings);
entry = GTK_ENTRY(GHB_WIDGET(ud->builder, "dest_file"));
- filename = g_strdup(gtk_entry_get_text(entry));
+ filename = g_strdup(ghb_entry_get_text(entry));
for (ii = 0; containers[ii] != NULL; ii++)
{
if (g_str_has_suffix(filename, containers[ii]))
@@ -1975,7 +1981,7 @@ destination_select_title(GtkEntry *entry)
const gchar *dest;
gint start, end;
- dest = gtk_entry_get_text(entry);
+ dest = ghb_entry_get_text(entry);
for (end = strlen(dest)-1; end > 0; end--)
{
if (dest[end] == '.')
@@ -2091,7 +2097,7 @@ destination_action_cb(GSimpleAction *action, GVariant *param,
basename = g_path_get_basename(filename);
dirname = g_path_get_dirname(filename);
entry = (GtkEntry*)GHB_WIDGET(ud->builder, "dest_file");
- gtk_entry_set_text(entry, basename);
+ ghb_entry_set_text(entry, basename);
dest_chooser = GTK_FILE_CHOOSER(GHB_WIDGET(ud->builder, "dest_dir"));
gtk_file_chooser_set_filename(dest_chooser, dirname);
g_free (dirname);
@@ -2102,9 +2108,13 @@ destination_action_cb(GSimpleAction *action, GVariant *param,
}
G_MODULE_EXPORT gboolean
-window_destroy_event_cb(GtkWidget *widget, GdkEvent *event, signal_user_data_t *ud)
+window_destroy_event_cb(
+ GtkWidget *widget,
+#if !GTK_CHECK_VERSION(3, 90, 0)
+ GdkEvent *event,
+#endif
+ signal_user_data_t *ud)
{
- g_debug("window_destroy_event_cb ()");
ghb_hb_cleanup(FALSE);
prune_logs(ud);
g_application_quit(G_APPLICATION(ud->app));
@@ -2112,13 +2122,18 @@ window_destroy_event_cb(GtkWidget *widget, GdkEvent *event, signal_user_data_t *
}
G_MODULE_EXPORT gboolean
-window_delete_event_cb(GtkWidget *widget, GdkEvent *event, signal_user_data_t *ud)
+window_delete_event_cb(
+ GtkWidget *widget,
+#if !GTK_CHECK_VERSION(3, 90, 0)
+ GdkEvent *event,
+#endif
+ signal_user_data_t *ud)
{
gint state = ghb_get_queue_state();
- g_debug("window_delete_event_cb ()");
if (state & (GHB_STATE_WORKING|GHB_STATE_SEARCHING))
{
- if (ghb_cancel_encode2(ud, _("Closing HandBrake will terminate encoding.\n")))
+ if (ghb_cancel_encode2(ud,
+ _("Closing HandBrake will terminate encoding.\n")))
{
ghb_hb_cleanup(FALSE);
prune_logs(ud);
@@ -2300,7 +2315,7 @@ ghb_update_summary_info(signal_user_data_t *ud)
widget = GHB_WIDGET(ud->builder, "dimensions_summary");
gtk_label_set_text(GTK_LABEL(widget), "--");
widget = GHB_WIDGET(ud->builder, "preview_button_image");
- gtk_image_set_from_icon_name(GTK_IMAGE(widget), "hb-icon", 128);
+ ghb_image_set_from_icon_name(GTK_IMAGE(widget), "hb-icon", 128);
return;
}
@@ -2974,18 +2989,6 @@ title_angle_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
ghb_dict_set_int(source, "Angle", ghb_dict_get_int(ud->settings, "angle"));
}
-G_MODULE_EXPORT gboolean
-meta_focus_out_cb(GtkWidget *widget, GdkEventFocus *event,
- signal_user_data_t *ud)
-{
- const char *val;
-
- ghb_widget_to_setting(ud->settings, widget);
- val = ghb_dict_get_string(ud->settings, "MetaLongDescription");
- update_meta(ud->settings, "LongDescription", val);
- return FALSE;
-}
-
G_MODULE_EXPORT void
meta_name_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
@@ -3059,9 +3062,13 @@ meta_description_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
G_MODULE_EXPORT void
plot_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
- GtkWidget *textview;
+ GtkWidget * textview;
+ const char * val;
+
textview = GTK_WIDGET(GHB_WIDGET(ud->builder, "MetaLongDescription"));
ghb_widget_to_setting(ud->settings, textview);
+ val = ghb_dict_get_string(ud->settings, "MetaLongDescription");
+ update_meta(ud->settings, "LongDescription", val);
}
G_MODULE_EXPORT void
@@ -3169,7 +3176,7 @@ ptop_input_cb(GtkWidget *widget, gdouble *val, signal_user_data_t *ud)
double ss = 0;
int hh = 0, mm = 0;
- text = gtk_entry_get_text(GTK_ENTRY(widget));
+ text = ghb_entry_get_text(GTK_ENTRY(widget));
result = sscanf(text, "%2d:%2d:%lf", &hh, &mm, &ss);
if (result <= 0)
return FALSE;
@@ -3201,7 +3208,7 @@ ptop_output_cb(GtkWidget *widget, signal_user_data_t *ud)
value = value - mm * 60;
ss = value;
text = g_strdup_printf ("%02d:%02d:%05.2f", hh, mm, ss);
- gtk_entry_set_text(GTK_ENTRY(widget), text);
+ ghb_entry_set_text(GTK_ENTRY(widget), text);
g_free (text);
return TRUE;
@@ -4431,19 +4438,12 @@ show_activity_action_cb(GSimpleAction *action, GVariant *value,
}
G_MODULE_EXPORT gboolean
-presets_window_delete_cb(GtkWidget *xwidget, GdkEvent *event, signal_user_data_t *ud)
-{
- GSimpleAction * action;
- GVariant * state = g_variant_new_boolean(FALSE);
-
- action = G_SIMPLE_ACTION(g_action_map_lookup_action(
- G_ACTION_MAP(ud->app), "show-presets"));
- g_action_change_state(G_ACTION(action), state);
- return TRUE;
-}
-
-G_MODULE_EXPORT gboolean
-activity_window_delete_cb(GtkWidget *xwidget, GdkEvent *event, signal_user_data_t *ud)
+activity_window_delete_cb(
+ GtkWidget *xwidget,
+#if !GTK_CHECK_VERSION(3, 90, 0)
+ GdkEvent *event,
+#endif
+ signal_user_data_t *ud)
{
gtk_widget_set_visible(xwidget, FALSE);
GtkWidget *widget = GHB_WIDGET (ud->builder, "show_activity");
@@ -4531,12 +4531,6 @@ guide_action_cb(GSimpleAction *action, GVariant *param, signal_user_data_t *ud)
ghb_browse_uri(ud, HB_DOCS);
}
-G_MODULE_EXPORT void
-hb_about_response_cb(GtkWidget *widget, gint response, signal_user_data_t *ud)
-{
- gtk_widget_hide (widget);
-}
-
static void
update_queue_labels(signal_user_data_t *ud)
{
@@ -4566,7 +4560,6 @@ presets_window_set_visible(signal_user_data_t *ud, gboolean visible)
{
GtkWidget * presets_window;
GtkWidget * hb_window;
- int x, y;
hb_window = GHB_WIDGET(ud->builder, "hb_window");
if (!gtk_widget_is_visible(hb_window))
@@ -4584,6 +4577,11 @@ presets_window_set_visible(signal_user_data_t *ud, gboolean visible)
gtk_window_resize(GTK_WINDOW(presets_window), w, h);
}
gtk_widget_set_visible(presets_window, visible);
+
+#if !GTK_CHECK_VERSION(3, 90, 0)
+ // TODO: Is this possible in GTK4?
+ int x, y;
+
if (visible)
{
gtk_window_get_position(GTK_WINDOW(hb_window), &x, &y);
@@ -4595,6 +4593,7 @@ presets_window_set_visible(signal_user_data_t *ud, gboolean visible)
}
gtk_window_move(GTK_WINDOW(presets_window), x, y);
}
+#endif
}
G_MODULE_EXPORT void
@@ -4864,10 +4863,18 @@ activity_font_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
GtkCssProvider * provider = gtk_css_provider_new();
ghb_css_provider_load_from_data(provider, css, -1);
- GdkScreen *ss = gdk_screen_get_default();
+ GtkWidget * win = GHB_WIDGET(ud->builder, "hb_window");
+#if GTK_CHECK_VERSION(3, 90, 0)
+ GdkDisplay *dd = gtk_widget_get_display(win);
+ gtk_style_context_add_provider_for_display(dd,
+ GTK_STYLE_PROVIDER(provider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+#else
+ GdkScreen *ss = gtk_window_get_screen(GTK_WINDOW(win));
gtk_style_context_add_provider_for_screen(ss,
GTK_STYLE_PROVIDER(provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+#endif
g_object_unref(provider);
g_free(css);
#else
@@ -5312,6 +5319,24 @@ easter_egg_timeout_cb(button_click_t *bc)
return FALSE;
}
+G_MODULE_EXPORT void
+easter_egg_multi_cb(
+ GtkGestureMultiPress * gest,
+ gint n_press,
+ gdouble x,
+ gdouble y,
+ signal_user_data_t * ud)
+{
+ if (n_press == 3)
+ {
+ GtkWidget *widget;
+ widget = GHB_WIDGET(ud->builder, "allow_tweaks");
+ gtk_widget_show(widget);
+ widget = GHB_WIDGET(ud->builder, "hbfd_feature");
+ gtk_widget_show(widget);
+ }
+}
+
G_MODULE_EXPORT gboolean
easter_egg_cb(
GtkWidget *widget,
@@ -5612,41 +5637,24 @@ ghb_notify_done(signal_user_data_t *ud)
G_MODULE_EXPORT gboolean
window_map_cb(
GtkWidget *widget,
+#if !GTK_CHECK_VERSION(3, 90, 0)
GdkEventAny *event,
+#endif
signal_user_data_t *ud)
{
return FALSE;
}
-G_MODULE_EXPORT gboolean
-presets_window_configure_cb(
- GtkWidget *widget,
- GdkEventConfigure *event,
- signal_user_data_t *ud)
-{
- if (gtk_widget_get_visible(widget))
- {
- gint w, h, ww, wh;
- w = ghb_dict_get_int(ud->prefs, "presets_window_width");
- h = ghb_dict_get_int(ud->prefs, "presets_window_height");
-
- gtk_window_get_size(GTK_WINDOW(widget), &ww, &wh);
- if ( w != ww || h != wh )
- {
- ghb_dict_set_int(ud->prefs, "presets_window_width", ww);
- ghb_dict_set_int(ud->prefs, "presets_window_height", wh);
- ghb_pref_set(ud->prefs, "presets_window_width");
- ghb_pref_set(ud->prefs, "presets_window_height");
- ghb_prefs_store();
- }
- }
- return FALSE;
-}
-
-G_MODULE_EXPORT gboolean
-window_configure_cb(
+G_MODULE_EXPORT void
+hb_win_sz_alloc_cb(
GtkWidget *widget,
- GdkEventConfigure *event,
+#if GTK_CHECK_VERSION(3, 90, 0)
+ int width,
+ int height,
+ int baseline,
+#else
+ GdkRectangle *rect,
+#endif
signal_user_data_t *ud)
{
if (gtk_widget_get_visible(widget))
@@ -5665,7 +5673,6 @@ window_configure_cb(
ghb_prefs_store();
}
}
- return FALSE;
}
static void container_empty_cb(GtkWidget *widget, gpointer data)
diff --git a/gtk/src/ghb.m4 b/gtk/src/ghb3.ui
index 1eba6371a..1c175be0a 100644
--- a/gtk/src/ghb.m4
+++ b/gtk/src/ghb3.ui
@@ -1,13 +1,3 @@
-changequote(`[', `]')dnl
-define([filter_output],
- [ifelse(eval(gtk_version >= 400), 1,
- [patsubst([patsubst([$1], [\"image\"], [\"icon-name\"])],
- [^.*<property name\=\"events\">.*$], [])],
- [ifelse(eval(gtk_version <= 312), 1,
- [patsubst([patsubst([$1], [margin-start], [margin-left])],
- [margin-end], [margin-right])], [$1])]
- )])dnl
-filter_output([
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
@@ -153,7 +143,7 @@ conjunction with the "Forced" option.</property>
<property name="default_width">300</property>
<property name="default_height">600</property>
<signal name="delete-event" handler="presets_window_delete_cb" swapped="no"/>
- <signal name="configure-event" handler="presets_window_configure_cb" swapped="no"/>
+ <signal name="size-allocate" handler="presets_sz_alloc_cb" swapped="no"/>
<child>
<object class="GtkBox" id="presets_window_box">
<property name="orientation">vertical</property>
@@ -1848,7 +1838,6 @@ libx264 authors:
<property name="logo_icon_name">hb-icon</property>
<property name="wrap_license">True</property>
<signal name="delete-event" handler="gtk_widget_hide_on_delete" swapped="no"/>
- <signal name="response" handler="hb_about_response_cb" swapped="no"/>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox4">
<property name="visible">True</property>
@@ -1880,7 +1869,7 @@ libx264 authors:
<property name="default_height">400</property>
<property name="icon_name">hb-icon</property>
<signal name="map-event" handler="window_map_cb" swapped="no"/>
- <signal name="configure-event" handler="window_configure_cb" swapped="no"/>
+ <signal name="size-allocate" handler="hb_win_sz_alloc_cb" swapped="no"/>
<signal name="delete-event" handler="window_delete_event_cb" swapped="no"/>
<signal name="destroy-event" handler="window_destroy_event_cb" swapped="no"/>
<child>
@@ -3817,15 +3806,9 @@ Players will scale the image in order to achieve the specified aspect.</property
</packing>
</child>
<child>
-])dnl
-ifelse(eval(gtk_version < 312), 1, filter_output([
- <object class="GtkGrid" id="filter_tab">
-]), filter_output([
<object class="GtkFlowBox" id="filter_tab">
<property name="orientation">horizontal</property>
<property name="selection-mode">none</property>
-]))dnl
-filter_output([
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="column-spacing">4</property>
@@ -3892,16 +3875,6 @@ JunkLeft:JunkRight:JunkTop:JunkBottom:StrictBreaks:MetricPlane:Parity</property>
</packing>
</child>
</object>
-])dnl
-ifelse(eval(gtk_version < 312), 1, filter_output([
- <packing>
- <property name="top_attach">0</property>
- <property name="left_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
-]))dnl
-filter_output([
</child>
<child>
<object class="GtkGrid" id="comb_detect_grid">
@@ -3963,16 +3936,6 @@ Block Thresh: Block Width: Block Height</property>
</packing>
</child>
</object>
-])dnl
-ifelse(eval(gtk_version < 312), 1, filter_output([
- <packing>
- <property name="top_attach">0</property>
- <property name="left_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
-]))dnl
-filter_output([
</child>
<child>
<object class="GtkGrid" id="table14">
@@ -4067,16 +4030,6 @@ The deinterlace filter is a classic YADIF deinterlacer.
</packing>
</child>
</object>
-])dnl
-ifelse(eval(gtk_version < 312), 1, filter_output([
- <packing>
- <property name="top_attach">0</property>
- <property name="left_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
-]))dnl
-filter_output([
</child>
<child>
<object class="GtkGrid" id="table90">
@@ -4167,16 +4120,6 @@ strength=weak|strong:thresh=0-100:blocksize=4-512</property>
</packing>
</child>
</object>
-])dnl
-ifelse(eval(gtk_version < 312), 1, filter_output([
- <packing>
- <property name="top_attach">0</property>
- <property name="left_attach">3</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
-]))dnl
-filter_output([
</child>
<child>
<object class="GtkGrid" id="table1">
@@ -4302,16 +4245,6 @@ SpatialLuma:SpatialChroma:TemporalLuma:TemporalChroma</property>
</packing>
</child>
</object>
-])dnl
-ifelse(eval(gtk_version < 312), 1, filter_output([
- <packing>
- <property name="top_attach">1</property>
- <property name="left_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
-]))dnl
-filter_output([
</child>
<child>
<object class="GtkGrid" id="SharpenTable">
@@ -4434,16 +4367,6 @@ SpatialLuma:SpatialChroma:TemporalLuma:TemporalChroma</property>
</packing>
</child>
</object>
-])dnl
-ifelse(eval(gtk_version < 312), 1, filter_output([
- <packing>
- <property name="top_attach">1</property>
- <property name="left_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
-]))dnl
-filter_output([
</child>
<child>
<object class="GtkGrid" id="table16">
@@ -4485,16 +4408,6 @@ filter_output([
</packing>
</child>
</object>
-])dnl
-ifelse(eval(gtk_version < 312), 1, filter_output([
- <packing>
- <property name="top_attach">1</property>
- <property name="left_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
-]))dnl
-filter_output([
</child>
<child>
<object class="GtkCheckButton" id="VideoGrayScale">
@@ -4509,16 +4422,6 @@ filter_output([
<property name="draw_indicator">True</property>
<signal name="toggled" handler="setting_widget_changed_cb" swapped="no"/>
</object>
-])dnl
-ifelse(eval(gtk_version < 312), 1, filter_output([
- <packing>
- <property name="top_attach">1</property>
- <property name="left_attach">3</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
-]))dnl
-filter_output([
</child>
</object>
<packing>
@@ -5143,73 +5046,6 @@ Colon separated list of encoder options.</property>
<property name="margin_bottom">0</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
-])dnl
-ifelse(eval(gtk_version < 316), 1, filter_output([
- <child>
- <object class="GtkBox" id="audio_toggle_hbox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">horizontal</property>
- <property name="hexpand">False</property>
- <property name="vexpand">True</property>
- <child>
- <object class="GtkBox" id="audio_toggle_vbox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="hexpand">False</property>
- <property name="vexpand">True</property>
- <child>
- <object class="GtkToggleButton" id="audio_list_toggle">
- <property name="label" translatable="yes">Track List</property>
- <property name="active">True</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Show Output Audio Track List</property>
- <property name="receives_default">True</property>
- <property name="hexpand">True</property>
- <property name="halign">fill</property>
- <signal name="toggled" handler="audio_list_toggled_cb" swapped="no"/>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkToggleButton" id="audio_selection_toggle">
- <property name="label" translatable="yes">Track Selection</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Show Source Track Selection Options</property>
- <property name="receives_default">True</property>
- <property name="hexpand">True</property>
- <property name="halign">fill</property>
- <signal name="toggled" handler="audio_selection_toggled_cb" swapped="no"/>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkSeparator" id="audio_separator">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
-]), filter_output([
<child>
<object class="GtkStackSidebar" id="AudioStackSidebar">
<property name="visible">True</property>
@@ -5225,8 +5061,6 @@ ifelse(eval(gtk_version < 316), 1, filter_output([
<property name="position">0</property>
</packing>
</child>
-]))dnl
-filter_output([
<child>
<object class="GtkStack" id="AudioStack">
<property name="homogeneous">True</property>
@@ -5942,73 +5776,6 @@ This permits FLAC passthru to be selected when automatic passthru selection is e
<property name="margin_bottom">0</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
-])dnl
-ifelse(eval(gtk_version < 316), 1, filter_output([
- <child>
- <object class="GtkBox" id="subtitle_toggle_hbox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">horizontal</property>
- <property name="hexpand">False</property>
- <property name="vexpand">True</property>
- <child>
- <object class="GtkBox" id="subtitle_toggle_vbox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="hexpand">False</property>
- <property name="vexpand">True</property>
- <child>
- <object class="GtkToggleButton" id="subtitle_list_toggle">
- <property name="label" translatable="yes">Track List</property>
- <property name="active">True</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Show Output Subtitle Track List</property>
- <property name="receives_default">True</property>
- <property name="hexpand">True</property>
- <property name="halign">fill</property>
- <signal name="toggled" handler="subtitle_list_toggled_cb" swapped="no"/>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkToggleButton" id="subtitle_selection_toggle">
- <property name="label" translatable="yes">Track Selection</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">Show Source Track Selection Options</property>
- <property name="receives_default">True</property>
- <property name="hexpand">True</property>
- <property name="halign">fill</property>
- <signal name="toggled" handler="subtitle_selection_toggled_cb" swapped="no"/>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkSeparator" id="subtitle_separator">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
-]), filter_output([
<child>
<object class="GtkStackSidebar" id="SubtitleStackSidebar">
<property name="visible">True</property>
@@ -6024,8 +5791,6 @@ ifelse(eval(gtk_version < 316), 1, filter_output([
<property name="position">0</property>
</packing>
</child>
-]))dnl
-filter_output([
<child>
<object class="GtkStack" id="SubtitleStack">
<property name="homogeneous">True</property>
@@ -6904,7 +6669,6 @@ Only one subtitle track can be burned! Since conflicts can occur, the first chos
<property name="can_focus">True</property>
<property name="wrap_mode">char</property>
<property name="accepts_tab">False</property>
- <signal name="focus-out-event" handler="meta_focus_out_cb" swapped="no"/>
</object>
</child>
</object>
@@ -7087,34 +6851,75 @@ Only one subtitle track can be burned! Since conflicts can occur, the first chos
<property name="transient_for">hb_window</property>
<property name="can_focus">False</property>
<property name="type_hint">dialog</property>
+ <property name="deletable">False</property>
+ <property name="use-header-bar">1</property>
+ <child type="action">
+ <object class="GtkButton" id="title_add_multiple_cancel">
+ <property name="label" translatable="yes">Cancel</property>
+ <property name="image">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <child type="action">
+ <object class="GtkButton" id="title_add_multiple_ok">
+ <property name="label" translatable="yes">OK</property>
+ <property name="image">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="cancel">title_add_multiple_cancel</action-widget>
+ <action-widget response="ok">title_add_multiple_ok</action-widget>
+ </action-widgets>
<child internal-child="vbox">
- <object class="GtkBox" id="dialog_title_add_multiple_vbox1">
- <property name="can_focus">False</property>
+ <object class="GtkBox" id="title_add_multiple_vbox1">
<property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
<property name="spacing">2</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog_title_add_multiple_action_area1">
+ <child>
+ <object class="GtkBox" id="title_add_multiple_hbox1">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="layout_style">end</property>
+ <property name="spacing">6</property>
<child>
- <object class="GtkButton" id="title_add_multiple_cancel">
- <property name="label" translatable="yes">Cancel</property>
- <property name="image">gtk-cancel</property>
+ <object class="GtkCheckButton" id="title_add_multiple_select_all">
+ <property name="label" translatable="yes">Select All</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="receives_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Mark all titles for adding to the queue</property>
+ <property name="halign">start</property>
+ <property name="vexpand">False</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="title_add_multiple_select_all_cb" swapped="no"/>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkButton" id="title_add_multiple_ok">
- <property name="label" translatable="yes">OK</property>
- <property name="image">gtk-ok</property>
+ <object class="GtkCheckButton" id="title_add_multiple_clear_all">
+ <property name="label" translatable="yes">Clear All</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="receives_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Unmark all titles</property>
+ <property name="halign">start</property>
+ <property name="vexpand">False</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="title_add_multiple_clear_all_cb" swapped="no"/>
</object>
<packing>
<property name="position">1</property>
@@ -7122,121 +6927,55 @@ Only one subtitle track can be burned! Since conflicts can occur, the first chos
</child>
</object>
<packing>
- <property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkGrid" id="title_add_multiple_grid1">
+ <object class="GtkScrolledWindow" id="title_add_multiple_scrolledwindow">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
- <property name="margin_top">12</property>
- <property name="column_spacing">6</property>
- <property name="row-spacing">2</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="min_content_height">400</property>
<child>
- <object class="GtkScrolledWindow" id="title_add_multiple_scrolledwindow">
+ <object class="GtkListBox" id="title_add_multiple_list">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="min_content_height">400</property>
- <child>
- <object class="GtkListBox" id="title_add_multiple_list">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="vexpand">True</property>
- <property name="hexpand">True</property>
- <property name="selection_mode">none</property>
- <property name="activate_on_single_click">False</property>
- </object>
- </child>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="hexpand">True</property>
+ <property name="selection_mode">none</property>
+ <property name="activate_on_single_click">False</property>
</object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- <property name="width">3</property>
- <property name="height">2</property>
- </packing>
</child>
- <child>
- <object class="GtkBox" id="title_add_multiple_hbox1">
- <property name="orientation">horizontal</property>
- <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkInfoBar" id="title_add_multiple_infobar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="message_type">info</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="title_add_multiple_infobar-action_area1">
<property name="can_focus">False</property>
<property name="spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="title_add_multiple_select_all">
- <property name="label" translatable="yes">Select All</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="tooltip_text" translatable="yes">Mark all titles for adding to the queue</property>
- <property name="halign">start</property>
- <property name="vexpand">False</property>
- <property name="halign">start</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="title_add_multiple_select_all_cb" swapped="no"/>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="title_add_multiple_clear_all">
- <property name="label" translatable="yes">Clear All</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="tooltip_text" translatable="yes">Unmark all titles</property>
- <property name="halign">start</property>
- <property name="vexpand">False</property>
- <property name="halign">start</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="title_add_multiple_clear_all_cb" swapped="no"/>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
+ <property name="layout_style">end</property>
</object>
<packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">2</property>
- <property name="height">1</property>
+ <property name="position">0</property>
</packing>
</child>
- <child>
- <object class="GtkInfoBar" id="title_add_multiple_infobar">
- <property name="visible">True</property>
+ <child internal-child="content_area">
+ <object class="GtkBox" id="title_add_multiple_infobar_content_area">
<property name="can_focus">False</property>
- <property name="message_type">info</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="title_add_multiple_infobar-action_area1">
+ <property name="spacing">16</property>
+ <child>
+ <object class="GtkLabel" id="title_add_multiple_label1">
+ <property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="spacing">6</property>
- <property name="layout_style">end</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child internal-child="content_area">
- <object class="GtkBox" id="title_add_multiple_infobar_content_area">
- <property name="can_focus">False</property>
- <property name="spacing">16</property>
- <child>
- <object class="GtkLabel" id="title_add_multiple_label1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Destination files OK. No duplicates detected.</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
+ <property name="label" translatable="yes">Destination files OK. No duplicates detected.</property>
</object>
<packing>
<property name="position">0</property>
@@ -7244,26 +6983,16 @@ Only one subtitle track can be burned! Since conflicts can occur, the first chos
</child>
</object>
<packing>
- <property name="left_attach">0</property>
- <property name="top_attach">3</property>
- <property name="width">3</property>
- <property name="height">1</property>
+ <property name="position">0</property>
</packing>
</child>
- <child>
- <placeholder/>
- </child>
</object>
<packing>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
</object>
</child>
- <action-widgets>
- <action-widget response="0">title_add_multiple_cancel</action-widget>
- <action-widget response="-5">title_add_multiple_ok</action-widget>
- </action-widgets>
</object>
<object class="GtkDialog" id="prefs_dialog">
<property name="transient_for">hb_window</property>
@@ -7271,39 +7000,34 @@ Only one subtitle track can be burned! Since conflicts can occur, the first chos
<property name="title" translatable="yes">Preferences</property>
<property name="modal">True</property>
<property name="window_position">center-on-parent</property>
+ <property name="deletable">False</property>
+ <property name="use-header-bar">1</property>
<property name="type_hint">dialog</property>
<property name="skip_taskbar_hint">True</property>
<property name="skip_pager_hint">True</property>
<signal name="delete-event" handler="gtk_widget_hide_on_delete" swapped="no"/>
+ <child type="action">
+ <object class="GtkButton" id="pref_ok">
+ <property name="label" translatable="yes">OK</property>
+ <property name="image">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">GTK_ALIGN_CENTER</property>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="ok">pref_ok</action-widget>
+ </action-widgets>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">2</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area5">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="pref_ok">
- <property name="label" translatable="yes">OK</property>
- <property name="image">gtk-ok</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="halign">GTK_ALIGN_CENTER</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
<child>
<object class="GtkBox" id="hbox59">
<property name="orientation">horizontal</property>
@@ -7316,14 +7040,7 @@ Only one subtitle track can be burned! Since conflicts can occur, the first chos
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<child>
-])dnl
-ifelse(eval(gtk_version >= 400), 1, filter_output([
- <object class="GtkBox" id="eventbox1">
- <property name="orientation">horizontal</property>
-]), filter_output([
<object class="GtkEventBox" id="eventbox1">
-]))dnl
-filter_output([
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_STRUCTURE_MASK</property>
@@ -8033,169 +7750,39 @@ Uncheck this if you want to allow changing each title's settings independently.<
</child>
</object>
</child>
- <action-widgets>
- <action-widget response="-5">pref_ok</action-widget>
- </action-widgets>
</object>
- <object class="GtkDialog" id="preset_new_folder_dialog">
+ <object class="GtkDialog" id="preset_rename_dialog">
<property name="transient_for">hb_window</property>
<property name="can_focus">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="modal">True</property>
<property name="window_position">center-on-parent</property>
<property name="type_hint">dialog</property>
+ <property name="deletable">False</property>
+ <property name="use-header-bar">1</property>
<signal name="delete-event" handler="gtk_widget_hide_on_delete" swapped="no"/>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox2">
+ <child type="action">
+ <object class="GtkButton" id="preset_rename_cancel">
+ <property name="label" translatable="yes">Cancel</property>
+ <property name="image">gtk-cancel</property>
<property name="visible">True</property>
- <property name="can_focus">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="spacing">2</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area2">
- <property name="visible">True</property>
- <property name="can_focus">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="layout_style">end</property>
- <child>
- <object class="GtkButton" id="preset_folder_cancel">
- <property name="label" translatable="yes">Cancel</property>
- <property name="image">gtk-cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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="halign">GTK_ALIGN_CENTER</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="preset_folder_ok">
- <property name="label" translatable="yes">OK</property>
- <property name="image">gtk-ok</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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="halign">GTK_ALIGN_CENTER</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="vbox26">
- <property name="orientation">vertical</property>
- <property name="visible">True</property>
- <property name="can_focus">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="vexpand">True</property>
- <child>
- <object class="GtkBox" id="hbox31">
- <property name="orientation">horizontal</property>
- <property name="visible">True</property>
- <property name="can_focus">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="margin-top">10</property>
- <property name="margin-bottom">10</property>
- <child>
- <object class="GtkLabel" id="label30">
- <property name="visible">True</property>
- <property name="can_focus">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="halign">start</property>
- <property name="label" translatable="yes">Folder Name:</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="FolderName">
- <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="max_length">40</property>
- <property name="activates_default">True</property>
- <property name="width-chars">30</property>
- <property name="truncate_multiline">True</property>
- <property name="hexpand">True</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkFrame" id="frame17">
- <property name="visible">True</property>
- <property name="can_focus">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="label_xalign">0</property>
- <property name="shadow_type">etched-out</property>
- <property name="vexpand">True</property>
- <property name="margin-top">10</property>
- <property name="margin-bottom">10</property>
- <child>
- <object class="GtkTextView" id="FolderDescription">
- <property name="margin-top">6</property>
- <property name="margin-bottom">4</property>
- <property name="margin-start">12</property>
- <property name="margin-end">4</property>
- <property name="height_request">60</property>
- <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="wrap_mode">word</property>
- <property name="accepts_tab">False</property>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="label21">
- <property name="visible">True</property>
- <property name="can_focus">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="label" translatable="yes">&lt;b&gt;Description&lt;/b&gt;</property>
- <property name="use_markup">True</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <child type="action">
+ <object class="GtkButton" id="preset_rename_ok">
+ <property name="label" translatable="yes">OK</property>
+ <property name="image">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
</object>
</child>
<action-widgets>
- <action-widget response="0">preset_folder_cancel</action-widget>
- <action-widget response="-5">preset_folder_ok</action-widget>
+ <action-widget response="cancel">preset_rename_cancel</action-widget>
+ <action-widget response="ok">preset_rename_ok</action-widget>
</action-widgets>
- </object>
- <object class="GtkDialog" id="preset_rename_dialog">
- <property name="transient_for">hb_window</property>
- <property name="can_focus">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="modal">True</property>
- <property name="window_position">center-on-parent</property>
- <property name="type_hint">dialog</property>
- <signal name="delete-event" handler="gtk_widget_hide_on_delete" swapped="no"/>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-preset-rename-box">
<property name="visible">True</property>
@@ -8203,46 +7790,10 @@ Uncheck this if you want to allow changing each title's settings independently.<
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="spacing">2</property>
<property name="hexpand">False</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_preset_rename_area">
- <property name="visible">True</property>
- <property name="can_focus">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="layout_style">end</property>
- <child>
- <object class="GtkButton" id="preset_rename_cancel">
- <property name="label" translatable="yes">Cancel</property>
- <property name="image">gtk-cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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="hexpand">False</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="preset_rename_ok">
- <property name="label" translatable="yes">OK</property>
- <property name="image">gtk-ok</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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="hexpand">False</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
<child>
<object class="GtkBox" id="preset_rename_vbox">
<property name="orientation">vertical</property>
@@ -8351,10 +7902,6 @@ Uncheck this if you want to allow changing each title's settings independently.<
</child>
</object>
</child>
- <action-widgets>
- <action-widget response="0">preset_rename_cancel</action-widget>
- <action-widget response="-5">preset_rename_ok</action-widget>
- </action-widgets>
</object>
<object class="GtkDialog" id="preset_save_dialog">
<property name="transient_for">hb_window</property>
@@ -8363,51 +7910,41 @@ Uncheck this if you want to allow changing each title's settings independently.<
<property name="modal">True</property>
<property name="window_position">center-on-parent</property>
<property name="type_hint">dialog</property>
+ <property name="deletable">False</property>
+ <property name="use-header-bar">1</property>
<signal name="delete-event" handler="gtk_widget_hide_on_delete" swapped="no"/>
+ <child type="action">
+ <object class="GtkButton" id="preset_cancel">
+ <property name="label" translatable="yes">Cancel</property>
+ <property name="image">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <child type="action">
+ <object class="GtkButton" id="preset_ok">
+ <property name="label" translatable="yes">OK</property>
+ <property name="image">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="cancel">preset_cancel</action-widget>
+ <action-widget response="ok">preset_ok</action-widget>
+ </action-widgets>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox3">
<property name="visible">True</property>
<property name="can_focus">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="spacing">2</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area3">
- <property name="visible">True</property>
- <property name="can_focus">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="layout_style">end</property>
- <child>
- <object class="GtkButton" id="preset_cancel">
- <property name="label" translatable="yes">Cancel</property>
- <property name="image">gtk-cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="preset_ok">
- <property name="label" translatable="yes">OK</property>
- <property name="image">gtk-ok</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
<child>
<object class="GtkBox" id="vbox28">
<property name="orientation">vertical</property>
@@ -8549,7 +8086,7 @@ Uncheck this if you want to allow changing each title's settings independently.<
<property name="row-spacing">2</property>
<property name="can_focus">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="vexpand">True</property>
+ <property name="vexpand">False</property>
<child>
<placeholder/>
</child>
@@ -8712,10 +8249,6 @@ Setting this to 0 means there is no maximum height.</property>
</child>
</object>
</child>
- <action-widgets>
- <action-widget response="0">preset_cancel</action-widget>
- <action-widget response="-5">preset_ok</action-widget>
- </action-widgets>
</object>
<object class="GtkAdjustment" id="preview_progress_adj">
<property name="upper">100</property>
@@ -8734,38 +8267,31 @@ Setting this to 0 means there is no maximum height.</property>
<signal name="configure-event" handler="preview_configure_cb" swapped="no"/>
<signal name="delete-event" handler="preview_window_delete_cb" swapped="no"/>
<child>
-])dnl
-ifelse(eval(gtk_version >= 400), 1, filter_output([
- <object class="GtkBox" id="preview_image">
- <property name="orientation">horizontal</property>
-]), filter_output([
- <object class="GtkEventBox" id="preview_image">
-]))dnl
-filter_output([
- <property name="width_request">854</property>
- <property name="height_request">480</property>
+ <object class="GtkOverlay" id="preview_overlay">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand-set">True</property>
- <property name="vexpand-set">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="halign">fill</property>
<property name="valign">fill</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK</property>
- <signal name="leave-notify-event" handler="preview_leave_cb" swapped="no"/>
- <signal name="motion-notify-event" handler="preview_motion_cb" swapped="no"/>
- <signal name="size-allocate" handler="preview_resize_cb" swapped="no"/>
- <signal name="draw" handler="preview_draw_cb" swapped="no"/>
<child>
-])dnl
-ifelse(eval(gtk_version >= 400), 1, filter_output([
- <object class="GtkBox" id="preview_hud">
- <property name="orientation">horizontal</property>
-]), filter_output([
+ <object class="GtkDrawingArea" id="preview_image">
+ <property name="width_request">854</property>
+ <property name="height_request">480</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK</property>
+ <signal name="leave-notify-event" handler="preview_leave_cb" swapped="no"/>
+ <signal name="motion-notify-event" handler="preview_motion_cb" swapped="no"/>
+ <signal name="size-allocate" handler="preview_resize_cb" swapped="no"/>
+ <signal name="draw" handler="preview_draw_cb" swapped="no"/>
+ </object>
+ </child>
+ <child type="overlay">
<object class="GtkEventBox" id="preview_hud">
-]))dnl
-filter_output([
<property name="visible">False</property>
<property name="can_focus">False</property>
<property name="halign">center</property>
@@ -8958,8 +8484,6 @@ filter_output([
<property name="create_folders">False</property>
<property name="local_only">False</property>
<property name="transient_for">hb_window</property>
-])dnl
-ifelse(eval(gtk_version >= 314), 1, filter_output([
<signal name="selection-changed" handler="chooser_file_selected_cb" swapped="no"/>
<child type="action">
<object class="GtkButton" id="source_cancel">
@@ -8990,59 +8514,10 @@ ifelse(eval(gtk_version >= 314), 1, filter_output([
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">2</property>
-]), eval(gtk_version >= 312), 1, filter_output([
- <property name="use-header-bar">0</property>
-]))dnl
-ifelse(eval(gtk_version <= 312), 1, filter_output([
- <signal name="selection-changed" handler="chooser_file_selected_cb" swapped="no"/>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox9">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">2</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area6">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="source_cancel">
- <property name="label" translatable="yes">_Cancel</property>
- <property name="use-underline">True</property>
- <property name="image">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>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="source_ok">
- <property name="label" translatable="yes">_Open</property>
- <property name="use-underline">True</property>
- <property name="image">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>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
-]))dnl
-filter_output([
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
<child>
<object class="GtkBox" id="source_extra">
<property name="orientation">vertical</property>
@@ -9162,46 +8637,39 @@ filter_output([
<property name="type_hint">dialog</property>
<property name="skip_taskbar_hint">True</property>
<property name="skip_pager_hint">True</property>
+ <property name="deletable">False</property>
+ <property name="use-header-bar">1</property>
+ <child type="action">
+ <object class="GtkButton" id="subtitle_cancel">
+ <property name="label" translatable="yes">Cancel</property>
+ <property name="image">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <child type="action">
+ <object class="GtkButton" id="subtitle_ok">
+ <property name="label" translatable="yes">OK</property>
+ <property name="image">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="cancel">subtitle_cancel</action-widget>
+ <action-widget response="ok">subtitle_ok</action-widget>
+ </action-widgets>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-subtitle-vbox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-subtitle-action_area">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="subtitle_cancel">
- <property name="label" translatable="yes">Cancel</property>
- <property name="image">gtk-cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="subtitle_ok">
- <property name="label" translatable="yes">OK</property>
- <property name="image">gtk-ok</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
<child>
<object class="GtkBox" id="subtitle_import_switch_box">
<property name="orientation">horizontal</property>
@@ -9529,10 +8997,6 @@ in your output.</property>
</child>
</object>
</child>
- <action-widgets>
- <action-widget response="0">subtitle_cancel</action-widget>
- <action-widget response="-5">subtitle_ok</action-widget>
- </action-widgets>
</object>
<object class="GtkDialog" id="audio_dialog">
<property name="transient_for">hb_window</property>
@@ -9543,46 +9007,39 @@ in your output.</property>
<property name="type_hint">dialog</property>
<property name="skip_taskbar_hint">True</property>
<property name="skip_pager_hint">True</property>
+ <property name="deletable">False</property>
+ <property name="use-header-bar">1</property>
+ <child type="action">
+ <object class="GtkButton" id="audio_cancel">
+ <property name="label" translatable="yes">Cancel</property>
+ <property name="image">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <child type="action">
+ <object class="GtkButton" id="audio_ok">
+ <property name="label" translatable="yes">OK</property>
+ <property name="image">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="cancel">audio_cancel</action-widget>
+ <action-widget response="ok">audio_ok</action-widget>
+ </action-widgets>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-audio-vbox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-audio-action_area">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="audio_cancel">
- <property name="label" translatable="yes">Cancel</property>
- <property name="image">gtk-cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="audio_ok">
- <property name="label" translatable="yes">OK</property>
- <property name="image">gtk-ok</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
<child>
<object class="GtkGrid" id="audio_dialog_grid1">
<property name="row-spacing">2</property>
@@ -10026,10 +9483,6 @@ DRC allows you to 'compress' the range by making loud sounds softer and soft sou
</child>
</object>
</child>
- <action-widgets>
- <action-widget response="0">audio_cancel</action-widget>
- <action-widget response="-5">audio_ok</action-widget>
- </action-widgets>
</object>
<object class="GtkDialog" id="update_dialog">
<property name="transient_for">hb_window</property>
@@ -10039,44 +9492,33 @@ DRC allows you to 'compress' the range by making loud sounds softer and soft sou
<property name="type_hint">dialog</property>
<property name="skip_taskbar_hint">True</property>
<property name="skip_pager_hint">True</property>
+ <property name="deletable">False</property>
+ <property name="use-header-bar">1</property>
+ <child type="action">
+ <object class="GtkButton" id="update_skip">
+ <property name="label" translatable="yes">Skip This Version</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <child type="action">
+ <object class="GtkButton" id="update_remind">
+ <property name="label" translatable="yes">Remind Me Later</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="ok">update_skip</action-widget>
+ <action-widget response="cancel">update_remind</action-widget>
+ </action-widgets>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox8">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">2</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area8">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="update_skip">
- <property name="label" translatable="yes">Skip This Version</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="update_remind">
- <property name="label" translatable="yes">Remind Me Later</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
<child>
<object class="GtkBox" id="hbox24">
<property name="orientation">horizontal</property>
@@ -10089,15 +9531,8 @@ DRC allows you to 'compress' the range by making loud sounds softer and soft sou
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
-])dnl
-ifelse(eval(gtk_version >= 400), 1, filter_output([
- <object class="GtkBox" id="eventbox2">
- <property name="orientation">horizontal</property>
-]), filter_output([
<object class="GtkEventBox" id="eventbox2">
<property name="visible_window">False</property>
-]))dnl
-filter_output([
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_STRUCTURE_MASK</property>
@@ -10203,10 +9638,6 @@ filter_output([
</child>
</object>
</child>
- <action-widgets>
- <action-widget response="-5">update_skip</action-widget>
- <action-widget response="0">update_remind</action-widget>
- </action-widgets>
</object>
<object class="GtkAdjustment" id="VideoPresetRange">
<property name="upper">1</property>
@@ -10214,4 +9645,3 @@ filter_output([
<property name="page_increment">1</property>
</object>
</interface>
-])dnl
diff --git a/gtk/src/ghb4.ui b/gtk/src/ghb4.ui
new file mode 100644
index 000000000..7d46a12d2
--- /dev/null
+++ b/gtk/src/ghb4.ui
@@ -0,0 +1,8026 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkFileFilter" id="SourceFilterAVI"/>
+ <object class="GtkFileFilter" id="SourceFilterAll"/>
+ <object class="GtkFileFilter" id="SourceFilterEVO"/>
+ <object class="GtkFileFilter" id="SourceFilterFLV"/>
+ <object class="GtkFileFilter" id="SourceFilterMKV"/>
+ <object class="GtkFileFilter" id="SourceFilterWebM"/>
+ <object class="GtkFileFilter" id="SourceFilterMOV"/>
+ <object class="GtkFileFilter" id="SourceFilterMP4"/>
+ <object class="GtkFileFilter" id="SourceFilterMPG"/>
+ <object class="GtkFileFilter" id="SourceFilterOGG"/>
+ <object class="GtkFileFilter" id="SourceFilterTS"/>
+ <object class="GtkFileFilter" id="SourceFilterVOB"/>
+ <object class="GtkFileFilter" id="SourceFilterVideo"/>
+ <object class="GtkFileFilter" id="SourceFilterWMV"/>
+ <object class="GtkFileFilter" id="QueueFilterAll"/>
+ <object class="GtkFileFilter" id="QueueFilterJSON"/>
+ <object class="GtkLabel" id="SubBurnedLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Render the subtitle over the video.
+
+The subtitle will be part of the video and can not be disabled.</property>
+ <property name="label" translatable="yes">&lt;b&gt;Burned In&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <object class="GtkLabel" id="SubDefaultLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Set the default output subtitle track.
+
+Most players will automatically display this
+subtitle track whenever the video is played.
+
+This is useful for creating a "forced" track
+in your output.</property>
+ <property name="label" translatable="yes">&lt;b&gt;Default&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <object class="GtkLabel" id="SubForcedLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Use only subtitles that have been flagged
+as forced in the source subtitle track
+
+"Forced" subtitles are usually used to show
+subtitles during scenes where someone is speaking
+a foreign language.</property>
+ <property name="label" translatable="yes">&lt;b&gt;Forced Only&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <object class="GtkLabel" id="SubSRTOffsetLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Add (or subtract) an offset (in milliseconds)
+to the start of the SRT subtitle track.
+
+Often, the start of an external SRT file
+does not coincide with the start of the video.
+This setting allows you to synchronize the files.</property>
+ <property name="label" translatable="yes">&lt;b&gt;SRT Offset&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <object class="GtkLabel" id="SubTrackLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">The source subtitle track
+
+You can choose any of the subtitles
+recognized in your source file.
+
+In addition, there is a special track option
+"Foreign Audio Scan". This option will add
+an extra pass to the encode that searches for
+subtitles that may correspond to a foreign
+language scene. This option is best used in
+conjunction with the "Forced" option.</property>
+ <property name="label" translatable="yes">&lt;b&gt;Track&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+
+ <menu id="queue_actions_menu">
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">Open Source Directory</attribute>
+ <attribute name="action">app.queue-open-source</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Open Destination Directory</attribute>
+ <attribute name="action">app.queue-open-dest</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Open Encode Log Directory</attribute>
+ <attribute name="action">app.queue-open-log-dir</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Open Encode Log</attribute>
+ <attribute name="action">app.queue-open-log</attribute>
+ </item>
+ </section>
+ </menu>
+
+ <menu id="queue_options_menu">
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">Reset Failed Jobs</attribute>
+ <attribute name="action">app.queue-reset-fail</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Reset All Jobs</attribute>
+ <attribute name="action">app.queue-reset-all</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Clear Completed Jobs</attribute>
+ <attribute name="action">app.queue-delete-complete</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Clear All Jobs</attribute>
+ <attribute name="action">app.queue-delete-all</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Import Queue</attribute>
+ <attribute name="action">app.queue-import</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Export Queue</attribute>
+ <attribute name="action">app.queue-export</attribute>
+ </item>
+ </section>
+ </menu>
+
+ <object class="GtkWindow" id="presets_window">
+ <property name="title" translatable="yes">HandBrake Presets</property>
+ <property name="visible">False</property>
+ <property name="can_focus">False</property>
+ <property name="type_hint">utility</property>
+ <property name="transient_for">hb_window</property>
+ <property name="default_width">300</property>
+ <property name="default_height">600</property>
+ <signal name="close-request" handler="presets_window_delete_cb" swapped="no"/>
+ <signal name="size-allocate" handler="presets_sz_alloc_cb" swapped="no"/>
+ <child>
+ <object class="GtkBox" id="presets_window_box">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkMenuBar" id="presets_menu_bar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">False</property>
+ <property name="valign">GTK_ALIGN_FILL</property>
+ <child>
+ <object class="GtkMenuItem" id="presets_window_menu">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_Presets</property>
+ <property name="use_underline">True</property>
+ <child type="submenu">
+ <object class="GtkMenu" id="presets_window_submenu">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkMenuItem" id="presets_window_default">
+ <property name="label" translatable="yes">Set De_fault</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.preset-default</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="presets_window_sep1">
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="presets_window_save">
+ <property name="label" translatable="yes">_Save</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.preset-save</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="presets_window_save_as">
+ <property name="label" translatable="yes">Save _As</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.preset-save-as</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="presets_window_rename">
+ <property name="label" translatable="yes">_Rename</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.preset-rename</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="presets_window_remove">
+ <property name="label" translatable="yes">_Delete</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.preset-remove</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="presets_window_sep2">
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="presets_window_import">
+ <property name="label" translatable="yes">_Import</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.preset-import</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="presets_window_export">
+ <property name="label" translatable="yes">_Export</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.preset-export</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="presets_window_sep3">
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="presets_window_restore">
+ <property name="label" translatable="yes">Reset _Built-in Presets</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.presets-reload</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFrame" id="presets_frame">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <property name="margin-start">6</property>
+ <property name="margin-end">6</property>
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">6</property>
+ <property name="vexpand">True</property>
+ <property name="valign">GTK_ALIGN_FILL</property>
+ <child>
+ <object class="GtkScrolledWindow" id="presets_scroll">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="shadow_type">etched-in</property>
+ <property name="margin-top">6</property>
+ <property name="min_content_width">200</property>
+ <child>
+ <object class="GtkTreeView" id="presets_list">
+ <property name="width_request">206</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="treeview-selection4"/>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label34">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Presets List&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+
+ <object class="GtkWindow" id="queue_window">
+ <property name="title" translatable="yes">HandBrake Queue</property>
+ <property name="can_focus">False</property>
+ <property name="resizable">True</property>
+ <property name="window_position">center</property>
+ <property name="type_hint">utility</property>
+ <property name="transient_for">hb_window</property>
+ <property name="default_width">1024</property>
+ <signal name="close-request" handler="queue_window_delete_cb" swapped="no"/>
+ <child>
+ <object class="GtkBox" id="queue_tab">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkBox" id="queue_box0">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-top">12</property>
+ <property name="margin-bottom">12</property>
+ <child>
+ <object class="GtkLabel" id="queue_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="valign">baseline</property>
+ <property name="use_markup">True</property>
+ <property name="margin-start">12</property>
+ <property name="label" translatable="yes">&lt;span size="x-large"&gt;Queue&lt;/span&gt;</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_status_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="valign">baseline</property>
+ <property name="use_markup">True</property>
+ <property name="margin-start">12</property>
+ <property name="label" translatable="yes">0 jobs pending</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkPaned" id="queue_box1">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="position">500</property>
+ <property name="can_focus">False</property>
+ <property name="shrink-child1">False</property>
+ <property name="shrink-child2">False</property>
+ <child>
+ <object class="GtkBox" id="queue_box2">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="GtkToolbar" id="queue_list_toolbar">
+ <property name="hexpand">True</property>
+ <property name="halign">fill</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkToolButton" id="queue_list_start">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Start Encoding</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Start</property>
+ <property name="icon_name">hb-start</property>
+ <property name="action-name">app.queue-start</property>
+ <property name="homogeneous">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="queue_list_pause">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Pause Encoding</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Pause</property>
+ <property name="icon_name">hb-pause</property>
+ <property name="action-name">app.queue-pause</property>
+ <property name="homogeneous">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorToolItem" id="queue_list_tool_sep1">
+ <property name="visible">True</property>
+ <property name="draw">False</property>
+ <property name="hexpand">True</property>
+ <property name="halign">GTK_ALIGN_FILL</property>
+ <property name="vexpand">False</property>
+ <property name="valign">GTK_ALIGN_FILL</property>
+ <property name="hexpand">True</property>
+ <property name="homogeneous">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolItem" id="queue_list_options">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="is_important">True</property>
+ <property name="halign">end</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkMenuButton" id="queue_options_menu_button">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="direction">down</property>
+ <property name="menu-model">queue_options_menu</property>
+ <property name="relief">GTK_RELIEF_NONE</property>
+ <child>
+ <object class="GtkBox" id="queue_options_menu_button_box">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkImage" id="queue_options_menu_button_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">hb-advanced</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_options_menu_button_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Options</property>
+ <property name="use_markup">True</property>
+ <property name="hexpand">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="queue_list_window">
+ <property name="hexpand">True</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="min_content_height">400</property>
+ <child>
+ <object class="GtkListBox" id="queue_list">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="hexpand">True</property>
+ <property name="selection_mode">single</property>
+ <property name="activate_on_single_click">False</property>
+ <signal name="row-selected" handler="queue_list_selection_changed_cb" swapped="no"/>
+ <signal name="drag-motion" handler="queue_drag_motion_cb" swapped="no"/>
+ <signal name="drag-leave" handler="queue_drag_leave_cb" swapped="no"/>
+ <signal name="drag-data-received" handler="queue_drag_data_received_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="queue_box4">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">6</property>
+ <property name="halign">center</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="queue_done_label">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">When Done:</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="QueueWhenComplete">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <signal name="changed" handler="queue_when_complete_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="queue_box5">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-top">4</property>
+ <child>
+ <object class="GtkStackSwitcher" id="QueueStackSwitcher">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stack">QueueStack</property>
+ <property name="hexpand">True</property>
+ <property name="halign">GTK_ALIGN_FILL</property>
+ <property name="valign">GTK_ALIGN_START</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStack" id="QueueStack">
+ <property name="homogeneous">True</property>
+ <property name="transition-type">GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT</property>
+ <property name="transition-duration">400</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">queue_summary_tab</property>
+ <property name="title" translatable="yes">Summary</property>
+ <property name="child">
+ <object class="GtkBox" id="queue_summary_tab">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="expand">True</property>
+ <property name="margin-top">12</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">3</property>
+ <child>
+ <object class="GtkToolbar" id="queue_summary_toolbar">
+ <property name="halign">start</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkToolButton" id="queue_reload">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Reset</property>
+ <property name="icon_name">view-refresh</property>
+ <property name="tooltip_text" translatable="yes">Mark selected queue entry as pending.
+Resets the queue job to pending and ready to run again.</property>
+ <property name="action-name">app.queue-reset</property>
+ <property name="homogeneous">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="queue_edit">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Edit</property>
+ <property name="icon_name">hb-edit</property>
+ <property name="action-name">app.queue-edit</property>
+ <property name="homogeneous">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolItem" id="queue_actions">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="is_important">True</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkMenuButton" id="queue_actions_menu_button">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="direction">down</property>
+ <property name="relief">GTK_RELIEF_NONE</property>
+ <property name="menu-model">queue_actions_menu</property>
+ <child>
+ <object class="GtkBox" id="queue_actions_menu_button_box">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkImage" id="queue_actions_menu_button_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">hb-advanced</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_actions_menu_button_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Actions</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="queue_summary_scroll">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="shadow-type">GTK_SHADOW_NONE</property>
+ <property name="vexpand">True</property>
+ <property name="hscrollbar-policy">GTK_POLICY_NEVER</property>
+ <property name="valign">GTK_ALIGN_FILL</property>
+ <property name="margin-bottom">12</property>
+ <child>
+ <object class="GtkGrid" id="queue_summary_grid">
+ <property name="visible">True</property>
+ <property name="vexpand">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">12</property>
+ <property name="row-spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="queue_summary_preset_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="halign">start</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">Preset:</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_summary_preset">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes"></property>
+ <property name="width-chars">50</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_summary_source_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="halign">start</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">Source:</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_summary_source">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes"></property>
+ <property name="width-chars">50</property>
+ <property name="lines">2</property>
+ <property name="wrap_mode">word-char</property>
+ <property name="ellipsize">middle</property>
+ <property name="selectable">True</property>
+ <property name="margin-bottom">12</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_summary_dest_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="halign">start</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">Destination:</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_summary_dest">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes"></property>
+ <property name="width-chars">50</property>
+ <property name="lines">2</property>
+ <property name="wrap_mode">word-char</property>
+ <property name="ellipsize">middle</property>
+ <property name="selectable">True</property>
+ <property name="margin-bottom">12</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_summary_dimensions_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="halign">start</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">Dimensions:</property>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_summary_dimensions">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes"></property>
+ <property name="width-chars">50</property>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_summary_video_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="halign">start</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">Video:</property>
+ <layout>
+ <property name="top-attach">4</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_summary_video">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes"></property>
+ <property name="width-chars">50</property>
+ <layout>
+ <property name="top-attach">4</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_summary_audio_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="halign">start</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">Audio:</property>
+ <layout>
+ <property name="top-attach">5</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_summary_audio">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes"></property>
+ <property name="width-chars">50</property>
+ <layout>
+ <property name="top-attach">5</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_summary_subtitle_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="halign">start</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">Subtitles:</property>
+ <layout>
+ <property name="top-attach">6</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_summary_subtitle">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes"></property>
+ <property name="width-chars">50</property>
+ <layout>
+ <property name="top-attach">6</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">queue_stats_tab</property>
+ <property name="title" translatable="yes">Statistics</property>
+ <property name="child">
+ <object class="GtkBox" id="queue_stats_tab">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="expand">True</property>
+ <property name="margin-top">12</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">3</property>
+ <child>
+ <object class="GtkScrolledWindow" id="queue_stats_scroll">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="shadow-type">GTK_SHADOW_NONE</property>
+ <property name="vexpand">True</property>
+ <property name="hscrollbar-policy">GTK_POLICY_NEVER</property>
+ <property name="valign">GTK_ALIGN_FILL</property>
+ <property name="margin-bottom">12</property>
+ <child>
+ <object class="GtkGrid" id="queue_stats_grid">
+ <property name="visible">True</property>
+ <property name="vexpand">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">12</property>
+ <property name="row-spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="queue_stats_pass_label">
+ <property name="visible">False</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="halign">start</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">Pass:</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_stats_pass">
+ <property name="visible">False</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes"></property>
+ <property name="width-chars">50</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_stats_start_time_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="halign">start</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">Start Time:</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_stats_start_time">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes"></property>
+ <property name="width-chars">50</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_stats_finish_time_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="halign">start</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">End Time:</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_stats_finish_time">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes"></property>
+ <property name="width-chars">50</property>
+ <property name="lines">2</property>
+ <property name="wrap_mode">word-char</property>
+ <property name="ellipsize">middle</property>
+ <property name="selectable">True</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_stats_paused_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="halign">start</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">Paused Duration:</property>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_stats_paused">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes"></property>
+ <property name="width-chars">50</property>
+ <property name="lines">2</property>
+ <property name="wrap_mode">word-char</property>
+ <property name="ellipsize">middle</property>
+ <property name="selectable">True</property>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_stats_encode_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="halign">start</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">Encode Time:</property>
+ <layout>
+ <property name="top-attach">4</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_stats_encode">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes"></property>
+ <property name="width-chars">50</property>
+ <layout>
+ <property name="top-attach">4</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_stats_file_size_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="halign">start</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">File Size:</property>
+ <layout>
+ <property name="top-attach">5</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_stats_file_size">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes"></property>
+ <property name="width-chars">50</property>
+ <layout>
+ <property name="top-attach">5</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_stats_result_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="halign">start</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">Status:</property>
+ <layout>
+ <property name="top-attach">6</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="queue_stats_result">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes"></property>
+ <property name="width-chars">50</property>
+ <layout>
+ <property name="top-attach">6</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">queue_log_tab</property>
+ <property name="title" translatable="yes">Activity Log</property>
+ <property name="child">
+ <object class="GtkBox" id="queue_log_tab">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="expand">True</property>
+ <property name="margin-top">12</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">3</property>
+ <child>
+ <object class="GtkBox" id="queue_box6">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="queue_activity_location">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">False</property>
+ <property name="valign">GTK_ALIGN_FILL</property>
+ <property name="margin-top">5</property>
+ <property name="margin-bottom">5</property>
+ <property name="selectable">True</property>
+ <property name="ellipsize">start</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="queue_activity_scroll">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <property name="vexpand">True</property>
+ <property name="margin-bottom">6</property>
+ <property name="valign">GTK_ALIGN_FILL</property>
+ <child>
+ <object class="GtkTextView" id="queue_activity_view">
+ <property name="width_request">600</property>
+ <property name="height_request">600</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">False</property>
+ <property name="wrap_mode">char</property>
+ <property name="cursor_visible">False</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+
+ <object class="GtkWindow" id="activity_window">
+ <property name="title" translatable="yes">HandBrake Activity Log</property>
+ <property name="can_focus">False</property>
+ <property name="default_width">800</property>
+ <property name="default_height">600</property>
+ <property name="type_hint">utility</property>
+ <property name="transient_for">hb_window</property>
+ <signal name="close-request" handler="activity_window_delete_cb" swapped="no"/>
+ <child>
+ <object class="GtkBox" id="vbox37">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="activity_location">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">False</property>
+ <property name="valign">GTK_ALIGN_FILL</property>
+ <property name="margin-top">5</property>
+ <property name="margin-bottom">5</property>
+ <property name="selectable">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="activity_scroll">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <property name="vexpand">True</property>
+ <property name="valign">GTK_ALIGN_FILL</property>
+ <child>
+ <object class="GtkTextView" id="activity_view">
+ <property name="width_request">600</property>
+ <property name="height_request">600</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">False</property>
+ <property name="wrap_mode">char</property>
+ <property name="cursor_visible">False</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkAdjustment" id="adjustment1">
+ <property name="lower">1</property>
+ <property name="upper">100</property>
+ <property name="value">1</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">1</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment10">
+ <property name="lower">4</property>
+ <property name="upper">64</property>
+ <property name="value">16</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment11">
+ <property name="lower">-6</property>
+ <property name="upper">6</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment12">
+ <property name="lower">-6</property>
+ <property name="upper">6</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment13">
+ <property name="upper">1000</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment14">
+ <property name="upper">1000</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment15">
+ <property name="upper">1000</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment16">
+ <property name="upper">1000</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment17">
+ <property name="upper">8000</property>
+ <property name="step_increment">2</property>
+ <property name="page_increment">16</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment18">
+ <property name="upper">8000</property>
+ <property name="step_increment">2</property>
+ <property name="page_increment">16</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment19">
+ <property name="lower">1</property>
+ <property name="upper">10</property>
+ <property name="value">1</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">1</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment2">
+ <property name="lower">1</property>
+ <property name="upper">100</property>
+ <property name="value">100</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">1</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment20">
+ <property name="lower">4</property>
+ <property name="upper">15</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">1</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment21">
+ <property name="lower">15</property>
+ <property name="upper">240</property>
+ <property name="value">15</property>
+ <property name="step_increment">15</property>
+ <property name="page_increment">15</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment22">
+ <property name="upper">2</property>
+ <property name="value">1</property>
+ <property name="step_increment">0.1</property>
+ <property name="page_increment">0.5</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment23">
+ <property name="upper">1</property>
+ <property name="step_increment">0.05</property>
+ <property name="page_increment">0.5</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment24">
+ <property name="lower">1</property>
+ <property name="upper">999</property>
+ <property name="value">1</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">1</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment25">
+ <property name="upper">4096</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">16</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment26">
+ <property name="upper">4096</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">16</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment27">
+ <property name="lower">1</property>
+ <property name="upper">10</property>
+ <property name="value">1</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">1</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment28">
+ <property name="lower">0.9</property>
+ <property name="upper">4</property>
+ <property name="step_increment">0.1</property>
+ <property name="page_increment">1</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment29">
+ <property name="lower">1</property>
+ <property name="upper">65535</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">16</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment3">
+ <property name="upper">1000000</property>
+ <property name="step_increment">10</property>
+ <property name="page_increment">100</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment30">
+ <property name="lower">1</property>
+ <property name="upper">65535</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">16</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment31">
+ <property name="lower">-30000</property>
+ <property name="upper">30000</property>
+ <property name="step_increment">10</property>
+ <property name="page_increment">100</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment32">
+ <property name="upper">8000</property>
+ <property name="step_increment">2</property>
+ <property name="page_increment">16</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment33">
+ <property name="upper">8000</property>
+ <property name="step_increment">2</property>
+ <property name="page_increment">16</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment34">
+ <property name="upper">2</property>
+ <property name="value">1</property>
+ <property name="step_increment">0.1</property>
+ <property name="page_increment">0.5</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment35">
+ <property name="lower">-20</property>
+ <property name="upper">21</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">1</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment4">
+ <property name="upper">50000</property>
+ <property name="step_increment">100</property>
+ <property name="page_increment">1000</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment5">
+ <property name="upper">51</property>
+ <property name="value">20.25</property>
+ <property name="step_increment">0.25</property>
+ <property name="page_increment">5</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment8">
+ <property name="lower">1</property>
+ <property name="upper">16</property>
+ <property name="value">3</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">1</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment9">
+ <property name="upper">16</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">1</property>
+ </object>
+ <object class="GtkAdjustment" id="audio_quality_adj">
+ <property name="upper">10</property>
+ <property name="step_increment">0.1</property>
+ <property name="page_increment">1</property>
+ </object>
+ <object class="GtkAdjustment" id="DiskFreeLimitAdjustment">
+ <property name="upper">1000000</property>
+ <property name="step_increment">500</property>
+ <property name="page_increment">1000</property>
+ </object>
+ <object class="GtkAdjustment" id="ActivityFontSizeAdjustment">
+ <property name="upper">32</property>
+ <property name="lower">6</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAboutDialog" id="hb_about">
+ <property name="transient_for">hb_window</property>
+ <property name="can_focus">False</property>
+ <property name="title" translatable="yes">About HandBrake</property>
+ <property name="type_hint">dialog</property>
+ <property name="program_name">HandBrake</property>
+ <property name="version">0.9.2</property>
+ <property name="copyright" translatable="yes">Copyright © 2008 - John Stebbins
+Copyright © 2004 - , HandBrake Devs</property>
+ <property name="comments" translatable="yes">HandBrake is a GPL-licensed, multiplatform, multithreaded video transcoder.</property>
+ <property name="website">https://handbrake.fr</property>
+ <property name="website_label" translatable="yes">https://handbrake.fr</property>
+ <property name="license-type">GTK_LICENSE_GPL_2_0_ONLY</property>
+ <property name="license" translatable="yes">HandBrake is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+HandBrake is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with Glade; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</property>
+ <property name="authors">ghb author:
+ John Stebbins
+
+HandBrake authors:
+ Eric Petit
+ Laurent Aimar
+ John Allen
+ Joe Crain
+ Damiano Galassi
+ Edward Groenendaal
+ Rodney Hester
+ Andrew Kimpton
+ Chris Lee
+ Chris Long
+ Brian Mario
+ Maurj
+ Mirkwood
+ Nyx
+ Philippe Rigaux
+ Jonathon Rubin
+ Scott
+ Chris Thoman
+ Mark Krenek
+ Van Jacobson
+
+libavcodec authors:
+ Fabrice Bellard
+ Alex Beregszaszi
+ Brian Foley
+ Arpad Gereoffy
+ Philip Gladstone
+ Falk Hueffner
+ Zdenek Kabelac
+ Nick Kurshev
+ Michael Niedermayer
+ François Revol
+ Dieter Shirley
+ Juan J. Sierralta
+ Lionel Ulmer
+
+libdts authors:
+ Gildas Bazin
+ Sam Hocevar
+
+libdvdcss authors:
+ Billy Biggs
+ Stéphane Borel
+ HÃ¥kan Hjort
+ Samuel Hocevar
+ Eugenio Jarosiewicz
+ Jon Lech Johansen
+ Markus Kuespert
+ Pascal Levesque
+ Steven M. Schultz
+ David Siebörger
+ Alex Strelnikov
+ German Tischler
+ Gildas Bazin
+
+libdvdread authors:
+ Björn Englund
+ HÃ¥kan Hjort
+ Billy Biggs
+ Christian Wolff
+
+libfaac authors:
+ M. Bakker
+ Tony Lenox
+ RageOMatic
+ thebard
+ Ivan Dimkovic
+ Krzysztof Nikiel
+
+libmp3lame authors:
+ Mike Cheng
+ Robert Hegemann
+ Frank Klemm
+ Alexander Leidinger
+ Naoki Shibata
+ Mark Taylor
+ Takehiro Tominiga
+ Iván Cavero Belaunde
+ Gabriel Bouvigne
+ Florian Bomers
+ CISC
+ John Dahlstrom
+ John Dee
+ Albert Faber
+ Peter Gubanov
+ Lars Magne Ingebrigtsen
+ Yosi Markovich
+ Zdenek Kabelac
+ Iwasa Kazmi
+ Guillaume Lessard
+ Steve Lhomme
+ Don Melton
+ Viral Shah
+ Acy Stapp
+ Roel VdB
+
+libmp4v2 authors:
+ Dave Mackie
+ Alix Marchandise-Franquet
+ Bill May
+ Massimo Villari
+ Waqar Mohsin
+ Richard Chen
+ Rob Arnold
+ Howdy Pierce
+ Steven Schultz
+ Sean Gilligan
+ Michael Rossberg
+ Luis F. Ramirez
+ Petter Reinholdtsen
+
+libmpeg2 authors:
+ Aaron Holtzman
+ Michel Lespinasse
+ Bruno Barreyra
+ Gildas Bazin
+ Alexander W. Chin
+ Stephen Crowley
+ Didier Gautheron
+ Ryan C. Gordon
+ Peter Gubanov
+ HÃ¥kan Hjort
+ Nicolas Joly
+ Gerd Knorr
+ David I. Lehn
+ Olie Lho
+ Rick Niles
+ Real Ouellet
+ Bajusz Peter
+ Franck Sicard
+ Brion Vibber
+ Martin Vogt
+ Fredrik Vraalsen
+
+libogg authors:
+ Christopher Montgomery
+
+libsamplerate authors:
+ Erik de Castro Lopo
+
+libvorbis authors:
+ Christopher Montgomery
+
+libx264 authors:
+ Laurent Aimar
+
+</property>
+ <property name="logo_icon_name">hb-icon</property>
+ <property name="wrap_license">True</property>
+ <signal name="close-request" handler="ghb_widget_hide_on_close" swapped="no"/>
+ </object>
+
+ <object class="GtkApplicationWindow" id="hb_window">
+ <property name="can_focus">False</property>
+ <property name="title" translatable="yes">HandBrake</property>
+ <property name="default_width">500</property>
+ <property name="default_height">400</property>
+ <property name="icon_name">hb-icon</property>
+ <signal name="map" handler="window_map_cb" swapped="no"/>
+ <signal name="size-allocate" handler="hb_win_sz_alloc_cb" swapped="no"/>
+ <signal name="close-request" handler="window_delete_event_cb" swapped="no"/>
+ <signal name="destroy" handler="window_destroy_event_cb" swapped="no"/>
+ <child>
+ <object class="GtkBox" id="vbox48">
+ <property name="orientation">vertical</property>
+ <property name="expand">True</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkMenuBar" id="main_menu">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkMenuItem" id="file_menu">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_File</property>
+ <property name="use_underline">True</property>
+ <child type="submenu">
+ <object class="GtkMenu" id="file_submenu">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkMenuItem" id="source_open">
+ <property name="label" translatable="yes">Open _Source</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.source</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="source_title_open">
+ <property name="label" translatable="yes">Open Single _Title</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.single</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="destination_menu_item">
+ <property name="label" translatable="yes">Set _Destination</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.destination</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="separatormenuitem1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="preferences">
+ <property name="label" translatable="yes">_Preferences</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.preferences</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="separatormenuitem2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="quit">
+ <property name="label" translatable="yes">_Quit</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.quit</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="queue_menu">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_Queue</property>
+ <property name="use_underline">True</property>
+ <child type="submenu">
+ <object class="GtkMenu" id="queue_submenu">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkMenuItem" id="queue_add_menu">
+ <property name="label" translatable="yes">_Add</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.queue-add</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="queue_add_multiple_menu">
+ <property name="label" translatable="yes">Add _Multiple</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.queue-add-all</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="queue_start_menu">
+ <property name="label" translatable="yes">_Start Encoding</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.queue-start</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="queue_pause_menu">
+ <property name="label" translatable="yes">_Pause Encoding</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.queue-pause</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="queue_save_menu">
+ <property name="label" translatable="yes">S_ave Queue</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.queue-export</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="queue_open_menu">
+ <property name="label" translatable="yes">_Load Queue File</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.queue-import</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="view_menu">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_View</property>
+ <property name="use_underline">True</property>
+ <child type="submenu">
+ <object class="GtkMenu" id="view_submenu">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkCheckMenuItem" id="hbfd">
+ <property name="label" translatable="yes">HandBrake For _Dumbies</property>
+ <property name="visible">False</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.hbfd</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="show_presets_menu">
+ <property name="label" translatable="yes">Presets _List</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.show-presets</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="show_queue_menu">
+ <property name="label" translatable="yes">_Queue</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.show-queue</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="show_preview_menu">
+ <property name="label" translatable="yes">_Preview</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.show-preview</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckMenuItem" id="show_activity_menu">
+ <property name="label" translatable="yes">_Activity Window</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.show-activity</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="presets_menu">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_Presets</property>
+ <property name="use_underline">True</property>
+ <child type="submenu">
+ <object class="GtkMenu" id="presets_submenu">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkMenuItem" id="presets_default">
+ <property name="label" translatable="yes">Set De_fault</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.preset-default</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="presets_sep1">
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="presets_save">
+ <property name="label" translatable="yes">_Save</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.preset-save</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="presets_save_as">
+ <property name="label" translatable="yes">Save _As</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.preset-save-as</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="presets_rename">
+ <property name="label" translatable="yes">_Rename</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.preset-rename</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="presets_remove">
+ <property name="label" translatable="yes">_Delete</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.preset-remove</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="presets_sep2">
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="presets_import">
+ <property name="label" translatable="yes">_Import</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.preset-import</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="presets_export">
+ <property name="label" translatable="yes">_Export</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.preset-export</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorMenuItem" id="presets_sep3">
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="presets_restore">
+ <property name="label" translatable="yes">Reset _Built-in Presets</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.presets-reload</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="help_menu">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_Help</property>
+ <property name="use_underline">True</property>
+ <child type="submenu">
+ <object class="GtkMenu" id="help_submenu">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkMenuItem" id="about">
+ <property name="label" translatable="yes">_About</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.about</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="guide">
+ <property name="label" translatable="yes">_Guide</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="action-name">app.guide</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="vbox11">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">False</property>
+ <property name="halign">GTK_ALIGN_FILL</property>
+ <child>
+ <object class="GtkToolbar" id="toolbar1">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="can_focus">False</property>
+ <property name="show-arrow">False</property>
+ <property name="toolbar-style">GTK_TOOLBAR_BOTH</property>
+ <child>
+ <object class="GtkToolButton" id="sourcetoolbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Choose Video Source</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Open Source</property>
+ <property name="icon_name">hb-source</property>
+ <property name="action-name">app.source</property>
+ <property name="homogeneous">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorToolItem" id="main_tool_sep2">
+ <property name="visible">True</property>
+ <property name="width-request">60</property>
+ <property name="draw">False</property>
+ <property name="homogeneous">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="queue_add">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Add to Queue</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Add To Queue</property>
+ <property name="icon_name">hb-add-queue</property>
+ <property name="action-name">app.queue-add</property>
+ <property name="homogeneous">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="queue_start">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Start Encoding</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Start</property>
+ <property name="icon_name">hb-start</property>
+ <property name="action-name">app.queue-start</property>
+ <property name="homogeneous">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="queue_pause">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Pause Encoding</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Pause</property>
+ <property name="icon_name">hb-pause</property>
+ <property name="action-name">app.queue-pause</property>
+ <property name="homogeneous">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparatorToolItem" id="main_tool_sep1">
+ <property name="visible">True</property>
+ <property name="draw">False</property>
+ <property name="expand">True</property>
+ <property name="halign">GTK_ALIGN_FILL</property>
+ <property name="homogeneous">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToggleToolButton" id="show_presets">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Show Presets Window</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Presets</property>
+ <property name="icon_name">hb-presets</property>
+ <property name="action-name">app.show-presets</property>
+ <property name="homogeneous">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToggleToolButton" id="show_preview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Show Preview Window</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Preview</property>
+ <property name="icon_name">hb-picture</property>
+ <property name="action-name">app.show-preview</property>
+ <property name="homogeneous">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToggleToolButton" id="show_queue">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Show Queue</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Queue</property>
+ <property name="icon_name">hb-showqueue</property>
+ <property name="action-name">app.show-queue</property>
+ <property name="homogeneous">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToggleToolButton" id="show_activity">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Show Activity Window</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Activity</property>
+ <property name="icon_name">hb-activity</property>
+ <property name="action-name">app.show-activity</property>
+ <property name="homogeneous">False</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="source_title_preset_grid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="row-homogeneous">True</property>
+ <property name="column-spacing">5</property>
+ <property name="hexpand">True</property>
+ <property name="halign">GTK_ALIGN_FILL</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="row-spacing">2</property>
+ <child>
+ <object class="GtkLabel" id="label7">
+ <property name="visible">True</property>
+ <property name="justify">left</property>
+ <property name="xalign">0</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Source:&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="SourceInfoBox">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="spacing">0</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ </layout>
+ <child>
+ <object class="GtkLabel" id="source_label">
+ <property name="visible">True</property>
+ <property name="max-width-chars">60</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="ellipsize">middle</property>
+ <property name="label" translatable="yes">None</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="source_info_label">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes"></property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="SourceScanBox">
+ <property name="orientation">horizontal</property>
+ <property name="visible">False</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <property name="hexpand">True</property>
+ <property name="halign">GTK_ALIGN_FILL</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ </layout>
+ <child>
+ <object class="GtkLabel" id="source_scan_label">
+ <property name="visible">True</property>
+ <property name="width-chars">40</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="margin-end">12</property>
+ <property name="label" translatable="yes">Scanning...</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkProgressBar" id="scan_prog">
+ <property name="visible">False</property>
+ <property name="height_request">10</property>
+ <property name="can_focus">False</property>
+ <property name="valign">center</property>
+ <property name="hexpand">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label20">
+ <property name="visible">True</property>
+ <property name="justify">left</property>
+ <property name="xalign">0</property>
+ <property name="can_focus">False</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Title:&lt;/b&gt;</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox42">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="spacing">5</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ <child>
+ <object class="GtkComboBox" id="title">
+ <property name="visible">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="width-request">100</property>
+ <property name="popup-fixed-width">False</property>
+ <property name="tooltip_text" translatable="yes">Set the title to encode.
+By default the longest title is chosen.
+This is often the feature title of a DVD.</property>
+ <property name="has_frame">False</property>
+ <child>
+ <object class="GtkFrame" id="title_frame">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+ <child>
+ <object class="GtkLabel" id="title_label">
+ <property name="width-chars">30</property>
+ <property name="max-width-chars">30</property>
+ <property name="ellipsize">end</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-start">6</property>
+ <property name="margin-end">6</property>
+ <property name="halign">start</property>
+ <property name="xalign">0.0</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">&lt;small&gt;No Titles&lt;/small&gt;</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <signal name="changed" handler="title_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="angle_label">
+ <property name="visible">False</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="use_markup">True</property>
+ <property name="margin-start">6</property>
+ <property name="label" translatable="yes">&lt;b&gt;Angle:&lt;/b&gt;</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="angle">
+ <property name="width-chars">3</property>
+ <property name="visible">False</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">For multi-angle DVD's, select the desired angle to encode.</property>
+ <property name="adjustment">adjustment27</property>
+ <property name="halign">end</property>
+ <signal name="value-changed" handler="title_angle_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="range_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="use_markup">True</property>
+ <property name="margin-start">6</property>
+ <property name="label" translatable="yes">&lt;b&gt;Range:&lt;/b&gt;</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="PtoPType">
+ <property name="visible">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Range of title to encode. Can be chapters, seconds, or frames.</property>
+ <signal name="changed" handler="ptop_widget_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="start_point">
+ <property name="width-chars">11</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Set the first chapter to encode.</property>
+ <property name="adjustment">adjustment1</property>
+ <property name="numeric">True</property>
+ <signal name="value-changed" handler="start_point_changed_cb" swapped="no"/>
+ <signal name="output" handler="ptop_output_cb" swapped="no"/>
+ <signal name="input" handler="ptop_input_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label56">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">-</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="end_point">
+ <property name="width-chars">11</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Set the last chapter to encode.</property>
+ <property name="adjustment">adjustment2</property>
+ <property name="numeric">True</property>
+ <signal name="value-changed" handler="end_point_changed_cb" swapped="no"/>
+ <signal name="output" handler="ptop_output_cb" swapped="no"/>
+ <signal name="input" handler="ptop_input_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="preset_selection_label">
+ <property name="visible">True</property>
+ <property name="justify">left</property>
+ <property name="xalign">0</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Preset:&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="preset_selection_box">
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-end">12</property>
+ <property name="spacing">5</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">1</property>
+ </layout>
+ <child>
+ <object class="GtkMenuButton" id="presets_menu_button">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="direction">right</property>
+ <child>
+ <object class="GtkBox" id="presets_menu_button_box">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="presets_menu_button_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="width-chars">50</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Choose Preset</property>
+ <property name="use_markup">True</property>
+ <property name="hexpand">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage" id="presets_menu_button_arrow">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">pan-end-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="preset_selection_modified_label">
+ <property name="visible">False</property>
+ <property name="can_focus">False</property>
+ <property name="width-chars">10</property>
+ <property name="label" translatable="yes"></property>
+ <property name="label" translatable="yes">&lt;u&gt;&lt;i&gt;Modified&lt;/i&gt;&lt;/u&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="preset_selection_reload">
+ <property name="label" translatable="yes">Reload</property>
+ <property name="visible">False</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Reload the settings for the currently selected preset.
+Modifications will be discarded.</property>
+ <property name="receives_default">True</property>
+ <property name="halign">end</property>
+ <property name="action-name">app.preset-reload</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="preset_save_new">
+ <property name="label" translatable="yes">Save New Preset</property>
+ <property name="visible">False</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Save the current settings to a new Preset.</property>
+ <property name="receives_default">True</property>
+ <property name="halign">end</property>
+ <property name="action-name">app.preset-save-as</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="settings_tab">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkStackSwitcher" id="SettingsStackSwitcher">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stack">SettingsStack</property>
+ <property name="hexpand">True</property>
+ <property name="halign">GTK_ALIGN_FILL</property>
+ <property name="valign">GTK_ALIGN_START</property>
+ <property name="margin-top">12</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStack" id="SettingsStack">
+ <property name="homogeneous">True</property>
+ <property name="transition-type">GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT</property>
+ <property name="transition-duration">400</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">summary_tab</property>
+ <property name="title" translatable="yes">Summary</property>
+ <property name="child">
+ <object class="GtkBox" id="summary_tab">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="expand">True</property>
+ <property name="margin-top">12</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">3</property>
+ <child>
+ <object class="GtkGrid" id="summary_table">
+ <property name="visible">True</property>
+ <property name="vexpand">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-end">32</property>
+ <property name="row-spacing">2</property>
+ <property name="column-spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="format_summary_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Format:</property>
+ <property name="xalign">0</property>
+ <property name="use_markup">True</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="FileFormat">
+ <property name="visible">True</property>
+ <property name="halign">start</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Format to mux encoded tracks to.</property>
+ <signal name="changed" handler="container_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="Mp4HttpOptimize">
+ <property name="label" translatable="yes">Web Optimized</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Optimize the layout of the MP4 file for progressive download.
+This allows a player to initiate playback before downloading the entire file.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="AlignAVStart">
+ <property name="label" translatable="yes">Align A/V Start</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Aligns the initial timestamps of all audio and video streams by
+inserting blank frames or dropping frames. May improve audio/video
+sync for broken players that do not honor MP4 edit lists.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="Mp4iPodCompatible">
+ <property name="label" translatable="yes">iPod 5G Support</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Add iPod Atom needed by some older iPods.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="halign">start</property>
+ <property name="use_markup">True</property>
+ <property name="margin-top">12</property>
+ <property name="label" translatable="yes">Duration:</property>
+ <layout>
+ <property name="top-attach">4</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="title_duration">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes">hh:mm:ss</property>
+ <property name="margin-top">12</property>
+ <property name="width-chars">8</property>
+ <layout>
+ <property name="top-attach">4</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="tracks_summary_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Tracks:</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="margin-top">12</property>
+ <property name="use_markup">True</property>
+ <layout>
+ <property name="top-attach">5</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="tracks_summary">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="width-chars">30</property>
+ <property name="max-width-chars">50</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="wrap">True</property>
+ <property name="margin-top">12</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_markup">True</property>
+ <layout>
+ <property name="top-attach">5</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="filters_summary_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Filters:</property>
+ <property name="use_markup">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="margin-top">12</property>
+ <layout>
+ <property name="top-attach">13</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="filters_summary">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="width-chars">30</property>
+ <property name="max-width-chars">50</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="wrap">True</property>
+ <property name="margin-top">12</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_markup">True</property>
+ <layout>
+ <property name="top-attach">13</property>
+ <property name="left-attach">1</property>
+ <property name="row-span">4</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="dimensions_summary_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Size:</property>
+ <property name="use_markup">True</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="margin-top">12</property>
+ <layout>
+ <property name="top-attach">14</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="dimensions_summary">
+ <property name="width_request">85</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="margin-top">12</property>
+ <property name="label" translatable="yes">--</property>
+ <layout>
+ <property name="top-attach">14</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="vbox9">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="expand">True</property>
+ <property name="margin-top">12</property>
+ <property name="margin-end">0</property>
+ <child>
+ <object class="GtkImage" id="preview_button_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-bottom">4</property>
+ <property name="margin-start">4</property>
+ <property name="margin-end">4</property>
+ <property name="expand">True</property>
+ <property name="pixel_size">128</property>
+ <property name="icon_name">hb-icon</property>
+ <signal name="size-allocate" handler="preview_button_size_allocate_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">picture_tab</property>
+ <property name="title" translatable="yes">Dimensions</property>
+ <property name="child">
+ <object class="GtkBox" id="picture_tab">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-top">16</property>
+ <property name="margin-start">0</property>
+ <property name="spacing">16</property>
+ <child>
+ <object class="GtkBox" id="hbox75">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">32</property>
+ <child>
+ <object class="GtkFrame" id="Cropping2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <property name="margin-start">2</property>
+ <property name="margin-end">2</property>
+ <child>
+ <object class="GtkBox" id="vbox6">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-top">6</property>
+ <child>
+ <object class="GtkGrid" id="crop_grid">
+ <property name="row-spacing">4</property>
+ <property name="column-spacing">0</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkCheckButton" id="PictureAutoCrop">
+ <property name="label" translatable="yes">Auto Crop</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Automatically crop black borders around edges of the video.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="scale_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ <property name="column-span">4</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="PictureLooseCrop">
+ <property name="label" translatable="yes">Loose Crop</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">When picture settings require that the image
+dimensions be rounded to some multiple number
+of pixels, this setting will crop a few extra pixels
+instead of doing exact cropping and then scaling to
+the required multiple.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="scale_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ <property name="column-span">4</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="PictureLeftCrop">
+ <property name="width-chars">6</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Left Crop</property>
+ <property name="adjustment">adjustment13</property>
+ <signal name="value-changed" handler="crop_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ <property name="column-span">6</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="PictureTopCrop">
+ <property name="width-chars">6</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Top Crop</property>
+ <property name="adjustment">adjustment14</property>
+ <signal name="value-changed" handler="crop_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">5</property>
+ <property name="column-span">6</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="PictureBottomCrop">
+ <property name="width-chars">6</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Bottom Crop</property>
+ <property name="adjustment">adjustment15</property>
+ <signal name="value-changed" handler="crop_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">5</property>
+ <property name="column-span">6</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="PictureRightCrop">
+ <property name="width-chars">6</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Right Crop</property>
+ <property name="adjustment">adjustment16</property>
+ <signal name="value-changed" handler="crop_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">10</property>
+ <property name="column-span">6</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label97">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Crop Dimensions:</property>
+ <layout>
+ <property name="top-attach">5</property>
+ <property name="left-attach">0</property>
+ <property name="column-span">4</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="crop_dimensions2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">--</property>
+ <layout>
+ <property name="top-attach">5</property>
+ <property name="left-attach">4</property>
+ <property name="column-span">4</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label26">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Cropping&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <property name="margin-start">2</property>
+ <property name="margin-end">2</property>
+ <child>
+ <object class="GtkBox" id="vbox30">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkGrid" id="scale_grid">
+ <property name="row-spacing">2</property>
+ <property name="column-spacing">4</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkCheckButton" id="autoscale">
+ <property name="label" translatable="yes">Optimal for source</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">If enabled, select the 'optimal' storage resolution.
+This will be the resolution that most closely matches the source resolution after cropping.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="scale_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ <property name="column-span">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label27">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Width:</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="scale_width">
+ <property name="width-chars">6</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">This is the width that the video will be stored at.
+The actual display dimensions will differ if the pixel aspect ratio is not 1:1.</property>
+ <property name="adjustment">adjustment17</property>
+ <property name="snap_to_ticks">True</property>
+ <signal name="value-changed" handler="scale_width_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label28">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Height:</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="scale_height">
+ <property name="width-chars">6</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">This is the height that the video will be stored at.
+The actual display dimensions will differ if the pixel aspect ratio is not 1:1.</property>
+ <property name="adjustment">adjustment18</property>
+ <signal name="value-changed" handler="scale_height_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="ana_grid">
+ <property name="row-spacing">2</property>
+ <property name="column-spacing">4</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkLabel" id="label96">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Anamorphic:</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="PicturePAR">
+ <property name="visible">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_markup" translatable="yes">&lt;b&gt;Anamorphic Modes:&lt;/b&gt;
+&lt;small&gt;&lt;tt&gt;
+None - Force pixel aspect ratio to 1:1.
+Loose - Use a pixel aspect ratio that is as
+ close as possible to the source video pixel
+ aspect ratio while preserving the original
+ display aspect ratio
+Automatic - Use a pixel aspect ratio that maximizes
+ storage resolution while preserving the original
+ display aspect ratio&lt;/tt&gt;&lt;/small&gt;</property>
+ <signal name="changed" handler="scale_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label95">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Alignment:</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="PictureModulus">
+ <property name="visible">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Align storage dimensions to multiples of this value.
+
+This setting is only necessary for compatibility with some devices.
+You should use 2 unless you experience compatibility issues.</property>
+ <signal name="changed" handler="scale_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label25">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Storage Geometry&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <property name="margin-start">2</property>
+ <property name="margin-end">2</property>
+ <child>
+ <object class="GtkBox" id="vbox10">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkGrid" id="display_grid">
+ <property name="row-spacing">2</property>
+ <property name="column-spacing">4</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkCheckButton" id="PictureKeepRatio">
+ <property name="label" translatable="yes">Keep Aspect</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">If enabled, the original display aspect of the source will be maintained.</property>
+ <property name="halign">start</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="scale_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ <property name="column-span">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label91">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Width:</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="PictureDisplayWidth">
+ <property name="width-chars">6</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">This is the display width. It is the result of scaling the storage dimensions by the pixel aspect.</property>
+ <property name="adjustment">adjustment25</property>
+ <property name="snap_to_ticks">True</property>
+ <signal name="value-changed" handler="display_width_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label92">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Height:</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="PictureDisplayHeight">
+ <property name="width-chars">6</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">adjustment26</property>
+ <signal name="value-changed" handler="display_height_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="aspect_grid">
+ <property name="row-spacing">2</property>
+ <property name="column-spacing">4</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkLabel" id="label98">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Pixel Aspect:</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="PicturePARWidth">
+ <property name="width-chars">6</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Pixel aspect defines the shape of the pixels.
+
+A 1:1 ratio defines a square pixel. Other values define rectangular shapes.
+Players will scale the image in order to achieve the specified aspect.</property>
+ <property name="adjustment">adjustment29</property>
+ <property name="snap_to_ticks">True</property>
+ <signal name="value-changed" handler="par_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label99">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">:</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="PicturePARHeight">
+ <property name="width-chars">6</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Pixel aspect defines the shape of the pixels.
+A 1:1 ratio defines a square pixel. Other values define rectangular shapes.
+Players will scale the image in order to achieve the specified aspect.</property>
+ <property name="adjustment">adjustment30</property>
+ <signal name="value-changed" handler="par_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">3</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label93">
+ <property name="width_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Display Aspect:</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="display_aspect">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">--:--</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label29">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Display Geometry&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">filter_tab</property>
+ <property name="title" translatable="yes">Filters</property>
+ <property name="child">
+ <object class="GtkFlowBox" id="filter_tab">
+ <property name="orientation">horizontal</property>
+ <property name="selection-mode">none</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">4</property>
+ <property name="row-spacing">32</property>
+ <property name="margin-top">16</property>
+ <property name="margin-start">0</property>
+ <property name="valign">start</property>
+ <property name="halign">fill</property>
+ <child>
+ <object class="GtkGrid" id="table10">
+ <property name="row-spacing">2</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">5</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkLabel" id="label86">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Detelecine:</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="PictureDetelecine">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="width_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">This filter removes 'combing' artifacts that are the result of telecining.
+
+Telecining is a process that adjusts film framerates that are 24fps to NTSC video frame rates which are 30fps.</property>
+ <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="PictureDetelecineCustom">
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Custom detelecine filter string format
+
+JunkLeft:JunkRight:JunkTop:JunkBottom:StrictBreaks:MetricPlane:Parity</property>
+ <property name="width-chars">8</property>
+ <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="comb_detect_grid">
+ <property name="row-spacing">2</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">5</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkLabel" id="comb_detect_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Interlace Detection:</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="PictureCombDetectPreset">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="width_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">This filter detects interlaced frames.
+
+If a deinterlace filter is enabled, only frames that this filter finds
+to be interlaced will be deinterlaced.</property>
+ <signal name="changed" handler="comb_detect_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="PictureCombDetectCustom">
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Custom interlace detection filter string format
+
+Mode:Spatial Metric:Motion Thresh:Spatial Thresh:Mask Filter Mode:
+Block Thresh: Block Width: Block Height</property>
+ <property name="width-chars">8</property>
+ <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="table14">
+ <property name="row-spacing">2</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">5</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkLabel" id="PictureDeinterlaceFilterLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Deinterlace:</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="PictureDeinterlaceFilter">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="width_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Choose decomb or deinterlace filter.
+
+The decomb filter supports a variety of interpolation algorithms.
+The deinterlace filter is a classic YADIF deinterlacer.
+</property>
+ <signal name="changed" handler="deint_filter_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="PictureDeinterlacePresetLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Deinterlace Preset:</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="PictureDeinterlacePreset">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="width_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Choose decomb or deinterlace filter options.
+
+The decomb filter supports a variety of interpolation algorithms.
+The deinterlace filter is a classic YADIF deinterlacer.
+</property>
+ <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="PictureDeinterlaceCustom">
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes"></property>
+ <property name="width-chars">8</property>
+ <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="table90">
+ <property name="row-spacing">2</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">5</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkLabel" id="PictureDeblockPresetLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Deblock Filter:</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="PictureDeblockPreset">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="width_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">The deblocking filter removes a common type of compression artifact.
+If your source exhibits 'blockiness', this filter may help clean it up.</property>
+ <signal name="changed" handler="denoise_filter_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="PictureDeblockTuneLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Deblock Tune:</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="PictureDeblockTune">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="width_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">The deblocking filter removes a common type of compression artifact.
+If your source exhibits 'blockiness', this filter may help clean it up.</property>
+ <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="PictureDeblockCustom">
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Custom deblock filter string format
+
+strength=weak|strong:thresh=0-100:blocksize=4-512</property>
+ <property name="width-chars">8</property>
+ <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="table1">
+ <property name="row-spacing">2</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">5</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkLabel" id="label32">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Denoise Filter:</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="PictureDenoiseFilter">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="width_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Denoise filtering reduces or removes the appearance of noise and grain.
+Film grain and other types of high frequency noise are difficult to compress.
+Using this filter on such sources can result in smaller file sizes.</property>
+ <signal name="changed" handler="denoise_filter_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="PictureDenoisePresetLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Denoise Preset:</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="PictureDenoisePreset">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="width_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Denoise filtering reduces or removes the appearance of noise and grain.
+Film grain and other types of high frequency noise are difficult to compress.
+Using this filter on such sources can result in smaller file sizes.</property>
+ <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="PictureDenoiseTuneLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Denoise Tune:</property>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="PictureDenoiseTune">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="width_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Denoise filtering reduces or removes the appearance of noise and grain.
+Film grain and other types of high frequency noise are difficult to compress.
+Using this filter on such sources can result in smaller file sizes.</property>
+ <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="PictureDenoiseCustom">
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Custom denoise filter string format
+
+SpatialLuma:SpatialChroma:TemporalLuma:TemporalChroma</property>
+ <property name="width-chars">8</property>
+ <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="SharpenTable">
+ <property name="row-spacing">2</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">5</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkLabel" id="PictureSharpenFilterel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Sharpen Filter:</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="PictureSharpenFilter">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="width_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Sharpen filtering enhances edges and other
+high frequency components in the video.</property>
+ <signal name="changed" handler="sharpen_filter_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="PictureSharpenPresetLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Sharpen Preset:</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="PictureSharpenPreset">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="width_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Sharpen filtering enhances edges and other
+high frequency components in the video.</property>
+ <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="PictureSharpenTuneLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Sharpen Tune:</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="PictureSharpenTune">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="width_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Sharpen filtering enhances edges and other
+high frequency components in the video.</property>
+ <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="PictureSharpenCustom">
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Custom denoise filter string format
+
+SpatialLuma:SpatialChroma:TemporalLuma:TemporalChroma</property>
+ <property name="width-chars">8</property>
+ <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="table16">
+ <property name="row-spacing">2</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">5</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkLabel" id="PictureRotateLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Rotate Filter:</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="PictureRotate">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="width_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Rotate the video clockwise in 90 degree increments.</property>
+ <signal name="changed" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="VideoGrayScale">
+ <property name="label" translatable="yes">Grayscale</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">If enabled, filter colour components out of video.</property>
+ <property name="halign">start</property>
+ <property name="valign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="setting_widget_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">video_tab</property>
+ <property name="title" translatable="yes">Video</property>
+ <property name="child">
+ <object class="GtkBox" id="video_tab">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">0</property>
+ <child>
+ <object class="GtkBox" id="hbox17">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">48</property>
+ <child>
+ <object class="GtkGrid" id="table15">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">5</property>
+ <property name="row-spacing">2</property>
+ <property name="margin-top">12</property>
+ <property name="margin-start">0</property>
+ <child>
+ <object class="GtkLabel" id="label46">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Video Encoder:</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="VideoEncoder">
+ <property name="visible">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Available video encoders.</property>
+ <signal name="changed" handler="vcodec_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label47">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Framerate:</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="VideoFramerate">
+ <property name="visible">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Output framerate.
+
+'Same as source' is recommended. If your source video has
+a variable framerate, 'Same as source' will preserve it.</property>
+ <signal name="changed" handler="framerate_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="VideoFramerateCFR">
+ <property name="label" translatable="yes">Constant Framerate</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enables constant framerate output.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="framerate_mode_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ <property name="column-span">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="VideoFrameratePFR">
+ <property name="label" translatable="yes">Peak Framerate (VFR)</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enables variable framerate output with a peak
+rate determined by the framerate setting.
+
+VFR is not compatible with some players.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">VideoFramerateCFR</property>
+ <signal name="toggled" handler="framerate_mode_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">0</property>
+ <property name="column-span">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="VideoFramerateVFR">
+ <property name="label" translatable="yes">Variable Framerate</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enables variable framerate output.
+
+VFR is not compatible with some players.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">VideoFramerateCFR</property>
+ <signal name="toggled" handler="framerate_mode_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">0</property>
+ <property name="column-span">2</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="table8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">5</property>
+ <property name="row-spacing">2</property>
+ <property name="margin-top">12</property>
+ <property name="margin-start">2</property>
+ <property name="margin-end">2</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="GtkScale" id="VideoQualitySlider">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Set the desired quality factor.
+The encoder targets a certain quality.
+The scale used by each video encoder is different.
+
+x264's scale is logarithmic and lower values correspond to higher quality.
+So small decreases in value will result in progressively larger increases
+in the resulting file size. A value of 0 means lossless and will result
+in a file size that is larger than the original source, unless the source
+was also lossless.
+
+FFMpeg's and Theora's scale is more linear.
+These encoders do not have a lossless mode.</property>
+ <property name="adjustment">adjustment5</property>
+ <property name="digits">3</property>
+ <property name="hexpand">True</property>
+ <signal name="format-value" handler="format_vquality_cb" swapped="no"/>
+ <signal name="value-changed" handler="vquality_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ <property name="column-span">3</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="vquality_type_constant">
+ <property name="label" translatable="yes">Constant Quality:</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Set the desired quality factor.
+The encoder targets a certain quality.
+The scale used by each video encoder is different.
+
+x264's scale is logarithmic and lower values correspond to higher quality.
+So small decreases in value will result in progressively larger increases
+in the resulting file size. A value of 0 means lossless and will result
+in a file size that is larger than the original source, unless the source
+was also lossless.
+
+FFMpeg's and Theora's scale is more linear.
+These encoders do not have a lossless mode.</property>
+ <property name="halign">start</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="vquality_type_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="vquality_type_bitrate">
+ <property name="label" translatable="yes">Bitrate (kbps): </property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Set the average bitrate.
+
+The instantaneous bitrate can be much higher or lower at any point in time.
+But the average over a long duration will be the value set here. If you need
+to limit instantaneous bitrate, look into x264's vbv-bufsize and vbv-maxrate settings.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">vquality_type_constant</property>
+ <signal name="toggled" handler="vquality_type_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="VideoAvgBitrate">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Set the average bitrate.
+
+The instantaneous bitrate can be much higher or lower at any point in time.
+But the average over a long duration will be the value set here. If you need
+to limit instantaneous bitrate, look into x264's vbv-bufsize and vbv-maxrate settings.</property>
+ <property name="adjustment">adjustment3</property>
+ <signal name="value-changed" handler="vbitrate_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="VideoTwoPass">
+ <property name="label" translatable="yes">2-Pass Encoding</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Perform 2 Pass Encoding.
+
+The 'Bitrate' option is prerequisite. During the 1st pass, statistics about
+the video are collected. Then in the second pass, those statistics are used
+to make bitrate allocation decisions.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="VideoTurboTwoPass">
+ <property name="label" translatable="yes">Turbo First Pass</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">During the 1st pass of a 2 pass encode, use settings that speed things along.</property>
+ <property name="halign">start</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="setting_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="VideoSettings">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-top">2</property>
+ <property name="margin-bottom">2</property>
+ <property name="margin-start">0</property>
+ <property name="margin-end">0</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkGrid" id="VideoSettingsTable">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">5</property>
+ <property name="row-spacing">2</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkLabel" id="VideoPresetLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Preset:</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScale" id="VideoPresetSlider">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Adjusts encoder settings to trade off compression efficiency against encoding speed.
+
+This establishes your default encoder settings.
+Tunes, profiles, levels and extra options string will be applied to this.
+You should generally set this option to the slowest you can bear since slower
+settings will result in better quality or smaller files.</property>
+ <property name="adjustment">VideoPresetRange</property>
+ <property name="digits">0</property>
+ <property name="value_pos">right</property>
+ <property name="hexpand">True</property>
+ <signal name="format-value" handler="format_video_preset_cb" swapped="no"/>
+ <signal name="value-changed" handler="video_preset_slider_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ <property name="column-span">5</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="VideoTuneLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Tune:</property>
+ <property name="margin_top">8</property>
+ <property name="margin_bottom">8</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="VideoTune">
+ <property name="visible">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Tune settings to optimize for common scenarios.
+
+This can improve efficiency for particular source characteristics or set
+characteristics of the output file. Changes will be applied after the
+preset but before all other parameters.</property>
+ <signal name="changed" handler="video_setting_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="x264FastDecode">
+ <property name="label" translatable="yes">Fast Decode</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Reduce decoder CPU usage.
+
+Set this if your device is struggling to play the output (dropped frames).</property>
+ <property name="halign">start</property>
+ <property name="margin-start">2</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="video_setting_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="x264ZeroLatency">
+ <property name="visible">False</property>
+ <property name="label" translatable="yes">Zero Latency</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Minimize latency between input to encoder and output of decoder.
+
+This is useful for broadcast of live streams.
+
+Since HandBrake is not suitable for live stream broadcast purposes,
+this setting is of little value here.</property>
+ <property name="halign">start</property>
+ <property name="margin-start">2</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="video_setting_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">3</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="VideoProfileLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Profile:</property>
+ <property name="margin_top">8</property>
+ <property name="margin_bottom">8</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="VideoProfile">
+ <property name="visible">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Sets and ensures compliance with the specified profile.
+
+Overrides all other settings.</property>
+ <signal name="changed" handler="video_setting_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="VideoLevelLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Level:</property>
+ <property name="margin_top">8</property>
+ <property name="margin_bottom">8</property>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="VideoLevel">
+ <property name="visible">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Sets and ensures compliance with the specified level.
+
+Overrides all other settings.</property>
+ <signal name="changed" handler="video_setting_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox43">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">5</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">2</property>
+ <property name="column-span">4</property>
+ <property name="row-span">2</property>
+ </layout>
+ <child>
+ <object class="GtkLabel" id="VideoOptionExtraLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">More Settings:</property>
+ <property name="margin-start">5</property>
+ <property name="margin-end">5</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="VideoOptionExtraWindow">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="shadow_type">etched-in</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="GtkTextView" id="VideoOptionExtra">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Additional encoder settings.
+
+Colon separated list of encoder options.</property>
+ <property name="wrap_mode">char</property>
+ <property name="accepts_tab">False</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">audio_tab</property>
+ <property name="title" translatable="yes">Audio</property>
+ <property name="child">
+ <object class="GtkBox" id="audio_tab">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">horizontal</property>
+ <property name="margin-start">0</property>
+ <property name="margin-end">0</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">0</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkStackSidebar" id="AudioStackSidebar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stack">AudioStack</property>
+ <property name="vexpand">True</property>
+ <property name="valign">GTK_ALIGN_FILL</property>
+ <property name="halign">start</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStack" id="AudioStack">
+ <property name="homogeneous">True</property>
+ <property name="transition-type">GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT</property>
+ <property name="transition-duration">400</property>
+ <property name="visible">True</property>
+ <property name="expand">True</property>
+ <property name="can_focus">False</property>
+
+ <property name="margin-top">0</property>
+ <property name="margin-bottom">0</property>
+ <property name="margin-start">12</property>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">audio_list_tab</property>
+ <property name="title" translatable="yes">Track List</property>
+ <property name="child">
+ <object class="GtkBox" id="audio_list_tab">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkBox" id="vbox17">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkToolbar" id="audio_toolbar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkToolButton" id="audio_add">
+ <property name="visible">True</property>
+ <property name="sensitive">True</property>
+ <property name="can_focus">True</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Add</property>
+ <property name="icon_name">list-add</property>
+ <property name="tooltip_text" translatable="yes">Add new audio settings to the list</property>
+ <signal name="clicked" handler="audio_add_clicked_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="audio_add_all">
+ <property name="visible">True</property>
+ <property name="sensitive">True</property>
+ <property name="can_focus">True</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Add All</property>
+ <property name="icon_name">list-add</property>
+ <property name="tooltip_text" translatable="yes">Add all audio tracks to the list</property>
+ <signal name="clicked" handler="audio_add_all_clicked_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="audio_reset">
+ <property name="visible">True</property>
+ <property name="sensitive">True</property>
+ <property name="can_focus">True</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Reload</property>
+ <property name="icon_name">emblem-default</property>
+ <property name="tooltip_text" translatable="yes">Reload all audio settings from defaults</property>
+ <signal name="clicked" handler="audio_reset_clicked_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vexpand">True</property>
+ <property name="valign">GTK_ALIGN_FILL</property>
+ <child>
+ <object class="GtkTreeView" id="audio_list_view">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ <property name="headers_clickable">False</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="treeview-selection1"/>
+ </child>
+ <signal name="row-activated" handler="audio_row_activated_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">audio_selection_tab</property>
+ <property name="title" translatable="yes">Track Selection</property>
+ <property name="child">
+ <object class="GtkBox" id="audio_selection_tab">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="GtkBox" id="audio_selection_box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkBox" id="audio_defaults_box2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkGrid" id="grid2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">5</property>
+ <property name="row-spacing">2</property>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Selection Behavior:</property>
+ <property name="justify">right</property>
+ <layout>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="AudioTrackSelectionBehavior">
+ <property name="visible">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Choose which audio tracks of the source media are used.</property>
+ <signal name="changed" handler="audio_def_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">5</property>
+ <property name="row-spacing">2</property>
+ <property name="halign">GTK_ALIGN_END</property>
+ <property name="margin_top">6</property>
+ <property name="margin_bottom">6</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="min_content_height">84</property>
+ <property name="vexpand">True</property>
+ <layout>
+ <property name="left-attach">0</property>
+ <property name="top-attach">1</property>
+ <property name="row-span">4</property>
+ </layout>
+ <child>
+ <object class="GtkTreeView" id="audio_avail_lang">
+ <property name="visible">True</property>
+ <property name="headers-visible">False</property>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <signal name="row-activated" handler="audio_avail_lang_activated_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow11">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <layout>
+ <property name="left-attach">2</property>
+ <property name="top-attach">1</property>
+ <property name="row-span">4</property>
+ </layout>
+ <child>
+ <object class="GtkTreeView" id="audio_selected_lang">
+ <property name="visible">True</property>
+ <property name="headers-visible">False</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Create a list of languages you would like to select audio for.
+Tracks matching these languages will be selected using the chosen Selection Behavior.</property>
+ <signal name="row-activated" handler="audio_selected_lang_activated_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="audio_lang_add">
+ <property name="label" translatable="yes">Add</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <signal name="clicked" handler="audio_add_lang_clicked_cb" swapped="no"/>
+ <layout>
+ <property name="left-attach">1</property>
+ <property name="top-attach">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="audio_lang_remove">
+ <property name="label" translatable="yes">Remove</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <signal name="clicked" handler="audio_remove_lang_clicked_cb" swapped="no"/>
+ <layout>
+ <property name="left-attach">1</property>
+ <property name="top-attach">3</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Available Languages</property>
+ <layout>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label24">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Selected Languages</property>
+ <layout>
+ <property name="left-attach">2</property>
+ <property name="top-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="AudioSecondaryEncoderMode">
+ <property name="label" translatable="yes">Use only first encoder for secondary audio</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Only the primary audio track will be encoded with the full encoder list.
+All other secondary audio output tracks will be encoded with first encoder only.</property>
+ <property name="halign">start</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="audio_def_widget_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="auto_pass_box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="margin-start">6</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkGrid" id="grid4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">5</property>
+ <property name="row-spacing">2</property>
+ <property name="halign">end</property>
+ <child>
+ <object class="GtkLabel" id="labela3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Auto Passthru:</property>
+ <layout>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="AudioAllowMP3Pass">
+ <property name="label" translatable="yes">MP3</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enable this if your playback device supports MP3.
+This permits MP3 passthru to be selected when automatic passthru selection is enabled.</property>
+ <property name="halign">start</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="audio_passthru_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="AudioAllowAACPass">
+ <property name="label" translatable="yes">AAC</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enable this if your playback device supports AAC.
+This permits AAC passthru to be selected when automatic passthru selection is enabled.</property>
+ <property name="halign">start</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="audio_passthru_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="left-attach">2</property>
+ <property name="top-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="AudioAllowAC3Pass">
+ <property name="label" translatable="yes">AC-3</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enable this if your playback device supports AC-3.
+This permits AC-3 passthru to be selected when automatic passthru selection is enabled.</property>
+ <property name="halign">start</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="audio_passthru_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="left-attach">1</property>
+ <property name="top-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="AudioAllowDTSPass">
+ <property name="label" translatable="yes">DTS</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enable this if your playback device supports DTS.
+This permits DTS passthru to be selected when automatic passthru selection is enabled.</property>
+ <property name="halign">start</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="audio_passthru_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="left-attach">1</property>
+ <property name="top-attach">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="AudioAllowDTSHDPass">
+ <property name="label" translatable="yes">DTS-HD</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enable this if your playback device supports DTS-HD.
+This permits DTS-HD passthru to be selected when automatic passthru selection is enabled.</property>
+ <property name="halign">start</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="audio_passthru_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="left-attach">2</property>
+ <property name="top-attach">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="AudioAllowEAC3Pass">
+ <property name="label" translatable="yes">EAC-3</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enable this if your playback device supports EAC-3.
+This permits EAC-3 passthru to be selected when automatic passthru selection is enabled.</property>
+ <property name="halign">start</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="audio_passthru_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="left-attach">2</property>
+ <property name="top-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="AudioAllowTRUEHDPass">
+ <property name="label" translatable="yes">TrueHD</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enable this if your playback device supports TrueHD.
+This permits TrueHD passthru to be selected when automatic passthru selection is enabled.</property>
+ <property name="halign">start</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="audio_passthru_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="left-attach">1</property>
+ <property name="top-attach">3</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="AudioAllowFLACPass">
+ <property name="label" translatable="yes">FLAC</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enable this if your playback device supports FLAC.
+This permits FLAC passthru to be selected when automatic passthru selection is enabled.</property>
+ <property name="halign">start</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="audio_passthru_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="left-attach">2</property>
+ <property name="top-attach">3</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="auto_fallback_box">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">6</property>
+ <property name="halign">end</property>
+ <child>
+ <object class="GtkLabel" id="labela4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="hexpand">True</property>
+ <property name="label" translatable="yes">Passthru Fallback:</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="AudioEncoderFallback">
+ <property name="visible">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Set the audio codec to encode with when a suitable track can not be found for audio passthru.</property>
+ <signal name="changed" handler="audio_fallback_widget_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="audio_def_settings_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">6</property>
+ <property name="halign">start</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Audio Encoder Settings:&lt;/b&gt;</property>
+ <property name="tooltip_markup" translatable="yes">Each selected source track will be encoded with all selected encoders</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSeparator" id="sep1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="audio_list_default_header">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="audio_defaults_encoder_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Encoder</property>
+ <property name="halign">GTK_ALIGN_CENTER</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="audio_defaults_bitrate_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Bitrate/Quality</property>
+ <property name="halign">GTK_ALIGN_CENTER</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="audio_defaults_mixdown_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Mixdown</property>
+ <property name="halign">GTK_ALIGN_CENTER</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="audio_defaults_samplerate_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Samplerate</property>
+ <property name="halign">GTK_ALIGN_CENTER</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="audio_defaults_gain_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Gain</property>
+ <property name="halign">GTK_ALIGN_CENTER</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="audio_defaults_drc_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">DRC</property>
+ <property name="halign">GTK_ALIGN_CENTER</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow12">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkListBox" id="audio_list_default">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="selection_mode">none</property>
+ <property name="activate_on_single_click">False</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">subtitle_tab</property>
+ <property name="title" translatable="yes">Subtitles</property>
+ <property name="child">
+ <object class="GtkBox" id="subtitle_tab">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">horizontal</property>
+ <property name="margin-start">0</property>
+ <property name="margin-end">0</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">0</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkStackSidebar" id="SubtitleStackSidebar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stack">SubtitleStack</property>
+ <property name="vexpand">True</property>
+ <property name="valign">GTK_ALIGN_FILL</property>
+ <property name="halign">start</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStack" id="SubtitleStack">
+ <property name="homogeneous">True</property>
+ <property name="transition-type">GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT</property>
+ <property name="transition-duration">400</property>
+ <property name="visible">True</property>
+ <property name="expand">True</property>
+ <property name="can_focus">False</property>
+
+ <property name="margin-top">0</property>
+ <property name="margin-bottom">0</property>
+ <property name="margin-start">12</property>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">subtitle_list_tab</property>
+ <property name="title" translatable="yes">Track List</property>
+ <property name="child">
+ <object class="GtkBox" id="subtitle_list_tab">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkBox" id="vbox12">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkToolbar" id="subtitle_toolbar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkToolButton" id="subtitle_add">
+ <property name="visible">True</property>
+ <property name="sensitive">True</property>
+ <property name="can_focus">True</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Add</property>
+ <property name="icon_name">list-add</property>
+ <property name="tooltip_text" translatable="yes">Add new subtitle settings to the list</property>
+ <signal name="clicked" handler="subtitle_add_clicked_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="subtitle_add_all">
+ <property name="visible">True</property>
+ <property name="sensitive">True</property>
+ <property name="can_focus">True</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Add All</property>
+ <property name="icon_name">list-add</property>
+ <property name="tooltip_text" translatable="yes">Add all subtitle tracks to the list</property>
+ <signal name="clicked" handler="subtitle_add_all_clicked_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="subtitle_add_fas">
+ <property name="visible">True</property>
+ <property name="sensitive">True</property>
+ <property name="can_focus">True</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Foreign Audio Scan</property>
+ <property name="icon_name">list-add</property>
+ <property name="tooltip_text" translatable="yes">Add an extra pass to the encode which searches
+for subtitle candidates that provide subtitles for
+segments of the audio that are in a foreign language.</property>
+ <signal name="clicked" handler="subtitle_add_fas_clicked_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="subtitle_reset">
+ <property name="visible">True</property>
+ <property name="sensitive">True</property>
+ <property name="can_focus">True</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Reload</property>
+ <property name="icon_name">emblem-default</property>
+ <property name="tooltip_text" translatable="yes">Reload all subtitle settings from defaults</property>
+ <signal name="clicked" handler="subtitle_reset_clicked_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vexpand">True</property>
+ <property name="valign">GTK_ALIGN_FILL</property>
+ <child>
+ <object class="GtkTreeView" id="subtitle_list_view">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ <property name="headers_clickable">False</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="treeview-selection2"/>
+ </child>
+ <signal name="row-activated" handler="subtitle_row_activated_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">subtitle_defaults_tab</property>
+ <property name="title" translatable="yes">Track Selection</property>
+ <property name="child">
+ <object class="GtkBox" id="subtitle_selection_tab">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="GtkBox" id="subtitle_selection_box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkBox" id="subtitle_selection_box2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkGrid" id="sub_grid2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">5</property>
+ <property name="row-spacing">2</property>
+ <child>
+ <object class="GtkLabel" id="sub_label4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Selection Behavior:</property>
+ <property name="justify">right</property>
+ <layout>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="SubtitleTrackSelectionBehavior">
+ <property name="visible">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Choose which subtitle tracks of the source media are used.</property>
+ <signal name="changed" handler="subtitle_def_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="sub_grid3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">5</property>
+ <property name="row-spacing">2</property>
+ <property name="halign">GTK_ALIGN_END</property>
+ <property name="margin_top">6</property>
+ <property name="margin_bottom">6</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkScrolledWindow" id="sub_scrolledwindow10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="min_content_height">108</property>
+ <property name="vexpand">True</property>
+ <property name="halign">GTK_ALIGN_FILL</property>
+ <layout>
+ <property name="left-attach">0</property>
+ <property name="top-attach">1</property>
+ <property name="row-span">4</property>
+ </layout>
+ <child>
+ <object class="GtkTreeView" id="subtitle_avail_lang">
+ <property name="visible">True</property>
+ <property name="headers-visible">False</property>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="halign">GTK_ALIGN_FILL</property>
+ <signal name="row-activated" handler="subtitle_avail_lang_activated_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="sub_scrolledwindow11">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vexpand">True</property>
+ <property name="halign">GTK_ALIGN_FILL</property>
+ <layout>
+ <property name="left-attach">2</property>
+ <property name="top-attach">1</property>
+ <property name="row-span">4</property>
+ </layout>
+ <child>
+ <object class="GtkTreeView" id="subtitle_selected_lang">
+ <property name="visible">True</property>
+ <property name="headers-visible">False</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Create a list of languages you would like to select subtitles for.
+Tracks matching these languages will be selected using the chosen Selection Behavior.
+
+The first language in this list is your "preferred" language and will be used
+for determining subtitle selection settings when there is foreign audio.</property>
+ <property name="vexpand">True</property>
+ <property name="halign">GTK_ALIGN_FILL</property>
+ <signal name="row-activated" handler="subtitle_selected_lang_activated_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="subtitle_lang_add">
+ <property name="label" translatable="yes">Add</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <signal name="clicked" handler="subtitle_add_lang_clicked_cb" swapped="no"/>
+ <layout>
+ <property name="left-attach">1</property>
+ <property name="top-attach">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="subtitle_lang_remove">
+ <property name="label" translatable="yes">Remove</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <signal name="clicked" handler="subtitle_remove_lang_clicked_cb" swapped="no"/>
+ <layout>
+ <property name="left-attach">1</property>
+ <property name="top-attach">3</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="sub_label8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Available Languages</property>
+ <layout>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="sub_label24">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Selected Languages</property>
+ <layout>
+ <property name="left-attach">2</property>
+ <property name="top-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="subtitle_preferred_language">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Preferred Language: None</property>
+ <property name="justify">right</property>
+ <layout>
+ <property name="left-attach">3</property>
+ <property name="top-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="SubtitleAddForeignAudioSearch">
+ <property name="label" translatable="yes">Add Foreign Audio Scan Pass</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Add "Foreign Audio Scan" when the default audio track is your preferred language.
+This search pass finds short sequences of foreign audio and provides subtitles for them.
+
+This option requires a language to be set in the Selected Languages list.</property>
+ <property name="halign">start</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="subtitle_def_widget_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="SubtitleAddForeignAudioSubtitle">
+ <property name="label" translatable="yes">Add subtitle track if default audio is foreign</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">When the default audio track is not your preferred language, add a subtitle track.
+
+This option requires a language to be set in the Selected Languages list.</property>
+ <property name="halign">start</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="subtitle_def_widget_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="SubtitleAddCC">
+ <property name="label" translatable="yes">Add Closed Captions when available</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Closed captions are text subtitles that can be added to any container as a soft subtitle track</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="subtitle_def_widget_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="subtitle_burn_box">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="sub_burn_behavior_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Burn-In Behavior*:</property>
+ <property name="justify">right</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="SubtitleBurnBehavior">
+ <property name="visible">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Set the behavior of subtitle "Burn-In".
+
+Burned-In subtitles are part of the video and can not be disabled during playback.
+Only one subtitle track can be burned! Since conflicts can occur, the first chosen wins.</property>
+ <signal name="changed" handler="subtitle_def_widget_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="subtitle_additional_burn_box">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="sub_additional_burn_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Burn-In for deficient players*:</property>
+ <property name="justify">right</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="SubtitleBurnDVDSub">
+ <property name="label" translatable="yes">DVD Subtitles</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Burn the first selected DVD subtitle track. All other DVD subtitle tracks will be discarded.
+Use this option if your player software or device does not support DVD subtitles.
+
+Only one subtitle track can be burned! Since conflicts can occur, the first chosen wins.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="subtitle_def_widget_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="SubtitleBurnBDSub">
+ <property name="label" translatable="yes">Blu-ray Subtitles</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Burn the first selected Blu-ray subtitle track. All other Blu-ray subtitle tracks will be discarded.
+Use this option if your player software or device does not support Blu-ray subtitles.
+
+Only one subtitle track can be burned! Since conflicts can occur, the first chosen wins.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="subtitle_def_widget_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="sub_burn_warning_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">&lt;small&gt;* Only one of the above subtitle burn options will be applied, starting with the top.&lt;/small&gt;</property>
+ <property name="tooltip_text" translatable="yes">Only one subtitle track can be burned! Since conflicts can occur, the first chosen wins.</property>
+ <property name="use_markup">True</property>
+ <property name="justify">left</property>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">chapters_tab</property>
+ <property name="title" translatable="yes">Chapters</property>
+ <property name="child">
+ <object class="GtkBox" id="chapters_tab">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkBox" id="hbox30">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkCheckButton" id="ChapterMarkers">
+ <property name="label" translatable="yes">Chapter Markers</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Add chapter markers to output file.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="chapter_markers_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkTreeView" id="chapters_list">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="enable_search">False</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="treeview-selection3"/>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStackPage">
+ <property name="name">metadata_tab</property>
+ <property name="title" translatable="yes">Tags</property>
+ <property name="child">
+ <object class="GtkGrid" id="metadata_tab">
+ <property name="row-spacing">2</property>
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">6</property>
+ <property name="margin-start">0</property>
+ <property name="margin-end">0</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">5</property>
+ <child>
+ <object class="GtkLabel" id="tag_title_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Title:</property>
+ <property name="use_markup">True</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="MetaName">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="max_length">80</property>
+ <property name="activates_default">False</property>
+ <property name="width-chars">50</property>
+ <property name="truncate_multiline">True</property>
+ <signal name="changed" handler="meta_name_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="tag_actors_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Actors:</property>
+ <property name="use_markup">True</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="MetaArtist">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="max_length">80</property>
+ <property name="activates_default">False</property>
+ <property name="width-chars">50</property>
+ <property name="truncate_multiline">True</property>
+ <signal name="changed" handler="meta_artist_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="tag_director_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Director:</property>
+ <property name="use_markup">True</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="MetaAlbumArtist">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="max_length">80</property>
+ <property name="activates_default">False</property>
+ <property name="width-chars">50</property>
+ <property name="truncate_multiline">True</property>
+ <signal name="changed" handler="meta_album_artist_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="tag_release_date_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Release Date:</property>
+ <property name="use_markup">True</property>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="MetaReleaseDate">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="max_length">80</property>
+ <property name="activates_default">False</property>
+ <property name="width-chars">50</property>
+ <property name="truncate_multiline">True</property>
+ <signal name="changed" handler="meta_release_date_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="tag_comment_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Comment:</property>
+ <property name="use_markup">True</property>
+ <layout>
+ <property name="top-attach">4</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="MetaComment">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="max_length">80</property>
+ <property name="activates_default">False</property>
+ <property name="width-chars">50</property>
+ <property name="truncate_multiline">True</property>
+ <signal name="changed" handler="meta_comment_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">4</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="tag_genre_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Genre:</property>
+ <property name="use_markup">True</property>
+ <layout>
+ <property name="top-attach">5</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="MetaGenre">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="max_length">80</property>
+ <property name="activates_default">False</property>
+ <property name="width-chars">50</property>
+ <property name="truncate_multiline">True</property>
+ <signal name="changed" handler="meta_genre_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">5</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="tag_description_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Description:</property>
+ <property name="use_markup">True</property>
+ <layout>
+ <property name="top-attach">6</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="MetaDescription">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="max_length">80</property>
+ <property name="activates_default">False</property>
+ <property name="width-chars">50</property>
+ <property name="truncate_multiline">True</property>
+ <signal name="changed" handler="meta_description_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">6</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="tag_long_description_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Plot:</property>
+ <property name="use_markup">True</property>
+ <layout>
+ <property name="top-attach">7</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="MetaLongDescriptionScroll">
+ <property name="height_request">40</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="shadow_type">etched-in</property>
+ <layout>
+ <property name="top-attach">7</property>
+ <property name="left-attach">1</property>
+ </layout>
+ <child>
+ <object class="GtkTextView" id="MetaLongDescription">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="wrap_mode">char</property>
+ <property name="accepts_tab">False</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="table4">
+ <property name="row-spacing">2</property>
+ <property name="column-spacing">2</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-top">12</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <child>
+ <object class="GtkLabel" id="label18">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="margin-end">6</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Save As:&lt;/b&gt;</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="dest_file">
+ <property name="hexpand">True</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Destination filename for your encode.</property>
+ <signal name="changed" handler="dest_file_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="dest_to_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="margin-start">6</property>
+ <property name="margin-end">6</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;To:&lt;/b&gt;</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFileChooserButton" id="dest_dir">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Destination directory for your encode.</property>
+ <property name="action">select-folder</property>
+ <property name="local_only">False</property>
+ <property name="title" translatable="yes">Destination Directory</property>
+ <signal name="selection-changed" handler="dest_dir_set_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">3</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox46">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="valign">end</property>
+ <property name="margin-top">4</property>
+ <property name="margin-bottom">4</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="work_status">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="hexpand">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="pending_status">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkProgressBar" id="progressbar">
+ <property name="visible">False</property>
+ <property name="height_request">10</property>
+ <property name="can_focus">False</property>
+ <property name="margin-bottom">6</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkAdjustment" id="min_title_adj">
+ <property name="upper">7200</property>
+ <property name="value">10</property>
+ <property name="step_increment">5</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="preview_count_adj">
+ <property name="lower">5</property>
+ <property name="upper">60</property>
+ <property name="value">10</property>
+ <property name="step_increment">5</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkDialog" id="titla_add_multiple_dialog">
+ <property name="transient_for">hb_window</property>
+ <property name="can_focus">False</property>
+ <property name="type_hint">dialog</property>
+ <property name="deletable">False</property>
+ <property name="use-header-bar">1</property>
+ <child type="action">
+ <object class="GtkButton" id="title_add_multiple_cancel">
+ <property name="label" translatable="yes">Cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <child type="action">
+ <object class="GtkButton" id="title_add_multiple_ok">
+ <property name="label" translatable="yes">OK</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="cancel">title_add_multiple_cancel</action-widget>
+ <action-widget response="ok">title_add_multiple_ok</action-widget>
+ </action-widgets>
+ <child internal-child="content_area">
+ <object class="GtkBox" id="title_add_multiple_box">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkBox" id="title_add_multiple_hbox1">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkCheckButton" id="title_add_multiple_select_all">
+ <property name="label" translatable="yes">Select All</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Mark all titles for adding to the queue</property>
+ <property name="halign">start</property>
+ <property name="vexpand">False</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="title_add_multiple_select_all_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="title_add_multiple_clear_all">
+ <property name="label" translatable="yes">Clear All</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Unmark all titles</property>
+ <property name="halign">start</property>
+ <property name="vexpand">False</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="title_add_multiple_clear_all_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="title_add_multiple_scrolledwindow">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="min_content_height">400</property>
+ <child>
+ <object class="GtkListBox" id="title_add_multiple_list">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="hexpand">True</property>
+ <property name="selection_mode">none</property>
+ <property name="activate_on_single_click">False</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkInfoBar" id="title_add_multiple_infobar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="message_type">info</property>
+ <child internal-child="action_area">
+ <object class="GtkBox" id="title_add_multiple_infobar-action_area1">
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child internal-child="content_area">
+ <object class="GtkBox" id="title_add_multiple_infobar_content_area">
+ <property name="can_focus">False</property>
+ <property name="spacing">16</property>
+ <child>
+ <object class="GtkLabel" id="title_add_multiple_label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Destination files OK. No duplicates detected.</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkDialog" id="prefs_dialog">
+ <property name="transient_for">hb_window</property>
+ <property name="can_focus">False</property>
+ <property name="title" translatable="yes">Preferences</property>
+ <property name="modal">True</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="type_hint">dialog</property>
+ <property name="deletable">False</property>
+ <property name="use-header-bar">1</property>
+ <signal name="close-request" handler="ghb_widget_hide_on_close" swapped="no"/>
+ <child type="action">
+ <object class="GtkButton" id="pref_ok">
+ <property name="label" translatable="yes">OK</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="halign">GTK_ALIGN_CENTER</property>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="ok">pref_ok</action-widget>
+ </action-widgets>
+ <child internal-child="content_area">
+ <object class="GtkBox" id="hbox59">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <child>
+ <object class="GtkBox" id="vbox20">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="GtkBox" id="easter_box">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkImage" id="image3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixel_size">64</property>
+ <property name="icon_name">hb-icon</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkNotebook" id="PrefsNotebook">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="show_border">False</property>
+ <property name="margin-start">12</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="GtkBox" id="vbox42">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkBox" id="check_updates_box">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">6</property>
+ <property name="margin-start">12</property>
+ <child>
+ <object class="GtkComboBox" id="check_updates">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <signal name="changed" handler="pref_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label74">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Automatically check for updates</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox82">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">6</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <child>
+ <object class="GtkComboBox" id="WhenComplete">
+ <property name="visible">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="can_focus">False</property>
+ <signal name="changed" handler="when_complete_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="labela1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">When all encodes are complete</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="vbox5">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">6</property>
+ <property name="margin-start">12</property>
+ <child>
+ <object class="GtkCheckButton" id="auto_name">
+ <property name="label" translatable="yes">Use automatic naming (uses modified source name)</property>
+ <property name="tooltip_text" translatable="yes">Create destination filename from source filename or volume label</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="autoname_box">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <property name="margin-start">18</property>
+ <property name="margin-end">8</property>
+ <child>
+ <object class="GtkLabel" id="auto_name_template_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Auto-Name Template</property>
+ <property name="use_markup">True</property>
+
+ <property name="halign">end</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="auto_name_template">
+ <property name="tooltip_text" translatable="yes">Available Options: {source-path} {source} {title} {preset} {chapters} {date} {time} {creation-date} {creation-time} {quality} {bitrate}</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="activates_default">True</property>
+ <property name="width-chars">40</property>
+ <property name="truncate_multiline">True</property>
+ <signal name="changed" handler="pref_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="UseM4v">
+ <property name="label" translatable="yes">Use iPod/iTunes friendly (.m4v) file extension for MP4</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="use_m4v_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox66">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">6</property>
+ <property name="margin-start">12</property>
+ <child>
+ <object class="GtkSpinButton" id="preview_count">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="width-chars">6</property>
+ <property name="adjustment">preview_count_adj</property>
+ <property name="numeric">True</property>
+ <signal name="value-changed" handler="pref_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label77">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Number of previews</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox60">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">6</property>
+ <property name="margin-start">12</property>
+ <child>
+ <object class="GtkSpinButton" id="MinTitleDuration">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="width-chars">6</property>
+ <property name="adjustment">min_title_adj</property>
+ <property name="numeric">True</property>
+ <signal name="value-changed" handler="pref_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label70">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Filter short DVD and Blu-ray titles (seconds)</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="RemoveFinishedJobs">
+ <property name="label" translatable="yes">Clear completed queue items after and encode completes</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">By default, completed jobs remain in the queue and are marked as complete.
+Check this if you want the queue to clean itself up by deleting completed jobs.</property>
+ <property name="halign">start</property>
+ <property name="margin-start">12</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">General</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="vbox1">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">6</property>
+ <property name="margin-start">12</property>
+ <child>
+ <object class="GtkGrid" id="AdvancedPrefsTable">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="row-spacing">2</property>
+ <child>
+ <object class="GtkBox" id="hbox6">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ <child>
+ <object class="GtkComboBox" id="VideoQualityGranularity">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="width_request">55</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <signal name="changed" handler="vqual_granularity_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label85">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Constant Quality fractional granularity</property>
+ <property name="hexpand">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="use_dvdnav">
+ <property name="label" translatable="yes">Use dvdnav (instead of libdvdread)</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="DiskFreeBox">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </layout>
+ <child>
+ <object class="GtkCheckButton" id="DiskFreeCheck">
+ <property name="label" translatable="yes">Monitor destination disk free space</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Pause encoding if free disk space drops below limit</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="DiskFreeLimitBox">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <property name="margin-start">21</property>
+ <child>
+ <object class="GtkSpinButton" id="DiskFreeLimit">
+ <property name="width-chars">7</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Pause encoding if free disk space drops below limit</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="adjustment">DiskFreeLimitAdjustment</property>
+ <property name="width_request">55</property>
+ <signal name="value-changed" handler="pref_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="DiskFreeLimitLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">MB Limit</property>
+ <property name="hexpand">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="vbox2">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
+ <layout>
+ <property name="top-attach">3</property>
+ <property name="left-attach">0</property>
+ </layout>
+ <child>
+ <object class="GtkCheckButton" id="EncodeLogLocation">
+ <property name="label" translatable="yes">Put individual encode logs in same location as movie</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox50">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <property name="margin-start">21</property>
+ <child>
+ <object class="GtkComboBox" id="LoggingLevel">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="width_request">55</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <signal name="changed" handler="log_level_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Activity Log Verbosity Level</property>
+ <property name="hexpand">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox83">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <property name="margin-start">21</property>
+ <child>
+ <object class="GtkComboBox" id="LogLongevity">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <signal name="changed" handler="pref_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="labela2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Activity Log Longevity</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="reduce_hd_preview">
+ <property name="label" translatable="yes">Scale down High Definition previews</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">4</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="AutoScan">
+ <property name="label" translatable="yes">Automatically Scan DVD when loaded</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Scans the DVD whenever a new disc is loaded</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">5</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="ActivityFontSizeBox">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <property name="margin-start">0</property>
+ <layout>
+ <property name="top-attach">6</property>
+ <property name="left-attach">0</property>
+ </layout>
+ <child>
+ <object class="GtkSpinButton" id="ActivityFontSize">
+ <property name="width-chars">3</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Pause encoding if free disk space drops below limit</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="adjustment">ActivityFontSizeAdjustment</property>
+ <signal name="value-changed" handler="activity_font_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="ActivityFontSizeLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Activity Window Font Size</property>
+ <property name="hexpand">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="SyncTitleSettings">
+ <property name="label" translatable="yes">Use the same settings for all titles in a batch</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">When checked, every title will use the same settings when adding a
+batch of titles to the queue.
+
+Uncheck this if you want to allow changing each title's settings independently.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="pref_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">7</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="hidden_prefs">
+ <property name="row-spacing">2</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkCheckButton" id="allow_tweaks">
+ <property name="visible">False</property>
+ <property name="label" translatable="yes">Allow Tweaks</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="tweaks_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="hbfd_feature">
+ <property name="visible">False</property>
+ <property name="label" translatable="yes">Allow HandBrake For Dummies</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="hbfd_feature_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label36">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Advanced</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkDialog" id="preset_rename_dialog">
+ <property name="transient_for">hb_window</property>
+ <property name="can_focus">False</property>
+ <property name="modal">True</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="type_hint">dialog</property>
+ <property name="deletable">False</property>
+ <property name="use-header-bar">1</property>
+ <signal name="close-request" handler="ghb_widget_hide_on_close" swapped="no"/>
+ <child type="action">
+ <object class="GtkButton" id="preset_rename_cancel">
+ <property name="label" translatable="yes">Cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <child type="action">
+ <object class="GtkButton" id="preset_rename_ok">
+ <property name="label" translatable="yes">OK</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="cancel">preset_rename_cancel</action-widget>
+ <action-widget response="ok">preset_rename_ok</action-widget>
+ </action-widgets>
+ <child internal-child="content_area">
+ <object class="GtkBox" id="preset_rename_vbox">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">True</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <child>
+ <object class="GtkLabel" id="preset_dialog_rename_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="margin-bottom">12</property>
+ <property name="use_markup">True</property>
+ <property name="label" translatable="yes">&lt;span size="x-large"&gt;Rename Preset&lt;/span&gt;</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="preset_rename_hbox">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="preset_rename_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Name:</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="PresetReName">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="max_length">40</property>
+ <property name="activates_default">True</property>
+ <property name="width-chars">40</property>
+ <property name="truncate_multiline">True</property>
+ <property name="hexpand">True</property>
+ <signal name="changed" handler="preset_name_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFrame" id="preset_rename_desc_frame">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">etched-out</property>
+ <property name="margin-top">10</property>
+ <property name="margin-bottom">10</property>
+ <child>
+ <object class="GtkTextView" id="PresetReDescription">
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">4</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">4</property>
+ <property name="height_request">60</property>
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="can_focus">True</property>
+ <property name="wrap_mode">word</property>
+ <property name="accepts_tab">False</property>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="preset_rename_desc_frame_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Description&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkDialog" id="preset_save_dialog">
+ <property name="transient_for">hb_window</property>
+ <property name="can_focus">False</property>
+ <property name="modal">True</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="type_hint">dialog</property>
+ <property name="deletable">False</property>
+ <property name="use-header-bar">1</property>
+ <signal name="close-request" handler="ghb_widget_hide_on_close" swapped="no"/>
+ <child type="action">
+ <object class="GtkButton" id="preset_cancel">
+ <property name="label" translatable="yes">Cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <child type="action">
+ <object class="GtkButton" id="preset_ok">
+ <property name="label" translatable="yes">OK</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="cancel">preset_cancel</action-widget>
+ <action-widget response="ok">preset_ok</action-widget>
+ </action-widgets>
+ <child internal-child="content_area">
+ <object class="GtkBox" id="vbox28">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">True</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <child>
+ <object class="GtkGrid" id="preset_save_name_table">
+ <property name="visible">True</property>
+ <property name="row-spacing">2</property>
+ <property name="column-spacing">6</property>
+ <property name="can_focus">False</property>
+ <property name="margin-top">10</property>
+ <property name="margin-bottom">10</property>
+ <child>
+ <object class="GtkLabel" id="preset_save_category_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Category:</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="PresetCategory">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Set the category that this preset will be shown under.</property>
+ <signal name="changed" handler="preset_category_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="PresetCategoryEntryLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Category Name:</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="PresetCategoryName">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="max_length">40</property>
+ <property name="activates_default">True</property>
+ <property name="width-chars">30</property>
+ <property name="truncate_multiline">True</property>
+ <signal name="changed" handler="preset_category_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label64">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Preset Name:</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="PresetName">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="max_length">40</property>
+ <property name="activates_default">True</property>
+ <property name="width-chars">30</property>
+ <property name="truncate_multiline">True</property>
+ <signal name="changed" handler="preset_name_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="PresetSetDefault">
+ <property name="label" translatable="yes">Default Preset</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Make this the default Preset when HandBrake starts</property>
+ <property name="halign">start</property>
+ <property name="margin-bottom">12</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="preset_widget_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="PicturePresetBox">
+ <property name="visible">True</property>
+ <property name="row-spacing">2</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">False</property>
+ <child>
+ <object class="GtkLabel" id="UsingCurrentPicLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">&lt;b&gt;Dimensions&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ <property name="column-span">3</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="fillerlabel1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="PictureWidthEnable">
+ <property name="label" translatable="yes">Maximum Width:</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enable maximum width limit.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="preset_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="PictureWidth">
+ <property name="width-chars">7</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">This is the maximum width that the video will be stored at.
+
+Whenever a new source is loaded, this value will be applied if the source width is greater.
+Setting this to 0 means there is no maximum width.</property>
+ <property name="adjustment">adjustment32</property>
+ <property name="snap_to_ticks">True</property>
+ <signal name="value-changed" handler="preset_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="PictureHeightEnable">
+ <property name="label" translatable="yes">Maximum Height:</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enable maximum height limit.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="preset_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="PictureHeight">
+ <property name="width-chars">7</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">This is the maximum height that the video will be stored at.
+
+Whenever a new source is loaded, this value will be applied if the source height is greater.
+Setting this to 0 means there is no maximum height.</property>
+ <property name="adjustment">adjustment33</property>
+ <signal name="value-changed" handler="preset_widget_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame14">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">etched-out</property>
+ <property name="vexpand">True</property>
+ <property name="margin-top">10</property>
+ <property name="margin-bottom">10</property>
+ <child>
+ <object class="GtkTextView" id="PresetDescription">
+ <property name="margin-top">6</property>
+ <property name="margin-bottom">4</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">4</property>
+ <property name="height_request">60</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="wrap_mode">word</property>
+ <property name="accepts_tab">False</property>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label67">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Description&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkAdjustment" id="preview_progress_adj">
+ <property name="upper">100</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
+ <object class="GtkWindow" id="preview_window">
+ <property name="title" translatable="yes">HandBrake Preview</property>
+ <property name="can_focus">False</property>
+ <property name="resizable">True</property>
+ <property name="window_position">center</property>
+ <property name="type_hint">normal</property>
+ <property name="icon-name">hb-icon</property>
+ <signal name="close-request" handler="preview_window_delete_cb" swapped="no"/>
+ <child>
+ <object class="GtkOverlay" id="preview_overlay">
+ <property name="visible">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ <child>
+ <object class="GtkDrawingArea" id="preview_image">
+ <property name="width_request">854</property>
+ <property name="height_request">480</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="halign">fill</property>
+ <property name="valign">fill</property>
+ <signal name="size-allocate" handler="preview_resize_cb" swapped="no"/>
+ </object>
+ </child>
+ <child type="overlay">
+ <object class="GtkBox" id="preview_hud">
+ <property name="orientation">horizontal</property>
+ <property name="visible">False</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">end</property>
+ <property name="margin-bottom">30</property>
+ <child>
+ <object class="GtkBox" id="vbox35">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-top">5</property>
+ <property name="margin-bottom">5</property>
+ <property name="margin-start">10</property>
+ <property name="margin-end">10</property>
+ <child>
+ <object class="GtkScale" id="preview_frame">
+ <property name="width_request">400</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Select preview frames.</property>
+ <property name="adjustment">adjustment19</property>
+ <property name="digits">0</property>
+ <property name="value_pos">bottom</property>
+ <signal name="value-changed" handler="preview_frame_value_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="live_preview_box">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkButton" id="live_preview_play">
+ <property name="height_request">30</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="tooltip_text" translatable="yes">Encode and play a short sequence of video starting from the current preview position.</property>
+ <property name="relief">none</property>
+ <signal name="clicked" handler="live_preview_start_cb" swapped="no"/>
+ <child>
+ <object class="GtkImage" id="live_preview_play_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">gtk-media-play</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScale" id="live_preview_progress">
+ <property name="can_focus">True</property>
+ <property name="adjustment">preview_progress_adj</property>
+ <property name="draw_value">False</property>
+ <property name="value_pos">right</property>
+ <property name="hexpand">True</property>
+ <signal name="value-changed" handler="live_preview_seek_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="live_progress_box">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="GtkProgressBar" id="live_encode_progress">
+ <property name="height_request">20</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox26">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">10</property>
+ <child>
+ <object class="GtkBox" id="live_preview_duration_box">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkLabel" id="label37">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Duration:&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="live_duration">
+ <property name="width-chars">7</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Set the duration of the live preview in seconds.</property>
+ <property name="adjustment">adjustment21</property>
+ <property name="numeric">True</property>
+ <signal name="value-changed" handler="preview_duration_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="preview_show_crop">
+ <property name="label" translatable="yes">Show Crop</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Show Cropped area of the preview</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="show_crop_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="preview_reset">
+ <property name="label" translatable="yes">Source Resolution</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Reset preview window to the source video's resolution</property>
+ <property name="relief">none</property>
+ <signal name="clicked" handler="preview_reset_clicked_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkFileChooserDialog" id="source_dialog">
+ <property name="can_focus">False</property>
+ <property name="modal">True</property>
+ <property name="type_hint">dialog</property>
+ <property name="create_folders">False</property>
+ <property name="local_only">False</property>
+ <property name="transient_for">hb_window</property>
+ <signal name="selection-changed" handler="chooser_file_selected_cb" swapped="no"/>
+ <child type="action">
+ <object class="GtkButton" id="source_cancel">
+ <property name="label" translatable="yes">_Cancel</property>
+ <property name="use-underline">True</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ </object>
+ </child>
+ <child type="action">
+ <object class="GtkButton" id="source_ok">
+ <property name="label" translatable="yes">_Open</property>
+ <property name="use-underline">True</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-6">source_cancel</action-widget>
+ <action-widget response="-9">source_ok</action-widget>
+ </action-widgets>
+ <child internal-child="content_area">
+ <object class="GtkBox" id="source_extra">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <child>
+ <object class="GtkBox" id="single_title_box">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="label89">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Title Number:</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="single_title">
+ <property name="width-chars">5</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="halign">start</property>
+ <property name="adjustment">adjustment24</property>
+ <property name="hexpand">True</property>
+ <signal name="value-changed" handler="nonsetting_widget_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox74">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="label90">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Detected DVD devices:</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="source_device">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="hexpand">True</property>
+ <signal name="changed" handler="dvd_device_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkImage" id="gtk-cancel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">gtk-cancel</property>
+ </object>
+ <object class="GtkImage" id="gtk-ok">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">gtk-ok</property>
+ </object>
+ <object class="GtkImage" id="import_add_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">gtk-add</property>
+ </object>
+ <object class="GtkImage" id="subtitle_add_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">gtk-add</property>
+ </object>
+ <object class="GtkDialog" id="subtitle_dialog">
+ <property name="transient_for">hb_window</property>
+ <property name="can_focus">False</property>
+ <property name="modal">True</property>
+ <property name="resizable">False</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="type_hint">dialog</property>
+ <property name="deletable">False</property>
+ <property name="use-header-bar">1</property>
+ <child type="action">
+ <object class="GtkButton" id="subtitle_cancel">
+ <property name="label" translatable="yes">Cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <child type="action">
+ <object class="GtkButton" id="subtitle_ok">
+ <property name="label" translatable="yes">OK</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="cancel">subtitle_cancel</action-widget>
+ <action-widget response="ok">subtitle_ok</action-widget>
+ </action-widgets>
+ <child internal-child="content_area">
+ <object class="GtkBox" id="dialog-subtitle-vbox">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <child>
+ <object class="GtkBox" id="subtitle_import_switch_box">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_bottom">24</property>
+ <child>
+ <object class="GtkRadioButton" id="SubtitleSrtEnable">
+ <property name="label" translatable="yes">Import SRT</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enable settings to import an SRT subtitle file</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="subtitle_import_radio_toggled_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="SubtitleSsaEnable">
+ <property name="label" translatable="yes">Import SSA</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enable settings to import an SSA subtitle file</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">SubtitleSrtEnable</property>
+ <signal name="toggled" handler="subtitle_import_radio_toggled_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="SubtitleImportDisable">
+ <property name="label" translatable="yes">Embedded Subtitle List</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enable settings to select embedded subtitles</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">SubtitleSrtEnable</property>
+ <signal name="toggled" handler="subtitle_import_radio_toggled_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="subtitle_settings_box">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkGrid" id="subtitle_import_grid">
+ <property name="visible">True</property>
+ <property name="row-spacing">2</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="import_lang_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Language</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="srt_code_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Character Code</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="import_file_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">File:</property>
+ <property name="halign">end</property>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="import_offset_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Offset (ms)</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">4</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="ImportLanguage">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Set the language of this subtitle.
+This value will be used by players in subtitle menus.</property>
+ <signal name="changed" handler="import_lang_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="SrtCodeset">
+ <property name="valign">GTK_ALIGN_FILL</property>
+ <property name="width_request">150</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">Set the character code used by the SRT file you are importing.
+
+SRTs come in all flavours of character sets.
+We translate the character set to UTF-8.
+The source's character code is needed in order to perform this translation.</property>
+ <signal name="changed" handler="srt_codeset_changed_cb" swapped="no"/>
+ <property name="has_entry">True</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">2</property>
+ </layout>
+ <child internal-child="entry">
+ <object class="GtkEntry" id="combobox-entry1">
+ <property name="can_focus">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFileChooserButton" id="ImportFile">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Select the SRT file to import.</property>
+ <property name="local_only">False</property>
+ <property name="hexpand">True</property>
+ <property name="title" translatable="yes">Import File</property>
+ <signal name="selection-changed" handler="import_file_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">2</property>
+ <property name="left-attach">1</property>
+ <property name="column-span">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="ImportOffset">
+ <property name="valign">GTK_ALIGN_FILL</property>
+ <property name="vexpand">False</property>
+ <property name="width-chars">8</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Adjust the offset in milliseconds between video and SRT timestamps</property>
+ <property name="adjustment">adjustment31</property>
+ <signal name="value-changed" handler="import_offset_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">4</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="subtitle_track_box">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="subtitle_track_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Track</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="SubtitleTrack">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes">List of subtitle tracks available from your source.</property>
+ <signal name="changed" handler="subtitle_track_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="subtitle_options_box">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkCheckButton" id="SubtitleForced">
+ <property name="label" translatable="yes">Forced Subtitles Only</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Use only subtitles that have been flagged
+as forced in the source subtitle track
+
+"Forced" subtitles are usually used to show
+subtitles during scenes where someone is speaking
+a foreign language.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="subtitle_forced_toggled_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="SubtitleBurned">
+ <property name="label" translatable="yes">Burn into video</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Render the subtitle over the video.
+The subtitle will be part of the video and can not be disabled.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="subtitle_burned_toggled_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="SubtitleDefaultTrack">
+ <property name="label" translatable="yes">Set Default Track</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Set the default output subtitle track.
+
+Most players will automatically display this
+subtitle track whenever the video is played.
+
+This is useful for creating a "forced" track
+in your output.</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="subtitle_default_toggled_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkDialog" id="audio_dialog">
+ <property name="transient_for">hb_window</property>
+ <property name="can_focus">False</property>
+ <property name="modal">True</property>
+ <property name="resizable">False</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="type_hint">dialog</property>
+ <property name="deletable">False</property>
+ <property name="use-header-bar">1</property>
+ <child type="action">
+ <object class="GtkButton" id="audio_cancel">
+ <property name="label" translatable="yes">Cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <child type="action">
+ <object class="GtkButton" id="audio_ok">
+ <property name="label" translatable="yes">OK</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="cancel">audio_cancel</action-widget>
+ <action-widget response="ok">audio_ok</action-widget>
+ </action-widgets>
+ <child internal-child="content_area">
+ <object class="GtkBox" id="dialog-audio-vbox">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <child>
+ <object class="GtkGrid" id="audio_dialog_grid1">
+ <property name="row-spacing">2</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="column-spacing">5</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkLabel" id="label35">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Source Track</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="AudioTrack">
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="tooltip_text" translatable="yes">List of audio tracks available from your source.</property>
+ <signal name="changed" handler="audio_track_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="audio_name_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Track Name:</property>
+ <property name="use_markup">True</property>
+ <property name="halign">center</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="AudioTrackName">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">Set the audio track name.
+
+Players may use this in the audio selection list.</property>
+ <property name="max_length">40</property>
+ <property name="hexpand">True</property>
+ <property name="activates_default">True</property>
+ <property name="truncate_multiline">True</property>
+ <signal name="changed" handler="audio_name_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkGrid" id="audio_dialog_grid2">
+ <property name="row-spacing">2</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_top">24</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkLabel" id="AudioEncoderLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Encoder</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="AudioBitrateLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Bitrate/Quality</property>
+ <property name="use_markup">True</property>
+ <property name="halign">center</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">1</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="AudioMixdownLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Mix</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="AudioSamplerateLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Sample Rate</property>
+ <property name="use_markup">True</property>
+ <property name="halign">center</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">3</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="AudioTrackGainLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Gain</property>
+ <property name="use_markup">True</property>
+ <property name="halign">center</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">4</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="AudioTrackDRCSliderLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_markup" translatable="yes">&lt;b&gt;Dynamic Range Compression:&lt;/b&gt; Adjust the dynamic range of the output audio track.
+
+For source audio that has a wide dynamic range (very loud and very soft sequences),
+DRC allows you to 'compress' the range by making loud sounds softer and soft sounds louder.</property>
+ <property name="label" translatable="yes">DRC</property>
+ <property name="use_markup">True</property>
+ <property name="halign">center</property>
+ <layout>
+ <property name="top-attach">0</property>
+ <property name="left-attach">5</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="AudioEncoder">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="tooltip_text" translatable="yes">Set the audio codec to encode this track with.</property>
+ <signal name="changed" handler="audio_codec_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="audio_dialog_hbox24">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">1</property>
+ </layout>
+ <child>
+ <object class="GtkBox" id="AudioTrackQualityEnableBox">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkRadioButton" id="AudioTrackBitrateEnable">
+ <property name="label" translatable="yes">Bitrate</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enable bitrate setting</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="AudioTrackQualityEnable">
+ <property name="label" translatable="yes">Quality</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Enable quality setting</property>
+ <property name="halign">start</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">AudioTrackBitrateEnable</property>
+ <signal name="toggled" handler="audio_quality_radio_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="AudioBitrate">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="tooltip_text" translatable="yes">Set the bitrate to encode this track with.</property>
+ <signal name="changed" handler="audio_bitrate_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="AudioTrackQualityBox">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkScaleButton" id="AudioTrackQualityX">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_markup" translatable="yes">&lt;b&gt;Quality:&lt;/b&gt; For output codec's that support it, adjust the quality of the output.</property>
+ <property name="orientation">vertical</property>
+ <property name="adjustment">audio_quality_adj</property>
+ <property name="icons">weather-storm
+weather-clear
+weather-storm
+weather-showers-scattered
+weather-showers
+weather-overcast
+weather-few-clouds
+weather-clear</property>
+ <signal name="value-changed" handler="quality_widget_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="AudioTrackQualityValue">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">00.0</property>
+ <property name="use_markup">True</property>
+ <property name="width-chars">4</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="AudioMixdown">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="tooltip_text" translatable="yes">Set the mixdown of the output audio track.</property>
+ <signal name="changed" handler="audio_mix_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">2</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="AudioSamplerate">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="tooltip_text" translatable="yes">Set the sample rate of the output audio track.</property>
+ <signal name="changed" handler="audio_samplerate_changed_cb" swapped="no"/>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">3</property>
+ </layout>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox34">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">4</property>
+ </layout>
+ <child>
+ <object class="GtkScaleButton" id="AudioTrackGainSlider">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_markup" translatable="yes">&lt;b&gt;Audio Gain:&lt;/b&gt; Adjust the amplification or attenuation of the output audio track.</property>
+ <property name="orientation">vertical</property>
+ <property name="adjustment">adjustment35</property>
+ <property name="icons">audio-volume-muted
+audio-volume-high
+audio-volume-low
+audio-volume-medium</property>
+ <signal name="value-changed" handler="gain_widget_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="AudioTrackGainValue">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">0dB</property>
+ <property name="use_markup">True</property>
+ <property name="width-chars">6</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="hbox33">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <layout>
+ <property name="top-attach">1</property>
+ <property name="left-attach">5</property>
+ </layout>
+ <child>
+ <object class="GtkScaleButton" id="AudioTrackDRCSlider">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="valign">GTK_ALIGN_CENTER</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_markup" translatable="yes">&lt;b&gt;Dynamic Range Compression:&lt;/b&gt; Adjust the dynamic range of the output audio track.
+
+For source audio that has a wide dynamic range (very loud and very soft sequences),
+DRC allows you to 'compress' the range by making loud sounds softer and soft sounds louder.</property>
+ <property name="orientation">vertical</property>
+ <property name="adjustment">adjustment28</property>
+ <property name="icons">audio-input-microphone</property>
+ <signal name="value-changed" handler="drc_widget_changed_cb" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="AudioTrackDRCValue">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Off</property>
+ <property name="use_markup">True</property>
+ <property name="width-chars">4</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkDialog" id="update_dialog">
+ <property name="transient_for">hb_window</property>
+ <property name="can_focus">False</property>
+ <property name="modal">True</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="type_hint">dialog</property>
+ <property name="deletable">False</property>
+ <property name="use-header-bar">1</property>
+ <child type="action">
+ <object class="GtkButton" id="update_skip">
+ <property name="label" translatable="yes">Skip This Version</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <child type="action">
+ <object class="GtkButton" id="update_remind">
+ <property name="label" translatable="yes">Remind Me Later</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="ok">update_skip</action-widget>
+ <action-widget response="cancel">update_remind</action-widget>
+ </action-widgets>
+ <child internal-child="content_area">
+ <object class="GtkBox" id="hbox24">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkBox" id="vbox19">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkBox" id="eventbox2">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkImage" id="image10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixel_size">64</property>
+ <property name="icon_name">hb-icon</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="vbox41">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="GtkLabel" id="label22">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="margin-start">10</property>
+ <property name="margin-end">10</property>
+ <property name="margin-top">5</property>
+ <property name="margin-bottom">5</property>
+ <property name="label" translatable="yes">&lt;b&gt;A new version of HandBrake is available!&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="update_message">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">start</property>
+ <property name="margin-start">10</property>
+ <property name="margin-end">10</property>
+ <property name="margin-top">5</property>
+ <property name="margin-bottom">5</property>
+ <property name="label" translatable="yes">HandBrake xxx is now available (you have yyy).</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame15">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">etched-out</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkScrolledWindow" id="update_scroll">
+ <property name="margin-start">12</property>
+ <property name="halign">start</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label88">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">&lt;b&gt;Release Notes&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkAdjustment" id="VideoPresetRange">
+ <property name="upper">1</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">1</property>
+ </object>
+</interface>
diff --git a/gtk/src/ghbcellrenderertext.c b/gtk/src/ghbcellrenderertext.c
index 8355f795f..8df691cff 100644
--- a/gtk/src/ghbcellrenderertext.c
+++ b/gtk/src/ghbcellrenderertext.c
@@ -1687,8 +1687,7 @@ static void ghb_cell_renderer_text_snapshot(
&GRAPHENE_RECT_INIT(
background_area->x, background_area->y,
background_area->width,
- background_area->height),
- "CellTextBackground");
+ background_area->height));
}
@@ -1706,8 +1705,7 @@ static void ghb_cell_renderer_text_snapshot(
gtk_snapshot_push_clip(snapshot,
&GRAPHENE_RECT_INIT(
cell_area->x, cell_area->y,
- cell_area->width, cell_area->height),
- "CellTextClip");
+ cell_area->width, cell_area->height));
gtk_snapshot_render_layout(snapshot, context,
cell_area->x + x_offset + xpad,
@@ -1847,7 +1845,7 @@ ghb_cell_renderer_text_editing_done (GtkCellEditable *entry,
return;
path = g_object_get_data (G_OBJECT (entry), GHB_CELL_RENDERER_TEXT_PATH);
- new_text = gtk_entry_get_text (GTK_ENTRY (entry));
+ new_text = ghb_entry_get_text (GTK_ENTRY (entry));
g_signal_emit (data, text_cell_renderer_signals[EDITED], 0, path, new_text);
}
@@ -1880,8 +1878,7 @@ ghb_cell_renderer_text_popup_unmap (GtkMenu *menu,
if (priv->entry_menu_popdown_timeout)
return;
- priv->entry_menu_popdown_timeout = gdk_threads_add_timeout (500, popdown_timeout,
- data);
+ priv->entry_menu_popdown_timeout = g_timeout_add(500, popdown_timeout, data);
}
static void
@@ -1952,7 +1949,7 @@ ghb_cell_renderer_text_start_editing (GtkCellRenderer *cell,
NULL);
if (priv->text)
- gtk_entry_set_text (GTK_ENTRY (priv->entry), priv->text);
+ ghb_entry_set_text (GTK_ENTRY (priv->entry), priv->text);
g_object_set_data_full (G_OBJECT (priv->entry),
I_(GHB_CELL_RENDERER_TEXT_PATH), g_strdup (path), g_free);
diff --git a/gtk/src/ghbcompat.c b/gtk/src/ghbcompat.c
new file mode 100644
index 000000000..ce7623962
--- /dev/null
+++ b/gtk/src/ghbcompat.c
@@ -0,0 +1,36 @@
+/*
+ * ghbcompat.h
+ * Copyright (C) John Stebbins 2008-2019 <stebbins@stebbins>
+ *
+ * ghbcompat.h is free software.
+ *
+ * You may redistribute it and/or modify it under the terms of the
+ * GNU General Public License, as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * ghbcompat.h is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with callbacks.h. If not, write to:
+ * The Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "ghbcompat.h"
+
+G_MODULE_EXPORT gboolean
+ghb_widget_hide_on_close(
+ GtkWidget *widget,
+#if !GTK_CHECK_VERSION(3, 90, 0)
+ GdkEvent *event,
+#endif
+ gpointer *ud)
+{
+ gtk_widget_set_visible(widget, FALSE);
+ return TRUE;
+}
diff --git a/gtk/src/ghbcompat.h b/gtk/src/ghbcompat.h
index 382125132..44ef7f4e0 100644
--- a/gtk/src/ghbcompat.h
+++ b/gtk/src/ghbcompat.h
@@ -34,6 +34,31 @@
#define GHB_UNSAFE_FILENAME_CHARS "/"
#endif
+#if GTK_CHECK_VERSION(3, 90, 0)
+#define GHB_ICON_SIZE_BUTTON GTK_ICON_SIZE_NORMAL
+#else
+#define GHB_ICON_SIZE_BUTTON GTK_ICON_SIZE_BUTTON
+#endif
+
+#if !GTK_CHECK_VERSION(3, 10, 0)
+#define gtk_image_set_from_icon_name gtk_image_set_from_stock
+#define GHB_PLAY_ICON "gtk-media-play"
+#define GHB_PAUSE_ICON "gtk-media-pause"
+#else
+#define GHB_PLAY_ICON "media-playback-start"
+#define GHB_PAUSE_ICON "media-playback-pause"
+#endif
+
+#if !GTK_CHECK_VERSION(3, 10, 0)
+#define GHB_STOCK_OPEN GTK_STOCK_OPEN
+#define GHB_STOCK_CANCEL GTK_STOCK_CANCEL
+#define GHB_STOCK_SAVE GTK_STOCK_SAVE
+#else
+#define GHB_STOCK_OPEN "_Open"
+#define GHB_STOCK_CANCEL "_Cancel"
+#define GHB_STOCK_SAVE "_Save"
+#endif
+
static inline void ghb_widget_get_preferred_width(
GtkWidget *widget, gint *min_width, gint * natural_width)
{
@@ -103,10 +128,13 @@ static inline void ghb_get_expand_fill(GtkBox * box, GtkWidget * child,
}
}
-static inline void ghb_box_pack_start(GtkBox * box, GtkWidget * child)
+static inline void ghb_box_append_child(GtkBox * box, GtkWidget * child)
{
#if GTK_CHECK_VERSION(3, 90, 0)
- gtk_box_pack_start(box, child);
+ GtkWidget * sibling = NULL;
+
+ sibling = gtk_widget_get_last_child(GTK_WIDGET(box));
+ gtk_box_insert_child_after(box, child, sibling);
#else
gboolean expand, fill;
@@ -177,28 +205,71 @@ static inline PangoFontDescription* ghb_widget_get_font(GtkWidget *widget)
return font;
}
-static inline void ghb_monitor_get_size(GdkWindow *window, gint *w, gint *h)
+#if GTK_CHECK_VERSION(3, 90, 0)
+typedef GdkSurface GhbSurface;
+typedef GdkSurfaceHints GhbSurfaceHints;
+
+static inline GhbSurface * ghb_widget_get_surface(GtkWidget * widget)
+{
+ return gtk_widget_get_surface(widget);
+}
+
+static inline GdkMonitor *
+ghb_display_get_monitor_at_surface(GdkDisplay * display, GhbSurface * surface)
+{
+ return gdk_display_get_monitor_at_surface(display, surface);
+}
+
+static inline void
+ghb_surface_set_geometry_hints(GhbSurface * surface,
+ const GdkGeometry * geometry,
+ GhbSurfaceHints geom_mask)
+{
+ gdk_surface_set_geometry_hints(surface, geometry, geom_mask);
+}
+#else
+typedef GdkWindow GhbSurface;
+typedef GdkWindowHints GhbSurfaceHints;
+
+static inline GhbSurface * ghb_widget_get_surface(GtkWidget * widget)
+{
+ return gtk_widget_get_window(widget);
+}
+
+static inline GdkMonitor *
+ghb_display_get_monitor_at_surface(GdkDisplay * display, GhbSurface * surface)
+{
+ return gdk_display_get_monitor_at_window(display, surface);
+}
+
+static inline void
+ghb_surface_set_geometry_hints(GhbSurface * surface,
+ const GdkGeometry * geometry,
+ GhbSurfaceHints geom_mask)
+{
+ gdk_window_set_geometry_hints(surface, geometry, geom_mask);
+}
+#endif
+
+static inline void ghb_monitor_get_size(GtkWidget *widget, gint *w, gint *h)
{
*w = *h = 0;
#if GTK_CHECK_VERSION(3, 22, 0)
- if (window != NULL)
+ GdkDisplay * display = gtk_widget_get_display(widget);
+ GhbSurface * surface = ghb_widget_get_surface(widget);
+ if (surface != NULL && display != NULL)
{
- GdkMonitor *mm;
- GdkDisplay *dd;
+ GdkMonitor * monitor;
- dd = gdk_display_get_default();
- if (dd != NULL)
+ monitor = ghb_display_get_monitor_at_surface(display, surface);
+ if (monitor != NULL)
{
- mm = gdk_display_get_monitor_at_window(dd, window);
- if (mm != NULL)
- {
- GdkRectangle rr;
-
- gdk_monitor_get_geometry(mm, &rr);
- *w = rr.width;
- *h = rr.height;
- }
+ GdkRectangle rect;
+
+ gdk_monitor_get_geometry(monitor, &rect);
+ *w = rect.width;
+ *h = rect.height;
}
}
#else
@@ -235,23 +306,138 @@ static inline gboolean ghb_strv_contains(const char ** strv, const char * str)
#endif
}
-#if !GTK_CHECK_VERSION(3, 10, 0)
-#define gtk_image_set_from_icon_name gtk_image_set_from_stock
-#define GHB_PLAY_ICON "gtk-media-play"
-#define GHB_PAUSE_ICON "gtk-media-pause"
+#if GTK_CHECK_VERSION(3, 90, 0)
+static inline const gchar * ghb_entry_get_text(GtkEntry * entry)
+{
+ GtkEntryBuffer * buf = gtk_entry_get_buffer(entry);
+ if (buf != NULL)
+ {
+ return gtk_entry_buffer_get_text(buf);
+ }
+ return NULL;
+}
+
+static inline void ghb_entry_set_text(GtkEntry * entry, const gchar * text)
+{
+ GtkEntryBuffer * buf = gtk_entry_get_buffer(entry);
+ if (buf == NULL)
+ {
+ buf = gtk_entry_buffer_new(text, -1);
+ gtk_entry_set_buffer(entry, buf);
+ }
+ else
+ {
+ return gtk_entry_buffer_set_text(buf, text, -1);
+ }
+}
#else
-#define GHB_PLAY_ICON "media-playback-start"
-#define GHB_PAUSE_ICON "media-playback-pause"
+static inline const gchar * ghb_entry_get_text(GtkEntry * entry)
+{
+ return gtk_entry_get_text(entry);
+}
+
+static inline void ghb_entry_set_text(GtkEntry * entry, const gchar * text)
+{
+ return gtk_entry_set_text(entry, text);
+}
#endif
-#if !GTK_CHECK_VERSION(3, 10, 0)
-#define GHB_STOCK_OPEN GTK_STOCK_OPEN
-#define GHB_STOCK_CANCEL GTK_STOCK_CANCEL
-#define GHB_STOCK_SAVE GTK_STOCK_SAVE
+#if GTK_CHECK_VERSION(3, 90, 0)
+static inline void
+ghb_image_set_from_icon_name(GtkImage * image, const gchar * name,
+ GtkIconSize size)
+{
+ gtk_image_set_from_icon_name(image, name);
+ gtk_image_set_icon_size(image, size);
+}
+
+static inline GtkWidget *
+ghb_image_new_from_icon_name(const gchar * name, GtkIconSize size)
+{
+ GtkWidget * image;
+
+ image = gtk_image_new_from_icon_name(name);
+ gtk_image_set_icon_size(GTK_IMAGE(image), size);
+
+ return image;
+}
+
+static inline GtkWidget *
+ghb_button_new_from_icon_name(const gchar * name)
+{
+ return gtk_button_new_from_icon_name(name);
+}
+
+static inline GtkWidget *
+ghb_scale_button_new(gdouble min, gdouble max, gdouble step,
+ const gchar ** icons)
+{
+ return gtk_scale_button_new(min, max, step, icons);
+}
#else
-#define GHB_STOCK_OPEN "_Open"
-#define GHB_STOCK_CANCEL "_Cancel"
-#define GHB_STOCK_SAVE "_Save"
+static inline void
+ghb_image_set_from_icon_name(GtkImage * image, const gchar * name,
+ GtkIconSize size)
+{
+ gtk_image_set_from_icon_name(image, name, size);
+}
+
+static inline GtkWidget *
+ghb_image_new_from_icon_name(const gchar * name, GtkIconSize size)
+{
+ return gtk_image_new_from_icon_name(name, size);
+}
+
+static inline GtkWidget *
+ghb_button_new_from_icon_name(const gchar * name)
+{
+ return gtk_button_new_from_icon_name(name, GHB_ICON_SIZE_BUTTON);
+}
+
+static inline GtkWidget *
+ghb_scale_button_new(gdouble min, gdouble max, gdouble step,
+ const gchar ** icons)
+{
+ return gtk_scale_button_new(GHB_ICON_SIZE_BUTTON, min, max, step, icons);
+}
+#endif
+
+#if GTK_CHECK_VERSION(3, 90, 0)
+static inline void ghb_drag_status(GdkDrop * ctx, GdkDragAction action,
+ guint32 time)
+{
+ gdk_drop_status(ctx, action);
+}
+#else
+static inline void ghb_drag_status(GdkDragContext * ctx, GdkDragAction action,
+ guint32 time)
+{
+ gdk_drag_status(ctx, action, time);
+}
+#endif
+
+#if GTK_CHECK_VERSION(3, 90, 0)
+static inline void ghb_entry_set_width_chars(GtkEntry * entry, gint n_chars)
+{
+ gtk_editable_set_width_chars(GTK_EDITABLE(entry), n_chars);
+}
+#else
+static inline void ghb_entry_set_width_chars(GtkEntry * entry, gint n_chars)
+{
+ gtk_entry_set_width_chars(entry, n_chars);
+}
+#endif
+
+#if GTK_CHECK_VERSION(3, 90, 0)
+static inline GdkAtom ghb_atom_string(const char * str)
+{
+ return g_intern_static_string(str);
+}
+#else
+static inline GdkAtom ghb_atom_string(const char * str)
+{
+ return gdk_atom_intern_static_string(str);
+}
#endif
#endif // _GHB_COMPAT_H_
diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c
index cee449852..64cc2ba88 100644
--- a/gtk/src/hb-backend.c
+++ b/gtk/src/hb-backend.c
@@ -4858,14 +4858,9 @@ ghb_get_preview_image(
if (ghb_dict_get_bool(ud->prefs, "reduce_hd_preview"))
{
gint factor = 80;
-
- GdkWindow *window;
gint s_w, s_h;
- window = gtk_widget_get_window(
- GHB_WIDGET(ud->builder, "hb_window"));
- ghb_monitor_get_size(window, &s_w, &s_h);
-
+ ghb_monitor_get_size(GHB_WIDGET(ud->builder, "hb_window"), &s_w, &s_h);
if (s_w > 0 && s_h > 0 &&
(previewWidth > s_w * factor / 100 ||
previewHeight > s_h * factor / 100))
diff --git a/gtk/src/main.c b/gtk/src/main.c
index 3aaa750ee..ba51b6546 100644
--- a/gtk/src/main.c
+++ b/gtk/src/main.c
@@ -369,11 +369,21 @@ bind_subtitle_tree_model(signal_user_data_t *ud)
}
extern G_MODULE_EXPORT void presets_list_selection_changed_cb(void);
-extern G_MODULE_EXPORT void presets_drag_cb(void);
+extern G_MODULE_EXPORT void presets_drag_data_received_cb(void);
extern G_MODULE_EXPORT void presets_drag_motion_cb(void);
extern G_MODULE_EXPORT void preset_edited_cb(void);
extern void presets_row_expanded_cb(void);
+#if GTK_CHECK_VERSION(3, 90, 0)
+static const char * presets_drag_entries[] = {
+ "widget/presets-list-row-drop"
+};
+#else
+static GtkTargetEntry presets_drag_entries[] = {
+ { "PRESETS_ROW", GTK_TARGET_SAME_WIDGET, 0 }
+};
+#endif
+
// Create and bind the tree model to the tree view for the preset list
// Also, connect up the signal that lets us know the selection has changed
static void
@@ -385,9 +395,6 @@ bind_presets_tree_model(signal_user_data_t *ud)
GtkTreeView *treeview;
GtkTreeSelection *selection;
GtkWidget *widget;
- GtkTargetEntry SrcEntry;
- SrcEntry.target = "DATA";
- SrcEntry.flags = GTK_TARGET_SAME_WIDGET;
g_debug("bind_presets_tree_model()\n");
treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "presets_list"));
@@ -407,12 +414,24 @@ bind_presets_tree_model(signal_user_data_t *ud)
gtk_tree_view_column_set_expand(column, TRUE);
gtk_tree_view_set_tooltip_column(treeview, 4);
- gtk_tree_view_enable_model_drag_dest(treeview, &SrcEntry, 1,
+#if GTK_CHECK_VERSION(3, 90, 0)
+ GdkContentFormats * targets;
+
+ targets = gdk_content_formats_new(presets_drag_entries,
+ G_N_ELEMENTS(presets_drag_entries));
+ gtk_tree_view_enable_model_drag_dest(treeview, targets, GDK_ACTION_MOVE);
+ gtk_tree_view_enable_model_drag_source(treeview, GDK_BUTTON1_MASK,
+ targets, GDK_ACTION_MOVE);
+ gdk_content_formats_unref(targets);
+#else
+ gtk_tree_view_enable_model_drag_dest(treeview, presets_drag_entries, 1,
GDK_ACTION_MOVE);
gtk_tree_view_enable_model_drag_source(treeview, GDK_BUTTON1_MASK,
- &SrcEntry, 1, GDK_ACTION_MOVE);
+ presets_drag_entries, 1,
+ GDK_ACTION_MOVE);
+#endif
- g_signal_connect(treeview, "drag_data_received", presets_drag_cb, ud);
+ g_signal_connect(treeview, "drag_data_received", presets_drag_data_received_cb, ud);
g_signal_connect(treeview, "drag_motion", presets_drag_motion_cb, ud);
g_signal_connect(treeview, "row_expanded", presets_row_expanded_cb, ud);
g_signal_connect(treeview, "row_collapsed", presets_row_expanded_cb, ud);
@@ -972,16 +991,35 @@ ghb_idle_ui_init(signal_user_data_t *ud)
return FALSE;
}
+#if GTK_CHECK_VERSION(3, 90, 0)
+extern G_MODULE_EXPORT void easter_egg_multi_cb(void);
+extern G_MODULE_EXPORT void preview_leave_cb(void);
+extern G_MODULE_EXPORT void preview_motion_cb(void);
+extern G_MODULE_EXPORT void preview_draw_cb(GtkDrawingArea*, cairo_t*, int, int,
+ gpointer);
+extern G_MODULE_EXPORT void hud_enter_cb(void);
+extern G_MODULE_EXPORT void hud_leave_cb(void);
+#endif
+
extern G_MODULE_EXPORT void
ghb_activate_cb(GApplication * app, signal_user_data_t * ud)
{
GtkCssProvider * provider = gtk_css_provider_new();
ghb_css_provider_load_from_data(provider, MyCSS, -1);
+
+#if GTK_CHECK_VERSION(3, 90, 0)
+ GdkDisplay *dd = gdk_display_get_default();
+ gtk_style_context_add_provider_for_display(dd,
+ GTK_STYLE_PROVIDER(provider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+#else
GdkScreen *ss = gdk_screen_get_default();
gtk_style_context_add_provider_for_screen(ss,
GTK_STYLE_PROVIDER(provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+#endif
+
g_object_unref(provider);
ghb_resource_init();
@@ -1279,6 +1317,34 @@ ghb_activate_cb(GApplication * app, signal_user_data_t * ud)
window = GHB_WIDGET(ud->builder, "queue_window");
gtk_application_add_window(GTK_APPLICATION(app), GTK_WINDOW(window));
+#if GTK_CHECK_VERSION(3, 90, 0)
+ // GTK4 Event handling.
+ GtkGesture * gest;
+ GtkEventController * econ;
+
+ // Easter egg multi-click
+ gest = gtk_gesture_multi_press_new();
+ widget = GHB_WIDGET(ud->builder, "easter_box");
+ gtk_widget_add_controller(widget, GTK_EVENT_CONTROLLER(gest));
+ g_signal_connect(gest, "pressed", easter_egg_multi_cb, ud);
+
+ // Preview HUD popup management via mouse motion
+ econ = gtk_event_controller_motion_new();
+ widget = GHB_WIDGET(ud->builder, "preview_image");
+ gtk_widget_add_controller(widget, econ);
+ g_signal_connect(econ, "leave", preview_leave_cb, ud);
+ g_signal_connect(econ, "motion", preview_motion_cb, ud);
+
+ gtk_drawing_area_set_draw_func(GTK_DRAWING_AREA(widget), preview_draw_cb,
+ ud, NULL);
+
+ econ = gtk_event_controller_motion_new();
+ widget = GHB_WIDGET(ud->builder, "preview_hud");
+ gtk_widget_add_controller(widget, econ);
+ g_signal_connect(econ, "enter", hud_enter_cb, ud);
+ g_signal_connect(econ, "leave", hud_leave_cb, ud);
+#endif
+
gtk_widget_show(ghb_window);
}
diff --git a/gtk/src/presets.c b/gtk/src/presets.c
index a088094d5..c35933334 100644
--- a/gtk/src/presets.c
+++ b/gtk/src/presets.c
@@ -1144,6 +1144,53 @@ get_selected_path(signal_user_data_t *ud)
return NULL;
}
+G_MODULE_EXPORT gboolean
+presets_window_delete_cb(
+ GtkWidget *xwidget,
+#if !GTK_CHECK_VERSION(3, 90, 0)
+ GdkEvent *event,
+#endif
+ signal_user_data_t *ud)
+{
+ GSimpleAction * action;
+ GVariant * state = g_variant_new_boolean(FALSE);
+
+ action = G_SIMPLE_ACTION(g_action_map_lookup_action(
+ G_ACTION_MAP(ud->app), "show-presets"));
+ g_action_change_state(G_ACTION(action), state);
+ return TRUE;
+}
+
+G_MODULE_EXPORT void
+presets_sz_alloc_cb(
+ GtkWidget *widget,
+#if GTK_CHECK_VERSION(3, 90, 0)
+ int width,
+ int height,
+ int baseline,
+#else
+ GdkRectangle *rect,
+#endif
+ signal_user_data_t *ud)
+{
+ if (gtk_widget_get_visible(widget))
+ {
+ gint w, h, ww, wh;
+ w = ghb_dict_get_int(ud->prefs, "presets_window_width");
+ h = ghb_dict_get_int(ud->prefs, "presets_window_height");
+
+ gtk_window_get_size(GTK_WINDOW(widget), &ww, &wh);
+ if ( w != ww || h != wh )
+ {
+ ghb_dict_set_int(ud->prefs, "presets_window_width", ww);
+ ghb_dict_set_int(ud->prefs, "presets_window_height", wh);
+ ghb_pref_set(ud->prefs, "presets_window_width");
+ ghb_pref_set(ud->prefs, "presets_window_height");
+ ghb_prefs_store();
+ }
+ }
+}
+
G_MODULE_EXPORT void
preset_select_action_cb(GSimpleAction *action, GVariant *param,
signal_user_data_t *ud)
@@ -2132,7 +2179,7 @@ preset_rename_action_cb(GSimpleAction *action, GVariant *param,
dialog = GHB_WIDGET(ud->builder, "preset_rename_dialog");
entry = GTK_ENTRY(GHB_WIDGET(ud->builder, "PresetReName"));
- gtk_entry_set_text(entry, name);
+ ghb_entry_set_text(entry, name);
response = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_hide(dialog);
@@ -2143,7 +2190,7 @@ preset_rename_action_cb(GSimpleAction *action, GVariant *param,
char * desc;
// save the new name
- name = gtk_entry_get_text(entry);
+ name = ghb_entry_get_text(entry);
dict = hb_preset_get(path);
if (dict != NULL)
{
@@ -2248,7 +2295,7 @@ static void preset_save_action(signal_user_data_t *ud, gboolean as)
dialog = GHB_WIDGET(ud->builder, "preset_save_dialog");
entry = GTK_ENTRY(GHB_WIDGET(ud->builder, "PresetName"));
- gtk_entry_set_text(entry, name);
+ ghb_entry_set_text(entry, name);
widget = GHB_WIDGET(ud->builder, "PresetName");
gtk_widget_set_sensitive(widget, as);
@@ -2267,12 +2314,12 @@ static void preset_save_action(signal_user_data_t *ud, gboolean as)
gboolean def;
// save the preset
- name = gtk_entry_get_text(entry);
+ name = ghb_entry_get_text(entry);
category = ghb_dict_get_string(ud->settings, "PresetCategory");
if (!strcmp(category, "new"))
{
entry = GTK_ENTRY(GHB_WIDGET(ud->builder, "PresetCategoryName"));
- category = gtk_entry_get_text(entry);
+ category = ghb_entry_get_text(entry);
}
if (category == NULL || category[0] == 0)
{
@@ -2316,9 +2363,9 @@ preset_save_set_ok_sensitive(signal_user_data_t *ud)
category = ghb_dict_get_string(ud->settings, "PresetCategory");
entry = GTK_ENTRY(GHB_WIDGET(ud->builder, "PresetName"));
- name = gtk_entry_get_text(entry);
+ name = ghb_entry_get_text(entry);
entry = GTK_ENTRY(GHB_WIDGET(ud->builder, "PresetCategoryName"));
- category_name = gtk_entry_get_text(entry);
+ category_name = ghb_entry_get_text(entry);
sensitive = name[0] && (strcmp(category, "new") || category_name[0]);
gtk_widget_set_sensitive(ok_button, sensitive);
@@ -2435,6 +2482,14 @@ preset_remove_action_cb(GSimpleAction *action, GVariant *param,
// controls where valid drop locations are
G_MODULE_EXPORT gboolean
+#if GTK_CHECK_VERSION(3, 90, 0)
+presets_drag_motion_cb(
+ GtkTreeView *tv,
+ GdkDrop *ctx,
+ gint x,
+ gint y,
+ signal_user_data_t *ud)
+#else
presets_drag_motion_cb(
GtkTreeView *tv,
GdkDragContext *ctx,
@@ -2442,6 +2497,7 @@ presets_drag_motion_cb(
gint y,
guint time,
signal_user_data_t *ud)
+#endif
{
GtkTreeViewDropPosition drop_pos;
GtkTreeIter iter;
@@ -2454,13 +2510,29 @@ presets_drag_motion_cb(
gboolean src_folder, dst_folder;
GhbValue *src_preset, *dst_preset;
GtkWidget *widget;
+#if GTK_CHECK_VERSION(3, 90, 0)
+ // Dummy time for backwards compatibility
+ guint time = 0;
+#endif
+ treepath = g_object_get_data(G_OBJECT(tv), "dst-tree-path");
+ if (treepath != NULL)
+ {
+ gtk_tree_path_free(treepath);
+ }
+ g_object_set_data(G_OBJECT(tv), "dst-tree-path", NULL);
+
+#if GTK_CHECK_VERSION(3, 90, 0)
+ GdkDrag *drag_ctx = gdk_drop_get_drag(ctx);
+ widget = gtk_drag_get_source_widget(drag_ctx);
+#else
widget = gtk_drag_get_source_widget(ctx);
+#endif
if (widget == NULL || widget != GTK_WIDGET(tv))
return TRUE;
// Get the type of the object being dragged
- srctv = GTK_TREE_VIEW(gtk_drag_get_source_widget(ctx));
+ srctv = GTK_TREE_VIEW(widget);
select = gtk_tree_view_get_selection(srctv);
gtk_tree_selection_get_selected(select, &model, &iter);
path = ghb_tree_get_index(model, &iter);
@@ -2469,7 +2541,7 @@ presets_drag_motion_cb(
free(path);
if (src_preset == NULL)
{
- gdk_drag_status(ctx, 0, time);
+ ghb_drag_status(ctx, 0, time);
return TRUE;
}
@@ -2481,14 +2553,14 @@ presets_drag_motion_cb(
gtk_tree_view_get_dest_row_at_pos(tv, x, y, &treepath, &drop_pos);
if (treepath == NULL)
{
- gdk_drag_status(ctx, 0, time);
+ ghb_drag_status(ctx, 0, time);
return TRUE;
}
// Don't allow repositioning of builtin presets
if (src_ptype != HB_PRESET_TYPE_CUSTOM)
{
gtk_tree_view_set_drag_dest_row(tv, NULL, drop_pos);
- gdk_drag_status(ctx, 0, time);
+ ghb_drag_status(ctx, 0, time);
gtk_tree_path_free(treepath);
return TRUE;
}
@@ -2498,7 +2570,7 @@ presets_drag_motion_cb(
free(path);
if (dst_preset == NULL)
{
- gdk_drag_status(ctx, 0, time);
+ ghb_drag_status(ctx, 0, time);
gtk_tree_path_free(treepath);
return TRUE;
}
@@ -2510,7 +2582,7 @@ presets_drag_motion_cb(
if (dst_ptype != HB_PRESET_TYPE_CUSTOM)
{
gtk_tree_view_set_drag_dest_row(tv, NULL, drop_pos);
- gdk_drag_status(ctx, 0, time);
+ ghb_drag_status(ctx, 0, time);
gtk_tree_path_free(treepath);
return TRUE;
}
@@ -2524,7 +2596,7 @@ presets_drag_motion_cb(
free(path);
if (dst_preset == NULL)
{
- gdk_drag_status(ctx, 0, time);
+ ghb_drag_status(ctx, 0, time);
gtk_tree_path_free(treepath);
return TRUE;
}
@@ -2550,7 +2622,7 @@ presets_drag_motion_cb(
if (!src_folder && dst_folder && drop_pos == GTK_TREE_VIEW_DROP_BEFORE)
{
gtk_tree_view_set_drag_dest_row(tv, NULL, drop_pos);
- gdk_drag_status(ctx, 0, time);
+ ghb_drag_status(ctx, 0, time);
gtk_tree_path_free(treepath);
return TRUE;
}
@@ -2561,14 +2633,24 @@ presets_drag_motion_cb(
}
gtk_tree_view_set_drag_dest_row(tv, treepath, drop_pos);
- gtk_tree_path_free(treepath);
- gdk_drag_status(ctx, GDK_ACTION_MOVE, time);
+ ghb_drag_status(ctx, GDK_ACTION_MOVE, time);
+
+ g_object_set_data(G_OBJECT(tv), "dst-tree-path", treepath);
+ g_object_set_data(G_OBJECT(tv), "dst-drop-pos", (gpointer)drop_pos);
+
return TRUE;
}
G_MODULE_EXPORT void
-presets_drag_cb(
- GtkTreeView *dst_widget,
+#if GTK_CHECK_VERSION(3, 90, 0)
+presets_drag_data_received_cb(
+ GtkTreeView *tv,
+ GdkDrop *dc,
+ GtkSelectionData *selection_data,
+ signal_user_data_t *ud)
+#else
+presets_drag_data_received_cb(
+ GtkTreeView *tv,
GdkDragContext *dc,
gint x,
gint y,
@@ -2576,37 +2658,20 @@ presets_drag_cb(
guint info,
guint t,
signal_user_data_t *ud)
+#endif
{
+ GtkTreeModel *dst_model;
GtkTreePath *dst_treepath = NULL;
GtkTreeViewDropPosition drop_pos;
GtkTreeIter dst_iter, src_iter;
gint src_ptype;
gboolean src_folder, dst_folder;
- GtkTreeModel *dst_model = gtk_tree_view_get_model(dst_widget);
-
- // This doesn't work here for some reason...
- // gtk_tree_view_get_drag_dest_row(dstwidget, &path, &drop_pos);
- gtk_tree_view_get_dest_row_at_pos(dst_widget, x, y,
- &dst_treepath, &drop_pos);
- // This little hack is needed because attempting to drop after
- // the last item gives us no dst_treepath or drop_pos.
- if (dst_treepath == NULL)
- {
- gint n_children;
-
- n_children = gtk_tree_model_iter_n_children(dst_model, NULL);
- if (n_children)
- {
- drop_pos = GTK_TREE_VIEW_DROP_AFTER;
- dst_treepath = gtk_tree_path_new_from_indices(n_children-1, -1);
- }
- else
- {
- drop_pos = GTK_TREE_VIEW_DROP_BEFORE;
- dst_treepath = gtk_tree_path_new_from_indices(0, -1);
- }
- }
+ dst_model = gtk_tree_view_get_model(tv);
+ dst_treepath = g_object_get_data(G_OBJECT(tv), "dst-tree-path");
+ drop_pos = (GtkTreeViewDropPosition)g_object_get_data(G_OBJECT(tv),
+ "dst-drop-pos");
+ g_object_set_data(G_OBJECT(tv), "dst-tree-path", NULL);
if (dst_treepath == NULL)
{
return;
@@ -2617,7 +2682,12 @@ presets_drag_cb(
GtkTreeSelection *select;
hb_preset_index_t *dst_path, *src_path;
+#if GTK_CHECK_VERSION(3, 90, 0)
+ GdkDrag *drag_ctx = gdk_drop_get_drag(dc);
+ src_widget = GTK_TREE_VIEW(gtk_drag_get_source_widget(drag_ctx));
+#else
src_widget = GTK_TREE_VIEW(gtk_drag_get_source_widget(dc));
+#endif
select = gtk_tree_view_get_selection (src_widget);
gtk_tree_selection_get_selected(select, &src_model, &src_iter);
diff --git a/gtk/src/preview.c b/gtk/src/preview.c
index edda8173f..6721b3284 100644
--- a/gtk/src/preview.c
+++ b/gtk/src/preview.c
@@ -124,23 +124,23 @@ preview_set_render_size(signal_user_data_t *ud, int width, int height)
{
GtkWidget * widget;
GtkWindow * window;
- GdkWindow * w;
+ GhbSurface * ss;
GdkGeometry geo;
widget = GHB_WIDGET (ud->builder, "preview_image");
gtk_widget_set_size_request(widget, width, height);
window = GTK_WINDOW(GHB_WIDGET(ud->builder, "preview_window"));
+ ss = ghb_widget_get_surface(GTK_WIDGET(window));
gtk_window_unmaximize(window);
- gtk_window_resize(window, width, height);
- w = gtk_widget_get_window(GTK_WIDGET(window));
- if (w != NULL)
+ if (ss != NULL)
{
geo.min_aspect = (double)(width - 4) / height;
geo.max_aspect = (double)(width + 4) / height;
geo.width_inc = geo.height_inc = 2;
- gdk_window_set_geometry_hints(w, &geo,
- GDK_HINT_ASPECT|GDK_HINT_RESIZE_INC);
+ ghb_surface_set_geometry_hints(ss, &geo,
+ GDK_HINT_ASPECT|GDK_HINT_RESIZE_INC);
}
+ gtk_window_resize(window, width, height);
ud->preview->render_width = width;
ud->preview->render_height = height;
@@ -218,7 +218,7 @@ live_preview_start(signal_user_data_t *ud)
img = GTK_IMAGE(GHB_WIDGET(ud->builder, "live_preview_play_image"));
if (!ud->preview->encoded[ud->preview->frame])
{
- gtk_image_set_from_icon_name(img, GHB_PLAY_ICON, GTK_ICON_SIZE_BUTTON);
+ ghb_image_set_from_icon_name(img, GHB_PLAY_ICON, GHB_ICON_SIZE_BUTTON);
gst_element_set_state(ud->preview->play, GST_STATE_NULL);
ud->preview->pause = TRUE;
return;
@@ -231,7 +231,7 @@ live_preview_start(signal_user_data_t *ud)
#else
uri = g_strdup_printf("file://%s", ud->preview->current);
#endif
- gtk_image_set_from_icon_name(img, GHB_PAUSE_ICON, GTK_ICON_SIZE_BUTTON);
+ ghb_image_set_from_icon_name(img, GHB_PAUSE_ICON, GHB_ICON_SIZE_BUTTON);
ud->preview->state = PREVIEW_STATE_LIVE;
g_object_set(G_OBJECT(ud->preview->play), "uri", uri, NULL);
g_free(uri);
@@ -249,7 +249,7 @@ live_preview_pause(signal_user_data_t *ud)
return;
img = GTK_IMAGE(GHB_WIDGET(ud->builder, "live_preview_play_image"));
- gtk_image_set_from_icon_name(img, GHB_PLAY_ICON, GTK_ICON_SIZE_BUTTON);
+ ghb_image_set_from_icon_name(img, GHB_PLAY_ICON, GHB_ICON_SIZE_BUTTON);
gst_element_set_state(ud->preview->play, GST_STATE_PAUSED);
ud->preview->pause = TRUE;
}
@@ -265,7 +265,7 @@ live_preview_stop(signal_user_data_t *ud)
return;
img = GTK_IMAGE(GHB_WIDGET(ud->builder, "live_preview_play_image"));
- gtk_image_set_from_icon_name(img, GHB_PLAY_ICON, GTK_ICON_SIZE_BUTTON);
+ ghb_image_set_from_icon_name(img, GHB_PLAY_ICON, GHB_ICON_SIZE_BUTTON);
#if defined(_ENABLE_GST)
gst_element_set_state(ud->preview->play, GST_STATE_NULL);
#endif
@@ -333,13 +333,10 @@ caps_set(GstCaps *caps, signal_user_data_t *ud)
preview_set_size(ud, width, height);
if (ghb_dict_get_bool(ud->prefs, "reduce_hd_preview"))
{
- GdkWindow *window;
gint s_w, s_h;
- window = gtk_widget_get_window(
- GHB_WIDGET(ud->builder, "preview_window"));
- ghb_monitor_get_size(window, &s_w, &s_h);
-
+ ghb_monitor_get_size(GHB_WIDGET(ud->builder, "preview_window"),
+ &s_w, &s_h);
if (s_w > 0 && s_h > 0)
{
if (width > s_w * 80 / 100)
@@ -1043,6 +1040,23 @@ ghb_reset_preview_image(signal_user_data_t *ud)
gtk_widget_queue_draw(widget);
}
+#if GTK_CHECK_VERSION(3, 90, 0)
+G_MODULE_EXPORT void
+preview_draw_cb(
+ GtkDrawingArea * da,
+ cairo_t * cr,
+ int width,
+ int height,
+ signal_user_data_t *ud)
+{
+ if (ud->preview->scaled_pix != NULL)
+ {
+ _draw_pixbuf(ud, cr, ud->preview->scaled_pix);
+ }
+}
+
+#else
+
G_MODULE_EXPORT gboolean
preview_draw_cb(
GtkWidget *widget,
@@ -1055,13 +1069,26 @@ preview_draw_cb(
}
return FALSE;
}
+#endif
G_MODULE_EXPORT void
-preview_button_size_allocate_cb(GtkWidget *widget, GdkRectangle *allocation, signal_user_data_t *ud)
+preview_button_size_allocate_cb(
+ GtkWidget *widget,
+#if GTK_CHECK_VERSION(3, 90, 0)
+ int width,
+ int height,
+ int baseline,
+#else
+ GdkRectangle *rect,
+#endif
+ signal_user_data_t *ud)
{
- g_debug("allocate %d x %d", allocation->width, allocation->height);
- if (ud->preview->button_width == allocation->width &&
- ud->preview->button_height == allocation->height)
+#if !GTK_CHECK_VERSION(3, 90, 0)
+ int width = rect->width;
+ int height = rect->height;
+#endif
+ if (ud->preview->button_width == width &&
+ ud->preview->button_height == height)
{
// Nothing to do. Bug out.
g_debug("nothing to do");
@@ -1069,8 +1096,8 @@ preview_button_size_allocate_cb(GtkWidget *widget, GdkRectangle *allocation, sig
}
g_debug("prev allocate %d x %d", ud->preview->button_width,
ud->preview->button_height);
- ud->preview->button_width = allocation->width;
- ud->preview->button_height = allocation->height;
+ ud->preview->button_width = width;
+ ud->preview->button_height = height;
set_mini_preview_image(ud, ud->preview->pix);
}
@@ -1089,11 +1116,15 @@ ghb_preview_set_visible(signal_user_data_t *ud, gboolean visible)
widget = GHB_WIDGET(ud->builder, "preview_window");
if (visible)
{
+#if !GTK_CHECK_VERSION(3, 90, 0)
+ // TODO: can this be done in GTK4?
gint x, y;
x = ghb_dict_get_int(ud->prefs, "preview_x");
y = ghb_dict_get_int(ud->prefs, "preview_y");
+
if (x >= 0 && y >= 0)
gtk_window_move(GTK_WINDOW(widget), x, y);
+#endif
gtk_window_deiconify(GTK_WINDOW(widget));
}
gtk_widget_set_visible(widget, visible);
@@ -1158,7 +1189,9 @@ preview_frame_value_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
G_MODULE_EXPORT gboolean
preview_window_delete_cb(
GtkWidget *widget,
+#if !GTK_CHECK_VERSION(3, 90, 0)
GdkEvent *event,
+#endif
signal_user_data_t *ud)
{
live_preview_stop(ud);
@@ -1180,6 +1213,8 @@ preview_duration_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
static guint hud_timeout_id = 0;
+static gboolean in_hud = FALSE;
+
static gboolean
hud_timeout(signal_user_data_t *ud)
{
@@ -1192,14 +1227,24 @@ hud_timeout(signal_user_data_t *ud)
return FALSE;
}
-static gboolean in_hud = FALSE;
-
+#if GTK_CHECK_VERSION(3, 90, 0)
+G_MODULE_EXPORT void
+hud_enter_cb(
+ GtkEventControllerMotion * econ,
+ double x,
+ double y,
+ GdkCrossingMode cross,
+ GdkNotifyType notify,
+ signal_user_data_t *ud)
+#else
G_MODULE_EXPORT gboolean
hud_enter_cb(
GtkWidget *widget,
GdkEventCrossing *event,
signal_user_data_t *ud)
+#endif
{
+ GtkWidget * hud;
if (hud_timeout_id != 0)
{
GMainContext *mc;
@@ -1210,31 +1255,53 @@ hud_enter_cb(
if (source != NULL)
g_source_destroy(source);
}
- widget = GHB_WIDGET(ud->builder, "preview_hud");
- if (!gtk_widget_get_visible(widget))
+ hud = GHB_WIDGET(ud->builder, "preview_hud");
+ if (!gtk_widget_get_visible(hud))
{
- gtk_widget_show(widget);
+ gtk_widget_show(hud);
}
hud_timeout_id = 0;
in_hud = TRUE;
+#if !GTK_CHECK_VERSION(3, 90, 0)
return FALSE;
+#endif
}
+#if GTK_CHECK_VERSION(3, 90, 0)
+G_MODULE_EXPORT void
+hud_leave_cb(
+ GtkEventControllerMotion * econ,
+ GdkCrossingMode cross,
+ GdkNotifyType notify,
+ signal_user_data_t *ud)
+#else
G_MODULE_EXPORT gboolean
hud_leave_cb(
GtkWidget *widget,
GdkEventCrossing *event,
signal_user_data_t *ud)
+#endif
{
in_hud = FALSE;
+#if !GTK_CHECK_VERSION(3, 90, 0)
return FALSE;
+#endif
}
+#if GTK_CHECK_VERSION(3, 90, 0)
+G_MODULE_EXPORT void
+preview_leave_cb(
+ GtkEventControllerMotion * econ,
+ GdkCrossingMode cross,
+ GdkNotifyType notify,
+ signal_user_data_t *ud)
+#else
G_MODULE_EXPORT gboolean
preview_leave_cb(
GtkWidget *widget,
GdkEventCrossing *event,
signal_user_data_t *ud)
+#endif
{
if (hud_timeout_id != 0)
{
@@ -1247,15 +1314,28 @@ preview_leave_cb(
g_source_destroy(source);
}
hud_timeout_id = g_timeout_add(300, (GSourceFunc)hud_timeout, ud);
+#if !GTK_CHECK_VERSION(3, 90, 0)
return FALSE;
+#endif
}
+#if GTK_CHECK_VERSION(3, 90, 0)
+G_MODULE_EXPORT void
+preview_motion_cb(
+ GtkEventControllerMotion * econ,
+ gdouble x,
+ gdouble y,
+ signal_user_data_t *ud)
+#else
G_MODULE_EXPORT gboolean
preview_motion_cb(
GtkWidget *widget,
GdkEventMotion *event,
signal_user_data_t *ud)
+#endif
{
+ GtkWidget * hud;
+
if (hud_timeout_id != 0)
{
GMainContext *mc;
@@ -1266,28 +1346,39 @@ preview_motion_cb(
if (source != NULL)
g_source_destroy(source);
}
- widget = GHB_WIDGET(ud->builder, "preview_hud");
- if (!gtk_widget_get_visible(widget))
+ hud = GHB_WIDGET(ud->builder, "preview_hud");
+ if (!gtk_widget_get_visible(hud))
{
- gtk_widget_show(widget);
+ gtk_widget_show(hud);
}
if (!in_hud)
{
hud_timeout_id = g_timeout_add_seconds(4, (GSourceFunc)hud_timeout, ud);
}
+#if !GTK_CHECK_VERSION(3, 90, 0)
return FALSE;
+#endif
}
+// TODO: GTK4 eliminated "configure-event" signal.
+// From a read of the gtk4 code, it appears GDK_CONFIGURE does
+// not get propagated. And there is no way to set position of
+// a window :*(
+//
+// Hopefully they will fix this or provide a better alternative
+// before gtk4 is released.
+#if !GTK_CHECK_VERSION(3, 90, 0)
G_MODULE_EXPORT gboolean
preview_configure_cb(
GtkWidget *widget,
GdkEventConfigure *event,
signal_user_data_t *ud)
{
- gint x, y;
-
if (gtk_widget_get_visible(widget))
{
+ // TODO: can this be done in GTK4?
+ gint x, y;
+
gtk_window_get_position(GTK_WINDOW(widget), &x, &y);
ghb_dict_set_int(ud->prefs, "preview_x", x);
ghb_dict_set_int(ud->prefs, "preview_y", y);
@@ -1297,7 +1388,10 @@ preview_configure_cb(
}
return FALSE;
}
+#endif
+#if !GTK_CHECK_VERSION(3, 90, 0)
+// GTK4 no longer has GDK_WINDOW_STATE events :*(
G_MODULE_EXPORT gboolean
preview_state_cb(
GtkWidget *widget,
@@ -1312,15 +1406,9 @@ preview_state_cb(
// I only do this because there seems to be no
// way to reliably disable the iconfy button without
// also disabling the maximize button.
-#if GTK_CHECK_VERSION(3, 90, 0)
- GdkWindow * window = gdk_event_get_window(event);
- GdkWindowState state = gdk_window_get_state(window);
- if (state & GDK_WINDOW_STATE_ICONIFIED)
-#else
GdkEventWindowState * wse = (GdkEventWindowState*)event;
if (wse->changed_mask & wse->new_window_state &
GDK_WINDOW_STATE_ICONIFIED)
-#endif
{
live_preview_stop(ud);
GtkWidget *widget = GHB_WIDGET(ud->builder, "show_preview");
@@ -1329,18 +1417,29 @@ preview_state_cb(
}
return FALSE;
}
+#endif
G_MODULE_EXPORT void
preview_resize_cb(
GtkWidget *widget,
+#if GTK_CHECK_VERSION(3, 90, 0)
+ int width,
+ int height,
+ int baseline,
+#else
GdkRectangle *rect,
+#endif
signal_user_data_t *ud)
{
- if (ud->preview->render_width != rect->width ||
- ud->preview->render_height != rect->height)
+#if !GTK_CHECK_VERSION(3, 90, 0)
+ int width = rect->width;
+ int height = rect->height;
+#endif
+ if (ud->preview->render_width != width ||
+ ud->preview->render_height != height)
{
- ud->preview->render_width = rect->width;
- ud->preview->render_height = rect->height;
+ ud->preview->render_width = width;
+ ud->preview->render_height = height;
if (ud->preview->scaled_pix != NULL)
g_object_unref(ud->preview->scaled_pix);
ud->preview->scaled_pix = do_preview_scaling(ud, ud->preview->pix);
diff --git a/gtk/src/queuehandler.c b/gtk/src/queuehandler.c
index 3c810655c..c5885180a 100644
--- a/gtk/src/queuehandler.c
+++ b/gtk/src/queuehandler.c
@@ -44,6 +44,19 @@ void ghb_queue_buttons_grey(signal_user_data_t *ud);
// Callbacks
G_MODULE_EXPORT void
queue_remove_clicked_cb(GtkWidget *widget, signal_user_data_t *ud);
+
+#if GTK_CHECK_VERSION(3, 90, 0)
+G_MODULE_EXPORT void
+queue_drag_begin_cb(GtkWidget * widget, GdkDrag * context,
+ signal_user_data_t * ud);
+G_MODULE_EXPORT void
+queue_drag_end_cb(GtkWidget * widget, GdkDrag * context,
+ signal_user_data_t * ud);
+G_MODULE_EXPORT void
+queue_drag_data_get_cb(GtkWidget * widget, GdkDrag * context,
+ GtkSelectionData * selection_data,
+ signal_user_data_t * ud);
+#else
G_MODULE_EXPORT void
queue_drag_begin_cb(GtkWidget * widget, GdkDragContext * context,
signal_user_data_t * ud);
@@ -54,6 +67,7 @@ G_MODULE_EXPORT void
queue_drag_data_get_cb(GtkWidget * widget, GdkDragContext * context,
GtkSelectionData * selection_data,
guint info, guint time, signal_user_data_t * ud);
+#endif
G_MODULE_EXPORT void
title_selected_cb(GtkWidget *widget, signal_user_data_t *ud);
G_MODULE_EXPORT void
@@ -61,6 +75,25 @@ title_dest_file_cb(GtkWidget *widget, signal_user_data_t *ud);
G_MODULE_EXPORT void
title_dest_dir_cb(GtkWidget *widget, signal_user_data_t *ud);
+#if GTK_CHECK_VERSION(3, 90, 0)
+static const char * queue_drag_entries[] = {
+ "application/queue-list-row-drop"
+};
+
+void
+ghb_queue_drag_n_drop_init(signal_user_data_t * ud)
+{
+ GtkWidget * widget;
+ GdkContentFormats * targets;
+
+ widget = GHB_WIDGET(ud->builder, "queue_list");
+ targets = gdk_content_formats_new(queue_drag_entries,
+ G_N_ELEMENTS(queue_drag_entries));
+ gtk_drag_dest_set(widget, GTK_DEST_DEFAULT_MOTION|GTK_DEST_DEFAULT_DROP,
+ targets, GDK_ACTION_MOVE);
+ gdk_content_formats_unref(targets);
+}
+#else
static GtkTargetEntry queue_drag_entries[] = {
{ "GTK_LIST_BOX_ROW", GTK_TARGET_SAME_APP, 0 }
};
@@ -74,6 +107,7 @@ ghb_queue_drag_n_drop_init(signal_user_data_t * ud)
gtk_drag_dest_set(widget, GTK_DEST_DEFAULT_MOTION|GTK_DEST_DEFAULT_DROP,
queue_drag_entries, 1, GDK_ACTION_MOVE);
}
+#endif
static GtkWidget *find_widget(GtkWidget *widget, gchar *name)
{
@@ -1297,8 +1331,8 @@ ghb_queue_update_status_icon(signal_user_data_t *ud, int index)
{
return;
}
- gtk_image_set_from_icon_name(status_icon, icon_name,
- GTK_ICON_SIZE_BUTTON);
+ ghb_image_set_from_icon_name(status_icon, icon_name,
+ GHB_ICON_SIZE_BUTTON);
}
void
@@ -1415,10 +1449,14 @@ add_to_queue_list(signal_user_data_t *ud, GhbValue *queueDict)
gtk_widget_set_margin_start(GTK_WIDGET(vbox), 12);
hbox = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6));
dbox = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6));
+#if GTK_CHECK_VERSION(3, 90, 0)
+ ebox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+#else
ebox = gtk_event_box_new();
+#endif
- status_icon = gtk_image_new_from_icon_name("hb-source",
- GTK_ICON_SIZE_BUTTON);
+ status_icon = ghb_image_new_from_icon_name("hb-source",
+ GHB_ICON_SIZE_BUTTON);
gtk_widget_set_name(status_icon, "queue_item_status");
gtk_image_set_pixel_size(GTK_IMAGE(status_icon), 16);
@@ -1436,8 +1474,7 @@ add_to_queue_list(signal_user_data_t *ud, GhbValue *queueDict)
gtk_label_set_width_chars(GTK_LABEL(dest_label), 50);
gtk_label_set_ellipsize(GTK_LABEL(dest_label), PANGO_ELLIPSIZE_END);
- delete_button = gtk_button_new_from_icon_name("hb-remove",
- GTK_ICON_SIZE_BUTTON);
+ delete_button = ghb_button_new_from_icon_name("hb-remove");
gtk_button_set_relief(GTK_BUTTON(delete_button), GTK_RELIEF_NONE);
g_signal_connect(delete_button, "clicked",
(GCallback)queue_remove_clicked_cb, ud);
@@ -1446,15 +1483,16 @@ add_to_queue_list(signal_user_data_t *ud, GhbValue *queueDict)
progress = gtk_progress_bar_new();
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress), 0.0);
gtk_widget_set_name(progress, "queue_item_progress");
+ gtk_widget_set_visible(progress, FALSE);
- ghb_box_pack_start(dbox, GTK_WIDGET(status_icon));
- ghb_box_pack_start(dbox, GTK_WIDGET(dest_label));
+ ghb_box_append_child(dbox, GTK_WIDGET(status_icon));
+ ghb_box_append_child(dbox, GTK_WIDGET(dest_label));
gtk_container_add(GTK_CONTAINER(ebox), GTK_WIDGET(dbox));
- ghb_box_pack_start(hbox, GTK_WIDGET(ebox));
- ghb_box_pack_start(hbox, GTK_WIDGET(delete_button));
+ ghb_box_append_child(hbox, GTK_WIDGET(ebox));
+ ghb_box_append_child(hbox, GTK_WIDGET(delete_button));
- ghb_box_pack_start(vbox, GTK_WIDGET(hbox));
- ghb_box_pack_start(vbox, GTK_WIDGET(progress));
+ ghb_box_append_child(vbox, GTK_WIDGET(hbox));
+ ghb_box_append_child(vbox, GTK_WIDGET(progress));
gtk_container_add(GTK_CONTAINER(row), GTK_WIDGET(vbox));
gtk_widget_show(GTK_WIDGET(row));
@@ -1470,8 +1508,17 @@ add_to_queue_list(signal_user_data_t *ud, GhbValue *queueDict)
// style class for CSS settings
gtk_style_context_add_class(gtk_widget_get_style_context(row), "row");
// set row as a source for drag & drop
+#if GTK_CHECK_VERSION(3, 90, 0)
+ GdkContentFormats * targets;
+
+ targets = gdk_content_formats_new(queue_drag_entries,
+ G_N_ELEMENTS(queue_drag_entries));
+ gtk_drag_source_set(ebox, GDK_BUTTON1_MASK, targets, GDK_ACTION_MOVE);
+ gdk_content_formats_unref(targets);
+#else
gtk_drag_source_set(ebox, GDK_BUTTON1_MASK, queue_drag_entries, 1,
GDK_ACTION_MOVE);
+#endif
g_signal_connect(ebox, "drag-begin", G_CALLBACK(queue_drag_begin_cb), NULL);
g_signal_connect(ebox, "drag-end", G_CALLBACK(queue_drag_end_cb), NULL);
g_signal_connect(ebox, "drag-data-get",
@@ -2082,7 +2129,7 @@ GtkWidget * title_create_row(signal_user_data_t *ud)
gtk_widget_set_name(GTK_WIDGET(selected), "title_selected");
gtk_widget_show(GTK_WIDGET(selected));
g_signal_connect(selected, "toggled", (GCallback)title_selected_cb, ud);
- ghb_box_pack_start(hbox, GTK_WIDGET(selected));
+ ghb_box_append_child(hbox, GTK_WIDGET(selected));
// Title label
title = GTK_LABEL(gtk_label_new(_("No Title")));
@@ -2091,7 +2138,7 @@ GtkWidget * title_create_row(signal_user_data_t *ud)
gtk_widget_set_valign(GTK_WIDGET(title), GTK_ALIGN_CENTER);
gtk_widget_set_name(GTK_WIDGET(title), "title_label");
gtk_widget_show(GTK_WIDGET(title));
- ghb_box_pack_start(hbox, GTK_WIDGET(title));
+ ghb_box_append_child(hbox, GTK_WIDGET(title));
default_title_attrs = gtk_label_get_attributes(title);
gtk_widget_set_tooltip_text(GTK_WIDGET(title),
@@ -2106,12 +2153,12 @@ GtkWidget * title_create_row(signal_user_data_t *ud)
gtk_widget_set_halign(GTK_WIDGET(vbox_dest), GTK_ALIGN_FILL);
//gtk_widget_set_hexpand(GTK_WIDGET(vbox_dest), TRUE);
dest_file = GTK_ENTRY(gtk_entry_new());
- gtk_entry_set_width_chars(dest_file, 40);
+ ghb_entry_set_width_chars(dest_file, 40);
gtk_widget_set_name(GTK_WIDGET(dest_file), "title_file");
//gtk_widget_set_hexpand(GTK_WIDGET(dest_file), TRUE);
gtk_widget_show(GTK_WIDGET(dest_file));
g_signal_connect(dest_file, "changed", (GCallback)title_dest_file_cb, ud);
- ghb_box_pack_start(vbox_dest, GTK_WIDGET(dest_file));
+ ghb_box_append_child(vbox_dest, GTK_WIDGET(dest_file));
dest_dir = GTK_FILE_CHOOSER_BUTTON(
gtk_file_chooser_button_new(_("Destination Directory"),
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER));
@@ -2120,9 +2167,9 @@ GtkWidget * title_create_row(signal_user_data_t *ud)
gtk_widget_set_name(GTK_WIDGET(dest_dir), "title_dir");
gtk_widget_set_hexpand(GTK_WIDGET(dest_dir), TRUE);
gtk_widget_show(GTK_WIDGET(dest_dir));
- ghb_box_pack_start(vbox_dest, GTK_WIDGET(dest_dir));
+ ghb_box_append_child(vbox_dest, GTK_WIDGET(dest_dir));
gtk_widget_show(GTK_WIDGET(vbox_dest));
- ghb_box_pack_start(hbox, GTK_WIDGET(vbox_dest));
+ ghb_box_append_child(hbox, GTK_WIDGET(vbox_dest));
return GTK_WIDGET(hbox);
}
@@ -2441,7 +2488,12 @@ show_queue_action_cb(GSimpleAction *action, GVariant *value,
}
G_MODULE_EXPORT gboolean
-queue_window_delete_cb(GtkWidget *xwidget, GdkEvent *event, signal_user_data_t *ud)
+queue_window_delete_cb(
+ GtkWidget *xwidget,
+#if !GTK_CHECK_VERSION(3, 90, 0)
+ GdkEvent *event,
+#endif
+ signal_user_data_t *ud)
{
gtk_widget_set_visible(xwidget, FALSE);
GtkWidget *widget = GHB_WIDGET (ud->builder, "show_queue");
@@ -2740,7 +2792,7 @@ queue_add_all_action_cb(GSimpleAction *action, GVariant *param,
dest_dir = ghb_dict_get_string(settings, "dest_dir");
gtk_label_set_markup(label, title_label);
- gtk_entry_set_text(entry, dest_file);
+ ghb_entry_set_text(entry, dest_file);
gtk_file_chooser_set_filename(chooser, dest_dir);
g_free(title_label);
@@ -3161,20 +3213,33 @@ title_dest_dir_cb(GtkWidget *widget, signal_user_data_t *ud)
// Set up view of row to be dragged
G_MODULE_EXPORT void
+#if GTK_CHECK_VERSION(3, 90, 0)
+queue_drag_begin_cb(GtkWidget * widget,
+ GdkDrag * context,
+ signal_user_data_t * ud)
+#else
queue_drag_begin_cb(GtkWidget * widget,
GdkDragContext * context,
signal_user_data_t * ud)
+#endif
{
GtkListBox * lb;
GtkWidget * row;
+
+ row = gtk_widget_get_ancestor(widget, GTK_TYPE_LIST_BOX_ROW);
+ lb = GTK_LIST_BOX(gtk_widget_get_parent(row));
+ gtk_list_box_select_row(lb, GTK_LIST_BOX_ROW(row));
+
+#if GTK_CHECK_VERSION(3, 90, 0)
+ GdkPaintable * paintable = gtk_widget_paintable_new(row);
+ gtk_drag_set_icon_paintable(context, paintable, 0, 0);
+ g_object_unref(paintable);
+#else
GtkAllocation alloc;
cairo_surface_t * surface;
cairo_t * cr;
int x, y;
- row = gtk_widget_get_ancestor(widget, GTK_TYPE_LIST_BOX_ROW);
- lb = GTK_LIST_BOX(gtk_widget_get_parent(row));
- gtk_list_box_select_row(lb, GTK_LIST_BOX_ROW(row));
gtk_widget_get_allocation(row, &alloc);
surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
alloc.width, alloc.height);
@@ -3191,15 +3256,22 @@ queue_drag_begin_cb(GtkWidget * widget,
cairo_destroy(cr);
cairo_surface_destroy(surface);
+#endif
g_object_set_data(G_OBJECT(gtk_widget_get_parent(row)), "drag-row", row);
gtk_style_context_add_class(gtk_widget_get_style_context(row), "drag-row");
}
G_MODULE_EXPORT void
+#if GTK_CHECK_VERSION(3, 90, 0)
+queue_drag_end_cb(GtkWidget * widget,
+ GdkDrag * context,
+ signal_user_data_t * ud)
+#else
queue_drag_end_cb(GtkWidget * widget,
GdkDragContext * context,
signal_user_data_t * ud)
+#endif
{
GtkWidget * row;
@@ -3213,27 +3285,41 @@ queue_drag_end_cb(GtkWidget * widget,
// Set selection to the row being dragged
G_MODULE_EXPORT void
+#if GTK_CHECK_VERSION(3, 90, 0)
+queue_drag_data_get_cb(GtkWidget * widget,
+ GdkDrag * context,
+ GtkSelectionData * selection_data,
+ signal_user_data_t * ud)
+#else
queue_drag_data_get_cb(GtkWidget * widget,
GdkDragContext * context,
GtkSelectionData * selection_data,
guint info,
guint time,
signal_user_data_t * ud)
+#endif
{
GtkWidget * row;
row = gtk_widget_get_ancestor(widget, GTK_TYPE_LIST_BOX_ROW);
gtk_selection_data_set(selection_data,
- gdk_atom_intern_static_string("GTK_LIST_BOX_ROW"), 32,
+ ghb_atom_string("GTK_LIST_BOX_ROW"), 32,
(const guchar *)&row, sizeof (gpointer));
}
G_MODULE_EXPORT void
+#if GTK_CHECK_VERSION(3, 90, 0)
+queue_drag_leave_cb(
+ GtkListBox * lb,
+ GdkDrop * ctx,
+ signal_user_data_t * ud)
+#else
queue_drag_leave_cb(
GtkListBox * lb,
GdkDragContext * ctx,
guint time,
signal_user_data_t * ud)
+#endif
{
GtkWidget * drag_row;
GtkWidget * row_before;
@@ -3290,6 +3376,14 @@ get_row_after (GtkListBox * list, GtkListBoxRow * row)
}
G_MODULE_EXPORT gboolean
+#if GTK_CHECK_VERSION(3, 90, 0)
+queue_drag_motion_cb(
+ GtkListBox * lb,
+ GdkDrop * ctx,
+ gint x,
+ gint y,
+ signal_user_data_t * ud)
+#else
queue_drag_motion_cb(
GtkListBox * lb,
GdkDragContext * ctx,
@@ -3297,6 +3391,7 @@ queue_drag_motion_cb(
gint y,
guint time,
signal_user_data_t * ud)
+#endif
{
GtkAllocation alloc;
GtkWidget * row;
@@ -3372,6 +3467,12 @@ queue_drag_motion_cb(
}
G_MODULE_EXPORT void
+#if GTK_CHECK_VERSION(3, 90, 0)
+queue_drag_data_received_cb(GtkListBox * lb,
+ GdkDrop * context,
+ GtkSelectionData * selection_data,
+ signal_user_data_t * ud)
+#else
queue_drag_data_received_cb(GtkListBox * lb,
GdkDragContext * context,
gint x,
@@ -3380,6 +3481,7 @@ queue_drag_data_received_cb(GtkListBox * lb,
guint info,
guint32 time,
signal_user_data_t * ud)
+#endif
{
GtkWidget * row_before;
GtkWidget * row_after;
diff --git a/gtk/src/settings.c b/gtk/src/settings.c
index 91853a940..7dad5f7e8 100644
--- a/gtk/src/settings.c
+++ b/gtk/src/settings.c
@@ -102,7 +102,7 @@ ghb_widget_value(GtkWidget *widget)
name = ghb_get_setting_key(widget);
if (type == GTK_TYPE_ENTRY)
{
- const gchar *str = gtk_entry_get_text(GTK_ENTRY(widget));
+ const gchar *str = ghb_entry_get_text(GTK_ENTRY(widget));
value = ghb_string_value_new(str);
}
else if (type == GTK_TYPE_RADIO_BUTTON)
@@ -161,7 +161,7 @@ ghb_widget_value(GtkWidget *widget)
else if (gtk_combo_box_get_has_entry(GTK_COMBO_BOX(widget)))
{
const gchar *str;
- str = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(widget))));
+ str = ghb_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(widget))));
if (str == NULL) str = "";
value = ghb_string_value_new(str);
}
@@ -343,7 +343,7 @@ ghb_update_widget(GtkWidget *widget, const GhbValue *value)
if (type == GTK_TYPE_ENTRY)
{
- gtk_entry_set_text((GtkEntry*)widget, str);
+ ghb_entry_set_text((GtkEntry*)widget, str);
}
else if (type == GTK_TYPE_RADIO_BUTTON)
{
@@ -412,7 +412,7 @@ ghb_update_widget(GtkWidget *widget, const GhbValue *value)
GtkEntry *entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(widget)));
if (entry)
{
- gtk_entry_set_text (entry, str);
+ ghb_entry_set_text (entry, str);
}
else
{