Commit 981cc52ad3a9bfccb47492491a10477b59ed5427

Authored by Perry Werneck
1 parent fafae464
Exists in master and in 1 other branch develop

Fixing trace window segfaults on main application.

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)
... ...