diff options
author | John Stebbins <[email protected]> | 2019-07-24 15:03:22 -0700 |
---|---|---|
committer | John Stebbins <[email protected]> | 2019-07-26 12:57:20 -0700 |
commit | a1d064d2f01d963213b1336c0aeda9e7a1a6817f (patch) | |
tree | 3857d6faaa5c61a71d1106403f1cbf74ba93d992 /gtk | |
parent | 30b59112b75ef6572615db032fb461d9e9c51fa2 (diff) |
LinGui: WIP gtk4 support
Known issues and todo:
notebooks, use GtkNotebookPage semantics in ui file
fix keypress delete in queue_list
fix dest_file grab-focus? (highlight of filename for editing)
focus-in/out with GtkEventControllerKey
preview_state_cb how to handle icon-ified preview?
preview_configure_cb, saving preview window size?
accelerator alt-d grab-focus destination
key-press-event in chapter list, ghbcellrenderertext -> GtkEventControllerKey
Why doesn't summary preview image scale correctly?
"System" in about dialog? why is the tab there when "system" prop not set?
GtkSeparatorToolitem seems to ignore "draw" prop?
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/configure.ac | 5 | ||||
-rw-r--r-- | gtk/src/Makefile.am | 13 | ||||
-rw-r--r-- | gtk/src/audiohandler.c | 49 | ||||
-rw-r--r-- | gtk/src/callbacks.c | 165 | ||||
-rw-r--r-- | gtk/src/ghb3.ui (renamed from gtk/src/ghb.m4) | 1092 | ||||
-rw-r--r-- | gtk/src/ghb4.ui | 8026 | ||||
-rw-r--r-- | gtk/src/ghbcellrenderertext.c | 13 | ||||
-rw-r--r-- | gtk/src/ghbcompat.c | 36 | ||||
-rw-r--r-- | gtk/src/ghbcompat.h | 246 | ||||
-rw-r--r-- | gtk/src/hb-backend.c | 7 | ||||
-rw-r--r-- | gtk/src/main.c | 80 | ||||
-rw-r--r-- | gtk/src/presets.c | 156 | ||||
-rw-r--r-- | gtk/src/preview.c | 181 | ||||
-rw-r--r-- | gtk/src/queuehandler.c | 150 | ||||
-rw-r--r-- | gtk/src/settings.c | 8 |
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"><b>Description</b></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"><b>Burned In</b></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"><b>Default</b></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"><b>Forced Only</b></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"><b>SRT Offset</b></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"><b>Track</b></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"><b>Presets List</b></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"><span size="x-large">Queue</span></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"><b>Source:</b></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"><b>Title:</b></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"><small>No Titles</small></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"><b>Angle:</b></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"><b>Range:</b></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"><b>Preset:</b></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"><u><i>Modified</i></u></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"><b>Cropping</b></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"><b>Anamorphic Modes:</b> +<small><tt> +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</tt></small></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"><b>Storage Geometry</b></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"><b>Display Geometry</b></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"><b>Audio Encoder Settings:</b></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"><small>* Only one of the above subtitle burn options will be applied, starting with the top.</small></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"><b>Save As:</b></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"><b>To:</b></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"><span size="x-large">Rename Preset</span></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"><b>Description</b></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"><b>Dimensions</b></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"><b>Description</b></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"><b>Duration:</b></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"><b>Dynamic Range Compression:</b> 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"><b>Quality:</b> 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"><b>Audio Gain:</b> 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"><b>Dynamic Range Compression:</b> 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"><b>A new version of HandBrake is available!</b></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"><b>Release Notes</b></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 { |