Commit 317eaeb83be6d78bff20c59f81d7c6b621d08d14

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

Updating simple trace window.

src/include/v3270.h
... ... @@ -165,6 +165,9 @@
165 165 #endif // v3270_char
166 166  
167 167 GtkWidget * v3270_new(void);
  168 +
  169 + GtkWidget * v3270_new_trace_window(GtkWidget *widget);
  170 +
168 171 GType v3270_get_type(void);
169 172  
170 173 void v3270_reload(GtkWidget * widget);
... ...
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  
... ...