Commit 0bd7e473044fad59eb73e41697332f4fb84452c7
1 parent
438f898a
Exists in
master
and in
1 other branch
Fixing memory leaks, improving print dialog.
Showing
10 changed files
with
46 additions
and
23 deletions
Show diff stats
src/dialogs/colors.c
src/dialogs/colorscheme.c
| ... | ... | @@ -88,6 +88,8 @@ |
| 88 | 88 | debug("%s=%p",__FUNCTION__,clr); |
| 89 | 89 | g_signal_emit(widget, color_signal[CHANGED], 0, clr); |
| 90 | 90 | |
| 91 | + g_value_unset(&value); | |
| 92 | + | |
| 91 | 93 | } |
| 92 | 94 | |
| 93 | 95 | static void V3270ColorScheme_class_init(G_GNUC_UNUSED V3270ColorSchemeClass *klass) |
| ... | ... | @@ -370,19 +372,22 @@ |
| 370 | 372 | |
| 371 | 373 | gtk_tree_model_get_value(gtk_combo_box_get_model(GTK_COMBO_BOX(widget)),&iter,1,&value); |
| 372 | 374 | clr = g_value_get_pointer(&value); |
| 373 | - if(!clr) | |
| 374 | - return g_strdup(""); | |
| 375 | - | |
| 376 | 375 | GString *str = g_string_new(""); |
| 377 | - for(f=0;f<V3270_COLOR_COUNT;f++) | |
| 376 | + | |
| 377 | + if(clr) | |
| 378 | 378 | { |
| 379 | - if(f) | |
| 380 | - g_string_append_c(str,';'); | |
| 379 | + for(f=0;f<V3270_COLOR_COUNT;f++) | |
| 380 | + { | |
| 381 | + if(f) | |
| 382 | + g_string_append_c(str,';'); | |
| 381 | 383 | |
| 382 | - g_autofree gchar * color = gdk_rgba_to_string(clr+f); | |
| 383 | - g_string_append_printf(str,"%s",color); | |
| 384 | + g_autofree gchar * color = gdk_rgba_to_string(clr+f); | |
| 385 | + g_string_append_printf(str,"%s",color); | |
| 386 | + } | |
| 384 | 387 | } |
| 385 | 388 | |
| 389 | + g_value_unset(&value); | |
| 390 | + | |
| 386 | 391 | return g_string_free(str,FALSE); |
| 387 | 392 | |
| 388 | 393 | } | ... | ... |
src/dialogs/fontselect.c
| ... | ... | @@ -100,9 +100,12 @@ |
| 100 | 100 | if(!g_ascii_strcasecmp(fontname,g_value_get_string(&value))) |
| 101 | 101 | { |
| 102 | 102 | gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widget),&iter); |
| 103 | + g_value_unset(&value); | |
| 103 | 104 | return TRUE; |
| 104 | 105 | } |
| 105 | 106 | |
| 107 | + g_value_unset(&value); | |
| 108 | + | |
| 106 | 109 | } while(gtk_tree_model_iter_next(model,&iter)); |
| 107 | 110 | } |
| 108 | 111 | |
| ... | ... | @@ -110,7 +113,7 @@ |
| 110 | 113 | |
| 111 | 114 | } |
| 112 | 115 | |
| 113 | - LIB3270_EXPORT const gchar * v3270_font_selection_get_family(GtkWidget *widget) | |
| 116 | + LIB3270_EXPORT gchar * v3270_font_selection_get_family(GtkWidget *widget) | |
| 114 | 117 | { |
| 115 | 118 | GtkTreeIter iter; |
| 116 | 119 | |
| ... | ... | @@ -119,7 +122,12 @@ |
| 119 | 122 | GValue value = { 0, }; |
| 120 | 123 | |
| 121 | 124 | gtk_tree_model_get_value(gtk_combo_box_get_model(GTK_COMBO_BOX(widget)),&iter,0,&value); |
| 122 | - return g_value_get_string(&value); | |
| 125 | + | |
| 126 | + gchar * rc = g_value_dup_string(&value); | |
| 127 | + | |
| 128 | + g_value_unset(&value); | |
| 129 | + | |
| 130 | + return rc; | |
| 123 | 131 | |
| 124 | 132 | } |
| 125 | 133 | ... | ... |
src/dialogs/print/convenience.c
| ... | ... | @@ -34,7 +34,7 @@ |
| 34 | 34 | |
| 35 | 35 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| 36 | 36 | |
| 37 | - int v3270_print(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, GError **error) | |
| 37 | + int v3270_print_dialog(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, GError **error) | |
| 38 | 38 | { |
| 39 | 39 | int rc; |
| 40 | 40 | |
| ... | ... | @@ -76,6 +76,8 @@ |
| 76 | 76 | // Print operation. |
| 77 | 77 | V3270PrintOperation * operation = v3270_print_operation_new(widget, mode); |
| 78 | 78 | |
| 79 | + gtk_print_operation_set_show_progress(GTK_PRINT_OPERATION(operation),TRUE); | |
| 80 | + | |
| 79 | 81 | if(error) |
| 80 | 82 | { |
| 81 | 83 | gtk_print_operation_run( |
| ... | ... | @@ -127,18 +129,24 @@ |
| 127 | 129 | |
| 128 | 130 | } |
| 129 | 131 | |
| 132 | + int v3270_print(GtkWidget *widget, GError **error) | |
| 133 | + { | |
| 134 | + return v3270_print_dialog(widget,(lib3270_has_selection(GTK_V3270(widget)->host) ? LIB3270_CONTENT_SELECTED : LIB3270_CONTENT_ALL),error); | |
| 135 | + } | |
| 136 | + | |
| 137 | + | |
| 130 | 138 | int v3270_print_all(GtkWidget *widget, GError **error) |
| 131 | 139 | { |
| 132 | - return v3270_print(widget,LIB3270_CONTENT_ALL,error); | |
| 140 | + return v3270_print_dialog(widget,LIB3270_CONTENT_ALL,error); | |
| 133 | 141 | } |
| 134 | 142 | |
| 135 | 143 | int v3270_print_selected(GtkWidget *widget, GError **error) |
| 136 | 144 | { |
| 137 | - return v3270_print(widget,LIB3270_CONTENT_SELECTED,error); | |
| 145 | + return v3270_print_dialog(widget,LIB3270_CONTENT_SELECTED,error); | |
| 138 | 146 | } |
| 139 | 147 | |
| 140 | 148 | int v3270_print_copy(GtkWidget *widget, GError **error) |
| 141 | 149 | { |
| 142 | - return v3270_print(widget,LIB3270_CONTENT_COPY,error); | |
| 150 | + return v3270_print_dialog(widget,LIB3270_CONTENT_COPY,error); | |
| 143 | 151 | } |
| 144 | 152 | ... | ... |
src/dialogs/print/print.c
| ... | ... | @@ -130,12 +130,12 @@ |
| 130 | 130 | |
| 131 | 131 | // Setup options. |
| 132 | 132 | operation->show_selection = v3270_print_settings_get_show_selection(settings); |
| 133 | - operation->font.name = g_strdup(v3270_font_selection_get_family(settings)); | |
| 133 | + operation->font.name = v3270_print_settings_get_font_family(settings); | |
| 134 | 134 | |
| 135 | 135 | v3270_print_settings_get_rgba(settings, operation->settings.colors, V3270_COLOR_COUNT); |
| 136 | 136 | |
| 137 | 137 | } |
| 138 | -#endif // _WIN32 | |
| 138 | +#endif // !_WIN32 | |
| 139 | 139 | |
| 140 | 140 | static void V3270PrintOperation_class_init(V3270PrintOperationClass *klass) |
| 141 | 141 | { |
| ... | ... | @@ -149,7 +149,7 @@ |
| 149 | 149 | #ifndef _WIN32 |
| 150 | 150 | operation->create_custom_widget = custom_widget_new; |
| 151 | 151 | operation->custom_widget_apply = custom_widget_apply; |
| 152 | -#endif // _WIN32 | |
| 152 | +#endif // !_WIN32 | |
| 153 | 153 | |
| 154 | 154 | } |
| 155 | 155 | ... | ... |
src/dialogs/print/settings.c
| ... | ... | @@ -146,7 +146,7 @@ LIB3270_EXPORT void v3270_print_settings_set_color_scheme(GtkWidget *widget, con |
| 146 | 146 | v3270_color_scheme_set_text(GTK_V3270_PRINT_SETTINGS(widget)->color, colors); |
| 147 | 147 | } |
| 148 | 148 | |
| 149 | -LIB3270_EXPORT const gchar * v3270_print_settings_get_font_family(GtkWidget *widget) | |
| 149 | +LIB3270_EXPORT gchar * v3270_print_settings_get_font_family(GtkWidget *widget) | |
| 150 | 150 | { |
| 151 | 151 | return v3270_font_selection_get_family(GTK_V3270_PRINT_SETTINGS(widget)->font); |
| 152 | 152 | } | ... | ... |
src/include/v3270.h
| ... | ... | @@ -265,10 +265,11 @@ |
| 265 | 265 | LIB3270_EXPORT void v3270_select_host(GtkWidget *widget); |
| 266 | 266 | |
| 267 | 267 | |
| 268 | - LIB3270_EXPORT int v3270_print(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, GError **error); | |
| 268 | + LIB3270_EXPORT int v3270_print(GtkWidget *widget, GError **error); | |
| 269 | 269 | LIB3270_EXPORT int v3270_print_all(GtkWidget *widget, GError **error); |
| 270 | 270 | LIB3270_EXPORT int v3270_print_selected(GtkWidget *widget, GError **error); |
| 271 | 271 | LIB3270_EXPORT int v3270_print_copy(GtkWidget *widget, GError **error); |
| 272 | + LIB3270_EXPORT int v3270_print_dialog(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, GError **error); | |
| 272 | 273 | |
| 273 | 274 | // Save |
| 274 | 275 | LIB3270_EXPORT int v3270_save(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, const gchar *filename, GError **error); | ... | ... |
src/include/v3270/print.h
| ... | ... | @@ -69,7 +69,7 @@ |
| 69 | 69 | |
| 70 | 70 | LIB3270_EXPORT GtkWidget * v3270_font_selection_new(const gchar *fontname); |
| 71 | 71 | LIB3270_EXPORT gboolean v3270_font_selection_set_family(GtkWidget *widget, const gchar *fontname); |
| 72 | - LIB3270_EXPORT const gchar * v3270_font_selection_get_family(GtkWidget *widget); | |
| 72 | + LIB3270_EXPORT gchar * v3270_font_selection_get_family(GtkWidget *widget); | |
| 73 | 73 | |
| 74 | 74 | LIB3270_EXPORT GType V3270PrintSettings_get_type(void); |
| 75 | 75 | LIB3270_EXPORT GtkWidget * V3270_print_settings_new(GtkWidget *widget); |
| ... | ... | @@ -77,7 +77,7 @@ |
| 77 | 77 | LIB3270_EXPORT void v3270_print_settings_set_show_selection(GtkWidget *widget, gboolean is_active); |
| 78 | 78 | LIB3270_EXPORT gchar * v3270_print_settings_get_color_scheme(GtkWidget *widget); |
| 79 | 79 | LIB3270_EXPORT void v3270_print_settings_set_color_scheme(GtkWidget *widget, const gchar *colors); |
| 80 | - LIB3270_EXPORT const gchar * v3270_print_settings_get_font_family(GtkWidget *widget); | |
| 80 | + LIB3270_EXPORT gchar * v3270_print_settings_get_font_family(GtkWidget *widget); | |
| 81 | 81 | LIB3270_EXPORT gboolean v3270_print_settings_set_font_family(GtkWidget *widget, const gchar *fontname); |
| 82 | 82 | LIB3270_EXPORT int v3270_print_settings_get_rgba(GtkWidget *widget, GdkRGBA *colors, size_t num_colors); |
| 83 | 83 | ... | ... |
src/terminal/callbacks.c
| ... | ... | @@ -329,7 +329,7 @@ static void message(H3270 *session, LIB3270_NOTIFY id , const char *title, const |
| 329 | 329 | |
| 330 | 330 | static int print(H3270 *session, LIB3270_CONTENT_OPTION mode) |
| 331 | 331 | { |
| 332 | - return v3270_print(GTK_WIDGET(lib3270_get_user_data(session)), mode, NULL); | |
| 332 | + return v3270_print_dialog(GTK_WIDGET(lib3270_get_user_data(session)), mode, NULL); | |
| 333 | 333 | } |
| 334 | 334 | |
| 335 | 335 | static int save(H3270 *session, LIB3270_CONTENT_OPTION mode, const char *filename) | ... | ... |
src/testprogram/toolbar.c
| ... | ... | @@ -40,7 +40,7 @@ |
| 40 | 40 | |
| 41 | 41 | static void print_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) |
| 42 | 42 | { |
| 43 | - lib3270_print_all(v3270_get_session(terminal)); | |
| 43 | + v3270_print(terminal,NULL); | |
| 44 | 44 | } |
| 45 | 45 | |
| 46 | 46 | static void host_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) | ... | ... |