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,6 +165,9 @@
165 #endif // v3270_char 165 #endif // v3270_char
166 166
167 GtkWidget * v3270_new(void); 167 GtkWidget * v3270_new(void);
  168 +
  169 + GtkWidget * v3270_new_trace_window(GtkWidget *widget);
  170 +
168 GType v3270_get_type(void); 171 GType v3270_get_type(void);
169 172
170 void v3270_reload(GtkWidget * widget); 173 void v3270_reload(GtkWidget * widget);
src/include/v3270/trace.h
@@ -56,6 +56,7 @@ @@ -56,6 +56,7 @@
56 LIB3270_EXPORT void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... ); 56 LIB3270_EXPORT void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... );
57 LIB3270_EXPORT gchar * v3270_trace_get_command(GtkWidget *widget); 57 LIB3270_EXPORT gchar * v3270_trace_get_command(GtkWidget *widget);
58 LIB3270_EXPORT void v3270_trace_set_destroy_on_close(GtkWidget *widget,gboolean on); 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 G_END_DECLS 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,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 static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { 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,7 +106,12 @@ static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) {
99 // gchar * filename = NULL; 106 // gchar * filename = NULL;
100 GValue val = G_VALUE_INIT; 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 const gchar *url = getenv("LIB3270_DEFAULT_HOST"); 116 const gchar *url = getenv("LIB3270_DEFAULT_HOST");
105 if(url) { 117 if(url) {
src/trace/trace.c
@@ -35,6 +35,8 @@ @@ -35,6 +35,8 @@
35 #include <libintl.h> 35 #include <libintl.h>
36 #include <glib/gi18n.h> 36 #include <glib/gi18n.h>
37 37
  38 + #include <lib3270.h>
  39 + #include <lib3270/trace.h>
38 #include <v3270/trace.h> 40 #include <v3270/trace.h>
39 41
40 #if defined( HAVE_SYSLOG ) 42 #if defined( HAVE_SYSLOG )
@@ -57,6 +59,8 @@ @@ -57,6 +59,8 @@
57 GtkTextBuffer * text; 59 GtkTextBuffer * text;
58 GtkWidget * entry; 60 GtkWidget * entry;
59 GtkWidget * button; 61 GtkWidget * button;
  62 + GtkWidget * view;
  63 + H3270 * hSession;
60 gchar **line; 64 gchar **line;
61 guint log_handler; 65 guint log_handler;
62 gboolean * enabled; 66 gboolean * enabled;
@@ -103,6 +107,11 @@ static void destroy(GtkObject *widget) @@ -103,6 +107,11 @@ static void destroy(GtkObject *widget)
103 { 107 {
104 v3270_trace * hwnd = V3270_TRACE(widget); 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 if(hwnd->log_handler) 115 if(hwnd->log_handler)
107 { 116 {
108 g_log_remove_handler(NULL,hwnd->log_handler); 117 g_log_remove_handler(NULL,hwnd->log_handler);
@@ -310,19 +319,27 @@ static void destroy(GtkObject *widget) @@ -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 static void v3270_trace_init(v3270_trace *window) 335 static void v3270_trace_init(v3270_trace *window)
314 { 336 {
315 GtkWidget * widget; 337 GtkWidget * widget;
316 - GtkWidget * view;  
317 #if GTK_CHECK_VERSION(3,0,0) 338 #if GTK_CHECK_VERSION(3,0,0)
318 GtkWidget * vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); 339 GtkWidget * vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
319 #else 340 #else
320 GtkWidget * vbox = gtk_vbox_new(FALSE,0); 341 GtkWidget * vbox = gtk_vbox_new(FALSE,0);
321 #endif // GTK_CHECK_VERSION 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 // Top menu 344 // Top menu
328 { 345 {
@@ -341,25 +358,23 @@ static void destroy(GtkObject *widget) @@ -341,25 +358,23 @@ static void destroy(GtkObject *widget)
341 gtk_box_pack_start(GTK_BOX(vbox),widget,FALSE,TRUE,0); 358 gtk_box_pack_start(GTK_BOX(vbox),widget,FALSE,TRUE,0);
342 } 359 }
343 360
  361 + window->hSession = NULL;
  362 +
344 // Trace container 363 // Trace container
345 widget = gtk_scrolled_window_new(NULL,NULL); 364 widget = gtk_scrolled_window_new(NULL,NULL);
346 window->scroll = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(widget)); 365 window->scroll = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(widget));
347 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); 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 #if GTK_CHECK_VERSION(3,8,0) 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 #else 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 #endif // GTK_CHECK_VERSION 378 #endif // GTK_CHECK_VERSION
364 gtk_box_pack_start(GTK_BOX(vbox),widget,TRUE,TRUE,0); 379 gtk_box_pack_start(GTK_BOX(vbox),widget,TRUE,TRUE,0);
365 380
@@ -388,30 +403,46 @@ static void destroy(GtkObject *widget) @@ -388,30 +403,46 @@ static void destroy(GtkObject *widget)
388 403
389 gtk_container_add(GTK_CONTAINER(window),vbox); 404 gtk_container_add(GTK_CONTAINER(window),vbox);
390 405
391 - pango_font_description_free(fontdesc);  
392 406
393 window->log_handler = g_log_set_handler(NULL,G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,(GLogFunc) glog,window); 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 return g_object_new(V3270_TYPE_TRACE, NULL); 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 LIB3270_EXPORT GtkWidget * v3270_trace_new_from_session(H3270 *hSession) { 430 LIB3270_EXPORT GtkWidget * v3270_trace_new_from_session(H3270 *hSession) {
  431 +
403 GtkWidget * widget = g_object_new(V3270_TYPE_TRACE, NULL); 432 GtkWidget * widget = g_object_new(V3270_TYPE_TRACE, NULL);
404 void * terminal = lib3270_get_user_data(hSession); 433 void * terminal = lib3270_get_user_data(hSession);
405 434
  435 + V3270_TRACE(widget)->hSession = hSession;
  436 +
406 gtk_window_set_default_size(GTK_WINDOW(widget),590,430); 437 gtk_window_set_default_size(GTK_WINDOW(widget),590,430);
407 438
408 if(terminal && GTK_IS_V3270(terminal)) 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 return widget; 446 return widget;
416 } 447 }
417 448