diff options
-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 { |