diff --git a/common/src/include/lib3270/ipc-glib.h b/common/src/include/lib3270/ipc-glib.h index 8462c71..05881e7 100644 --- a/common/src/include/lib3270/ipc-glib.h +++ b/common/src/include/lib3270/ipc-glib.h @@ -73,7 +73,7 @@ GObject * ipc3270_new(); GType ipc3270_get_type(void); - void ipc3270_set_session(GObject *object, H3270 *hSession); + void ipc3270_set_terminal_widget(GObject *object, GtkWidget *widget); void ipc3270_export_object(GObject *object, const char *name, GError **error); /** diff --git a/server/src/core/linux/gobject.c b/server/src/core/linux/gobject.c index 0295b84..ba75a9d 100644 --- a/server/src/core/linux/gobject.c +++ b/server/src/core/linux/gobject.c @@ -37,6 +37,7 @@ #include #include #include +#include #include #include @@ -49,10 +50,19 @@ G_DEFINE_TYPE(ipc3270, ipc3270, G_TYPE_OBJECT) static void ipc3270_finalize(GObject *object) { + ipc3270 * ipc = IPC3270(object); debug("ipc3270::%s(%p)",__FUNCTION__,object); ipc3270_release_object(IPC3270(object)); + g_autofree gchar * widget_name = g_strdup(v3270_get_session_name(ipc->terminal)); + gchar * ptr = strrchr(widget_name,':'); + if(ptr) + *ptr = 0; + + v3270_set_session_name(ipc->terminal,widget_name); + lib3270_set_session_id(ipc->hSession, 0); + G_OBJECT_CLASS(ipc3270_parent_class)->finalize(object); } @@ -218,10 +228,12 @@ void ipc3270_add_terminal_introspection(GString *introspection) { } -void ipc3270_set_session(GObject *object, H3270 *hSession) { +void ipc3270_set_terminal_widget(GObject *object, GtkWidget *terminal) { ipc3270 * ipc = IPC3270(object); - ipc->hSession = hSession; + + ipc->terminal = terminal; + ipc->hSession = v3270_get_session(terminal); } diff --git a/server/src/core/linux/gobject.h b/server/src/core/linux/gobject.h index ea33de0..ee697f4 100644 --- a/server/src/core/linux/gobject.h +++ b/server/src/core/linux/gobject.h @@ -64,6 +64,7 @@ } dbus; H3270 * hSession; + GtkWidget * terminal; GQuark error_domain; }; diff --git a/server/src/plugin/plugin.c b/server/src/plugin/plugin.c index d9a4a59..133323d 100644 --- a/server/src/plugin/plugin.c +++ b/server/src/plugin/plugin.c @@ -62,7 +62,7 @@ // Set session handle, this starts the IPC communication. GError * error = NULL; - ipc3270_set_session(ipc,v3270_get_session(terminal)); + ipc3270_set_terminal_widget(ipc,terminal); ipc3270_export_object(ipc,v3270_get_session_name(terminal),&error); if(error) { @@ -85,9 +85,8 @@ char id = lib3270_get_session_id(v3270_get_session(terminal)); if(id) { - gchar * widget_name = g_strdup_printf("%s:%c",v3270_get_session_name(terminal),id); + g_autofree gchar * widget_name = g_strdup_printf("%s:%c",v3270_get_session_name(terminal),id); v3270_set_session_name(terminal, widget_name); - g_free(widget_name); } return 0; diff --git a/server/src/testprogram/testprogram.c b/server/src/testprogram/testprogram.c index 6db5566..aa63242 100644 --- a/server/src/testprogram/testprogram.c +++ b/server/src/testprogram/testprogram.c @@ -73,34 +73,14 @@ g_message("Module %p was closed",module); } - static void toggle_ds_trace(GtkToggleToolButton *button, GtkWidget *terminal) - { - v3270_set_toggle(terminal,LIB3270_TOGGLE_DS_TRACE,gtk_toggle_tool_button_get_active(button)); - } - - static void toggle_event_trace(GtkToggleToolButton *button, GtkWidget *terminal) - { - v3270_set_toggle(terminal,LIB3270_TOGGLE_EVENT_TRACE,gtk_toggle_tool_button_get_active(button)); - } - - static void toggle_ssl_trace(GtkToggleToolButton *button, GtkWidget *terminal) - { - v3270_set_toggle(terminal,LIB3270_TOGGLE_SSL_TRACE,gtk_toggle_tool_button_get_active(button)); - } - - static void toggle_screen_trace(GtkToggleToolButton *button, GtkWidget *terminal) - { - v3270_set_toggle(terminal,LIB3270_TOGGLE_SCREEN_TRACE,gtk_toggle_tool_button_get_active(button)); - } - - static void toggle_started_trace(GtkToggleToolButton *button, GModule *module) + static void toggle_started(GtkToggleButton *button, GModule *module) { if(!module) return; GtkWidget * terminal = g_object_get_data(G_OBJECT(button),"terminal"); - const gchar * method_name = (gtk_toggle_tool_button_get_active(button) ? "pw3270_plugin_start" : "pw3270_plugin_stop"); + const gchar * method_name = (gtk_toggle_button_get_active(button) ? "pw3270_plugin_start" : "pw3270_plugin_stop"); static void (*call)(GtkWidget *window, GtkWidget *terminal) = NULL; if(!g_module_symbol(module,method_name,(gpointer) &call)) @@ -114,36 +94,24 @@ } - static GtkToolItem * create_tool_item(GtkWidget *terminal, const gchar *label, const gchar *tooltip, GCallback callback) - { - GtkToolItem * item = gtk_toggle_tool_button_new(); - gtk_tool_button_set_label(GTK_TOOL_BUTTON(item),label); - - g_signal_connect(GTK_WIDGET(item), "toggled", G_CALLBACK(callback), terminal); - - if(tooltip) - gtk_widget_set_tooltip_text(GTK_WIDGET(item),tooltip); - - return item; - } - static void session_changed(GtkWidget *widget, GtkWidget *window) { - g_autofree gchar * title = NULL; + g_autofree gchar * title = NULL; + const gchar * name = v3270_get_session_name(widget); - g_message("Session name was changed"); + g_message("Session name was changed to \"%s\"", name); if(v3270_is_connected(widget)) { const gchar *host = v3270_get_hostname(widget); if(host && *host) - title = g_strdup_printf("%s - %s",v3270_get_session_name(widget),host); + title = g_strdup_printf("%s - %s",name,host); else - title = g_strdup_printf("%s",v3270_get_session_name(widget)); + title = g_strdup_printf("%s",name); } else { - title = g_strdup_printf("%s - Disconnected",v3270_get_session_name(widget)); + title = g_strdup_printf("%s - Disconnected",name); } gtk_window_set_title(GTK_WINDOW(window),title); @@ -210,9 +178,25 @@ } // Create trace window { + GtkWidget * trace = v3270_trace_new(terminal); + GtkWidget * start = gtk_toggle_button_new_with_label("Enable"); + GtkWidget * buttons = v3270_trace_get_button_box(trace); + + gtk_widget_set_sensitive(GTK_WIDGET(start),module != NULL); + + g_object_set_data(G_OBJECT(start),"terminal",terminal); + + g_signal_connect(GTK_WIDGET(start), "toggled", G_CALLBACK(toggle_started), module); + gtk_widget_set_tooltip_text(GTK_WIDGET(start),"Start/Stop plugin module"); + + gtk_box_pack_start(GTK_BOX(buttons),start,FALSE,FALSE,0); + gtk_box_reorder_child(GTK_BOX(buttons),start,0); + + gtk_notebook_append_page(GTK_NOTEBOOK(notebook),trace,gtk_label_new("Trace")); + + /* GtkWidget * box = gtk_box_new(GTK_ORIENTATION_VERTICAL,0); GtkWidget * trace = v3270_trace_new(terminal); - GtkWidget * toolbar = gtk_toolbar_new(); GtkToolItem * start = gtk_toggle_tool_button_new(); gtk_widget_set_sensitive(GTK_WIDGET(start),module != NULL); @@ -223,18 +207,16 @@ g_signal_connect(GTK_WIDGET(start), "toggled", G_CALLBACK(toggle_started_trace), module); gtk_widget_set_tooltip_text(GTK_WIDGET(start),"Start/Stop plugin module"); + v3270_trace_button_box_insert(trace,start); + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), start, -1); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),gtk_separator_tool_item_new(),-1); - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "DS Trace","Toggle DS Trace",G_CALLBACK(toggle_ds_trace)),-1); - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "Event Trace","Toggle Event Trace",G_CALLBACK(toggle_event_trace)),-1); - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "Screen Trace","Toggle Screen Trace",G_CALLBACK(toggle_screen_trace)),-1); - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "SSL Trace","Toggle SSL Trace",G_CALLBACK(toggle_ssl_trace)),-1); - gtk_box_pack_start(GTK_BOX(box),toolbar,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(box),trace,TRUE,TRUE,0); gtk_notebook_append_page(GTK_NOTEBOOK(notebook),box,gtk_label_new("Trace")); + */ } // Setup and show main window -- libgit2 0.21.2