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 | 165 | #endif // v3270_char |
166 | 166 | |
167 | 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 | 169 | LIB3270_EXPORT GType v3270_get_type(void); |
170 | 170 | LIB3270_EXPORT void v3270_reload(GtkWidget * widget); |
171 | 171 | LIB3270_EXPORT void v3270_set_font_family(GtkWidget *widget, const gchar *name); | ... | ... |
src/include/v3270/trace.h
... | ... | @@ -50,11 +50,14 @@ |
50 | 50 | typedef struct _v3270_traceClass v3270_traceClass; |
51 | 51 | |
52 | 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 | 56 | LIB3270_EXPORT void v3270_trace_set_session(GtkWidget *widget, H3270 *hSession); |
55 | 57 | LIB3270_EXPORT GType v3270_trace_get_type(void); |
56 | 58 | LIB3270_EXPORT void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args); |
57 | 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 | 61 | LIB3270_EXPORT gchar * v3270_trace_get_command(GtkWidget *widget); |
59 | 62 | LIB3270_EXPORT void v3270_trace_set_destroy_on_close(GtkWidget *widget,gboolean on); |
60 | 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 | 91 | lib3270_set_toggle(hSession,LIB3270_TOGGLE_SSL_TRACE,0); |
92 | 92 | } |
93 | 93 | |
94 | + | |
94 | 95 | static void color_scheme_changed(GtkWidget G_GNUC_UNUSED(*widget), const GdkRGBA *colors, GtkWidget *terminal) { |
95 | 96 | |
96 | 97 | debug("%s=%p",__FUNCTION__,colors); |
... | ... | @@ -128,7 +129,7 @@ static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { |
128 | 129 | // gchar * filename = NULL; |
129 | 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 | 133 | if(trace) { |
133 | 134 | g_signal_connect(trace, "destroy", G_CALLBACK(trace_window_destroy), v3270_get_session(terminal)); |
134 | 135 | lib3270_toggle(v3270_get_session(terminal),LIB3270_TOGGLE_SSL_TRACE); | ... | ... |
src/trace/trace.c
... | ... | @@ -82,6 +82,8 @@ |
82 | 82 | |
83 | 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 | 87 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
86 | 88 | |
87 | 89 | const GtkWindowClass * v3270_trace_get_parent_class(void) |
... | ... | @@ -394,9 +396,10 @@ static void destroy(GtkWidget *widget) |
394 | 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 | 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 | 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 | 433 | GtkWidget * widget = g_object_new(V3270_TYPE_TRACE, NULL); |
431 | 434 | void * terminal = lib3270_get_user_data(hSession); |
... | ... | @@ -441,6 +444,9 @@ static void destroy(GtkWidget *widget) |
441 | 444 | |
442 | 445 | v3270_trace_set_session(widget, hSession); |
443 | 446 | |
447 | + if(header) | |
448 | + append_text(V3270_TRACE(widget), header); | |
449 | + | |
444 | 450 | return widget; |
445 | 451 | } |
446 | 452 | |
... | ... | @@ -450,17 +456,15 @@ static void destroy(GtkWidget *widget) |
450 | 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 | 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 | 469 | else |
466 | 470 | { |
... | ... | @@ -473,11 +477,23 @@ static void destroy(GtkWidget *widget) |
473 | 477 | //GtkAdjustment *vadj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(hwnd->scroll)); |
474 | 478 | //gtk_adjustment_set_value(vadj,gtk_adjustment_get_upper(vadj)); |
475 | 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 | 485 | g_free(data->msg); |
478 | - | |
479 | 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 | 499 | void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args) |
... | ... | @@ -487,8 +503,7 @@ static void destroy(GtkWidget *widget) |
487 | 503 | data->widget = widget; |
488 | 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 | 509 | void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... ) | ... | ... |
src/v3270/iocallback.c
... | ... | @@ -144,13 +144,12 @@ gpointer BgCall(struct bgParameter *p) |
144 | 144 | |
145 | 145 | static int static_RunTask(H3270 *hSession, int(*callback)(H3270 *, void *), void *parm) |
146 | 146 | { |
147 | +// return callback(hSession,parm); | |
148 | + | |
147 | 149 | struct bgParameter p = { TRUE, hSession, -1, callback, parm }; |
148 | 150 | |
149 | 151 | trace("%s starts -------------------------------------", __FUNCTION__); |
150 | 152 | |
151 | -// p.rc = callback(hSession,parm); | |
152 | - | |
153 | - | |
154 | 153 | p.running = TRUE; |
155 | 154 | |
156 | 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 | 170 | trace("%s ends ---------------------------------------", __FUNCTION__); |
172 | 171 | |
173 | 172 | return p.rc; |
173 | + | |
174 | 174 | } |
175 | 175 | |
176 | 176 | void v3270_register_io_handlers(G_GNUC_UNUSED v3270Class *cls) | ... | ... |