diff --git a/src/terminal/private.h b/src/terminal/private.h index d96eae0..0e8fd91 100644 --- a/src/terminal/private.h +++ b/src/terminal/private.h @@ -81,8 +81,9 @@ G_BEGIN_DECLS SIGNAL_PRINT_SETUP, SIGNAL_PRINT_APPLY, SIGNAL_PRINT_DONE, + SIGNAL_SESSION_CHANGED, - LAST_SIGNAL + V3270_LAST_SIGNAL }; @@ -221,7 +222,7 @@ G_BEGIN_DECLS /*--[ Globals ]--------------------------------------------------------------------------------------*/ - G_GNUC_INTERNAL guint v3270_widget_signal[LAST_SIGNAL]; + G_GNUC_INTERNAL guint v3270_widget_signal[V3270_LAST_SIGNAL]; G_GNUC_INTERNAL GdkCursor * v3270_cursor[LIB3270_POINTER_COUNT]; G_GNUC_INTERNAL const gchar * v3270_default_colors; G_GNUC_INTERNAL const gchar * v3270_default_font; diff --git a/src/terminal/widget.c b/src/terminal/widget.c index c7d7702..6332848 100644 --- a/src/terminal/widget.c +++ b/src/terminal/widget.c @@ -63,8 +63,8 @@ /*--[ Globals ]--------------------------------------------------------------------------------------*/ - guint v3270_widget_signal[LAST_SIGNAL] = { 0 }; - GdkCursor * v3270_cursor[LIB3270_POINTER_COUNT] = { 0 }; + guint v3270_widget_signal[V3270_LAST_SIGNAL] = { 0 }; + GdkCursor * v3270_cursor[LIB3270_POINTER_COUNT] = { 0 }; /*--[ Prototipes ]-----------------------------------------------------------------------------------*/ @@ -389,6 +389,15 @@ static void v3270_class_init(v3270Class *klass) v3270_VOID__VOID, G_TYPE_NONE, 0); + v3270_widget_signal[SIGNAL_SESSION_CHANGED] = + g_signal_new( "session_changed", + G_OBJECT_CLASS_TYPE (gobject_class), + G_SIGNAL_RUN_FIRST, + 0, + NULL, NULL, + v3270_VOID__VOID, + G_TYPE_NONE, 0); + v3270_widget_signal[SIGNAL_UPDATE_CONFIG] = g_signal_new( "update_config", G_OBJECT_CLASS_TYPE (gobject_class), @@ -978,10 +987,25 @@ LIB3270_EXPORT void v3270_set_session_name(GtkWidget *widget, const gchar *name) g_return_if_fail(GTK_IS_V3270(widget)); g_return_if_fail(name != NULL); - if(GTK_V3270(widget)->session_name) + if(GTK_V3270(widget)->session_name) { + + debug("Old session name was \"%s\"",GTK_V3270(widget)->session_name); + + if(!strcmp(GTK_V3270(widget)->session_name,name)) { + // Same session name, keep it. + return; + } + g_free(GTK_V3270(widget)->session_name); + } + GTK_V3270(widget)->session_name = g_strdup(name); + + debug("New session name is \"%s\"",GTK_V3270(widget)->session_name); + + g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[SIGNAL_SESSION_CHANGED], 0); + } LIB3270_EXPORT int v3270_set_host_type(GtkWidget *widget, LIB3270_HOST_TYPE type) diff --git a/src/testprogram/testprogram.c b/src/testprogram/testprogram.c index 74a3b73..718be9b 100644 --- a/src/testprogram/testprogram.c +++ b/src/testprogram/testprogram.c @@ -194,7 +194,7 @@ static void ft_clicked(GtkButton *button, GtkWidget *terminal) // // V5.1 dialog // - GtkWidget *dialog = v3270ft_new(button); + GtkWidget *dialog = v3270ft_new(GTK_WIDGET(button)); /* // diff --git a/v3270.cbp b/v3270.cbp index 8ad8479..9da2607 100644 --- a/v3270.cbp +++ b/v3270.cbp @@ -204,7 +204,6 @@ - -- libgit2 0.21.2