Commit 981cc52ad3a9bfccb47492491a10477b59ed5427
1 parent
fafae464
Exists in
master
and in
1 other branch
Fixing trace window segfaults on main application.
Showing
5 changed files
with
37 additions
and
18 deletions
Show diff stats
src/include/v3270.h
@@ -165,7 +165,7 @@ | @@ -165,7 +165,7 @@ | ||
165 | #endif // v3270_char | 165 | #endif // v3270_char |
166 | 166 | ||
167 | LIB3270_EXPORT GtkWidget * v3270_new(void); | 167 | LIB3270_EXPORT GtkWidget * v3270_new(void); |
168 | - LIB3270_EXPORT GtkWidget * v3270_new_trace_window(GtkWidget *widget); | 168 | + LIB3270_EXPORT GtkWidget * v3270_new_trace_window(GtkWidget *widget, const gchar *header); |
169 | LIB3270_EXPORT GType v3270_get_type(void); | 169 | LIB3270_EXPORT GType v3270_get_type(void); |
170 | LIB3270_EXPORT void v3270_reload(GtkWidget * widget); | 170 | LIB3270_EXPORT void v3270_reload(GtkWidget * widget); |
171 | LIB3270_EXPORT void v3270_set_font_family(GtkWidget *widget, const gchar *name); | 171 | LIB3270_EXPORT void v3270_set_font_family(GtkWidget *widget, const gchar *name); |
src/include/v3270/trace.h
@@ -50,11 +50,14 @@ | @@ -50,11 +50,14 @@ | ||
50 | typedef struct _v3270_traceClass v3270_traceClass; | 50 | typedef struct _v3270_traceClass v3270_traceClass; |
51 | 51 | ||
52 | LIB3270_EXPORT GtkWidget * v3270_trace_new(); | 52 | LIB3270_EXPORT GtkWidget * v3270_trace_new(); |
53 | - LIB3270_EXPORT GtkWidget * v3270_trace_new_from_session(H3270 *hSession); | 53 | + |
54 | + LIB3270_EXPORT GtkWidget * v3270_trace_new_from_session(H3270 *hSession, const gchar *header); | ||
55 | + | ||
54 | LIB3270_EXPORT void v3270_trace_set_session(GtkWidget *widget, H3270 *hSession); | 56 | LIB3270_EXPORT void v3270_trace_set_session(GtkWidget *widget, H3270 *hSession); |
55 | LIB3270_EXPORT GType v3270_trace_get_type(void); | 57 | LIB3270_EXPORT GType v3270_trace_get_type(void); |
56 | LIB3270_EXPORT void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args); | 58 | LIB3270_EXPORT void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args); |
57 | LIB3270_EXPORT void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... ); | 59 | LIB3270_EXPORT void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... ); |
60 | + LIB3270_EXPORT void v3270_trace_append_text(GtkWidget *widget, const gchar *text); | ||
58 | LIB3270_EXPORT gchar * v3270_trace_get_command(GtkWidget *widget); | 61 | LIB3270_EXPORT gchar * v3270_trace_get_command(GtkWidget *widget); |
59 | LIB3270_EXPORT void v3270_trace_set_destroy_on_close(GtkWidget *widget,gboolean on); | 62 | LIB3270_EXPORT void v3270_trace_set_destroy_on_close(GtkWidget *widget,gboolean on); |
60 | LIB3270_EXPORT void v3270_trace_set_font_from_string(GtkWidget *widget, const gchar *name); | 63 | LIB3270_EXPORT void v3270_trace_set_font_from_string(GtkWidget *widget, const gchar *name); |
src/testprogram/testprogram.c
@@ -91,6 +91,7 @@ static void trace_window_destroy(G_GNUC_UNUSED GtkWidget *widget, H3270 *hSessio | @@ -91,6 +91,7 @@ static void trace_window_destroy(G_GNUC_UNUSED GtkWidget *widget, H3270 *hSessio | ||
91 | lib3270_set_toggle(hSession,LIB3270_TOGGLE_SSL_TRACE,0); | 91 | lib3270_set_toggle(hSession,LIB3270_TOGGLE_SSL_TRACE,0); |
92 | } | 92 | } |
93 | 93 | ||
94 | + | ||
94 | static void color_scheme_changed(GtkWidget G_GNUC_UNUSED(*widget), const GdkRGBA *colors, GtkWidget *terminal) { | 95 | static void color_scheme_changed(GtkWidget G_GNUC_UNUSED(*widget), const GdkRGBA *colors, GtkWidget *terminal) { |
95 | 96 | ||
96 | debug("%s=%p",__FUNCTION__,colors); | 97 | debug("%s=%p",__FUNCTION__,colors); |
@@ -128,7 +129,7 @@ static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { | @@ -128,7 +129,7 @@ static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { | ||
128 | // gchar * filename = NULL; | 129 | // gchar * filename = NULL; |
129 | GValue val = G_VALUE_INIT; | 130 | GValue val = G_VALUE_INIT; |
130 | 131 | ||
131 | - GtkWidget *trace = v3270_new_trace_window(terminal); | 132 | + GtkWidget *trace = v3270_new_trace_window(terminal,NULL); |
132 | if(trace) { | 133 | if(trace) { |
133 | g_signal_connect(trace, "destroy", G_CALLBACK(trace_window_destroy), v3270_get_session(terminal)); | 134 | g_signal_connect(trace, "destroy", G_CALLBACK(trace_window_destroy), v3270_get_session(terminal)); |
134 | lib3270_toggle(v3270_get_session(terminal),LIB3270_TOGGLE_SSL_TRACE); | 135 | lib3270_toggle(v3270_get_session(terminal),LIB3270_TOGGLE_SSL_TRACE); |
src/trace/trace.c
@@ -82,6 +82,8 @@ | @@ -82,6 +82,8 @@ | ||
82 | 82 | ||
83 | G_DEFINE_TYPE(v3270_trace, v3270_trace, GTK_TYPE_WINDOW); | 83 | G_DEFINE_TYPE(v3270_trace, v3270_trace, GTK_TYPE_WINDOW); |
84 | 84 | ||
85 | + static void append_text(v3270_trace *hwnd, const gchar *text); | ||
86 | + | ||
85 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 87 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
86 | 88 | ||
87 | const GtkWindowClass * v3270_trace_get_parent_class(void) | 89 | const GtkWindowClass * v3270_trace_get_parent_class(void) |
@@ -394,9 +396,10 @@ static void destroy(GtkWidget *widget) | @@ -394,9 +396,10 @@ static void destroy(GtkWidget *widget) | ||
394 | return g_object_new(V3270_TYPE_TRACE, NULL); | 396 | return g_object_new(V3270_TYPE_TRACE, NULL); |
395 | } | 397 | } |
396 | 398 | ||
397 | - LIB3270_EXPORT GtkWidget * v3270_new_trace_window(GtkWidget *widget) | 399 | + LIB3270_EXPORT GtkWidget * v3270_new_trace_window(GtkWidget *widget, const gchar *header) |
398 | { | 400 | { |
399 | - return v3270_trace_new_from_session(v3270_get_session(widget)); | 401 | + g_return_val_if_fail(GTK_IS_V3270(widget),NULL); |
402 | + return v3270_trace_new_from_session(v3270_get_session(widget), header); | ||
400 | } | 403 | } |
401 | 404 | ||
402 | static void trace_handler(H3270 *hSession, void *userdata, const char *fmt, va_list args) | 405 | static void trace_handler(H3270 *hSession, void *userdata, const char *fmt, va_list args) |
@@ -425,7 +428,7 @@ static void destroy(GtkWidget *widget) | @@ -425,7 +428,7 @@ static void destroy(GtkWidget *widget) | ||
425 | 428 | ||
426 | } | 429 | } |
427 | 430 | ||
428 | - LIB3270_EXPORT GtkWidget * v3270_trace_new_from_session(H3270 *hSession) { | 431 | + LIB3270_EXPORT GtkWidget * v3270_trace_new_from_session(H3270 *hSession, const gchar *header) { |
429 | 432 | ||
430 | GtkWidget * widget = g_object_new(V3270_TYPE_TRACE, NULL); | 433 | GtkWidget * widget = g_object_new(V3270_TYPE_TRACE, NULL); |
431 | void * terminal = lib3270_get_user_data(hSession); | 434 | void * terminal = lib3270_get_user_data(hSession); |
@@ -441,6 +444,9 @@ static void destroy(GtkWidget *widget) | @@ -441,6 +444,9 @@ static void destroy(GtkWidget *widget) | ||
441 | 444 | ||
442 | v3270_trace_set_session(widget, hSession); | 445 | v3270_trace_set_session(widget, hSession); |
443 | 446 | ||
447 | + if(header) | ||
448 | + append_text(V3270_TRACE(widget), header); | ||
449 | + | ||
444 | return widget; | 450 | return widget; |
445 | } | 451 | } |
446 | 452 | ||
@@ -450,17 +456,15 @@ static void destroy(GtkWidget *widget) | @@ -450,17 +456,15 @@ static void destroy(GtkWidget *widget) | ||
450 | gchar * msg; | 456 | gchar * msg; |
451 | }; | 457 | }; |
452 | 458 | ||
453 | - static gboolean bg_trace_vprintf(struct bg_print_data *data) | 459 | + static void append_text(v3270_trace *hwnd, const gchar *text) |
454 | { | 460 | { |
455 | - | ||
456 | - GtkTextIter itr; | ||
457 | - v3270_trace * hwnd = V3270_TRACE(data->widget); | 461 | + GtkTextIter itr; |
458 | 462 | ||
459 | gtk_text_buffer_get_end_iter(hwnd->text,&itr); | 463 | gtk_text_buffer_get_end_iter(hwnd->text,&itr); |
460 | 464 | ||
461 | - if(g_utf8_validate(data->msg,strlen(data->msg),NULL)) | 465 | + if(g_utf8_validate(text,strlen(text),NULL)) |
462 | { | 466 | { |
463 | - gtk_text_buffer_insert(hwnd->text,&itr,data->msg,strlen(data->msg)); | 467 | + gtk_text_buffer_insert(hwnd->text,&itr,text,strlen(text)); |
464 | } | 468 | } |
465 | else | 469 | else |
466 | { | 470 | { |
@@ -473,11 +477,23 @@ static void destroy(GtkWidget *widget) | @@ -473,11 +477,23 @@ static void destroy(GtkWidget *widget) | ||
473 | //GtkAdjustment *vadj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(hwnd->scroll)); | 477 | //GtkAdjustment *vadj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(hwnd->scroll)); |
474 | //gtk_adjustment_set_value(vadj,gtk_adjustment_get_upper(vadj)); | 478 | //gtk_adjustment_set_value(vadj,gtk_adjustment_get_upper(vadj)); |
475 | //gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(hwnd->scroll), vadj); | 479 | //gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(hwnd->scroll), vadj); |
480 | + } | ||
476 | 481 | ||
482 | + static gboolean bg_trace_append_text(struct bg_print_data *data) | ||
483 | + { | ||
484 | + append_text(V3270_TRACE(data->widget),data->msg); | ||
477 | g_free(data->msg); | 485 | g_free(data->msg); |
478 | - | ||
479 | return FALSE; | 486 | return FALSE; |
487 | + } | ||
480 | 488 | ||
489 | + void v3270_trace_append_text(GtkWidget *widget, const gchar *text) | ||
490 | + { | ||
491 | + struct bg_print_data * data = g_new0(struct bg_print_data,1); | ||
492 | + | ||
493 | + data->widget = widget; | ||
494 | + data->msg = g_strdup(text); | ||
495 | + | ||
496 | + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_trace_append_text, data, g_free); | ||
481 | } | 497 | } |
482 | 498 | ||
483 | void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args) | 499 | void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args) |
@@ -487,8 +503,7 @@ static void destroy(GtkWidget *widget) | @@ -487,8 +503,7 @@ static void destroy(GtkWidget *widget) | ||
487 | data->widget = widget; | 503 | data->widget = widget; |
488 | data->msg = g_strdup_vprintf(fmt,args); | 504 | data->msg = g_strdup_vprintf(fmt,args); |
489 | 505 | ||
490 | - g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_trace_vprintf, data, g_free); | ||
491 | - | 506 | + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_trace_append_text, data, g_free); |
492 | } | 507 | } |
493 | 508 | ||
494 | void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... ) | 509 | void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... ) |
src/v3270/iocallback.c
@@ -144,13 +144,12 @@ gpointer BgCall(struct bgParameter *p) | @@ -144,13 +144,12 @@ gpointer BgCall(struct bgParameter *p) | ||
144 | 144 | ||
145 | static int static_RunTask(H3270 *hSession, int(*callback)(H3270 *, void *), void *parm) | 145 | static int static_RunTask(H3270 *hSession, int(*callback)(H3270 *, void *), void *parm) |
146 | { | 146 | { |
147 | +// return callback(hSession,parm); | ||
148 | + | ||
147 | struct bgParameter p = { TRUE, hSession, -1, callback, parm }; | 149 | struct bgParameter p = { TRUE, hSession, -1, callback, parm }; |
148 | 150 | ||
149 | trace("%s starts -------------------------------------", __FUNCTION__); | 151 | trace("%s starts -------------------------------------", __FUNCTION__); |
150 | 152 | ||
151 | -// p.rc = callback(hSession,parm); | ||
152 | - | ||
153 | - | ||
154 | p.running = TRUE; | 153 | p.running = TRUE; |
155 | 154 | ||
156 | GThread *thread = g_thread_new(PACKAGE_NAME, (GThreadFunc) BgCall, &p); | 155 | GThread *thread = g_thread_new(PACKAGE_NAME, (GThreadFunc) BgCall, &p); |
@@ -171,6 +170,7 @@ static int static_RunTask(H3270 *hSession, int(*callback)(H3270 *, void *), void | @@ -171,6 +170,7 @@ static int static_RunTask(H3270 *hSession, int(*callback)(H3270 *, void *), void | ||
171 | trace("%s ends ---------------------------------------", __FUNCTION__); | 170 | trace("%s ends ---------------------------------------", __FUNCTION__); |
172 | 171 | ||
173 | return p.rc; | 172 | return p.rc; |
173 | + | ||
174 | } | 174 | } |
175 | 175 | ||
176 | void v3270_register_io_handlers(G_GNUC_UNUSED v3270Class *cls) | 176 | void v3270_register_io_handlers(G_GNUC_UNUSED v3270Class *cls) |