OSDN Git Service

LinGui: refine deblock slider. now shows "Off" and values 5-15.
[handbrake-jp/handbrake-jp-git.git] / gtk / src / callbacks.c
index 6faa6bf..98b107b 100644 (file)
@@ -34,6 +34,7 @@
 #include "hb-backend.h"
 #include "ghb-dvd.h"
 #include "ghbcellrenderertext.h"
+#include "hb.h"
 
 static void update_chapter_list(signal_user_data_t *ud);
 static void clear_audio_list(signal_user_data_t *ud);
@@ -149,8 +150,11 @@ check_dependency(signal_user_data_t *ud, GtkWidget *widget)
        GValue *array, *data;
        gint count, ii;
        gchar *dep_name;
+       GType type;
 
-       if (ghb_widget_index(widget) < 0) return;
+       type = GTK_WIDGET_TYPE(widget);
+       if (type == GTK_TYPE_COMBO_BOX || type == GTK_TYPE_COMBO_BOX_ENTRY)
+               if (gtk_combo_box_get_active(GTK_COMBO_BOX(widget)) < 0) return;
 
        name = gtk_widget_get_name(widget);
        g_debug("check_dependency () %s", name);
@@ -220,6 +224,7 @@ clear_presets_selection(signal_user_data_t *ud)
        treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "presets_list"));
        selection = gtk_tree_view_get_selection (treeview);
        gtk_tree_selection_unselect_all (selection);
+       ghb_settings_set_boolean(ud->settings, "preset_modified", TRUE);
 }
 
 static gchar*
@@ -900,6 +905,8 @@ show_title_info(signal_user_data_t *ud, ghb_title_info_t *tinfo)
        widget = GHB_WIDGET (ud->builder, "source_dimensions");
        text = g_strdup_printf ("%d x %d", tinfo->width, tinfo->height);
        gtk_label_set_text (GTK_LABEL(widget), text);
+       ghb_settings_set_int(ud->settings, "source_width", tinfo->width);
+       ghb_settings_set_int(ud->settings, "source_height", tinfo->height);
        g_free(text);
        widget = GHB_WIDGET (ud->builder, "source_aspect");
        text = get_aspect_string(tinfo->aspect_n, tinfo->aspect_d);
@@ -959,33 +966,46 @@ adjust_audio_rate_combos(signal_user_data_t *ud)
        GtkWidget *widget;
        
        g_debug("adjust_audio_rate_combos ()");
-       titleindex = ghb_settings_get_combo_index(ud->settings, "title");
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
 
        widget = GHB_WIDGET(ud->builder, "audio_track");
-       audioindex = ghb_widget_int(widget);
+       audioindex = ghb_lookup_combo_int("audio_track", ghb_widget_value(widget));
 
        widget = GHB_WIDGET(ud->builder, "audio_codec");
-       acodec = ghb_widget_int(widget);
+       acodec = ghb_lookup_combo_int("audio_codec", ghb_widget_value(widget));
 
        if (ghb_audio_is_passthru (acodec))
        {
+               ghb_set_default_bitrate_opts (ud->builder, -1);
                if (ghb_get_audio_info (&ainfo, titleindex, audioindex))
                {
+                       gint br = ainfo.bitrate / 1000;
                        // Set the values for bitrate and samplerate to the input rates
-                       ghb_set_passthru_rate_opts (ud->builder, ainfo.bitrate);
-                       ghb_ui_update(ud, "audio_bitrate", ghb_int64_value(ainfo.bitrate));
+                       ghb_set_passthru_bitrate_opts (ud->builder, br);
+                       ghb_ui_update(ud, "audio_bitrate", ghb_int64_value(br));
                        ghb_ui_update(ud, "audio_rate", ghb_int64_value(0));
                        ghb_ui_update(ud, "audio_mix", ghb_int64_value(0));
                }
                else
                {
+                       ghb_ui_update(ud, "audio_bitrate", ghb_int64_value(384));
                        ghb_ui_update(ud, "audio_rate", ghb_int64_value(0));
                        ghb_ui_update(ud, "audio_mix", ghb_int64_value(0));
                }
        }
+       else if (acodec == HB_ACODEC_FAAC)
+       {
+               gint br;
+
+               widget = GHB_WIDGET(ud->builder, "audio_bitrate");
+               br = ghb_lookup_combo_int("audio_bitrate", ghb_widget_value(widget));
+               if (br > 160)
+                       ghb_ui_update(ud, "audio_bitrate", ghb_int64_value(160));
+               ghb_set_default_bitrate_opts (ud->builder, 160);
+       }
        else
        {
-               ghb_set_default_rate_opts (ud->builder);
+               ghb_set_default_bitrate_opts (ud->builder, -1);
        }
 }
 
@@ -1024,7 +1044,7 @@ set_pref_audio(gint titleindex, signal_user_data_t *ud)
                rate = ghb_settings_get_value(audio, "audio_rate");
                mix = ghb_settings_get_value(audio, "audio_mix");
                drc = ghb_settings_get_value(audio, "audio_drc");
-               acodec_code = ghb_lookup_acodec(acodec);
+               acodec_code = ghb_lookup_combo_int("audio_codec", acodec);
                // If there are multiple audios using the same codec, then
                // select sequential tracks for each.  This hash keeps track 
                // of the last used track for each codec.
@@ -1068,7 +1088,7 @@ set_pref_audio(gint titleindex, signal_user_data_t *ud)
                                // This gets set autimatically if the codec is passthru
                                ghb_ui_update(ud, "audio_bitrate", bitrate);
                                ghb_ui_update(ud, "audio_rate", rate);
-                               mix_code = ghb_lookup_mix(mix);
+                               mix_code = ghb_lookup_combo_int("audio_mix", mix);
                                mix_code = ghb_get_best_mix(
                                        titleindex, track, acodec_code, mix_code);
                                ghb_ui_update(ud, "audio_mix", ghb_int64_value(mix_code));
@@ -1093,7 +1113,9 @@ set_preview_image(signal_user_data_t *ud)
        gint preview_width, preview_height, target_height, width, height;
 
        g_debug("set_preview_button_image ()");
