Commit c6eb5985cdadf9ad3324ec7584bfb31f44b7eb69

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

Simple trace window now restore handler on closing.

Showing 2 changed files with 29 additions and 5 deletions   Show diff stats
src/include/v3270/trace.h
... ... @@ -51,6 +51,7 @@
51 51  
52 52 LIB3270_EXPORT GtkWidget * v3270_trace_new();
53 53 LIB3270_EXPORT GtkWidget * v3270_trace_new_from_session(H3270 *hSession);
  54 + LIB3270_EXPORT void v3270_trace_set_session(GtkWidget *widget, H3270 *hSession);
54 55 LIB3270_EXPORT GType v3270_trace_get_type(void);
55 56 LIB3270_EXPORT void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args);
56 57 LIB3270_EXPORT void v3270_trace_printf(GtkWidget *widget, const char *fmt, ... );
... ...
src/trace/trace.c
... ... @@ -65,6 +65,13 @@
65 65 guint log_handler;
66 66 gboolean * enabled;
67 67 gboolean destroy_on_close;
  68 +
  69 + /// @brief lib3270's saved trace handler.
  70 + struct {
  71 + void (*handler)(H3270 *session, void *userdata, const char *fmt, va_list args);
  72 + void *userdata;
  73 + } trace;
  74 +
68 75 };
69 76  
70 77 const GtkWindowClass * v3270_trace_get_parent_class(void);
... ... @@ -109,7 +116,7 @@ static void destroy(GtkObject *widget)
109 116  
110 117 if(hwnd->hSession)
111 118 {
112   - lib3270_set_trace_handler(hwnd->hSession,NULL,NULL);
  119 + lib3270_set_trace_handler(hwnd->hSession,hwnd->trace.handler,hwnd->trace.userdata);
113 120 }
114 121  
115 122 if(hwnd->log_handler)
... ... @@ -393,7 +400,7 @@ static void destroy(GtkObject *widget)
393 400 window->button = gtk_button_new_from_stock(GTK_STOCK_OK);
394 401 gtk_box_pack_end(GTK_BOX(widget),window->button,FALSE,FALSE,4);
395 402 gtk_widget_set_sensitive(window->button,FALSE);
396   - gtk_widget_set_focus_on_click(GTK_BUTTON(window->button),FALSE);
  403 + gtk_widget_set_focus_on_click(GTK_WIDGET(window->button),FALSE);
397 404  
398 405 g_signal_connect(G_OBJECT(window->button),"clicked",G_CALLBACK(activate),window);
399 406  
... ... @@ -403,7 +410,6 @@ static void destroy(GtkObject *widget)
403 410  
404 411 gtk_container_add(GTK_CONTAINER(window),vbox);
405 412  
406   -
407 413 window->log_handler = g_log_set_handler(NULL,G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,(GLogFunc) glog,window);
408 414  
409 415 }
... ... @@ -427,12 +433,29 @@ static void destroy(GtkObject *widget)
427 433 g_free(ptr);
428 434 }
429 435  
  436 + void v3270_trace_set_session(GtkWidget *widget, H3270 *hSession) {
  437 +
  438 + v3270_trace * trace = V3270_TRACE(widget);
  439 +
  440 + if(trace->hSession) {
  441 + lib3270_set_trace_handler(trace->hSession,trace->trace.handler,trace->trace.userdata);
  442 + }
  443 +
  444 + trace->hSession = hSession;
  445 +
  446 + if(hSession) {
  447 + lib3270_get_trace_handler(hSession,&trace->trace.handler,&trace->trace.userdata);
  448 + lib3270_set_trace_handler(hSession,trace_handler,(void *) widget);
  449 + }
  450 +
  451 + }
  452 +
430 453 LIB3270_EXPORT GtkWidget * v3270_trace_new_from_session(H3270 *hSession) {
431 454  
432 455 GtkWidget * widget = g_object_new(V3270_TYPE_TRACE, NULL);
433 456 void * terminal = lib3270_get_user_data(hSession);
434 457  
435   - V3270_TRACE(widget)->hSession = hSession;
  458 + V3270_TRACE(widget)->hSession = NULL;
436 459  
437 460 gtk_window_set_default_size(GTK_WINDOW(widget),590,430);
438 461  
... ... @@ -441,7 +464,7 @@ static void destroy(GtkObject *widget)
441 464 gtk_window_set_attached_to(GTK_WINDOW(widget),GTK_WIDGET(terminal));
442 465 }
443 466  
444   - lib3270_set_trace_handler(hSession,trace_handler,(void *) widget);
  467 + v3270_trace_set_session(widget, hSession);
445 468  
446 469 return widget;
447 470 }
... ...