Commit e531b6956da5b684676b6cd4f002dd341e090701

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

Using IDLE method to update trace window to avoid multi-thread problems.

Showing 2 changed files with 36 additions and 49 deletions   Show diff stats
src/testprogram/testprogram.c
@@ -110,6 +110,7 @@ static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { @@ -110,6 +110,7 @@ static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) {
110 if(trace) { 110 if(trace) {
111 g_signal_connect(trace, "destroy", G_CALLBACK(trace_window_destroy), v3270_get_session(terminal)); 111 g_signal_connect(trace, "destroy", G_CALLBACK(trace_window_destroy), v3270_get_session(terminal));
112 lib3270_toggle(v3270_get_session(terminal),LIB3270_TOGGLE_SSL_TRACE); 112 lib3270_toggle(v3270_get_session(terminal),LIB3270_TOGGLE_SSL_TRACE);
  113 + lib3270_toggle(v3270_get_session(terminal),LIB3270_TOGGLE_DS_TRACE);
113 gtk_widget_show_all(trace); 114 gtk_widget_show_all(trace);
114 } 115 }
115 116
src/trace/trace.c
@@ -57,10 +57,10 @@ @@ -57,10 +57,10 @@
57 struct _v3270_trace 57 struct _v3270_trace
58 { 58 {
59 GtkWindow parent; 59 GtkWindow parent;
60 - GtkAdjustment * scroll;  
61 GtkTextBuffer * text; 60 GtkTextBuffer * text;
62 GtkWidget * entry; 61 GtkWidget * entry;
63 GtkWidget * button; 62 GtkWidget * button;
  63 + GtkWidget * scroll;
64 GtkWidget * view; 64 GtkWidget * view;
65 H3270 * hSession; 65 H3270 * hSession;
66 gchar **line; 66 gchar **line;
@@ -108,12 +108,8 @@ @@ -108,12 +108,8 @@
108 108
109 } 109 }
110 110
111 -#if GTK_CHECK_VERSION(3,0,0)  
112 static void destroy(GtkWidget *widget) 111 static void destroy(GtkWidget *widget)
113 -#else  
114 -static void destroy(GtkObject *widget)  
115 -#endif  
116 - { 112 +{
117 v3270_trace * hwnd = V3270_TRACE(widget); 113 v3270_trace * hwnd = V3270_TRACE(widget);
118 114
119 if(hwnd->hSession) 115 if(hwnd->hSession)
@@ -160,16 +156,7 @@ static void destroy(GtkObject *widget) @@ -160,16 +156,7 @@ static void destroy(GtkObject *widget)
160 window_class->activate_default = activate_default; 156 window_class->activate_default = activate_default;
161 widget_class->delete_event = delete_event; 157 widget_class->delete_event = delete_event;
162 158
163 -#if GTK_CHECK_VERSION(3,0,0)  
164 - {  
165 - widget_class->destroy = destroy;  
166 - }  
167 -#else  
168 - {  
169 - GtkObjectClass *object_class = (GtkObjectClass*) klass;  
170 - object_class->destroy = destroy;  
171 - }  
172 -#endif // GTK3 159 + widget_class->destroy = destroy;
173 160
174 } 161 }
175 162
@@ -332,17 +319,13 @@ static void destroy(GtkObject *widget) @@ -332,17 +319,13 @@ static void destroy(GtkObject *widget)
332 { 319 {
333 PangoFontDescription* fontdesc = pango_font_description_from_string(name); 320 PangoFontDescription* fontdesc = pango_font_description_from_string(name);
334 321
335 -#if GTK_CHECK_VERSION(3,0,0)  
336 gtk_widget_override_font(V3270_TRACE(widget)->view, fontdesc); 322 gtk_widget_override_font(V3270_TRACE(widget)->view, fontdesc);
337 -#else  
338 - gtk_widget_modify_font(V3270_TRACE(widget)->view, fontdesc);  
339 -#endif // GTK_CHECK_VERSION  
340 323
341 pango_font_description_free(fontdesc); 324 pango_font_description_free(fontdesc);
342 } 325 }
343 326
344 static void v3270_trace_init(v3270_trace *window) 327 static void v3270_trace_init(v3270_trace *window)
345 - { 328 +{
346 GtkWidget * widget; 329 GtkWidget * widget;
347 #if GTK_CHECK_VERSION(3,0,0) 330 #if GTK_CHECK_VERSION(3,0,0)
348 GtkWidget * vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); 331 GtkWidget * vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
@@ -370,9 +353,8 @@ static void destroy(GtkObject *widget) @@ -370,9 +353,8 @@ static void destroy(GtkObject *widget)
370 window->hSession = NULL; 353 window->hSession = NULL;
371 354
372 // Trace container 355 // Trace container
373 - widget = gtk_scrolled_window_new(NULL,NULL);  
374 - window->scroll = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(widget));  
375 - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); 356 + window->scroll = gtk_scrolled_window_new(NULL,NULL);
  357 + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(window->scroll),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
