Commit 317eaeb83be6d78bff20c59f81d7c6b621d08d14
1 parent
eddb2894
Exists in
master
and in
1 other branch
Updating simple trace window.
Showing
4 changed files
with
68 additions
and
21 deletions
Show diff stats
src/include/v3270.h
src/include/v3270/trace.h
... | ... | @@ -56,6 +56,7 @@ |
56 | 56 | LIB3270_EXPORT void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... ); |
57 | 57 | LIB3270_EXPORT gchar * v3270_trace_get_command(GtkWidget *widget); |
58 | 58 | LIB3270_EXPORT void v3270_trace_set_destroy_on_close(GtkWidget *widget,gboolean on); |
59 | + LIB3270_EXPORT void v3270_trace_set_font_from_string(GtkWidget *widget, const gchar *name); | |
59 | 60 | |
60 | 61 | G_END_DECLS |
61 | 62 | ... | ... |
src/testprogram/testprogram.c
... | ... | @@ -81,6 +81,13 @@ static gboolean popup_menu(GtkWidget *widget, G_GNUC_UNUSED gboolean selected, g |
81 | 81 | |
82 | 82 | } |
83 | 83 | |
84 | +static void trace_window_destroy(G_GNUC_UNUSED GtkWidget *widget, H3270 *hSession) { | |
85 | + lib3270_set_toggle(hSession,LIB3270_TOGGLE_DS_TRACE,0); | |
86 | + lib3270_set_toggle(hSession,LIB3270_TOGGLE_SCREEN_TRACE,0); | |
87 | + lib3270_set_toggle(hSession,LIB3270_TOGGLE_EVENT_TRACE,0); | |
88 | + lib3270_set_toggle(hSession,LIB3270_TOGGLE_NETWORK_TRACE,0); | |
89 | +} | |
90 | + | |
84 | 91 | static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { |
85 | 92 | |
86 | 93 | /* |
... | ... | @@ -99,7 +106,12 @@ static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { |
99 | 106 | // gchar * filename = NULL; |
100 | 107 | GValue val = G_VALUE_INIT; |
101 | 108 | |
102 | - // lib3270_toggle(v3270_get_session(terminal),LIB3270_TOGGLE_DS_TRACE); | |
109 | + GtkWidget *trace = v3270_new_trace_window(terminal); | |
110 | + if(trace) { | |
111 | + g_signal_connect(trace, "destroy", G_CALLBACK(trace_window_destroy), v3270_get_session(terminal)); | |
112 | + lib3270_toggle(v3270_get_session(terminal),LIB3270_TOGGLE_DS_TRACE); | |
113 | + gtk_widget_show_all(trace); | |
114 | + } | |
103 | 115 | |
104 | 116 | const gchar *url = getenv("LIB3270_DEFAULT_HOST"); |
105 | 117 | if(url) { | ... | ... |
src/trace/trace.c
... | ... | @@ -35,6 +35,8 @@ |
35 | 35 | #include <libintl.h> |
36 | 36 | #include <glib/gi18n.h> |
37 | 37 | |
38 | + #include <lib3270.h> | |
39 | + #include <lib3270/trace.h> | |
38 | 40 | #include <v3270/trace.h> |
39 | 41 | |
40 | 42 | #if defined( HAVE_SYSLOG ) |
... | ... | @@ -57,6 +59,8 @@ |
57 | 59 | GtkTextBuffer * text; |
58 | 60 | GtkWidget * entry; |
59 | 61 | GtkWidget * button; |
62 | + GtkWidget * view; | |
63 | + H3270 * hSession; | |
60 | 64 | gchar **line; |
61 | 65 | guint log_handler; |
62 | 66 | gboolean * enabled; |
... | ... | @@ -103,6 +107,11 @@ static void destroy(GtkObject *widget) |
103 | 107 | { |
104 | 108 | v3270_trace * hwnd = V3270_TRACE(widget); |
105 | 109 | |
110 | + if(hwnd->hSession) | |
111 | + { | |
112 | + lib3270_set_trace_handler(hwnd->hSession,NULL,NULL); | |
113 | + } | |
114 | + | |
106 | 115 | if(hwnd->log_handler) |
107 | 116 | { |
108 | 117 | g_log_remove_handler(NULL,hwnd->log_handler); |
... | ... | @@ -310,19 +319,27 @@ static void destroy(GtkObject *widget) |
310 | 319 | |
311 | 320 | } |
312 | 321 | |
322 | + void v3270_trace_set_font_from_string(GtkWidget *widget, const gchar *name) | |
323 | + { | |
324 | + PangoFontDescription* fontdesc = pango_font_description_from_string(name); | |
325 | + | |
326 | +#if GTK_CHECK_VERSION(3,0,0) | |
327 | + gtk_widget_override_font(V3270_TRACE(widget)->view, fontdesc); | |
328 | +#else | |
329 | + gtk_widget_modify_font(V3270_TRACE(widget)->view, fontdesc); | |
330 | +#endif // GTK_CHECK_VERSION | |
331 | + | |
332 | + pango_font_description_free(fontdesc); | |
333 | + } | |
334 | + | |
313 | 335 | static void v3270_trace_init(v3270_trace *window) |
314 | 336 | { |
315 | 337 | GtkWidget * widget; |
316 | - GtkWidget * view; | |
317 | 338 | #if GTK_CHECK_VERSION(3,0,0) |
318 | 339 | GtkWidget * vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); |
319 | 340 | #else |
320 | 341 | GtkWidget * vbox = gtk_vbox_new(FALSE,0); |
321 | 342 | #endif // GTK_CHECK_VERSION |
322 | - gchar * fontname = "Monospace"; | |
323 | - PangoFontDescription * fontdesc = pango_font_description_from_string(fontname); | |
324 | - | |
325 | - g_free(fontname); | |
326 | 343 | |
327 | 344 | // Top menu |
328 | 345 | { |
... | ... | @@ -341,25 +358,23 @@ static void destroy(GtkObject *widget) |
341 | 358 | gtk_box_pack_start(GTK_BOX(vbox),widget,FALSE,TRUE,0); |
342 | 359 | } |
343 | 360 | |
361 | + window->hSession = NULL; | |
362 | + | |
344 | 363 | // Trace container |
345 | 364 | widget = gtk_scrolled_window_new(NULL,NULL); |
346 | 365 | window->scroll = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(widget)); |
347 | 366 | gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); |
348 | - view = gtk_text_view_new(); | |
349 | 367 | |
350 | -#if GTK_CHECK_VERSION(3,0,0) | |
351 | - gtk_widget_override_font(GTK_WIDGET(view), fontdesc); | |
352 | -#else | |
353 | - gtk_widget_modify_font(GTK_WIDGET(view), fontdesc); | |
354 | -#endif // GTK_CHECK_VERSION | |
368 | + window->view = gtk_text_view_new(); | |
369 | + v3270_trace_set_font_from_string(GTK_WIDGET(window),"Monospaced"); | |
355 | 370 | |
356 | - window->text = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view)); | |
357 | - gtk_text_view_set_editable(GTK_TEXT_VIEW(view), TRUE); | |
371 | + window->text = gtk_text_view_get_buffer(GTK_TEXT_VIEW(window->view)); | |
372 | + gtk_text_view_set_editable(GTK_TEXT_VIEW(window->view), TRUE); | |
358 | 373 | |
359 | 374 | #if GTK_CHECK_VERSION(3,8,0) |
360 | - gtk_container_add(GTK_CONTAINER(widget),view); | |
375 | + gtk_container_add(GTK_CONTAINER(widget),window->view); | |
361 | 376 | #else |
362 | - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(widget),view); | |
377 | + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(widget),window->view); | |
363 | 378 | #endif // GTK_CHECK_VERSION |
364 | 379 | gtk_box_pack_start(GTK_BOX(vbox),widget,TRUE,TRUE,0); |
365 | 380 | |
... | ... | @@ -388,30 +403,46 @@ static void destroy(GtkObject *widget) |
388 | 403 | |
389 | 404 | gtk_container_add(GTK_CONTAINER(window),vbox); |
390 | 405 | |
391 | - pango_font_description_free(fontdesc); | |
392 | 406 | |
393 | 407 | window->log_handler = g_log_set_handler(NULL,G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,(GLogFunc) glog,window); |
394 | 408 | |
395 | 409 | } |
396 | 410 | |
397 | - GtkWidget * v3270_trace_new(H3270 *hSession) | |
411 | + GtkWidget * v3270_trace_new() | |
398 | 412 | { |
399 | 413 | return g_object_new(V3270_TYPE_TRACE, NULL); |
400 | 414 | } |
401 | 415 | |
416 | + GtkWidget * v3270_new_trace_window(GtkWidget *widget) | |
417 | + { | |
418 | + return v3270_trace_new_from_session(v3270_get_session(widget)); | |
419 | + } | |
420 | + | |
421 | + static void trace_handler(H3270 *hSession, void *userdata, const char *fmt, va_list args) | |
422 | + { | |
423 | + gchar *ptr = g_strdup_vprintf(fmt,args); | |
424 | + gchar * utftext = g_convert_with_fallback(ptr,-1,"UTF-8",lib3270_get_display_charset(hSession),"?",NULL,NULL,NULL); | |
425 | + v3270_trace_printf(GTK_WIDGET(userdata),"%s",utftext); | |
426 | + g_free(utftext); | |
427 | + g_free(ptr); | |
428 | + } | |
429 | + | |
402 | 430 | LIB3270_EXPORT GtkWidget * v3270_trace_new_from_session(H3270 *hSession) { |
431 | + | |
403 | 432 | GtkWidget * widget = g_object_new(V3270_TYPE_TRACE, NULL); |
404 | 433 | void * terminal = lib3270_get_user_data(hSession); |
405 | 434 | |
435 | + V3270_TRACE(widget)->hSession = hSession; | |
436 | + | |
406 | 437 | gtk_window_set_default_size(GTK_WINDOW(widget),590,430); |
407 | 438 | |
408 | 439 | if(terminal && GTK_IS_V3270(terminal)) |
409 | 440 | { |
410 | - GtkWidget * toplevel = gtk_widget_get_toplevel(GTK_WIDGET(terminal)); | |
411 | - gtk_window_set_attached_to(GTK_WINDOW(widget),toplevel); | |
412 | - | |
441 | + gtk_window_set_attached_to(GTK_WINDOW(widget),GTK_WIDGET(terminal)); | |
413 | 442 | } |
414 | 443 | |
444 | + lib3270_set_trace_handler(hSession,trace_handler,(void *) widget); | |
445 | + | |
415 | 446 | return widget; |
416 | 447 | } |
417 | 448 | ... | ... |