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 | 68 | struct _V3270Trace |
69 | 69 | { |
70 | 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 | 79 | /// @brief lib3270's saved trace handler. |
78 | 80 | struct { |
... | ... | @@ -122,6 +124,12 @@ |
122 | 124 | |
123 | 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 | 133 | set_session(trace,NULL); |
126 | 134 | g_clear_object(&trace->terminal); |
127 | 135 | |
... | ... | @@ -167,6 +175,63 @@ |
167 | 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 | 235 | static void V3270Trace_init(V3270Trace *widget) |
171 | 236 | { |
172 | 237 | gtk_grid_set_row_spacing(GTK_GRID(widget),6); |
... | ... | @@ -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 | 398 | GtkWidget * vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); |
332 | 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 | 415 | // Top menu |
337 | 416 | { | ... | ... |