Commit 81955debe2c9b8df6b02a69b4edf53f709d1d6e1
1 parent
96de119b
Exists in
master
and in
1 other branch
Updating trace widget.
Showing
1 changed file
with
84 additions
and
5 deletions
Show diff stats
src/trace/widget.c
@@ -68,11 +68,13 @@ | @@ -68,11 +68,13 @@ | ||
68 | struct _V3270Trace | 68 | struct _V3270Trace |
69 | { | 69 | { |
70 | GtkGrid parent; | 70 | GtkGrid parent; |
71 | - H3270 * hSession; /// @brief TN3270 Session. | ||
72 | - GtkWidget * terminal; /// @brief V3270 Widget. | 71 | + H3270 * hSession; ///< @brief TN3270 Session. |
72 | + GtkWidget * terminal; ///< @brief V3270 Widget. | ||
73 | 73 | ||
74 | - GtkTextBuffer * text; /// @brief Trace window contents. | ||
75 | - GtkEntry * entry; /// @brief Command line entry. | 74 | + GtkTextBuffer * text; ///< @brief Trace window contents. |
75 | + GtkEntry * entry; ///< @brief Command line entry. | ||
76 | + | ||
77 | + guint log_handler; ///< @brief GTK Log Handler. | ||
76 | 78 | ||
77 | /// @brief lib3270's saved trace handler. | 79 | /// @brief lib3270's saved trace handler. |
78 | struct { | 80 | struct { |
@@ -122,6 +124,12 @@ | @@ -122,6 +124,12 @@ | ||
122 | 124 | ||
123 | V3270Trace *trace = GTK_V3270_TRACE(object); | 125 | V3270Trace *trace = GTK_V3270_TRACE(object); |
124 | 126 | ||
127 | + if(trace->log_handler) | ||
128 | + { | ||
129 | + g_log_remove_handler(NULL,trace->log_handler); | ||
130 | + trace->log_handler = 0; | ||
131 | + } | ||
132 | + | ||
125 | set_session(trace,NULL); | 133 | set_session(trace,NULL); |
126 | g_clear_object(&trace->terminal); | 134 | g_clear_object(&trace->terminal); |
127 | 135 | ||
@@ -167,6 +175,63 @@ | @@ -167,6 +175,63 @@ | ||
167 | v3270_trace_execute(widget, gtk_entry_get_text(entry)); | 175 | v3270_trace_execute(widget, gtk_entry_get_text(entry)); |
168 | } | 176 | } |
169 | 177 | ||
178 | + static void log_handler(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, GtkWidget *widget) | ||
179 | + { | ||
180 | + #ifndef LOG_INFO | ||
181 | + #define LOG_INFO 0 | ||
182 | + #endif // LOG_INFO | ||
183 | + | ||
184 | + #ifndef LOG_ERR | ||
185 | + #define LOG_ERR 0 | ||
186 | + #endif // LOG_ERR | ||
187 | + | ||
188 | + #ifndef LOG_DEBUG | ||
189 | + #define LOG_DEBUG 0 | ||
190 | + #endif // LOG_DEBUG | ||
191 | + | ||
192 | + static const struct _logtype | ||
193 | + { | ||
194 | + GLogLevelFlags log_level; | ||
195 | + const gchar * msg; | ||
196 | + } logtype[] = | ||
197 | + { | ||
198 | + { G_LOG_FLAG_RECURSION, "recursion" }, | ||
199 | + { G_LOG_FLAG_FATAL, "fatal error" }, | ||
200 | + | ||
201 | + /* GLib log levels */ | ||
202 | + { G_LOG_LEVEL_ERROR, "error" }, | ||
203 | + { G_LOG_LEVEL_CRITICAL, "critical error" }, | ||
204 | + { G_LOG_LEVEL_WARNING, "warning" }, | ||
205 | + { G_LOG_LEVEL_MESSAGE, "message" }, | ||
206 | + { G_LOG_LEVEL_INFO, "info" }, | ||
207 | + { G_LOG_LEVEL_DEBUG, "debug" }, | ||
208 | + }; | ||
209 | + | ||
210 | + size_t f; | ||
211 | + | ||
212 | + for(f=0;f<G_N_ELEMENTS(logtype);f++) | ||
213 | + { | ||
214 | + if(logtype[f].log_level == log_level) | ||
215 | + { | ||
216 | + g_autofree gchar *text = g_strdup_printf("%s: %s %s",logtype[f].msg,log_domain ? log_domain : "",message); | ||
217 | + | ||
218 | + gchar *ptr; | ||
219 | + for(ptr = text;*ptr;ptr++) | ||
220 | + { | ||
221 | + if(*ptr < ' ') | ||
222 | + *ptr = ' '; | ||
223 | + } | ||
224 | + | ||
225 | + v3270_trace_printf(widget,"%s\n",text); | ||
226 | + | ||
227 | + return; | ||
228 | + } | ||
229 | + } | ||
230 | + | ||
231 | + v3270_trace_printf(widget,"%s %s\n",log_domain ? log_domain : "", message); | ||
232 | + | ||
233 | + } | ||
234 | + | ||
170 | static void V3270Trace_init(V3270Trace *widget) | 235 | static void V3270Trace_init(V3270Trace *widget) |
171 | { | 236 | { |
172 | gtk_grid_set_row_spacing(GTK_GRID(widget),6); | 237 | gtk_grid_set_row_spacing(GTK_GRID(widget),6); |
@@ -214,6 +279,8 @@ | @@ -214,6 +279,8 @@ | ||
214 | 279 | ||
215 | } | 280 | } |
216 | 281 | ||
282 | + // Grab GTK messages. | ||
283 | + widget->log_handler = g_log_set_handler(NULL,G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,(GLogFunc) log_handler, widget); | ||
217 | 284 | ||
218 | } | 285 | } |
219 | 286 | ||
@@ -331,7 +398,19 @@ | @@ -331,7 +398,19 @@ | ||
331 | GtkWidget * vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); | 398 | GtkWidget * vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); |
332 | V3270Trace * trace = v3270_trace_new(widget); | 399 | V3270Trace * trace = v3270_trace_new(widget); |
333 | 400 | ||
334 | - gtk_window_set_default_size(GTK_WINDOW(widget),590,430); | 401 | + // Set window title and default size |
402 | + { | ||
403 | + const gchar * url = lib3270_get_url(v3270_get_session(widget)); | ||
404 | + g_autofree gchar * title = NULL; | ||
405 | + | ||
406 | + if(url) | ||
407 | + title = g_strdup_printf("%s - %s - Trace", v3270_get_session_name(widget), url); | ||
408 | + else | ||
409 | + title = g_strdup_printf("%s - Trace", v3270_get_session_name(widget), url); | ||
410 | + | ||
411 | + gtk_window_set_title(GTK_WINDOW(window), title); | ||
412 | + gtk_window_set_default_size(GTK_WINDOW(widget),590,430); | ||
413 | + } | ||
335 | 414 | ||
336 | // Top menu | 415 | // Top menu |
337 | { | 416 | { |