-       gint titleindex = ghb_settings_get_int(ud->settings, "title");
+       gint titleindex;
+
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
        if (titleindex < 0) return;
        widget = GHB_WIDGET (ud->builder, "preview_frame");
        gint frame = ghb_widget_int(widget) - 1;
@@ -1140,9 +1162,10 @@ title_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
        ghb_widget_to_setting(ud->settings, widget);
        check_dependency(ud, widget);
 
-       titleindex = ghb_settings_get_int(ud->settings, "title");
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
        ghb_update_ui_combo_box (ud->builder, "audio_track", titleindex, FALSE);
        ghb_update_ui_combo_box (ud->builder, "subtitle_lang", titleindex, FALSE);
+
        preset = ghb_settings_get_string (ud->settings, "preset");
        ghb_update_from_preset(ud, preset, "subtitle_lang");
        g_free(preset);
@@ -1174,32 +1197,26 @@ audio_codec_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
        static gint prev_acodec = 0;
        gint acodec_code, mix_code;
        GValue *asettings;
-       GValue *pref_audio;
-       GValue *audio, *acodec, *bitrate, *rate, *mix, *drc;
        
        g_debug("audio_codec_changed_cb ()");
-       acodec_code = ghb_widget_int(widget);
+       acodec_code = ghb_lookup_combo_int("audio_codec", ghb_widget_value(widget));
        if (ghb_audio_is_passthru (prev_acodec) && 
                !ghb_audio_is_passthru (acodec_code))
        {
                // Transition from passthru to not, put some audio settings back to 
                // pref settings
-               gint titleindex = ghb_settings_get_int(ud->settings, "title");
-               gint track = ghb_settings_get_int(ud->settings, "audio_track");
+               gint titleindex;
+               gint track;
 
-               pref_audio = ghb_settings_get_value(ud->settings, "pref_audio_list");
-               audio = ghb_array_get_nth(pref_audio, 0);
-               acodec = ghb_settings_get_value(audio, "audio_codec");
-               bitrate = ghb_settings_get_value(audio, "audio_bitrate");
-               rate = ghb_settings_get_value(audio, "audio_rate");
-               mix = ghb_settings_get_value(audio, "audio_mix");
-               drc = ghb_settings_get_value(audio, "audio_drc");
+               titleindex = ghb_settings_combo_int(ud->settings, "title");
+               track = ghb_settings_combo_int(ud->settings, "audio_track");
 
-               ghb_ui_update(ud, "audio_bitrate", bitrate);
-               ghb_ui_update(ud, "audio_rate", rate);
-               mix_code = ghb_lookup_mix(mix);
+               ghb_ui_update(ud, "audio_bitrate", ghb_string_value("160"));
+               ghb_ui_update(ud, "audio_rate", ghb_string_value("source"));
+               mix_code = ghb_lookup_combo_int("audio_mix", ghb_string_value("dpl2"));
                mix_code = ghb_get_best_mix( titleindex, track, acodec_code, mix_code);
                ghb_ui_update(ud, "audio_mix", ghb_int64_value(mix_code));
+               ghb_ui_update(ud, "audio_drc", ghb_double_value(1.0));
        }
        adjust_audio_rate_combos(ud);
        ghb_grey_combo_options (ud->builder);
@@ -1241,8 +1258,12 @@ audio_track_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
        asettings = get_selected_asettings(ud);
        if (asettings != NULL)
        {
+               const gchar *track;
+
                ghb_widget_to_setting(asettings, widget);
                audio_list_refresh_selected(ud);
+               track = ghb_settings_combo_option(asettings, "audio_track");
+               ghb_settings_set_string(asettings, "audio_track_long", track);
        }
 }
 
@@ -1284,7 +1305,7 @@ validate_filter_widget(signal_user_data_t *ud, const gchar *name)
        const gchar *str;
        gboolean foundit = FALSE;
        GtkComboBox *combo = GTK_COMBO_BOX(GHB_WIDGET(ud->builder, name));
