Commit 96de119b703179e71451925ca3b74147c18ddc9b
1 parent
595c171e
Exists in
master
and in
1 other branch
Refactoring trace window.
Showing
6 changed files
with
161 additions
and
24 deletions
Show diff stats
src/include/v3270.h
@@ -183,7 +183,7 @@ | @@ -183,7 +183,7 @@ | ||
183 | #endif // v3270_char | 183 | #endif // v3270_char |
184 | 184 | ||
185 | LIB3270_EXPORT GtkWidget * v3270_new(void); | 185 | LIB3270_EXPORT GtkWidget * v3270_new(void); |
186 | - LIB3270_EXPORT GtkWidget * v3270_new_trace_window(GtkWidget *widget, const gchar *header); | 186 | + LIB3270_EXPORT GtkWidget * v3270_new_trace_window(GtkWidget *widget); |
187 | LIB3270_EXPORT GType v3270_get_type(void); | 187 | LIB3270_EXPORT GType v3270_get_type(void); |
188 | LIB3270_EXPORT void v3270_reload(GtkWidget * widget); | 188 | LIB3270_EXPORT void v3270_reload(GtkWidget * widget); |
189 | LIB3270_EXPORT void v3270_set_font_family(GtkWidget *widget, const gchar *name); | 189 | LIB3270_EXPORT void v3270_set_font_family(GtkWidget *widget, const gchar *name); |
src/terminal/widget.c
@@ -228,6 +228,12 @@ static void v3270_toggle_changed(G_GNUC_UNUSED v3270 *widget, G_GNUC_UNUSED LIB3 | @@ -228,6 +228,12 @@ static void v3270_toggle_changed(G_GNUC_UNUSED v3270 *widget, G_GNUC_UNUSED LIB3 | ||
228 | { | 228 | { |
229 | } | 229 | } |
230 | 230 | ||
231 | +static void finalize(GObject *object) | ||
232 | + { | ||
233 | + debug("V3270::%s",__FUNCTION__); | ||
234 | + G_OBJECT_CLASS(v3270_parent_class)->finalize(object); | ||
235 | + } | ||
236 | + | ||
231 | static void v3270_class_init(v3270Class *klass) | 237 | static void v3270_class_init(v3270Class *klass) |
232 | { | 238 | { |
233 | GObjectClass * gobject_class = G_OBJECT_CLASS(klass); | 239 | GObjectClass * gobject_class = G_OBJECT_CLASS(klass); |
@@ -239,6 +245,9 @@ static void v3270_class_init(v3270Class *klass) | @@ -239,6 +245,9 @@ static void v3270_class_init(v3270Class *klass) | ||
239 | 245 | ||
240 | lib3270_set_log_handler(loghandler); | 246 | lib3270_set_log_handler(loghandler); |
241 | 247 | ||
248 | + // Object methods | ||
249 | + gobject_class->finalize = finalize; | ||
250 | + | ||
242 | // Widget methods | 251 | // Widget methods |
243 | widget_class->realize = v3270_realize; | 252 | widget_class->realize = v3270_realize; |
244 | widget_class->size_allocate = v3270_size_allocate; | 253 | widget_class->size_allocate = v3270_size_allocate; |
src/testprogram/testprogram.c
@@ -150,11 +150,12 @@ static void disconnect_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *term | @@ -150,11 +150,12 @@ static void disconnect_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *term | ||
150 | 150 | ||
151 | static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) | 151 | static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) |
152 | { | 152 | { |
153 | + /* | ||
153 | GtkWidget * dialog = v3270_dialog_new(terminal, _("test"), _("test")); | 154 | GtkWidget * dialog = v3270_dialog_new(terminal, _("test"), _("test")); |
154 | GtkWidget * trace = v3270_trace_new(terminal); | 155 | GtkWidget * trace = v3270_trace_new(terminal); |
155 | gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),trace,TRUE,TRUE,2); | 156 | gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),trace,TRUE,TRUE,2); |
157 | + */ | ||
156 | 158 | ||
157 | - /* | ||
158 | // | 159 | // |
159 | // Test activity | 160 | // Test activity |
160 | // | 161 | // |
@@ -164,11 +165,13 @@ static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) | @@ -164,11 +165,13 @@ static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) | ||
164 | v3270_ft_activity_set_remote_filename(activity,"remote_file"); | 165 | v3270_ft_activity_set_remote_filename(activity,"remote_file"); |
165 | v3270_ft_activity_set_options(activity,LIB3270_FT_OPTION_RECEIVE|LIB3270_FT_OPTION_ASCII|LIB3270_FT_OPTION_REMAP); | 166 | v3270_ft_activity_set_options(activity,LIB3270_FT_OPTION_RECEIVE|LIB3270_FT_OPTION_ASCII|LIB3270_FT_OPTION_REMAP); |
166 | 167 | ||
168 | + /* | ||
167 | // | 169 | // |
168 | // Test settings dialog | 170 | // Test settings dialog |
169 | // | 171 | // |
170 | GtkWidget * dialog = v3270_ft_settings_dialog_new(terminal); | 172 | GtkWidget * dialog = v3270_ft_settings_dialog_new(terminal); |
171 | v3270_ft_settings_dialog_append_activity(dialog,activity,NULL); | 173 | v3270_ft_settings_dialog_append_activity(dialog,activity,NULL); |
174 | + */ | ||
172 | 175 | ||
173 | // | 176 | // |
174 | // Test worker widget | 177 | // Test worker widget |
@@ -179,7 +182,6 @@ static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) | @@ -179,7 +182,6 @@ static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) | ||
179 | v3270_ft_worker_set_session(worker,v3270_get_session(terminal)); | 182 | v3270_ft_worker_set_session(worker,v3270_get_session(terminal)); |
180 | v3270_ft_worker_set_activity(worker,activity); | 183 | v3270_ft_worker_set_activity(worker,activity); |
181 | v3270_ft_worker_start(worker); | 184 | v3270_ft_worker_start(worker); |
182 | - */ | ||
183 | 185 | ||
184 | gtk_widget_show_all(dialog); | 186 | gtk_widget_show_all(dialog); |
185 | gtk_dialog_run(GTK_DIALOG(dialog)); | 187 | gtk_dialog_run(GTK_DIALOG(dialog)); |
@@ -224,15 +226,13 @@ static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { | @@ -224,15 +226,13 @@ static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { | ||
224 | // v3270_set_font_family(terminal,"Droid Sans Mono"); | 226 | // v3270_set_font_family(terminal,"Droid Sans Mono"); |
225 | g_signal_connect(terminal,"field_clicked",G_CALLBACK(field_clicked),window); | 227 | g_signal_connect(terminal,"field_clicked",G_CALLBACK(field_clicked),window); |
226 | 228 | ||
227 | - /* | ||
228 | - GtkWidget *trace = v3270_new_trace_window(terminal,NULL); | 229 | + GtkWidget *trace = v3270_new_trace_window(terminal); |
229 | if(trace) { | 230 | if(trace) { |
230 | g_signal_connect(trace, "destroy", G_CALLBACK(trace_window_destroy), v3270_get_session(terminal)); | 231 | g_signal_connect(trace, "destroy", G_CALLBACK(trace_window_destroy), v3270_get_session(terminal)); |
231 | lib3270_toggle(v3270_get_session(terminal),LIB3270_TOGGLE_SSL_TRACE); | 232 | lib3270_toggle(v3270_get_session(terminal),LIB3270_TOGGLE_SSL_TRACE); |
232 | lib3270_toggle(v3270_get_session(terminal),LIB3270_TOGGLE_DS_TRACE); | 233 | lib3270_toggle(v3270_get_session(terminal),LIB3270_TOGGLE_DS_TRACE); |
233 | gtk_widget_show_all(trace); | 234 | gtk_widget_show_all(trace); |
234 | } | 235 | } |
235 | - */ | ||
236 | 236 | ||
237 | /* | 237 | /* |
238 | v3270_connect(terminal); | 238 | v3270_connect(terminal); |
src/trace/exec.c
@@ -40,9 +40,9 @@ | @@ -40,9 +40,9 @@ | ||
40 | #include <lib3270/log.h> | 40 | #include <lib3270/log.h> |
41 | #include <lib3270/trace.h> | 41 | #include <lib3270/trace.h> |
42 | #include <lib3270/properties.h> | 42 | #include <lib3270/properties.h> |
43 | + #include <v3270.h> | ||
43 | #include <v3270/trace.h> | 44 | #include <v3270/trace.h> |
44 | 45 | ||
45 | - /* | ||
46 | static const gchar * get_word(gchar **ptr) | 46 | static const gchar * get_word(gchar **ptr) |
47 | { | 47 | { |
48 | gchar *rc = g_strstrip(*ptr); | 48 | gchar *rc = g_strstrip(*ptr); |
@@ -59,9 +59,7 @@ | @@ -59,9 +59,7 @@ | ||
59 | 59 | ||
60 | return rc; | 60 | return rc; |
61 | } | 61 | } |
62 | - */ | ||
63 | 62 | ||
64 | - /* | ||
65 | static int set_property(H3270 *hSession, const gchar *name, const gchar * value) | 63 | static int set_property(H3270 *hSession, const gchar *name, const gchar * value) |
66 | { | 64 | { |
67 | size_t ix; | 65 | size_t ix; |
@@ -106,11 +104,11 @@ | @@ -106,11 +104,11 @@ | ||
106 | return errno = ENOENT; | 104 | return errno = ENOENT; |
107 | 105 | ||
108 | } | 106 | } |
109 | - */ | ||
110 | 107 | ||
111 | int v3270_exec_command(GtkWidget *widget, const gchar *text) | 108 | int v3270_exec_command(GtkWidget *widget, const gchar *text) |
112 | { | 109 | { |
113 | - /* | 110 | + g_return_val_if_fail(GTK_IS_V3270(widget),EINVAL); |
111 | + | ||
114 | H3270 *hSession = v3270_get_session(widget); | 112 | H3270 *hSession = v3270_get_session(widget); |
115 | g_autofree gchar * cmdline = g_strdup(text); | 113 | g_autofree gchar * cmdline = g_strdup(text); |
116 | 114 | ||
@@ -150,7 +148,6 @@ | @@ -150,7 +148,6 @@ | ||
150 | *(sep++) = 0; | 148 | *(sep++) = 0; |
151 | set_property(hSession,g_strstrip(cmdline),g_strstrip(sep)); | 149 | set_property(hSession,g_strstrip(cmdline),g_strstrip(sep)); |
152 | } | 150 | } |
153 | - */ | ||
154 | 151 | ||
155 | return errno = ENOENT; | 152 | return errno = ENOENT; |
156 | } | 153 | } |
src/trace/widget.c
@@ -69,10 +69,10 @@ | @@ -69,10 +69,10 @@ | ||
69 | { | 69 | { |
70 | GtkGrid parent; | 70 | GtkGrid parent; |
71 | H3270 * hSession; /// @brief TN3270 Session. | 71 | H3270 * hSession; /// @brief TN3270 Session. |
72 | + GtkWidget * terminal; /// @brief V3270 Widget. | ||
72 | 73 | ||
73 | GtkTextBuffer * text; /// @brief Trace window contents. | 74 | GtkTextBuffer * text; /// @brief Trace window contents. |
74 | - GtkWidget * entry; /// @brief Command line entry. | ||
75 | - GtkWidget * run; /// @brief "exec" button. | 75 | + GtkEntry * entry; /// @brief Command line entry. |
76 | 76 | ||
77 | /// @brief lib3270's saved trace handler. | 77 | /// @brief lib3270's saved trace handler. |
78 | struct { | 78 | struct { |
@@ -99,6 +99,10 @@ | @@ -99,6 +99,10 @@ | ||
99 | 99 | ||
100 | static void set_session(V3270Trace *widget, H3270 *hSession) | 100 | static void set_session(V3270Trace *widget, H3270 *hSession) |
101 | { | 101 | { |
102 | + // Return if it's the same session. | ||
103 | + if(widget->hSession == hSession) | ||
104 | + return; | ||
105 | + | ||
102 | if(widget->hSession) { | 106 | if(widget->hSession) { |
103 | lib3270_set_trace_handler(widget->hSession,widget->trace.handler,widget->trace.userdata); | 107 | lib3270_set_trace_handler(widget->hSession,widget->trace.handler,widget->trace.userdata); |
104 | } | 108 | } |
@@ -116,7 +120,10 @@ | @@ -116,7 +120,10 @@ | ||
116 | { | 120 | { |
117 | debug("V3270Trace::%s",__FUNCTION__); | 121 | debug("V3270Trace::%s",__FUNCTION__); |
118 | 122 | ||
119 | - set_session(GTK_V3270_TRACE(object),NULL); | 123 | + V3270Trace *trace = GTK_V3270_TRACE(object); |
124 | + | ||
125 | + set_session(trace,NULL); | ||
126 | + g_clear_object(&trace->terminal); | ||
120 | 127 | ||
121 | G_OBJECT_CLASS(V3270Trace_parent_class)->finalize(object); | 128 | G_OBJECT_CLASS(V3270Trace_parent_class)->finalize(object); |
122 | } | 129 | } |
@@ -126,8 +133,44 @@ | @@ -126,8 +133,44 @@ | ||
126 | G_OBJECT_CLASS(klass)->finalize = finalize; | 133 | G_OBJECT_CLASS(klass)->finalize = finalize; |
127 | } | 134 | } |
128 | 135 | ||
136 | + static void v3270_trace_execute(GtkWidget *widget, const gchar *cmd) | ||
137 | + { | ||
138 | + if(!*cmd) | ||
139 | + return; | ||
140 | + | ||
141 | + v3270_trace_printf(widget, "%s\n",cmd); | ||
142 | + | ||
143 | + V3270Trace *trace = GTK_V3270_TRACE(widget); | ||
144 | + | ||
145 | + if(trace->terminal) | ||
146 | + { | ||
147 | + int rc = v3270_exec_command(trace->terminal,cmd); | ||
148 | + if(rc) | ||
149 | + v3270_trace_printf(widget, "rc=%d (%s)\n",rc,strerror(rc)); | ||
150 | + } | ||
151 | + else | ||
152 | + { | ||
153 | + v3270_trace_append_text(widget, "Can't execute command without an associated terminal"); | ||
154 | + } | ||
155 | + | ||
156 | + gtk_entry_set_text(trace->entry, ""); | ||
157 | + | ||
158 | + } | ||
159 | + | ||
160 | + static void execute_command(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, GtkWidget *widget) | ||
161 | + { | ||
162 | + v3270_trace_execute(widget, gtk_entry_get_text(entry)); | ||
163 | + } | ||
164 | + | ||
165 | + static void entry_activated(GtkEntry *entry, GtkWidget *widget) | ||
166 | + { | ||
167 | + v3270_trace_execute(widget, gtk_entry_get_text(entry)); | ||
168 | + } | ||
169 | + | ||
129 | static void V3270Trace_init(V3270Trace *widget) | 170 | static void V3270Trace_init(V3270Trace *widget) |
130 | { | 171 | { |
172 | + gtk_grid_set_row_spacing(GTK_GRID(widget),6); | ||
173 | + gtk_grid_set_column_spacing(GTK_GRID(widget),12); | ||
131 | 174 | ||
132 | // Create text view | 175 | // Create text view |
133 | { | 176 | { |
@@ -145,20 +188,53 @@ | @@ -145,20 +188,53 @@ | ||
145 | 188 | ||
146 | gtk_container_add(GTK_CONTAINER(scrolled),view); | 189 | gtk_container_add(GTK_CONTAINER(scrolled),view); |
147 | 190 | ||
191 | + gtk_widget_set_can_default(view,FALSE); | ||
192 | + | ||
148 | } | 193 | } |
149 | 194 | ||
150 | // Create command line | 195 | // Create command line |
151 | { | 196 | { |
152 | - widget->entry = gtk_entry_new(); | ||
153 | - gtk_grid_attach(GTK_GRID(widget),widget->entry,0,1,8,1); | ||
154 | - gtk_widget_set_sensitive(widget->entry,FALSE); | 197 | + widget->entry = GTK_ENTRY(gtk_entry_new()); |
198 | + | ||
199 | + gtk_widget_set_can_default(GTK_WIDGET(widget->entry),TRUE); | ||
200 | + gtk_widget_grab_focus(GTK_WIDGET(widget->entry)); | ||
201 | + | ||
202 | + gtk_entry_set_activates_default(widget->entry,TRUE); | ||
203 | + gtk_widget_set_sensitive(GTK_WIDGET(widget->entry),FALSE); | ||
204 | + gtk_widget_set_vexpand(GTK_WIDGET(widget->entry),FALSE); | ||
205 | + gtk_widget_set_hexpand(GTK_WIDGET(widget->entry),TRUE); | ||
206 | + | ||
207 | + gtk_entry_set_icon_from_icon_name(widget->entry,GTK_ENTRY_ICON_SECONDARY,"system-run"); | ||
208 | + gtk_entry_set_placeholder_text(widget->entry,_("Command to execute")); | ||
209 | + | ||
210 | + gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->entry),0,1,10,1); | ||
211 | + | ||
212 | + g_signal_connect(G_OBJECT(widget->entry),"icon-press",G_CALLBACK(execute_command),widget); | ||
213 | + g_signal_connect(G_OBJECT(widget->entry),"activate",G_CALLBACK(entry_activated),widget); | ||
214 | + | ||
215 | + } | ||
216 | + | ||
155 | 217 | ||
156 | - widget->run = gtk_button_new_from_icon_name("system-run",GTK_ICON_SIZE_BUTTON); | ||
157 | - gtk_grid_attach(GTK_GRID(widget),widget->run,9,1,1,1); | ||
158 | - gtk_widget_set_sensitive(widget->run,FALSE); | 218 | + } |
219 | + | ||
220 | + LIB3270_EXPORT void v3270_trace_set_terminal(GtkWidget *widget, GtkWidget *terminal) | ||
221 | + { | ||
222 | + V3270Trace * trace = GTK_V3270_TRACE(widget); | ||
223 | + | ||
224 | + if(trace->terminal == terminal) | ||
225 | + return; | ||
159 | 226 | ||
227 | + g_clear_object(&trace->terminal); | ||
228 | + | ||
229 | + if(terminal) | ||
230 | + { | ||
231 | + trace->terminal = terminal; | ||
232 | + g_object_ref_sink(G_OBJECT(terminal)); | ||
160 | } | 233 | } |
161 | 234 | ||
235 | + set_session(trace, v3270_get_session(trace->terminal)); | ||
236 | + | ||
237 | + gtk_widget_set_sensitive(GTK_WIDGET(trace->entry),trace->terminal != NULL); | ||
162 | 238 | ||
163 | } | 239 | } |
164 | 240 | ||
@@ -168,7 +244,7 @@ | @@ -168,7 +244,7 @@ | ||
168 | 244 | ||
169 | V3270Trace * widget = GTK_V3270_TRACE(g_object_new(GTK_TYPE_V3270_TRACE, NULL)); | 245 | V3270Trace * widget = GTK_V3270_TRACE(g_object_new(GTK_TYPE_V3270_TRACE, NULL)); |
170 | 246 | ||
171 | - set_session(widget, v3270_get_session(terminal)); | 247 | + v3270_trace_set_terminal(GTK_WIDGET(widget),terminal); |
172 | 248 | ||
173 | return GTK_WIDGET(widget); | 249 | return GTK_WIDGET(widget); |
174 | } | 250 | } |
@@ -203,17 +279,21 @@ | @@ -203,17 +279,21 @@ | ||
203 | 279 | ||
204 | LIB3270_EXPORT void v3270_trace_append_text(GtkWidget *widget, const gchar *text) | 280 | LIB3270_EXPORT void v3270_trace_append_text(GtkWidget *widget, const gchar *text) |
205 | { | 281 | { |
282 | + debug("widget=%p text=\"%s\"",widget,text); | ||
283 | + | ||
206 | g_return_if_fail(GTK_IS_V3270_TRACE(widget)); | 284 | g_return_if_fail(GTK_IS_V3270_TRACE(widget)); |
207 | 285 | ||
208 | // Enqueue update. | 286 | // Enqueue update. |
209 | struct _append_text * cfg = g_malloc0(sizeof(struct _append_text)+strlen(text)+1); | 287 | struct _append_text * cfg = g_malloc0(sizeof(struct _append_text)+strlen(text)+1); |
288 | + cfg->widget = GTK_V3270_TRACE(widget); | ||
289 | + strcpy(cfg->text,text); | ||
210 | gdk_threads_add_idle_full(G_PRIORITY_LOW,(GSourceFunc) bg_append_text,cfg,g_free); | 290 | gdk_threads_add_idle_full(G_PRIORITY_LOW,(GSourceFunc) bg_append_text,cfg,g_free); |
211 | 291 | ||
212 | } | 292 | } |
213 | 293 | ||
214 | LIB3270_EXPORT void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args) | 294 | LIB3270_EXPORT void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args) |
215 | { | 295 | { |
216 | - g_autofree * text = g_strdup_vprintf(fmt,args); | 296 | + g_autofree gchar * text = g_strdup_vprintf(fmt,args); |
217 | v3270_trace_append_text(widget,text); | 297 | v3270_trace_append_text(widget,text); |
218 | } | 298 | } |
219 | 299 | ||
@@ -225,3 +305,54 @@ | @@ -225,3 +305,54 @@ | ||
225 | va_end(arg_ptr); | 305 | va_end(arg_ptr); |
226 | } | 306 | } |
227 | 307 | ||
308 | + static void menu_item_new(GtkWidget *menu, const gchar *label, GCallback callback, gpointer data) | ||
309 | + { | ||
310 | + GtkWidget *widget = gtk_menu_item_new_with_mnemonic(label); | ||
311 | + gtk_menu_shell_append(GTK_MENU_SHELL(menu),widget); | ||
312 | + g_signal_connect(G_OBJECT(widget), "activate", callback, data); | ||
313 | + } | ||
314 | + | ||
315 | + static void menu_save_as(G_GNUC_UNUSED GtkWidget *button, V3270Trace *trace) | ||
316 | + { | ||
317 | + debug("%s",__FUNCTION__); | ||
318 | + } | ||
319 | + | ||
320 | + static void menu_close(G_GNUC_UNUSED GtkWidget *button, GtkWidget *window) | ||
321 | + { | ||
322 | + debug("%s",__FUNCTION__); | ||
323 | + gtk_widget_destroy(window); | ||
324 | + } | ||
325 | + | ||
326 | + LIB3270_EXPORT GtkWidget * v3270_new_trace_window(GtkWidget *widget) | ||
327 | + { | ||
328 | + g_return_val_if_fail(GTK_IS_V3270(widget),NULL); | ||
329 | + | ||
330 | + GtkWidget * window = gtk_window_new(GTK_WINDOW_TOPLEVEL); | ||
331 | + GtkWidget * vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); | ||
332 | + V3270Trace * trace = v3270_trace_new(widget); | ||
333 | + | ||
334 | + gtk_window_set_default_size(GTK_WINDOW(widget),590,430); | ||
335 | + | ||
336 | + // Top menu | ||
337 | + { | ||
338 | + GtkWidget * menubar = gtk_menu_bar_new(); | ||
339 | + GtkWidget * topitem = gtk_menu_item_new_with_mnemonic(_("_File")); | ||
340 | + GtkWidget * submenu = gtk_menu_new(); | ||
341 | + | ||
342 | + gtk_menu_item_set_submenu(GTK_MENU_ITEM(topitem), submenu); | ||
343 | + gtk_menu_shell_append(GTK_MENU_SHELL(menubar), topitem); | ||
344 | + | ||
345 | + menu_item_new(submenu,_("Save _As"),G_CALLBACK(menu_save_as),trace); | ||
346 | + menu_item_new(submenu,_("_Close"),G_CALLBACK(menu_close),window); | ||
347 | + | ||
348 | + gtk_box_pack_start(GTK_BOX(vbox),menubar,FALSE,TRUE,0); | ||
349 | + } | ||
350 | + | ||
351 | + // Trace window | ||
352 | + gtk_box_pack_start(GTK_BOX(vbox),GTK_WIDGET(trace),TRUE,TRUE,0); | ||
353 | + | ||
354 | + gtk_container_add(GTK_CONTAINER(window),vbox); | ||
355 | + gtk_widget_show_all(window); | ||
356 | + return window; | ||
357 | + } | ||
358 | + |
v3270.cbp
@@ -195,7 +195,7 @@ | @@ -195,7 +195,7 @@ | ||
195 | <Unit filename="src/trace/exec.c"> | 195 | <Unit filename="src/trace/exec.c"> |
196 | <Option compilerVar="CC" /> | 196 | <Option compilerVar="CC" /> |
197 | </Unit> | 197 | </Unit> |
198 | - <Unit filename="src/trace/trace.c"> | 198 | + <Unit filename="src/trace/widget.c"> |
199 | <Option compilerVar="CC" /> | 199 | <Option compilerVar="CC" /> |
200 | </Unit> | 200 | </Unit> |
201 | <Unit filename="src/v3270/private.h" /> | 201 | <Unit filename="src/v3270/private.h" /> |