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" /> |