-       if (ghb_widget_index(GTK_WIDGET(combo)) < 0)
+       if (gtk_combo_box_get_active(combo) < 0)
        { // Validate user input
                gchar *val = ghb_settings_get_string(ud->settings, name);
                store = gtk_combo_box_get_model(combo);
@@ -1388,7 +1409,8 @@ target_size_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
        clear_presets_selection(ud);
        if (ghb_settings_get_boolean(ud->settings, "vquality_type_target"))
        {
-               gint titleindex = ghb_settings_get_int(ud->settings, "title");
+               gint titleindex;
+               titleindex = ghb_settings_combo_int(ud->settings, "title");
                gint bitrate = ghb_calculate_target_bitrate (ud->settings, titleindex);
                ghb_ui_update(ud, "video_bitrate", ghb_int64_value(bitrate));
        }
@@ -1397,14 +1419,15 @@ target_size_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
 void
 start_chapter_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
 {
+       gint start, end;
        const gchar *name = gtk_widget_get_name(widget);
+
        g_debug("start_chapter_changed_cb () %s", name);
        ghb_widget_to_setting(ud->settings, widget);
-       GtkWidget *end_ch = GHB_WIDGET (ud->builder, "end_chapter");
-       gdouble start, end;
-       gtk_spin_button_get_range (GTK_SPIN_BUTTON(end_ch), &start, &end);
        start = ghb_settings_get_int(ud->settings, "start_chapter");
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON(end_ch), start, end);
+       end = ghb_settings_get_int(ud->settings, "end_chapter");
+       if (start > end)
+               ghb_ui_update(ud, "end_chapter", ghb_int_value(start));
        check_dependency(ud, widget);
        if (ghb_settings_get_boolean(ud->settings, "chapters_in_destination"))
        {
@@ -1415,14 +1438,15 @@ start_chapter_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
 void
 end_chapter_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
 {
+       gint start, end;
        const gchar *name = gtk_widget_get_name(widget);
+
        g_debug("end_chapter_changed_cb () %s", name);
        ghb_widget_to_setting(ud->settings, widget);
-       GtkWidget *start_ch = GHB_WIDGET (ud->builder, "start_chapter");
-       gdouble start, end;
-       gtk_spin_button_get_range (GTK_SPIN_BUTTON(start_ch), &start, &end);
+       start = ghb_settings_get_int(ud->settings, "start_chapter");
        end = ghb_settings_get_int(ud->settings, "end_chapter");
-       gtk_spin_button_set_range (GTK_SPIN_BUTTON(start_ch), start, end);
+       if (start > end)
+               ghb_ui_update(ud, "start_chapter", ghb_int_value(end));
        check_dependency(ud, widget);
        if (ghb_settings_get_boolean(ud->settings, "chapters_in_destination"))
        {
@@ -1479,7 +1503,7 @@ crop_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
        crop[1] = ghb_settings_get_int(ud->settings, "crop_bottom");
        crop[2] = ghb_settings_get_int(ud->settings, "crop_left");
        crop[3] = ghb_settings_get_int(ud->settings, "crop_right");
-       titleindex = ghb_settings_get_combo_index(ud->settings, "title");
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
        if (ghb_get_title_info (&tinfo, titleindex))
        {
                gint width, height;
@@ -1643,8 +1667,8 @@ add_to_audio_list(signal_user_data_t *ud, GValue *settings)
        GtkTreeIter iter;
        GtkListStore *store;
        GtkTreeSelection *selection;
-       gchar *track, *codec, *br, *sr, *mix, *drc;
-       gchar *s_track, *s_codec, *s_br, *s_sr, *s_mix;
+       const gchar *track, *codec, *br, *sr, *mix;
+       gchar *drc, *s_track, *s_codec, *s_br, *s_sr, *s_mix;
        gdouble s_drc;
        
        g_debug("add_to_audio_list ()");
@@ -1652,19 +1676,19 @@ add_to_audio_list(signal_user_data_t *ud, GValue *settings)
        selection = gtk_tree_view_get_selection (treeview);
        store = GTK_LIST_STORE(gtk_tree_view_get_model(treeview));
 
-       track = ghb_settings_get_combo_option(settings, "audio_track"),
-       codec = ghb_settings_get_combo_option(settings, "audio_codec"),
-       br = ghb_settings_get_combo_option(settings, "audio_bitrate"),
-       sr = ghb_settings_get_combo_option(settings, "audio_rate"),
-       mix = ghb_settings_get_combo_option(settings, "audio_mix"),
+       track = ghb_settings_combo_option(settings, "audio_track");
+       codec = ghb_settings_combo_option(settings, "audio_codec");
+       br = ghb_settings_combo_option(settings, "audio_bitrate");
+       sr = ghb_settings_combo_option(settings, "audio_rate");
+       mix = ghb_settings_combo_option(settings, "audio_mix");
        drc = ghb_settings_get_string(settings, "audio_drc");
 
-       s_track = ghb_settings_get_string(settings, "audio_track"),
-       s_codec = ghb_settings_get_string(settings, "audio_codec"),
-       s_br = ghb_settings_get_string(settings, "audio_bitrate"),
-       s_sr = ghb_settings_get_string(settings, "audio_rate"),
-       s_mix = ghb_settings_get_string(settings, "audio_mix"),
-       s_drc = ghb_settings_get_double(settings, "audio_drc"),
+       s_track = ghb_settings_get_string(settings, "audio_track");
+       s_codec = ghb_settings_get_string(settings, "audio_codec");
+       s_br = ghb_settings_get_string(settings, "audio_bitrate");
+       s_sr = ghb_settings_get_string(settings, "audio_rate");
+       s_mix = ghb_settings_get_string(settings, "audio_mix");
+       s_drc = ghb_settings_get_double(settings, "audio_drc");
 
        gtk_list_store_append(store, &iter);
        gtk_list_store_set(store, &iter, 
@@ -1684,11 +1708,6 @@ add_to_audio_list(signal_user_data_t *ud, GValue *settings)
                11, s_drc,
                -1);
        gtk_tree_selection_select_iter(selection, &iter);
-       g_free(track);
-       g_free(codec);
-       g_free(br);
-       g_free(sr);
-       g_free(mix);
        g_free(drc);
        g_free(s_track);
        g_free(s_codec);
@@ -1715,8 +1734,8 @@ audio_list_refresh_selected(signal_user_data_t *ud)
        selection = gtk_tree_view_get_selection (treeview);
        if (gtk_tree_selection_get_selected(selection, &store, &iter))
        {
-               gchar *track, *codec, *br, *sr, *mix, *drc;
-               gchar *s_track, *s_codec, *s_br, *s_sr, *s_mix;
+               const gchar *track, *codec, *br, *sr, *mix;
+               gchar *drc, *s_track, *s_codec, *s_br, *s_sr, *s_mix;
                gdouble s_drc;
                // Get the row number
                treepath = gtk_tree_model_get_path (store, &iter);
@@ -1730,19 +1749,19 @@ audio_list_refresh_selected(signal_user_data_t *ud)
                        return;
                asettings = ghb_array_get_nth(audio_list, row);
 
-               track = ghb_settings_get_combo_option(asettings, "audio_track"),
-               codec = ghb_settings_get_combo_option(asettings, "audio_codec"),
-               br = ghb_settings_get_combo_option(asettings, "audio_bitrate"),
-               sr = ghb_settings_get_combo_option(asettings, "audio_rate"),
-               mix = ghb_settings_get_combo_option(asettings, "audio_mix"),
+               track = ghb_settings_combo_option(asettings, "audio_track");
+               codec = ghb_settings_combo_option(asettings, "audio_codec");
+               br = ghb_settings_combo_option(asettings, "audio_bitrate");
+               sr = ghb_settings_combo_option(asettings, "audio_rate");
+               mix = ghb_settings_combo_option(asettings, "audio_mix");
                drc = ghb_settings_get_string(asettings, "audio_drc");
 
-               s_track = ghb_settings_get_string(asettings, "audio_track"),
-               s_codec = ghb_settings_get_string(asettings, "audio_codec"),
-               s_br = ghb_settings_get_string(asettings, "audio_bitrate"),
-               s_sr = ghb_settings_get_string(asettings, "audio_rate"),
-               s_mix = ghb_settings_get_string(asettings, "audio_mix"),
-               s_drc = ghb_settings_get_double(asettings, "audio_drc"),
+               s_track = ghb_settings_get_string(asettings, "audio_track");
+               s_codec = ghb_settings_get_string(asettings, "audio_codec");
+               s_br = ghb_settings_get_string(asettings, "audio_bitrate");
+               s_sr = ghb_settings_get_string(asettings, "audio_rate");
+               s_mix = ghb_settings_get_string(asettings, "audio_mix");
+               s_drc = ghb_settings_get_double(asettings, "audio_drc");
 
                gtk_list_store_set(GTK_LIST_STORE(store), &iter, 
                        // These are displayed in list
@@ -1760,11 +1779,6 @@ audio_list_refresh_selected(signal_user_data_t *ud)
                        10, s_mix,
                        11, s_drc,
                        -1);
-               g_free(track);
-               g_free(codec);
-               g_free(br);
-               g_free(sr);
-               g_free(mix);
                g_free(drc);
                g_free(s_track);
                g_free(s_codec);
@@ -1819,6 +1833,7 @@ audio_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_t
        {
                const gchar *track, *codec, *bitrate, *sample_rate, *mix;
                gdouble drc;
+
                gtk_tree_model_get(store, &iter,
                                                   6, &track,
                                                   7, &codec,
@@ -1855,6 +1870,7 @@ audio_add_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
        GtkWidget *widget;
        gint count;
        GValue *audio_list;
+       const gchar *track;
        
        g_debug("audio_add_clicked_cb ()");
        asettings = ghb_dict_value_new();
@@ -1871,6 +1887,8 @@ audio_add_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
        ghb_settings_take_value(asettings, "audio_mix", ghb_widget_value(widget));
        widget = GHB_WIDGET(ud->builder, "audio_drc");
        ghb_settings_take_value(asettings, "audio_drc", ghb_widget_value(widget));
+       track = ghb_settings_combo_option(asettings, "audio_track");
+       ghb_settings_set_string(asettings, "audio_track_long", track);
 
        audio_list = ghb_settings_get_value(ud->settings, "audio_list");
        if (audio_list == NULL)
@@ -1954,8 +1972,8 @@ audio_list_refresh(signal_user_data_t *ud)
        {
                do
                {
-                       gchar *track, *codec, *br, *sr, *mix, *drc;
-                       gchar *s_track, *s_codec, *s_br, *s_sr, *s_mix;
+                       const gchar *track, *codec, *br, *sr, *mix;
+                       gchar *drc, *s_track, *s_codec, *s_br, *s_sr, *s_mix;
                        gdouble s_drc;
                        GValue *asettings;
 
@@ -1964,18 +1982,18 @@ audio_list_refresh(signal_user_data_t *ud)
                                return;
                        asettings = ghb_array_get_nth(audio_list, row);
 
-                       track = ghb_settings_get_combo_option(asettings, "audio_track"),
-                       codec = ghb_settings_get_combo_option(asettings, "audio_codec"),
-                       br = ghb_settings_get_combo_option(asettings, "audio_bitrate"),
-                       sr = ghb_settings_get_combo_option(asettings, "audio_rate"),
-                       mix = ghb_settings_get_combo_option(asettings, "audio_mix"),
+                       track = ghb_settings_combo_option(asettings, "audio_track");
+                       codec = ghb_settings_combo_option(asettings, "audio_codec");
+                       br = ghb_settings_combo_option(asettings, "audio_bitrate");
+                       sr = ghb_settings_combo_option(asettings, "audio_rate");
+                       mix = ghb_settings_combo_option(asettings, "audio_mix");
                        drc = ghb_settings_get_string(asettings, "audio_drc");
 
-                       s_track = ghb_settings_get_string(asettings, "audio_track"),
-                       s_codec = ghb_settings_get_string(asettings, "audio_codec"),
-                       s_br = ghb_settings_get_string(asettings, "audio_bitrate"),
-                       s_sr = ghb_settings_get_string(asettings, "audio_rate"),
-                       s_mix = ghb_settings_get_string(asettings, "audio_mix"),
+                       s_track = ghb_settings_get_string(asettings, "audio_track");
+                       s_codec = ghb_settings_get_string(asettings, "audio_codec");
+                       s_br = ghb_settings_get_string(asettings, "audio_bitrate");
+                       s_sr = ghb_settings_get_string(asettings, "audio_rate");
+                       s_mix = ghb_settings_get_string(asettings, "audio_mix");
                        s_drc = ghb_settings_get_double(asettings, "audio_drc");
 
                        gtk_list_store_set(GTK_LIST_STORE(store), &iter, 
@@ -1994,11 +2012,6 @@ audio_list_refresh(signal_user_data_t *ud)
                                10, s_mix,
                                11, s_drc,
                                -1);
-                       g_free(track);
-                       g_free(codec);
-                       g_free(br);
-                       g_free(sr);
-                       g_free(mix);
                        g_free(drc);
                        g_free(s_track);
                        g_free(s_codec);
@@ -2310,8 +2323,10 @@ presets_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_
                // it shouldn't be
                clear_audio_list(ud);
                ghb_set_preset(ud, preset);
-               gint titleindex = ghb_settings_get_int(ud->settings, "title");
+               gint titleindex;
+               titleindex = ghb_settings_combo_int(ud->settings, "title");
                set_pref_audio(titleindex, ud);
+               ghb_settings_set_boolean(ud->settings, "preset_modified", FALSE);
                ud->dont_clear_presets = FALSE;
                if (ghb_get_title_info (&tinfo, titleindex))
                {
@@ -2366,13 +2381,13 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
        GtkTreeIter iter;
        GtkTreeStore *store;
        gchar *info;
-       gint num_pass = 1;
        gint status;
-       gint ii;
        GtkTreeIter citer;
-       gchar *vcodec, *container, *acodec, *dest, *preset, *vol_name;
+       gchar *dest, *preset, *vol_name;
+       const gchar *vcodec, *container;
        gchar *fps, *vcodec_abbr;
        gint title, start_chapter, end_chapter, width, height, vqvalue;
+       gint source_width, source_height;
        gboolean pass2, anamorphic, round_dim, keep_aspect, vqtype, turbo;
        
        g_debug("update_queue_list ()");
@@ -2380,7 +2395,7 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
        treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "queue_list"));
        store = GTK_TREE_STORE(gtk_tree_view_get_model(treeview));
                
-       title = ghb_settings_get_int(settings, "title");
+       title = ghb_settings_combo_int(settings, "title");
        start_chapter = ghb_settings_get_int(settings, "start_chapter");
        end_chapter = ghb_settings_get_int(settings, "end_chapter");
        pass2 = ghb_settings_get_boolean(settings, "two_pass");
@@ -2398,6 +2413,7 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
                gtk_tree_store_append(store, &iter, NULL);
 
        gtk_tree_store_set(store, &iter, 1, info, 2, "hb-queue-delete", -1);
+       g_free(info);
        status = ghb_settings_get_int(settings, "job_status");
        switch (status)
        {
@@ -2417,23 +2433,55 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
                        gtk_tree_store_set(store, &iter, 0, "hb-queue-job", -1);
                        break;
        }
-       g_free(info);
 
-       vcodec = ghb_settings_get_combo_option(settings, "video_codec");
-       container = ghb_settings_get_combo_option(settings, "container");
-       acodec = ghb_settings_get_combo_option(settings, "audio_codec");
+       GString *str = g_string_new("");
+       gboolean markers;
+       gboolean preset_modified;
+       gint mux;
+
+       container = ghb_settings_combo_option(settings, "container");
+       mux = ghb_settings_combo_int(settings, "container");
        dest = ghb_settings_get_string(settings, "destination");
+       preset_modified = ghb_settings_get_boolean(settings, "preset_modified");
        preset = ghb_settings_get_string(settings, "preset");
-       info = g_strdup_printf 
-               (
-                "<b>Preset:</b> %s\n"
-                "<b>Format:</b> %s Container, %s Video + %s Audio\n"
-                "<b>Destination:</b> %s",
-                preset, container, vcodec, acodec, dest);
+       markers = ghb_settings_get_boolean(settings, "chapter_markers");
 
-       gtk_tree_store_append(store, &citer, &iter);
-       gtk_tree_store_set(store, &citer, 1, info, -1);
-       g_free(info);
+       if (preset_modified)
+               g_string_append_printf(str, "<b>Customized Preset Based On:</b> %s\n", 
+                                                               preset);
+       else
+               g_string_append_printf(str, "<b>Preset:</b> %s\n", preset);
+
+       if (markers)
+       {
+               g_string_append_printf(str, 
+                       "<b>Format:</b> %s Container, Chapter Markers\n", container);
+       }
+       else
+       {
+               g_string_append_printf(str, 
+                       "<b>Format:</b> %s Container\n", container);
+       }
+       if (mux == HB_MUX_MP4)
+       {
+               gboolean ipod, http, large;
+
+               ipod = ghb_settings_get_boolean(settings, "ipod_file");
+               http = ghb_settings_get_boolean(settings, "http_optimize_mp4");
+               large = ghb_settings_get_boolean(settings, "large_mp4");
+               if (http || ipod || large)
+               {
+                       g_string_append_printf(str, "<b>MP4 Options:</b>");
+                       if (ipod)
+                               g_string_append_printf(str, " - iPod Atom");
+                       if (http)
+                               g_string_append_printf(str, " - Http Optimized");
+                       if (large)
+                               g_string_append_printf(str, " - 64 Bit");
+                       g_string_append_printf(str, "\n");
+               }
+       }
+       g_string_append_printf(str, "<b>Destination:</b> %s\n", dest);
 
        width = ghb_settings_get_int(settings, "scale_width");
        height = ghb_settings_get_int(settings, "scale_height");
@@ -2468,6 +2516,7 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
        vqvalue = 0;
 
        gchar *vq_desc = "Error";
+       gchar *vq_units = "";
        if (!vqtype)
        {
                vqtype = ghb_settings_get_boolean(settings, "vquality_type_target");
@@ -2475,97 +2524,92 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
                {
                        // Has to be bitrate
                        vqvalue = ghb_settings_get_int(settings, "video_bitrate");
-                       vq_desc = "kbps";
+                       vq_desc = "Bitrate:";
+                       vq_units = "kbps";
                }
                else
                {
                        // Target file size
                        vqvalue = ghb_settings_get_int(settings, "video_target");
-                       vq_desc = "MB";
+                       vq_desc = "Target Size:";
+                       vq_units = "MB";
                }
        }
        else
        {
                // Constant quality
                vqvalue = ghb_settings_get_int(settings, "video_quality");
-               vq_desc = "% Constant Quality";
+               vq_desc = "Constant Quality:";
        }
        fps = ghb_settings_get_string(settings, "framerate");
-       vcodec_abbr = ghb_settings_get_string(settings, "video_codec");
-       gchar *extra_opts;
-       if (strcmp(vcodec_abbr, "x264") == 0)
+       if (strcmp("source", fps) == 0)
        {
-               gchar *x264opts = ghb_build_x264opts_string(settings);
-               extra_opts = g_strdup_printf ("\n<b>x264 Options:</b> %s", x264opts);
-               g_free(x264opts);
-       }
-       else
-       {
-               extra_opts = g_strdup("");
+               g_free(fps);
+               fps = g_strdup("Same As Source");
        }
+       vcodec = ghb_settings_combo_option(settings, "video_codec");
+       vcodec_abbr = ghb_settings_get_string(settings, "video_codec");
+       source_width = ghb_settings_get_int(settings, "source_width");
+       source_height = ghb_settings_get_int(settings, "source_height");
+       g_string_append_printf(str,
+               "<b>Picture:</b> Source: %d x %d, Output %d x %d %s\n"
+               "<b>Video:</b> %s, Framerate: %s, %s %d%s\n",
+                        source_width, source_height, width, height, aspect_desc,
+                        vcodec, fps, vq_desc, vqvalue, vq_units);
+
        turbo = ghb_settings_get_boolean(settings, "turbo");
-       gchar *turbo_desc = "\n<b>Turbo:</b> Off";;
        if (turbo)
        {
-               turbo_desc = "\n<b>Turbo:</b> On";
+               g_string_append_printf(str, "<b>Turbo:</b> On\n");
        }
-       num_pass = pass2 ? 2 : 1;
-       for (ii = 0; ii < num_pass; ii++)
+       if (strcmp(vcodec_abbr, "x264") == 0)
        {
-               gboolean final = (ii == (num_pass - 1));
-               GString *pass = g_string_new("");
-               g_string_append_printf( pass,
-                       "<b>%s Pass</b>\n"
-                       "<b>Picture:</b> %d x %d %s\n"
-                       "<b>Video:</b> %s, %d %s, %s fps"
-                       "%s",
-                        ii ? "2nd":"1st", width, height, aspect_desc,
-                        vcodec, vqvalue, vq_desc, fps, 
-                        final ? extra_opts : turbo_desc);
+               gchar *x264opts = ghb_build_x264opts_string(settings);
+               g_string_append_printf(str, "<b>x264 Options:</b> %s\n", x264opts);
+               g_free(x264opts);
+       }
+       // Add the audios
+       gint count, ii;
+       const GValue *audio_list;
 
-               if (final)
-               {
-                       // Add the audios
-                       gint count, ii;
-                       const GValue *audio_list;
+       audio_list = ghb_settings_get_value(settings, "audio_list");
+       count = ghb_array_len(audio_list);
+       for (ii = 0; ii < count; ii++)
+       {
+               gchar *bitrate, *samplerate, *track;
+               const gchar *acodec, *mix;
+               GValue *asettings;
 
-                       audio_list = ghb_settings_get_value(settings, "audio_list");
-                       count = ghb_array_len(audio_list);
-                       for (ii = 0; ii < count; ii++)
-                       {
-                               gchar *acodec, *bitrate, *samplerate, *mix;
-                               GValue *asettings;
-
-                               asettings = ghb_array_get_nth(audio_list, ii);
-
-                               acodec = ghb_settings_get_combo_option(asettings, "audio_codec");
-                               bitrate = ghb_settings_get_string(asettings, "audio_bitrate");
-                               samplerate = ghb_settings_get_string(asettings, "audio_rate");
-                               gint track = ghb_settings_get_int(asettings, "audio_track");
-                               mix = ghb_settings_get_combo_option(asettings, "audio_mix");
-                               g_string_append_printf(pass,
-                                       "\n<b>Audio:</b> %s, %s kbps, %s kHz, Track %d: %s",
-                                        acodec, bitrate, samplerate, track+1, mix);
-                               g_free(acodec);
-                               g_free(bitrate);
-                               g_free(samplerate);
-                               g_free(mix);
-                       }
+               asettings = ghb_array_get_nth(audio_list, ii);
+
+               acodec = ghb_settings_combo_option(asettings, "audio_codec");
+               bitrate = ghb_settings_get_string(asettings, "audio_bitrate");
+               samplerate = ghb_settings_get_string(asettings, "audio_rate");
+               if (strcmp("source", samplerate) == 0)
+               {
+                       g_free(samplerate);
+                       samplerate = g_strdup("Same As Source");
                }
-               info = g_string_free(pass, FALSE);
-               gtk_tree_store_append(store, &citer, &iter);
-               gtk_tree_store_set(store, &citer, 0, ii ? "hb-queue-pass2" : "hb-queue-pass1", 1, info, -1);
-               g_free(info);
+               track = ghb_settings_get_string(asettings, "audio_track_long");
+               mix = ghb_settings_combo_option(asettings, "audio_mix");
+               g_string_append_printf(str,
+                       "<b>Audio:</b> %s, Encoder: %s, Mixdown: %s, SampleRate: %s, Bitrate: %s",
+                        track, acodec, mix, samplerate, bitrate);
+               if (ii < count-1)
+                       g_string_append_printf(str, "\n");
+               g_free(track);
+               g_free(bitrate);
+               g_free(samplerate);
        }
+       info = g_string_free(str, FALSE);
+       gtk_tree_store_append(store, &citer, &iter);
+       gtk_tree_store_set(store, &citer, 1, info, -1);
+       g_free(info);
        g_free(fps);
        g_free(vcodec_abbr);
        g_free(vol_name);
-       g_free(vcodec);
-       g_free(container);
-       g_free(acodec);
        g_free(dest);
        g_free(preset);
-       g_free(extra_opts);
 }
 
 gboolean
@@ -2597,7 +2641,9 @@ estimate_file_size(signal_user_data_t *ud)
        gint duration;
        gint bitrate;
        gint64 size;
-       gint titleindex = ghb_settings_get_int(ud->settings, "title");
+       gint titleindex;
+
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
        if (titleindex < 0) return 0;
                        
        if (!ghb_get_title_info(&tinfo, titleindex)) return 0;
@@ -2616,8 +2662,9 @@ validate_settings(signal_user_data_t *ud)
        // already in the queue
        gchar *message, *dest;
        gint count, ii;
-       gint titleindex = ghb_settings_get_int(ud->settings, "title");
+       gint titleindex;
 
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
        if (titleindex < 0) return FALSE;
        dest = ghb_settings_get_string(ud->settings, "destination");
        count = ghb_array_len(ud->queue);
@@ -2773,7 +2820,7 @@ queue_add(signal_user_data_t *ud)
        settings = ghb_value_dup(ud->settings);
        ghb_settings_set_int(settings, "job_status", GHB_QUEUE_PENDING);
        ghb_settings_set_int(settings, "job_unique_id", 0);
-       titleindex = ghb_settings_get_int(settings, "title");
+       titleindex = ghb_settings_combo_int(settings, "title");
        titlenum = ghb_get_title_number(titleindex);
        ghb_settings_set_int(settings, "titlenum", titlenum);
        ghb_array_append(ud->queue, settings);
@@ -2829,6 +2876,7 @@ queue_remove_clicked_cb(GtkWidget *widget, gchar *path, signal_user_data_t *ud)
        treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "queue_list"));
        store = gtk_tree_view_get_model(treeview);
        treepath = gtk_tree_path_new_from_string (path);
+       if (gtk_tree_path_get_depth(treepath) > 1) return;
        if (gtk_tree_model_get_iter(store, &iter, treepath))
        {
                // Find the entry in the queue
@@ -3106,7 +3154,7 @@ queue_buttons_grey(signal_user_data_t *ud, gboolean working)
        gboolean title_ok;
 
        queue_count = ghb_array_len(ud->queue);
-       titleindex = ghb_settings_get_int(ud->settings, "title");
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
        title_ok = (titleindex >= 0);
 
        widget = GHB_WIDGET (ud->builder, "queue_start1");
@@ -3220,6 +3268,55 @@ start_next_job(signal_user_data_t *ud, gboolean find_first)
        return NULL;
 }
 
+gchar*
+working_status_string(signal_user_data_t *ud, ghb_status_t *status)
+{
+       gchar *task_str, *job_str, *status_str;
+       gint qcount;
+       gint index;
+       GValue *js;
+
+       if (status->job_count > 1)
+       {
+               task_str = g_strdup_printf("pass %d of %d, ", 
+                       status->job_cur, status->job_count);
+       }
+       else
+       {
+               task_str = g_strdup("");
+       }
+       qcount = ghb_array_len(ud->queue);
+       if (qcount > 1)
+       {
+               index = find_queue_job(ud->queue, status->unique_id, &js);
+               job_str = g_strdup_printf("job %d of %d, ", index+1, qcount);
+       }
+       else
+       {
+               job_str = g_strdup("");
+       }
+       if(status->seconds > -1)
+       {
+               status_str= g_strdup_printf(
+                       "Encoding: %s%s%.2f %%"
+                       " (%.2f fps, avg %.2f fps, ETA %02dh%02dm%02ds)",
+                       job_str, task_str,
+                       100.0 * status->progress,
+                       status->rate_cur, status->rate_avg, status->hours, 
+                       status->minutes, status->seconds );
+       }
+       else
+       {
+               status_str= g_strdup_printf(
+                       "Encoding: %s%s%.2f %%",
+                       job_str, task_str,
+                       100.0 * status->progress );
+       }
+       g_free(task_str);
+       g_free(job_str);
+       return status_str;
+}
+
 static void
 ghb_backend_events(signal_user_data_t *ud)
 {
@@ -3296,47 +3393,7 @@ ghb_backend_events(signal_user_data_t *ud)
        }
        else if (status.queue_state & GHB_STATE_WORKING)
        {
-               gchar *task_str, *job_str;
-               gint qcount;
-
-               if (status.job_count > 1)
-               {
-                       task_str = g_strdup_printf("pass %d of %d, ", 
-                               status.job_cur, status.job_count);
-               }
-               else
-               {
-                       task_str = g_strdup("");
-               }
-               qcount = ghb_array_len(ud->queue);
-               if (qcount > 1)
-               {
-                       index = find_queue_job(ud->queue, status.unique_id, &js);
-                       job_str = g_strdup_printf("job %d of %d, ", index+1, qcount);
-               }
-               else
-               {
-                       job_str = g_strdup("");
-               }
-               if(status.seconds > -1)
-               {
-                       status_str= g_strdup_printf(
-                               "Encoding: %s%s%.2f %%"
-                               " (%.2f fps, avg %.2f fps, ETA %02dh%02dm%02ds)",
-                               job_str, task_str,
-                               100.0 * status.progress,
-                               status.rate_cur, status.rate_avg, status.hours, 
-                               status.minutes, status.seconds );
-               }
-               else
-               {
-                       status_str= g_strdup_printf(
-                               "Encoding: %s%s%.2f %%",
-                               job_str, task_str,
-                               100.0 * status.progress );
-               }
-               g_free(job_str);
-               g_free(task_str);
+               status_str = working_status_string(ud, &status);
                gtk_progress_bar_set_text (progress, status_str);
                gtk_progress_bar_set_fraction (progress, status.progress);
                g_free(status_str);
@@ -3446,6 +3503,13 @@ ghb_backend_events(signal_user_data_t *ud)
                        }
                        g_free(path);
                }
+               GtkLabel *label;
+               gchar *status_str;
+
+               status_str = working_status_string(ud, &status);
+               label = GTK_LABEL(GHB_WIDGET(ud->builder, "queue_status"));
+               gtk_label_set_text (label, status_str);
+               g_free(status_str);
        }
 }
 
@@ -3664,7 +3728,7 @@ update_chapter_list(signal_user_data_t *ud)
        gint count;
        
        g_debug("update_chapter_list ()");
-       titleindex = ghb_settings_get_combo_index(ud->settings, "title");
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
        chapters = ghb_get_chapters(titleindex);
        count = ghb_array_len(chapters);
        if (chapters)
@@ -3836,7 +3900,9 @@ queue_list_size_allocate_cb(GtkWidget *widget, GtkAllocation *allocation, GtkCel
 void
 preview_button_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
 {
-       gint titleindex = ghb_settings_get_int(ud->settings, "title");
+       gint titleindex;
+
+       titleindex = ghb_settings_combo_int(ud->settings, "title");
        if (titleindex < 0) return;
        g_debug("titleindex %d", titleindex);
 
@@ -4185,67 +4251,67 @@ drive_changed_cb(GVolumeMonitor *gvm, GDrive *gd, signal_user_data_t *ud)
 static gboolean
 dbus_init (void)
 {
-    DBusError error;
+       DBusError error;
 
-    if (dbus_connection != NULL)
-        return TRUE;
+       if (dbus_connection != NULL)
+               return TRUE;
 
-    dbus_error_init (&error);
-    if (!(dbus_connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error))) {
-        g_debug ("could not get system bus: %s", error.message);
-        dbus_error_free (&error);
-        return FALSE;
-    }
+       dbus_error_init (&error);
+       if (!(dbus_connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error))) {
+               g_debug ("could not get system bus: %s", error.message);
+               dbus_error_free (&error);
+               return FALSE;
+       }
 
-    //dbus_connection_setup_with_g_main (dbus_connection, NULL);
-    //dbus_connection_set_exit_on_disconnect (dbus_connection, FALSE);
-    //dbus_connection_add_filter (dbus_connection, gvm_dbus_filter_function, NULL, NULL);
+       //dbus_connection_setup_with_g_main (dbus_connection, NULL);
+       //dbus_connection_set_exit_on_disconnect (dbus_connection, FALSE);
+       //dbus_connection_add_filter (dbus_connection, gvm_dbus_filter_function, NULL, NULL);
 
-    return TRUE;
+       return TRUE;
 }
 
 void
 ghb_hal_init()
 {
-    DBusError error;
-    char **devices;
-    int nr;
+       DBusError error;
+       char **devices;
+       int nr;
 
-    if (!dbus_init ())
-        return;
+       if (!dbus_init ())
+               return;
 
-    if (!(hal_ctx = libhal_ctx_new ())) {
-        g_warning ("failed to create a HAL context!");
-        return;
-    }
+       if (!(hal_ctx = libhal_ctx_new ())) {
+               g_warning ("failed to create a HAL context!");
+               return;
+       }
 
-    libhal_ctx_set_dbus_connection (hal_ctx, dbus_connection);
-    dbus_error_init (&error);
-    if (!libhal_ctx_init (hal_ctx, &error)) {
-        g_warning ("libhal_ctx_init failed: %s", error.message ? error.message : "unknown");
-        dbus_error_free (&error);
-        libhal_ctx_free (hal_ctx);
-        return;
-    }
+       libhal_ctx_set_dbus_connection (hal_ctx, dbus_connection);
+       dbus_error_init (&error);
+       if (!libhal_ctx_init (hal_ctx, &error)) {
+               g_warning ("libhal_ctx_init failed: %s", error.message ? error.message : "unknown");
+               dbus_error_free (&error);
+               libhal_ctx_free (hal_ctx);
+               return;
+       }
 
-    /*
-     * Do something to ping the HAL daemon - the above functions will
-     * succeed even if hald is not running, so long as DBUS is.  But we
-     * want to exit silently if hald is not running, to behave on
-     * pre-2.6 systems.
-     */
-    if (!(devices = libhal_get_all_devices (hal_ctx, &nr, &error))) {
-        g_warning ("seems that HAL is not running: %s", error.message ? error.message : "unknown");
-        dbus_error_free (&error);
+       /*
+        * Do something to ping the HAL daemon - the above functions will
+        * succeed even if hald is not running, so long as DBUS is.  But we
+        * want to exit silently if hald is not running, to behave on
+        * pre-2.6 systems.
+        */
+       if (!(devices = libhal_get_all_devices (hal_ctx, &nr, &error))) {
+               g_warning ("seems that HAL is not running: %s", error.message ? error.message : "unknown");
+               dbus_error_free (&error);
 
-        libhal_ctx_shutdown (hal_ctx, NULL);
-        libhal_ctx_free (hal_ctx);
-        return;
-    }
+               libhal_ctx_shutdown (hal_ctx, NULL);
+               libhal_ctx_free (hal_ctx);
+               return;
+       }
 
-    libhal_free_string_array (devices);
+       libhal_free_string_array (devices);
 
-    //gvm_hal_claim_branch ("/org/freedesktop/Hal/devices/local");
+       //gvm_hal_claim_branch ("/org/freedesktop/Hal/devices/local");
 }
 
 gboolean 
@@ -4362,9 +4428,11 @@ ghb_reload_queue(signal_user_data_t *ud)
        if (unfinished)
        {
                message = g_strdup_printf(
-                                       "You have %d unfinished jobs in a saved queue.\n\n"
-                                       "Would you like to reload them?",
-                                       unfinished);
+                                       "You have %d unfinished job%s in a saved queue.\n\n"
+                                       "Would you like to reload %s?",
+                                       unfinished, 
+                                       (unfinished > 1) ? "s" : "",
+                                       (unfinished > 1) ? "them" : "it");
                if (ghb_message_dialog(GTK_MESSAGE_QUESTION, message, "No", "Yes"))
                {
                        GtkWidget *widget = GHB_WIDGET (ud->builder, "queue_window");
@@ -4403,3 +4471,72 @@ ghb_reload_queue(signal_user_data_t *ud)
        return FALSE;
 }
 
+gboolean queue_key_press_cb(
+       GtkWidget *widget, 
+       GdkEventKey *event,
+       signal_user_data_t *ud)
+{
+       GtkTreeView *treeview;
+       GtkTreeSelection *selection;
+       GtkTreeModel *store;
+       GtkTreeIter iter;
+       gint row;
+       gint *indices;
+       gint unique_id;
+       GValue *settings;
+       gint status;
+
+       g_message("queue_key_press_cb ()");
+       treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "queue_list"));
+       store = gtk_tree_view_get_model(treeview);
+
+       selection = gtk_tree_view_get_selection (treeview);
+       if (gtk_tree_selection_get_selected(selection, &store, &iter))
+       {
+               GtkTreePath *treepath;
+
+               treepath = gtk_tree_model_get_path (store, &iter);
+               // Find the entry in the queue
+               indices = gtk_tree_path_get_indices (treepath);
+               row = indices[0];
+               // Can only free the treepath After getting what I need from
+               // indices since this points into treepath somewhere.
+               gtk_tree_path_free (treepath);
+               if (row < 0) return FALSE;
+               if (row >= ghb_array_len(ud->queue))
+                       return FALSE;
+               settings = ghb_array_get_nth(ud->queue, row);
+               status = ghb_settings_get_int(settings, "job_status");
+               if (status == GHB_QUEUE_RUNNING)
+               {
+                       // Ask if wants to stop encode.
+                       if (!cancel_encode(NULL))
+                       {
+                               return FALSE;
+                       }
+                       unique_id = ghb_settings_get_int(settings, "job_unique_id");
+                       ghb_remove_job(unique_id);
+               }
+               // Remove the selected item
+               gtk_tree_store_remove(GTK_TREE_STORE(store), &iter);
+               // Remove the corresponding item from the queue list
+               GValue *old = ghb_array_get_nth(ud->queue, row);
+               ghb_value_free(old);
+               ghb_array_remove(ud->queue, row);
+               ghb_save_queue(ud->queue);
+       }
+       return FALSE;
+}
+
+gchar*
+format_deblock_cb(GtkScale *scale, gdouble val, signal_user_data_t *ud)
+{
+       if (val < 5.0)
+       {
+               return g_strdup_printf("Off");
+       }
+       else
+       {
+               return g_strdup_printf("%d", (gint)val);
+       }
+}