376 358
377 window->view = gtk_text_view_new(); 359 window->view = gtk_text_view_new();
378 v3270_trace_set_font_from_string(GTK_WIDGET(window),"Monospaced"); 360 v3270_trace_set_font_from_string(GTK_WIDGET(window),"Monospaced");
@@ -380,19 +362,11 @@ static void destroy(GtkObject *widget) @@ -380,19 +362,11 @@ static void destroy(GtkObject *widget)
380 window->text = gtk_text_view_get_buffer(GTK_TEXT_VIEW(window->view)); 362 window->text = gtk_text_view_get_buffer(GTK_TEXT_VIEW(window->view));
381 gtk_text_view_set_editable(GTK_TEXT_VIEW(window->view), TRUE); 363 gtk_text_view_set_editable(GTK_TEXT_VIEW(window->view), TRUE);
382 364
383 -#if GTK_CHECK_VERSION(3,8,0)  
384 - gtk_container_add(GTK_CONTAINER(widget),window->view);  
385 -#else  
386 - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(widget),window->view);  
387 -#endif // GTK_CHECK_VERSION  
388 - gtk_box_pack_start(GTK_BOX(vbox),widget,TRUE,TRUE,0); 365 + gtk_container_add(GTK_CONTAINER(window->scroll),window->view);
  366 + gtk_box_pack_start(GTK_BOX(vbox),window->scroll,TRUE,TRUE,0);
389 367
390 // Edit box 368 // Edit box
391 -#if GTK_CHECK_VERSION(3,0,0)  
392 widget = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); 369 widget = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
393 -#else  
394 - widget = gtk_hbox_new(FALSE,0);  
395 -#endif // GTK_CHECK_VERSION  
396 gtk_box_pack_start(GTK_BOX(widget),gtk_label_new( _( "Command:" )),FALSE,TRUE,4); 370 gtk_box_pack_start(GTK_BOX(widget),gtk_label_new( _( "Command:" )),FALSE,TRUE,4);
397 window->entry = gtk_entry_new(); 371 window->entry = gtk_entry_new();
398 gtk_box_pack_start(GTK_BOX(widget),window->entry,TRUE,TRUE,4); 372 gtk_box_pack_start(GTK_BOX(widget),window->entry,TRUE,TRUE,4);
@@ -413,7 +387,6 @@ static void destroy(GtkObject *widget) @@ -413,7 +387,6 @@ static void destroy(GtkObject *widget)
413 gtk_container_add(GTK_CONTAINER(window),vbox); 387 gtk_container_add(GTK_CONTAINER(window),vbox);
414 388
415 window->log_handler = g_log_set_handler(NULL,G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,(GLogFunc) glog,window); 389 window->log_handler = g_log_set_handler(NULL,G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,(GLogFunc) glog,window);
416 -  
417 } 390 }
418 391
419 GtkWidget * v3270_trace_new() 392 GtkWidget * v3270_trace_new()
@@ -471,34 +444,47 @@ static void destroy(GtkObject *widget) @@ -471,34 +444,47 @@ static void destroy(GtkObject *widget)
471 return widget; 444 return widget;
472 } 445 }
473 446
  447 + struct bg_print_data
  448 + {
  449 + GtkWidget * widget;
  450 + gchar * msg;
  451 + };
474 452
475 - void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args) 453 + static void bg_trace_vprintf(struct bg_print_data *data)
476 { 454 {
  455 +
477 GtkTextIter itr; 456 GtkTextIter itr;
478 - gchar * msg;  
479 - v3270_trace * hwnd = V3270_TRACE(widget); 457 + v3270_trace * hwnd = V3270_TRACE(data->widget);
480 458
481 gtk_text_buffer_get_end_iter(hwnd->text,&itr); 459 gtk_text_buffer_get_end_iter(hwnd->text,&itr);
482 460
483 - msg = g_strdup_vprintf(fmt,args);  
484 -  
485 - if(g_utf8_validate(msg,strlen(msg),NULL)) 461 + if(g_utf8_validate(data->msg,strlen(data->msg),NULL))
486 { 462 {
487 - gtk_text_buffer_insert(hwnd->text,&itr,msg,strlen(msg)); 463 + gtk_text_buffer_insert(hwnd->text,&itr,data->msg,strlen(data->msg));
488 } 464 }
489 else 465 else
490 { 466 {
491 gtk_text_buffer_insert(hwnd->text,&itr,"** Invalid UTF8 String **",-1); 467 gtk_text_buffer_insert(hwnd->text,&itr,"** Invalid UTF8 String **",-1);
492 } 468 }
493 - g_free(msg);  
494 469
495 - gtk_text_buffer_get_end_iter(hwnd->text,&itr); 470 + // gtk_text_buffer_get_end_iter(hwnd->text,&itr);
  471 + // gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW(hwnd->view), &itr, 0.0, FALSE, 0.0, 0.0);
496 472
497 -#if GTK_CHECK_VERSION(2,14,0)  
498 - gtk_adjustment_set_value(hwnd->scroll,gtk_adjustment_get_upper(hwnd->scroll));  
499 -#else  
500 - gtk_adjustment_set_value(hwnd->scroll,(GTK_ADJUSTMENT(hwnd->scroll))->upper);  
501 -#endif // 473 + //GtkAdjustment *vadj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(hwnd->scroll));
  474 + //gtk_adjustment_set_value(vadj,gtk_adjustment_get_upper(vadj));
  475 + //gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(hwnd->scroll), vadj);
  476 +
  477 + g_free(data->msg);
  478 + }
  479 +
  480 + void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args)
  481 + {
  482 + struct bg_print_data * data = g_new0(struct bg_print_data,1);
  483 +
  484 + data->widget = widget;
  485 + data->msg = g_strdup_vprintf(fmt,args);
  486 +
  487 + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,(GSourceFunc) bg_trace_vprintf, data, g_free);
502 488
503 } 489 }
504 490