From 0bd7e473044fad59eb73e41697332f4fb84452c7 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Wed, 31 Jul 2019 09:31:27 -0300 Subject: [PATCH] Fixing memory leaks, improving print dialog. --- src/dialogs/colors.c | 1 + src/dialogs/colorscheme.c | 21 +++++++++++++-------- src/dialogs/fontselect.c | 12 ++++++++++-- src/dialogs/print/convenience.c | 16 ++++++++++++---- src/dialogs/print/print.c | 6 +++--- src/dialogs/print/settings.c | 2 +- src/include/v3270.h | 3 ++- src/include/v3270/print.h | 4 ++-- src/terminal/callbacks.c | 2 +- src/testprogram/toolbar.c | 2 +- 10 files changed, 46 insertions(+), 23 deletions(-) diff --git a/src/dialogs/colors.c b/src/dialogs/colors.c index a452a1c..339ac17 100644 --- a/src/dialogs/colors.c +++ b/src/dialogs/colors.c @@ -189,6 +189,7 @@ update_color_chooser(widget,g_value_get_int(&value)); + g_value_unset(&value); } diff --git a/src/dialogs/colorscheme.c b/src/dialogs/colorscheme.c index 4f94758..2742139 100644 --- a/src/dialogs/colorscheme.c +++ b/src/dialogs/colorscheme.c @@ -88,6 +88,8 @@ debug("%s=%p",__FUNCTION__,clr); g_signal_emit(widget, color_signal[CHANGED], 0, clr); + g_value_unset(&value); + } static void V3270ColorScheme_class_init(G_GNUC_UNUSED V3270ColorSchemeClass *klass) @@ -370,19 +372,22 @@ gtk_tree_model_get_value(gtk_combo_box_get_model(GTK_COMBO_BOX(widget)),&iter,1,&value); clr = g_value_get_pointer(&value); - if(!clr) - return g_strdup(""); - GString *str = g_string_new(""); - for(f=0;fhost) ? LIB3270_CONTENT_SELECTED : LIB3270_CONTENT_ALL),error); + } + + int v3270_print_all(GtkWidget *widget, GError **error) { - return v3270_print(widget,LIB3270_CONTENT_ALL,error); + return v3270_print_dialog(widget,LIB3270_CONTENT_ALL,error); } int v3270_print_selected(GtkWidget *widget, GError **error) { - return v3270_print(widget,LIB3270_CONTENT_SELECTED,error); + return v3270_print_dialog(widget,LIB3270_CONTENT_SELECTED,error); } int v3270_print_copy(GtkWidget *widget, GError **error) { - return v3270_print(widget,LIB3270_CONTENT_COPY,error); + return v3270_print_dialog(widget,LIB3270_CONTENT_COPY,error); } diff --git a/src/dialogs/print/print.c b/src/dialogs/print/print.c index 105b4b6..b976349 100644 --- a/src/dialogs/print/print.c +++ b/src/dialogs/print/print.c @@ -130,12 +130,12 @@ // Setup options. operation->show_selection = v3270_print_settings_get_show_selection(settings); - operation->font.name = g_strdup(v3270_font_selection_get_family(settings)); + operation->font.name = v3270_print_settings_get_font_family(settings); v3270_print_settings_get_rgba(settings, operation->settings.colors, V3270_COLOR_COUNT); } -#endif // _WIN32 +#endif // !_WIN32 static void V3270PrintOperation_class_init(V3270PrintOperationClass *klass) { @@ -149,7 +149,7 @@ #ifndef _WIN32 operation->create_custom_widget = custom_widget_new; operation->custom_widget_apply = custom_widget_apply; -#endif // _WIN32 +#endif // !_WIN32 } diff --git a/src/dialogs/print/settings.c b/src/dialogs/print/settings.c index f88c6a5..0c6c18c 100644 --- a/src/dialogs/print/settings.c +++ b/src/dialogs/print/settings.c @@ -146,7 +146,7 @@ LIB3270_EXPORT void v3270_print_settings_set_color_scheme(GtkWidget *widget, con v3270_color_scheme_set_text(GTK_V3270_PRINT_SETTINGS(widget)->color, colors); } -LIB3270_EXPORT const gchar * v3270_print_settings_get_font_family(GtkWidget *widget) +LIB3270_EXPORT gchar * v3270_print_settings_get_font_family(GtkWidget *widget) { return v3270_font_selection_get_family(GTK_V3270_PRINT_SETTINGS(widget)->font); } diff --git a/src/include/v3270.h b/src/include/v3270.h index 2d07d8d..073f822 100644 --- a/src/include/v3270.h +++ b/src/include/v3270.h @@ -265,10 +265,11 @@ LIB3270_EXPORT void v3270_select_host(GtkWidget *widget); // Print - LIB3270_EXPORT int v3270_print(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, GError **error); + LIB3270_EXPORT int v3270_print(GtkWidget *widget, GError **error); LIB3270_EXPORT int v3270_print_all(GtkWidget *widget, GError **error); LIB3270_EXPORT int v3270_print_selected(GtkWidget *widget, GError **error); LIB3270_EXPORT int v3270_print_copy(GtkWidget *widget, GError **error); + LIB3270_EXPORT int v3270_print_dialog(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, GError **error); // Save LIB3270_EXPORT int v3270_save(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, const gchar *filename, GError **error); diff --git a/src/include/v3270/print.h b/src/include/v3270/print.h index f336edf..940d810 100644 --- a/src/include/v3270/print.h +++ b/src/include/v3270/print.h @@ -69,7 +69,7 @@ LIB3270_EXPORT GtkWidget * v3270_font_selection_new(const gchar *fontname); LIB3270_EXPORT gboolean v3270_font_selection_set_family(GtkWidget *widget, const gchar *fontname); - LIB3270_EXPORT const gchar * v3270_font_selection_get_family(GtkWidget *widget); + LIB3270_EXPORT gchar * v3270_font_selection_get_family(GtkWidget *widget); LIB3270_EXPORT GType V3270PrintSettings_get_type(void); LIB3270_EXPORT GtkWidget * V3270_print_settings_new(GtkWidget *widget); @@ -77,7 +77,7 @@ LIB3270_EXPORT void v3270_print_settings_set_show_selection(GtkWidget *widget, gboolean is_active); LIB3270_EXPORT gchar * v3270_print_settings_get_color_scheme(GtkWidget *widget); LIB3270_EXPORT void v3270_print_settings_set_color_scheme(GtkWidget *widget, const gchar *colors); - LIB3270_EXPORT const gchar * v3270_print_settings_get_font_family(GtkWidget *widget); + LIB3270_EXPORT gchar * v3270_print_settings_get_font_family(GtkWidget *widget); LIB3270_EXPORT gboolean v3270_print_settings_set_font_family(GtkWidget *widget, const gchar *fontname); LIB3270_EXPORT int v3270_print_settings_get_rgba(GtkWidget *widget, GdkRGBA *colors, size_t num_colors); diff --git a/src/terminal/callbacks.c b/src/terminal/callbacks.c index 56920f8..3b9f469 100644 --- a/src/terminal/callbacks.c +++ b/src/terminal/callbacks.c @@ -329,7 +329,7 @@ static void message(H3270 *session, LIB3270_NOTIFY id , const char *title, const static int print(H3270 *session, LIB3270_CONTENT_OPTION mode) { - return v3270_print(GTK_WIDGET(lib3270_get_user_data(session)), mode, NULL); + return v3270_print_dialog(GTK_WIDGET(lib3270_get_user_data(session)), mode, NULL); } static int save(H3270 *session, LIB3270_CONTENT_OPTION mode, const char *filename) diff --git a/src/testprogram/toolbar.c b/src/testprogram/toolbar.c index a2b84e0..04588ac 100644 --- a/src/testprogram/toolbar.c +++ b/src/testprogram/toolbar.c @@ -40,7 +40,7 @@ static void print_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) { - lib3270_print_all(v3270_get_session(terminal)); + v3270_print(terminal,NULL); } static void host_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) -- libgit2 0.21.2