summaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
Diffstat (limited to 'gtk')
-rw-r--r--gtk/src/audiohandler.c10
-rw-r--r--gtk/src/callbacks.c198
-rw-r--r--gtk/src/ghb-dvd.c4
-rw-r--r--gtk/src/hb-backend.c89
-rw-r--r--gtk/src/hb-backend.h13
-rw-r--r--gtk/src/main.c20
-rw-r--r--gtk/src/presets.c25
-rw-r--r--gtk/src/preview.c4
-rw-r--r--gtk/src/queuehandler.c12
-rw-r--r--gtk/src/subtitlehandler.c9
-rw-r--r--gtk/src/values.c4
-rw-r--r--gtk/src/x264handler.c2
12 files changed, 237 insertions, 153 deletions
diff --git a/gtk/src/audiohandler.c b/gtk/src/audiohandler.c
index 6c00e3c72..d5ae66f3f 100644
--- a/gtk/src/audiohandler.c
+++ b/gtk/src/audiohandler.c
@@ -284,6 +284,7 @@ ghb_adjust_audio_rate_combos(signal_user_data_t *ud)
gval = ghb_widget_value(widget);
acodec = ghb_lookup_combo_int("AudioEncoder", gval);
ghb_value_free(gval);
+
widget = GHB_WIDGET(ud->builder, "AudioMixdown");
gval = ghb_widget_value(widget);
mix = ghb_lookup_combo_int("AudioMixdown", gval);
@@ -292,11 +293,12 @@ ghb_adjust_audio_rate_combos(signal_user_data_t *ud)
widget = GHB_WIDGET(ud->builder, "AudioBitrate");
gval = ghb_widget_value(widget);
bitrate = ghb_lookup_combo_int("AudioBitrate", gval);
+ ghb_value_free(gval);
widget = GHB_WIDGET(ud->builder, "AudioSamplerate");
gval = ghb_widget_value(widget);
sr = ghb_lookup_combo_int("AudioSamplerate", gval);
-
+ ghb_value_free(gval);
aconfig = ghb_get_scan_audio_info(titleindex, track);
if (sr == 0)
@@ -2031,7 +2033,9 @@ audio_remove_lang_clicked_cb(GtkWidget *widget, signal_user_data_t *ud)
// Remove from preset language list
alang_list = ghb_settings_get_value(ud->settings, "AudioLanguageList");
+ GValue *glang = ghb_array_get_nth(alang_list, index);
ghb_array_remove(alang_list, index);
+ ghb_value_free(glang);
ghb_clear_presets_selection(ud);
}
}
@@ -2263,7 +2267,9 @@ audio_def_setting_remove_cb(GtkWidget *widget, signal_user_data_t *ud)
return;
}
gtk_widget_destroy(GTK_WIDGET(row));
+ GValue *asettings = ghb_array_get_nth(alist, index);
ghb_array_remove(alist, index);
+ ghb_value_free(asettings);
ghb_clear_presets_selection(ud);
}
@@ -2369,7 +2375,9 @@ audio_def_lang_list_init(signal_user_data_t *ud)
{
// Error in list. Probably duplicate languages. Remove
// this item from the list.
+ GValue *glang = ghb_array_get_nth(lang_list, ii);
ghb_array_remove(lang_list, ii);
+ ghb_value_free(glang);
count--;
}
}
diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c
index 597faec33..d22254339 100644
--- a/gtk/src/callbacks.c
+++ b/gtk/src/callbacks.c
@@ -134,7 +134,10 @@ dep_check(signal_user_data_t *ud, const gchar *name, gboolean *out_hide)
widget = GHB_WIDGET(ud->builder, widget_name);
dep_object = gtk_builder_get_object(ud->builder, name);
if (widget != NULL && !gtk_widget_is_sensitive(widget))
+ {
+ g_free(widget_name);
continue;
+ }
if (dep_object == NULL)
{
g_message("Failed to find widget");
@@ -929,12 +932,62 @@ static void show_container_options(signal_user_data_t *ud)
gtk_widget_set_visible(w3, (mux & HB_MUX_MASK_MP4) && (enc == HB_VCODEC_X264));
}
+static void
+adjustment_configure(
+ GtkAdjustment *adj,
+ double val,
+ double min, double max,
+ double step, double page, double page_sz)
+{
+ gtk_adjustment_configure(adj, val, min, max, step, page, page_sz);
+}
+
+static void
+spin_configure(signal_user_data_t *ud, char *name, double val, double min, double max)
+{
+ GtkSpinButton *spin;
+ GtkAdjustment *adj;
+ double step, page, page_sz;
+
+ spin = GTK_SPIN_BUTTON(GHB_WIDGET(ud->builder, name));
+
+ adj = gtk_spin_button_get_adjustment(spin);
+ step = gtk_adjustment_get_step_increment(adj);
+ page = gtk_adjustment_get_page_increment(adj);
+ page_sz = gtk_adjustment_get_page_size(adj);
+
+ adjustment_configure(adj, val, min, max, step, page, page_sz);
+}
+
+static void
+scale_configure(
+ signal_user_data_t *ud,
+ char *name,
+ double val, double min, double max,
+ double step, double page,
+ int digits, gboolean inverted)
+{
+ GtkScale *scale;
+ GtkAdjustment *adj;
+ double page_sz;
+
+ scale = GTK_SCALE(GHB_WIDGET(ud->builder, name));
+
+ adj = gtk_range_get_adjustment(GTK_RANGE(scale));
+ page_sz = gtk_adjustment_get_page_size(adj);
+
+ adjustment_configure(adj, val, min, max, step, page, page_sz);
+
+ gtk_scale_set_digits(scale, digits);
+ gtk_range_set_inverted(GTK_RANGE(scale), inverted);
+}
+
void
ghb_set_widget_ranges(signal_user_data_t *ud, GValue *settings)
{
- GtkWidget *widget;
int titleindex = ghb_settings_combo_int(settings, "title");
hb_title_t * title = ghb_get_title_info(titleindex);
+ double val;
// Reconfigure the UI combo boxes
ghb_update_ui_combo_box(ud, "AudioTrack", titleindex, FALSE);
@@ -942,61 +995,62 @@ ghb_set_widget_ranges(signal_user_data_t *ud, GValue *settings)
if (title != NULL)
{
+
// Set the limits of cropping. hb_set_anamorphic_size crashes if
// you pass it a cropped width or height == 0.
- gint bound;
- bound = title->height / 2 - 8;
- widget = GHB_WIDGET(ud->builder, "PictureTopCrop");
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget), 0, bound);
- widget = GHB_WIDGET(ud->builder, "PictureBottomCrop");
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget), 0, bound);
- bound = title->width / 2 - 8;
- widget = GHB_WIDGET(ud->builder, "PictureLeftCrop");
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget), 0, bound);
- widget = GHB_WIDGET(ud->builder, "PictureRightCrop");
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget), 0, bound);
+ gint vbound, hbound;
+ vbound = title->height / 2 - 8;
+ hbound = title->width / 2 - 8;
+
+ val = ghb_settings_get_int(ud->settings, "PictureTopCrop");
+ spin_configure(ud, "PictureTopCrop", val, 0, vbound);
+ val = ghb_settings_get_int(ud->settings, "PictureBottomCrop");
+ spin_configure(ud, "PictureBottomCrop", val, 0, vbound);
+ val = ghb_settings_get_int(ud->settings, "PictureLeftCrop");
+ spin_configure(ud, "PictureLeftCrop", val, 0, hbound);
+ val = ghb_settings_get_int(ud->settings, "PictureRightCrop");
+ spin_configure(ud, "PictureRightCrop", val, 0, hbound);
gint duration = title->duration / 90000;
- gint num_chapters = hb_list_count(title->list_chapter);
if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0)
{
- widget = GHB_WIDGET(ud->builder, "start_point");
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget), 1, num_chapters);
- widget = GHB_WIDGET(ud->builder, "end_point");
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget), 1, num_chapters);
+ gint num_chapters = hb_list_count(title->list_chapter);
+
+ val = ghb_settings_get_int(ud->settings, "start_point");
+ spin_configure(ud, "start_point", val, 1, num_chapters);
+ val = ghb_settings_get_int(ud->settings, "end_point");
+ spin_configure(ud, "end_point", val, 1, num_chapters);
}
else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 1)
{
-
- widget = GHB_WIDGET (ud->builder, "start_point");
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget), 0, duration-1);
- widget = GHB_WIDGET (ud->builder, "end_point");
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget), 1, duration);
+ val = ghb_settings_get_int(ud->settings, "start_point");
+ spin_configure(ud, "start_point", val, 0, duration-1);
+ val = ghb_settings_get_int(ud->settings, "end_point");
+ spin_configure(ud, "end_point", val, 0, duration);
}
else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 2)
{
- gdouble max_frames = (gdouble)duration * title->rate / title->rate_base;
- widget = GHB_WIDGET(ud->builder, "start_point");
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget), 1, max_frames);
- widget = GHB_WIDGET(ud->builder, "end_point");
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget), 1, max_frames);
+ gdouble max_frames;
+ max_frames = (gdouble)duration * title->rate / title->rate_base;
+
+ val = ghb_settings_get_int(ud->settings, "start_point");
+ spin_configure(ud, "start_point", val, 1, max_frames);
+ val = ghb_settings_get_int(ud->settings, "end_point");
+ spin_configure(ud, "end_point", val, 1, max_frames);
}
- widget = GHB_WIDGET (ud->builder, "angle");
- gtk_spin_button_set_range(GTK_SPIN_BUTTON(widget), 1, title->angle_count);
+ val = ghb_settings_get_int(ud->settings, "angle");
+ spin_configure(ud, "angle", val, 1, title->angle_count);
}
- gdouble vqmin, vqmax, step, page;
- gboolean inverted;
- gint digits;
+ float vqmin, vqmax, step, page;
+ int inverted, digits;
ghb_vquality_range(ud, &vqmin, &vqmax, &step, &page, &digits, &inverted);
- GtkWidget *qp = GHB_WIDGET(ud->builder, "VideoQualitySlider");
- gtk_range_set_range (GTK_RANGE(qp), vqmin, vqmax);
- gtk_range_set_increments (GTK_RANGE(qp), step, page);
- gtk_scale_set_digits(GTK_SCALE(qp), digits);
- gtk_range_set_inverted (GTK_RANGE(qp), inverted);
+ val = ghb_settings_get_double(ud->settings, "VideoQualitySlider");
+ scale_configure(ud, "VideoQualitySlider", val, vqmin, vqmax,
+ step, page, digits, inverted);
}
static void
@@ -1059,14 +1113,14 @@ ghb_load_settings(signal_user_data_t * ud)
ghb_settings_set_boolean(ud->settings, "preset_reload", FALSE);
}
+ ud->dont_clear_presets = TRUE;
+ ud->scale_busy = TRUE;
+
ghb_set_widget_ranges(ud, ud->settings);
ghb_check_all_depencencies(ud);
show_container_options(ud);
check_chapter_markers(ud);
- ud->dont_clear_presets = TRUE;
- ud->scale_busy = TRUE;
-
ghb_settings_to_ui(ud, ud->settings);
ghb_audio_defaults_to_ui(ud);
ghb_subtitle_defaults_to_ui(ud);
@@ -1797,12 +1851,12 @@ load_all_titles(signal_user_data_t *ud, int titleindex)
GValue *settings = ghb_settings_new();
ghb_settings_init(settings, "Initialization");
- ghb_settings_init(settings, "Presets");
ghb_preset_to_settings(settings, preset);
ghb_settings_set_value(settings, "preset", preset_path);
set_title_settings(ud, settings, ii);
ghb_array_append(settings_array, settings);
}
+ ghb_value_free(preset_path);
if (titleindex < 0 || titleindex >= count)
{
titleindex = 0;
@@ -1874,38 +1928,23 @@ ptop_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
if (title == NULL)
return;
- gint num_chapters = hb_list_count(title->list_chapter);
gint duration = title->duration / 90000;
if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0)
{
- widget = GHB_WIDGET (ud->builder, "start_point");
- gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, num_chapters);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 1);
-
- widget = GHB_WIDGET (ud->builder, "end_point");
- gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, num_chapters);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), num_chapters);
+ gint num_chapters = hb_list_count(title->list_chapter);
+ spin_configure(ud, "start_point", 1, 1, num_chapters);
+ spin_configure(ud, "end_point", num_chapters, 1, num_chapters);
}
else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 1)
{
- widget = GHB_WIDGET (ud->builder, "start_point");
- gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 0, duration-1);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 0);
-
- widget = GHB_WIDGET (ud->builder, "end_point");
- gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, duration);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), duration);
+ spin_configure(ud, "start_point", 0, 0, duration-1);
+ spin_configure(ud, "end_point", duration, 0, duration);
}
else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 2)
{
gdouble max_frames = (gdouble)duration * title->rate / title->rate_base;
- widget = GHB_WIDGET (ud->builder, "start_point");
- gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, max_frames);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 1);
-
- widget = GHB_WIDGET (ud->builder, "end_point");
- gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, max_frames);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), max_frames);
+ spin_configure(ud, "start_point", 1, 1, max_frames);
+ spin_configure(ud, "end_point", max_frames, 1, max_frames);
}
}
@@ -2006,30 +2045,26 @@ http_opt_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
G_MODULE_EXPORT void
vcodec_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
- gdouble vqmin, vqmax, step, page;
- gboolean inverted;
- gint digits;
+ float val, vqmin, vqmax, step, page;
+ int inverted, digits;
ghb_widget_to_setting(ud->settings, widget);
ghb_check_dependency(ud, widget, NULL);
show_container_options(ud);
ghb_clear_presets_selection(ud);
ghb_live_reset(ud);
+
+ val = ghb_vquality_default(ud);
ghb_vquality_range(ud, &vqmin, &vqmax, &step, &page, &digits, &inverted);
- GtkWidget *qp = GHB_WIDGET(ud->builder, "VideoQualitySlider");
- gtk_range_set_range (GTK_RANGE(qp), vqmin, vqmax);
- gtk_range_set_increments (GTK_RANGE(qp), step, page);
- gtk_scale_set_digits(GTK_SCALE(qp), digits);
- gtk_range_set_inverted (GTK_RANGE(qp), inverted);
+ scale_configure(ud, "VideoQualitySlider", val, vqmin, vqmax,
+ step, page, digits, inverted);
}
G_MODULE_EXPORT void
start_point_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
gint start, end;
- const gchar *name = ghb_get_setting_key(widget);
- g_debug("start_point_changed_cb () %s", name);
ghb_widget_to_setting(ud->settings, widget);
if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0)
{
@@ -2072,9 +2107,7 @@ G_MODULE_EXPORT void
end_point_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
gint start, end;
- const gchar *name = ghb_get_setting_key(widget);
- g_debug("end_point_changed_cb () %s", name);
ghb_widget_to_setting(ud->settings, widget);
if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0)
{
@@ -2953,6 +2986,7 @@ ghb_backend_events(signal_user_data_t *ud)
source = ghb_settings_get_string(ud->globals, "scan_source");
update_source_label(ud, source);
+ g_free(source);
scan_prog = GTK_PROGRESS_BAR(GHB_WIDGET (ud->builder, "scan_prog"));
gtk_progress_bar_set_fraction (scan_prog, 1.0);
@@ -3683,7 +3717,7 @@ update_chapter_list_settings(GValue *settings)
titleindex = ghb_settings_get_int(settings, "title_no");
chapters = ghb_get_chapters(titleindex);
if (chapters)
- ghb_settings_set_value(settings, "chapter_list", chapters);
+ ghb_settings_take_value(settings, "chapter_list", chapters);
}
static gint chapter_edit_key = 0;
@@ -3909,14 +3943,13 @@ vqual_granularity_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
const gchar *name = ghb_get_setting_key(widget);
ghb_pref_set(ud->prefs, name);
- gdouble vqmin, vqmax, step, page;
- gboolean inverted;
- gint digits;
+ float val, vqmin, vqmax, step, page;
+ int inverted, digits;
ghb_vquality_range(ud, &vqmin, &vqmax, &step, &page, &digits, &inverted);
- GtkWidget *qp = GHB_WIDGET(ud->builder, "VideoQualitySlider");
- gtk_range_set_increments (GTK_RANGE(qp), step, page);
- gtk_scale_set_digits(GTK_SCALE(qp), digits);
+ val = ghb_settings_get_double(ud->settings, "VideoQualitySlider");
+ scale_configure(ud, "VideoQualitySlider", val, vqmin, vqmax,
+ step, page, digits, inverted);
}
G_MODULE_EXPORT void
@@ -4092,6 +4125,7 @@ ghb_is_cd(GDrive *gd)
gint val;
val = g_udev_device_get_property_as_int(udd, "ID_CDROM_DVD");
+ g_object_unref(udd);
if (val == 1)
return TRUE;
diff --git a/gtk/src/ghb-dvd.c b/gtk/src/ghb-dvd.c
index bcd7e1311..133580d5a 100644
--- a/gtk/src/ghb-dvd.c
+++ b/gtk/src/ghb-dvd.c
@@ -389,6 +389,10 @@ ghb_dvd_set_current(const gchar *name, signal_user_data_t *ud)
// think its neccessary.
ud->current_dvd_device = resolved;
}
+ else
+ {
+ g_free(resolved);
+ }
g_object_unref(info);
}
else
diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c
index 5dff6898d..ae09f6dc4 100644
--- a/gtk/src/hb-backend.c
+++ b/gtk/src/hb-backend.c
@@ -696,59 +696,62 @@ ghb_version()
return hb_get_version(NULL);
}
+float
+ghb_vquality_default(signal_user_data_t *ud)
+{
+ float quality;
+ gint vcodec = ghb_settings_combo_int(ud->settings, "VideoEncoder");
+
+ switch (vcodec)
+ {
+ case HB_VCODEC_X264:
+ return 20;
+ case HB_VCODEC_THEORA:
+ return 45;
+ case HB_VCODEC_FFMPEG_MPEG2:
+ case HB_VCODEC_FFMPEG_MPEG4:
+ return 3;
+ default:
+ {
+ float min, max, step;
+ int direction;
+
+ hb_video_quality_get_limits(vcodec, &min, &max, &step, &direction);
+ // Pick something that is 70% of max
+ // Probably too low for some and too high for others...
+ quality = (max - min) * 0.7;
+ if (direction)
+ quality = max - quality;
+ }
+ }
+ return quality;
+}
+
void
ghb_vquality_range(
signal_user_data_t *ud,
- gdouble *min,
- gdouble *max,
- gdouble *step,
- gdouble *page,
+ float *min,
+ float *max,
+ float *step,
+ float *page,
gint *digits,
- gboolean *inverted)
+ int *direction)
{
+ float min_step;
gint vcodec = ghb_settings_combo_int(ud->settings, "VideoEncoder");
+
*page = 10;
*digits = 0;
- switch (vcodec)
- {
- case HB_VCODEC_X264:
- {
- *min = 0;
- *max = 51;
- *step = ghb_settings_combo_double(ud->prefs,
- "VideoQualityGranularity");
- if (*step == 0.2 || *step == 0.5)
- *digits = 1;
- else if (*step == 0.25)
- *digits = 2;
- *inverted = TRUE;
- } break;
-
- case HB_VCODEC_FFMPEG_MPEG2:
- case HB_VCODEC_FFMPEG_MPEG4:
- {
- *min = 1;
- *max = 31;
- *step = 1;
- *inverted = TRUE;
- } break;
+ hb_video_quality_get_limits(vcodec, min, max, &min_step, direction);
+ *step = ghb_settings_combo_double(ud->prefs, "VideoQualityGranularity");
- case HB_VCODEC_THEORA:
- {
- *min = 0;
- *max = 63;
- *step = 1;
- *inverted = FALSE;
- } break;
+ if (*step < min_step)
+ *step = min_step;
- default:
- {
- *min = 0;
- *max = 100;
- *step = 1;
- *inverted = FALSE;
- } break;
- }
+ if ((int)(*step * 100) % 10 != 0)
+ *digits = 2;
+ else if ((int)(*step * 10) % 10 != 0)
+ *digits = 1;
}
gint
diff --git a/gtk/src/hb-backend.h b/gtk/src/hb-backend.h
index 3caae6225..8311de9a2 100644
--- a/gtk/src/hb-backend.h
+++ b/gtk/src/hb-backend.h
@@ -72,13 +72,14 @@ typedef struct
const gchar* ghb_version(void);
void ghb_vquality_range(
signal_user_data_t *ud,
- gdouble *min,
- gdouble *max,
- gdouble *step,
- gdouble *page,
+ float *min,
+ float *max,
+ float *step,
+ float *page,
gint *digits,
- gboolean *inverted);
-//const gchar* ghb_get_rate_string(gint rate, gint type);
+ int *direction);
+float ghb_vquality_default(signal_user_data_t *ud);
+
void ghb_combo_init(signal_user_data_t *ud);
void ghb_backend_init(gint debug);
void ghb_backend_close(void);
diff --git a/gtk/src/main.c b/gtk/src/main.c
index 5b2a3b43b..9232a1fc6 100644
--- a/gtk/src/main.c
+++ b/gtk/src/main.c
@@ -286,6 +286,8 @@ bind_queue_tree_model(signal_user_data_t *ud)
gtk_tree_view_append_column(treeview, GTK_TREE_VIEW_COLUMN(column));
gtk_tree_view_column_set_expand(column, TRUE);
gtk_tree_view_column_set_max_width(column, 550);
+ g_signal_connect(treeview, "size-allocate", queue_list_size_allocate_cb,
+ textcell);
cell = custom_cell_renderer_button_new();
column = gtk_tree_view_column_new_with_attributes(
@@ -300,8 +302,6 @@ bind_queue_tree_model(signal_user_data_t *ud)
g_signal_connect(selection, "changed", queue_list_selection_changed_cb, ud);
g_signal_connect(cell, "clicked", queue_remove_clicked_cb, ud);
- g_signal_connect(treeview, "size-allocate", queue_list_size_allocate_cb,
- textcell);
g_signal_connect(treeview, "drag_data_received", queue_drag_cb, ud);
g_signal_connect(treeview, "drag_motion", queue_drag_motion_cb, ud);
}
@@ -868,8 +868,6 @@ main(int argc, char *argv[])
gtk_rc_parse_string(hud_rcstyle);
#endif
- g_type_class_unref(g_type_class_ref(GTK_TYPE_BUTTON));
- g_object_set(gtk_settings_get_default(), "gtk-button-images", TRUE, NULL);
#if !defined(_WIN32)
notify_init("HandBrake");
#endif
@@ -1273,15 +1271,23 @@ main(int argc, char *argv[])
gtk_main();
gtk_status_icon_set_visible(si, FALSE);
ghb_backend_close();
- if (ud->queue)
- ghb_value_free(ud->queue);
- ghb_value_free(ud->settings);
+
+ ghb_value_free(ud->queue);
+ ghb_value_free(ud->settings_array);
+ ghb_value_free(ud->prefs);
+ ghb_value_free(ud->globals);
+ ghb_value_free(ud->x264_priv);
+
g_io_channel_unref(ud->activity_log);
ghb_settings_close();
ghb_resource_free();
#if !defined(_WIN32)
notify_uninit();
#endif
+
+ g_object_unref(ud->builder);
+
+ g_free(ud->current_dvd_device);
g_free(ud);
return 0;
diff --git a/gtk/src/presets.c b/gtk/src/presets.c
index c59b917f2..560eec832 100644
--- a/gtk/src/presets.c
+++ b/gtk/src/presets.c
@@ -1061,9 +1061,8 @@ ghb_preset_to_settings(GValue *settings, GValue *preset)
char *x264Tune = ghb_settings_get_string(settings, "x264Tune");
char *tune = NULL;
- char *tmp = g_strdup(x264Tune);
char *saveptr;
- char * tok = strtok_r(tmp, ",./-+", &saveptr);
+ char * tok = strtok_r(x264Tune, ",./-+", &saveptr);
while (tok != NULL)
{
if (!strcasecmp(tok, "fastdecode"))
@@ -1084,12 +1083,12 @@ ghb_preset_to_settings(GValue *settings, GValue *preset)
}
tok = strtok_r(NULL, ",./-+", &saveptr);
}
+ g_free(x264Tune);
if (tune != NULL)
{
ghb_settings_set_string(settings, "x264Tune", tune);
g_free(tune);
}
- g_free(x264Tune);
}
void
@@ -3110,7 +3109,6 @@ settings_save(signal_user_data_t *ud, const GValue *path)
{
GValue *dict;
gint *indices, len, count;
- gint *def_indices, def_len;
const gchar *name;
gboolean replace = FALSE;
@@ -3158,6 +3156,7 @@ settings_save(signal_user_data_t *ud, const GValue *path)
ghb_dict_insert(dict, g_strdup("PresetName"), ghb_string_value_new(name));
if (replace)
{
+ gint *def_indices, def_len;
def_indices = presets_find_default(presetsPlist, &def_len);
if (def_indices != NULL &&
preset_path_cmp(indices, len, def_indices, def_len) != 0)
@@ -3166,6 +3165,7 @@ settings_save(signal_user_data_t *ud, const GValue *path)
ghb_boolean_value_new(FALSE));
}
presets_list_update_item(ud, indices, len, FALSE);
+ g_free(def_indices);
}
else
{
@@ -3446,6 +3446,7 @@ preset_import_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
ghb_presets_insert(presetsPlist, ghb_value_dup(dict), indices, len);
presets_list_insert(ud, indices, len);
ghb_value_free(path);
+ g_free(indices);
}
ghb_value_free(array);
@@ -3612,8 +3613,7 @@ presets_new_folder_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
folder_save(ud, dest);
ghb_value_free(dest);
}
- if (indices != NULL)
- g_free(indices);
+ g_free(indices);
}
G_MODULE_EXPORT void
@@ -3732,6 +3732,7 @@ presets_remove_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
path = gtk_tree_model_get_path(store, &iter);
indices = gtk_tree_path_get_indices(path);
len = gtk_tree_path_get_depth(path);
+ gtk_tree_path_free(path);
folder = ghb_presets_get_folder(presetsPlist, indices, len);
dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL,
@@ -3764,15 +3765,17 @@ presets_remove_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
valid = gtk_tree_model_get_iter_first(store, &nextIter);
if (valid)
{
- gtk_tree_path_free(path);
+ GtkTreePath *path;
+ gint *indices;
+
path = gtk_tree_model_get_path(store, &nextIter);
indices = gtk_tree_path_get_indices(path);
len = gtk_tree_path_get_depth(path);
ghb_select_preset2(ud->builder, indices, len);
+ gtk_tree_path_free(path);
}
}
g_free(preset);
- gtk_tree_path_free(path);
}
}
@@ -3850,6 +3853,7 @@ presets_drag_motion_cb(
len = gtk_tree_path_get_depth(path);
dst_ptype = ghb_presets_get_type(presetsPlist, indices, len);
dst_folder = ghb_presets_get_folder(presetsPlist, indices, len);
+
// Don't allow mixing custom presets in the builtins
if (dst_ptype != PRESETS_CUSTOM)
{
@@ -3957,6 +3961,7 @@ presets_drag_cb(
dst_indices = gtk_tree_path_get_indices(path);
dst_len = gtk_tree_path_get_depth(path);
dst_folder = ghb_presets_get_folder(presetsPlist, dst_indices, dst_len);
+
// Only allow *drop into* for folders
if (!dst_folder)
{
@@ -4040,7 +4045,9 @@ presets_row_expanded_cb(
if (preset_folder_is_open(dict))
{
if (expanded)
+ {
return;
+ }
}
else if (!expanded)
{
@@ -4098,6 +4105,7 @@ ghb_get_current_preset(signal_user_data_t *ud)
indices = gtk_tree_path_get_indices(tp);
len = gtk_tree_path_get_depth(tp);
preset = presets_get_dict(presetsPlist, indices, len);
+ gtk_tree_path_free(tp);
}
return preset;
}
@@ -4122,6 +4130,7 @@ ghb_get_current_preset_path(signal_user_data_t *ud)
indices = gtk_tree_path_get_indices(tp);
len = gtk_tree_path_get_depth(tp);
path = preset_path_from_indices(presetsPlist, indices, len);
+ gtk_tree_path_free(tp);
}
return path;
}
diff --git a/gtk/src/preview.c b/gtk/src/preview.c
index a63f61b2d..cf046f24a 100644
--- a/gtk/src/preview.c
+++ b/gtk/src/preview.c
@@ -240,8 +240,8 @@ ghb_preview_cleanup(signal_user_data_t *ud)
{
if (ud->preview->current)
{
- ud->preview->current = NULL;
g_free(ud->preview->current);
+ ud->preview->current = NULL;
}
}
@@ -987,7 +987,7 @@ ghb_set_preview_image(signal_user_data_t *ud)
{
widget = GHB_WIDGET (ud->builder, "preview_button_image");
gtk_image_set_from_pixbuf(GTK_IMAGE(widget), scaled_preview);
- g_object_unref (scaled_preview);
+ g_object_unref(scaled_preview);
}
}
}
diff --git a/gtk/src/queuehandler.c b/gtk/src/queuehandler.c
index 9725bd1bd..507b3cc08 100644
--- a/gtk/src/queuehandler.c
+++ b/gtk/src/queuehandler.c
@@ -195,6 +195,7 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
escape = g_markup_escape_text(dest, -1);
g_string_append_printf(str,
"<b>Destination:</b> <small>%s</small>\n", escape);
+ g_free(escape);
width = ghb_settings_get_int(settings, "scale_width");
height = ghb_settings_get_int(settings, "scale_height");
@@ -388,6 +389,7 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
g_string_append_printf(str,
"<b>Video:</b> <small>%s, Framerate: %s, %s %s%s</small>\n",
vcodec, fps, vq_desc, vqstr, vq_units);
+ g_free(vqstr);
turbo = ghb_settings_get_boolean(settings, "VideoTurboTwoPass");
if (turbo)
@@ -427,12 +429,12 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
}
else
{
- const char *br;
+ char *br;
br = ghb_settings_get_string(asettings, "AudioBitrate");
quality = g_strdup_printf("Bitrate: %s", br);
+ g_free(br);
}
sr = ghb_settings_get_double(asettings, "AudioSamplerate");
- samplerate = ghb_settings_get_string(asettings, "AudioSamplerate");
if ((int)sr == 0)
{
samplerate = g_strdup("Same As Source");
@@ -776,8 +778,8 @@ queue_remove_clicked_cb(GtkWidget *widget, gchar *path, signal_user_data_t *ud)
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_value_free(old);
ghb_save_queue(ud->queue);
}
else
@@ -1293,6 +1295,10 @@ find_pid:
}
g_free(message);
}
+ else
+ {
+ ghb_value_free(queue);
+ }
return FALSE;
}
diff --git a/gtk/src/subtitlehandler.c b/gtk/src/subtitlehandler.c
index 9fc959666..6065f5a4a 100644
--- a/gtk/src/subtitlehandler.c
+++ b/gtk/src/subtitlehandler.c
@@ -1165,7 +1165,9 @@ ghb_subtitle_prune(signal_user_data_t *ud)
burned = burned || !hb_subtitle_can_pass(source, mux);
if (burned && one_burned)
{
+ GValue *gsub = ghb_array_get_nth(subtitle_list, ii);
ghb_array_remove(subtitle_list, ii);
+ ghb_value_free(gsub);
continue;
}
one_burned = one_burned || burned;
@@ -1319,7 +1321,10 @@ subtitle_remove_lang_clicked_cb(GtkWidget *widget, signal_user_data_t *ud)
// Remove from preset language list
lang_list = ghb_settings_get_value(ud->settings, "SubtitleLanguageList");
+ GValue *glang = ghb_array_get_nth(lang_list, index);
ghb_array_remove(lang_list, index);
+ ghb_value_free(glang);
+
ghb_clear_presets_selection(ud);
if (ghb_array_len(lang_list) > 0)
@@ -1401,7 +1406,9 @@ static void subtitle_def_lang_list_init(signal_user_data_t *ud)
{
// Error in list. Probably duplicate languages. Remove
// this item from the list.
+ GValue *glang = ghb_array_get_nth(lang_list, ii);
ghb_array_remove(lang_list, ii);
+ ghb_value_free(glang);
count--;
}
}
@@ -1519,8 +1526,8 @@ subtitle_remove_clicked_cb(GtkWidget *widget, gchar *path, signal_user_data_t *u
// immediate selection change, so the list needs to be up to date
// when this happens.
GValue *old = ghb_array_get_nth(subtitle_list, row);
- ghb_value_free(old);
ghb_array_remove(subtitle_list, row);
+ ghb_value_free(old);
// Remove the selected item
gtk_tree_store_remove(GTK_TREE_STORE(tm), &ti);
diff --git a/gtk/src/values.c b/gtk/src/values.c
index 85886e17e..3b5c5df38 100644
--- a/gtk/src/values.c
+++ b/gtk/src/values.c
@@ -713,7 +713,11 @@ ghb_array_copy(GValue *arr1, GValue *arr2, gint count)
// empty the first array if it is not already empty
len = ghb_array_len(arr1);
for (ii = 0; ii < len; ii++)
+ {
+ GValue *old = ghb_array_get_nth(arr1, 0);
ghb_array_remove(arr1, 0);
+ ghb_value_free(old);
+ }
len = ghb_array_len(arr2);
count = MIN(count, len);
diff --git a/gtk/src/x264handler.c b/gtk/src/x264handler.c
index 51a523f25..ad3e92ca2 100644
--- a/gtk/src/x264handler.c
+++ b/gtk/src/x264handler.c
@@ -197,6 +197,7 @@ x264_setting_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
else
new_tt = g_strdup_printf("%s\n\nExpanded Options:\n\"\"", tt);
gtk_widget_set_tooltip_text(eo, new_tt);
+ g_free(new_tt);
g_free(opts);
}
@@ -327,6 +328,7 @@ x264_entry_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
else
new_tt = g_strdup_printf("%s\n\nExpanded Options:\n\"\"", tt);
gtk_widget_set_tooltip_text(eo, new_tt);
+ g_free(new_tt);
g_free(options);
options = sopts;