diff --git a/src/include/v3270.h b/src/include/v3270.h index 32f9553..9144da4 100644 --- a/src/include/v3270.h +++ b/src/include/v3270.h @@ -165,7 +165,7 @@ #endif // v3270_char LIB3270_EXPORT GtkWidget * v3270_new(void); - LIB3270_EXPORT GtkWidget * v3270_new_trace_window(GtkWidget *widget); + LIB3270_EXPORT GtkWidget * v3270_new_trace_window(GtkWidget *widget, const gchar *header); LIB3270_EXPORT GType v3270_get_type(void); LIB3270_EXPORT void v3270_reload(GtkWidget * widget); LIB3270_EXPORT void v3270_set_font_family(GtkWidget *widget, const gchar *name); diff --git a/src/include/v3270/trace.h b/src/include/v3270/trace.h index 5f7f827..ec219f6 100644 --- a/src/include/v3270/trace.h +++ b/src/include/v3270/trace.h @@ -50,11 +50,14 @@ typedef struct _v3270_traceClass v3270_traceClass; LIB3270_EXPORT GtkWidget * v3270_trace_new(); - LIB3270_EXPORT GtkWidget * v3270_trace_new_from_session(H3270 *hSession); + + LIB3270_EXPORT GtkWidget * v3270_trace_new_from_session(H3270 *hSession, const gchar *header); + LIB3270_EXPORT void v3270_trace_set_session(GtkWidget *widget, H3270 *hSession); LIB3270_EXPORT GType v3270_trace_get_type(void); LIB3270_EXPORT void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args); LIB3270_EXPORT void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... ); + LIB3270_EXPORT void v3270_trace_append_text(GtkWidget *widget, const gchar *text); LIB3270_EXPORT gchar * v3270_trace_get_command(GtkWidget *widget); LIB3270_EXPORT void v3270_trace_set_destroy_on_close(GtkWidget *widget,gboolean on); LIB3270_EXPORT void v3270_trace_set_font_from_string(GtkWidget *widget, const gchar *name); diff --git a/src/testprogram/testprogram.c b/src/testprogram/testprogram.c index ea22566..552bd14 100644 --- a/src/testprogram/testprogram.c +++ b/src/testprogram/testprogram.c @@ -91,6 +91,7 @@ static void trace_window_destroy(G_GNUC_UNUSED GtkWidget *widget, H3270 *hSessio lib3270_set_toggle(hSession,LIB3270_TOGGLE_SSL_TRACE,0); } + static void color_scheme_changed(GtkWidget G_GNUC_UNUSED(*widget), const GdkRGBA *colors, GtkWidget *terminal) { debug("%s=%p",__FUNCTION__,colors); @@ -128,7 +129,7 @@ static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { // gchar * filename = NULL; GValue val = G_VALUE_INIT; - GtkWidget *trace = v3270_new_trace_window(terminal); + GtkWidget *trace = v3270_new_trace_window(terminal,NULL); if(trace) { g_signal_connect(trace, "destroy", G_CALLBACK(trace_window_destroy), v3270_get_session(terminal)); lib3270_toggle(v3270_get_session(terminal),LIB3270_TOGGLE_SSL_TRACE); diff --git a/src/trace/trace.c b/src/trace/trace.c index 7bf1291..020a377 100644 --- a/src/trace/trace.c +++ b/src/trace/trace.c @@ -82,6 +82,8 @@ G_DEFINE_TYPE(v3270_trace, v3270_trace, GTK_TYPE_WINDOW); + static void append_text(v3270_trace *hwnd, const gchar *text); + /*--[ Implement ]------------------------------------------------------------------------------------*/ const GtkWindowClass * v3270_trace_get_parent_class(void) @@ -394,9 +396,10 @@ static void destroy(GtkWidget *widget) return g_object_new(V3270_TYPE_TRACE, NULL); } - LIB3270_EXPORT GtkWidget * v3270_new_trace_window(GtkWidget *widget) + LIB3270_EXPORT GtkWidget * v3270_new_trace_window(GtkWidget *widget, const gchar *header) { - return v3270_trace_new_from_session(v3270_get_session(widget)); + g_return_val_if_fail(GTK_IS_V3270(widget),NULL); + return v3270_trace_new_from_session(v3270_get_session(widget), header); } static void trace_handler(H3270 *hSession, void *userdata, const char *fmt, va_list args) @@ -425,7 +428,7 @@ static void destroy(GtkWidget *widget) } - LIB3270_EXPORT GtkWidget * v3270_trace_new_from_session(H3270 *hSession) { + LIB3270_EXPORT GtkWidget * v3270_trace_new_from_session(H3270 *hSession, const gchar *header) { GtkWidget * widget = g_object_new(V3270_TYPE_TRACE, NULL); void * terminal = lib3270_get_user_data(hSession); @@ -441,6 +444,9 @@ static void destroy(GtkWidget *widget) v3270_trace_set_session(widget, hSession); + if(header) + append_text(V3270_TRACE(widget), header); + return widget; } @@ -450,17 +456,15 @@ static void destroy(GtkWidget *widget) gchar * msg; }; - static gboolean bg_trace_vprintf(struct bg_print_data *data) + static void append_text(v3270_trace *hwnd, const gchar *text) { - - GtkTextIter itr; - v3270_trace * hwnd = V3270_TRACE(data->widget); + GtkTextIter itr; gtk_text_buffer_get_end_iter(hwnd->text,&itr); - if(g_utf8_validate(data->msg,strlen(data->msg),NULL)) + if(g_utf8_validate(text,strlen(text),NULL)) { - gtk_text_buffer_insert(hwnd->text,&itr,data->msg,strlen(data->msg)); + gtk_text_buffer_insert(hwnd->text,&itr,text,strlen(text)); } else { @@ -473,11 +477,23 @@ static void destroy(GtkWidget *widget) //GtkAdjustment *vadj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(hwnd->scroll)); //gtk_adjustment_set_value(vadj,gtk_adjustment_get_upper(vadj)); //gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(hwnd->scroll), vadj); + } + static gboolean bg_trace_append_text(struct bg_print_data *data) + { + append_text(V3270_TRACE(data->widget),data->msg); g_free(data->msg); - return FALSE; + } + void v3270_trace_append_text(GtkWidget *widget, const gchar *text) + { + struct bg_print_data * data = g_new0(struct bg_print_data,1); + + data->widget = widget; + data->msg = g_strdup(text); + + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_trace_append_text, data, g_free); } void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args) @@ -487,8 +503,7 @@ static void destroy(GtkWidget *widget) data->widget = widget; data->msg = g_strdup_vprintf(fmt,args); - g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_trace_vprintf, data, g_free); - + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_trace_append_text, data, g_free); } void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... ) diff --git a/src/v3270/iocallback.c b/src/v3270/iocallback.c index 2100bd9..ce38a10 100644 --- a/src/v3270/iocallback.c +++ b/src/v3270/iocallback.c @@ -144,13 +144,12 @@ gpointer BgCall(struct bgParameter *p) static int static_RunTask(H3270 *hSession, int(*callback)(H3270 *, void *), void *parm) { +// return callback(hSession,parm); + struct bgParameter p = { TRUE, hSession, -1, callback, parm }; trace("%s starts -------------------------------------", __FUNCTION__); -// p.rc = callback(hSession,parm); - - p.running = TRUE; 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 trace("%s ends ---------------------------------------", __FUNCTION__); return p.rc; + } void v3270_register_io_handlers(G_GNUC_UNUSED v3270Class *cls) -- libgit2 0.21.2