Commit ed23a333b185d83caec027416af73c92cb366e9d

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

The "trace" widget can now be create/destroyed changing a terminal

property.
src/testprogram/testprogram.c
... ... @@ -75,10 +75,14 @@
75 75 }
76 76  
77 77 // Create trace window
  78 + v3270_set_trace(terminal,TRUE);
  79 +
  80 + /*
78 81 GtkWidget *trace = v3270_trace_new(terminal);
79 82 debug("Trace=%p",trace);
80 83 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),trace,gtk_label_new("Trace"));
81 84 // v3270_trace_window_new(terminal,NULL);
  85 + */
82 86  
83 87 // Setup and show main window
84 88 gtk_window_set_title(GTK_WINDOW(window),v3270_get_session_title(terminal));
... ...
src/trace/property.c
... ... @@ -65,48 +65,62 @@
65 65 gtk_notebook_page_num(GTK_NOTEBOOK(parent),terminal->trace)
66 66 );
67 67 }
68   - else if(GTK_IS_WINDOW(parent))
  68 + else
69 69 {
70   - debug("%s: Parent window %s",__FUNCTION__,"is a window");
71   - gtk_widget_destroy(parent);
  70 + debug("%s: Parent window %s",__FUNCTION__,"is not a notebook");
  71 +// gtk_widget_destroy(terminal->trace);
72 72 }
73   - else if(GTK_IS_CONTAINER(parent))
  73 +
  74 + return FALSE;
  75 +
  76 + }
  77 +
  78 + static gboolean bg_append_trace(GtkWidget *terminal)
  79 + {
  80 + if(GTK_V3270(terminal)->trace)
  81 + return FALSE;
  82 +
  83 + // Destroy trace window.
  84 + GtkWidget * parent = gtk_widget_get_parent(terminal);
  85 +
  86 + if(GTK_IS_NOTEBOOK(parent))
74 87 {
75   - debug("%s: Parent window %s",__FUNCTION__,"is a container");
76   - gtk_container_remove(GTK_CONTAINER(parent),terminal->trace);
  88 + debug("%s: Parent window %s",__FUNCTION__,"is a notebook");
  89 + GtkWidget * trace = v3270_trace_new(terminal);
  90 + gtk_widget_show_all(trace);
  91 +
  92 + gtk_notebook_insert_page(
  93 + GTK_NOTEBOOK(parent),
  94 + trace,
  95 + gtk_label_new(_("Trace")),
  96 + gtk_notebook_page_num(GTK_NOTEBOOK(parent),terminal)+1
  97 + );
77 98  
78 99 }
79 100 else
80 101 {
81   - g_warning("Can't remove trace window from parent widget");
82   - }
  102 + debug("%s: Parent window %s",__FUNCTION__,"is not a notebook, creating trace window");
  103 + gtk_widget_show_all(v3270_trace_window_new(terminal,NULL));
83 104  
  105 + }
84 106  
85 107 return FALSE;
  108 +
86 109 }
87 110  
88 111 void v3270_set_trace(GtkWidget *widget, gboolean trace)
89 112 {
90 113 g_return_if_fail(GTK_IS_V3270(widget));
91 114  
92   - v3270 * terminal = GTK_V3270(widget);
93   -
94 115 if(trace)
95 116 {
96 117 debug("%s: trace is %s",__FUNCTION__,"ON");
97   -
98   - if(terminal->trace)
99   - return;
100   -
101   - // Create trace window
102   -
  118 + g_idle_add((GSourceFunc) bg_append_trace, GTK_V3270(widget));
103 119 }
104 120 else
105 121 {
106 122 debug("%s: trace is %s",__FUNCTION__,"OFF");
107 123 g_idle_add((GSourceFunc) bg_remove_trace, GTK_V3270(widget));
108   -
109 124 }
110 125  
111   -
112 126 }
... ...