diff --git a/src/include/terminal.h b/src/include/terminal.h index 02df2cf..4b5bb20 100644 --- a/src/include/terminal.h +++ b/src/include/terminal.h @@ -169,9 +169,13 @@ G_BEGIN_DECLS // Session H3270 * host; /**< Related 3270 session */ - gchar * session_name; /**< Session name (for window title) */ gchar * remap_filename; /**< @brief XML file with remap table. */ + struct { + gchar *name; /**< @brief Session name (for window title) */ + gchar *title; /**< @brief Session title (for window title) */ + } session; + // Auto disconnect struct { diff --git a/src/include/v3270.h b/src/include/v3270.h index 59fb884..18da27d 100644 --- a/src/include/v3270.h +++ b/src/include/v3270.h @@ -241,9 +241,11 @@ LIB3270_EXPORT const gchar * v3270_get_session_name(GtkWidget *widget); LIB3270_EXPORT void v3270_set_session_name(GtkWidget *widget, const gchar *name); - LIB3270_EXPORT gchar * v3270_get_session_title(GtkWidget *widget); +// LIB3270_EXPORT gchar * v3270_get_title(GtkWidget *widget); + LIB3270_EXPORT gchar * v3270_set_title(GtkWidget *widget, const gchar *title); + LIB3270_EXPORT int v3270_set_script(GtkWidget *widget, const gchar id); LIB3270_EXPORT void v3270_set_scaled_fonts(GtkWidget *widget, gboolean on); LIB3270_EXPORT int v3270_set_session_color_type(GtkWidget *widget, unsigned short colortype); diff --git a/src/terminal/properties/get.c b/src/terminal/properties/get.c index a9559b3..cda0942 100644 --- a/src/terminal/properties/get.c +++ b/src/terminal/properties/get.c @@ -130,12 +130,12 @@ LIB3270_EXPORT const gchar * v3270_get_session_name(GtkWidget *widget) v3270 * terminal = GTK_V3270(widget); - if(terminal->session_name) - return terminal->session_name; + if(terminal->session.name) + return terminal->session.name; char id[] = { lib3270_get_session_id(terminal->host), 0 }; if(id[0]) - return (terminal->session_name = g_strconcat(G_STRINGIFY(PRODUCT_NAME),":",id,NULL)); + return (terminal->session.name = g_strconcat(G_STRINGIFY(PRODUCT_NAME),":",id,NULL)); return G_STRINGIFY(PRODUCT_NAME); @@ -145,12 +145,17 @@ LIB3270_EXPORT gchar * v3270_get_session_title(GtkWidget *widget) { g_return_val_if_fail(GTK_IS_V3270(widget),NULL); - const char * url = lib3270_get_url(GTK_V3270(widget)->host); + v3270 * terminal = GTK_V3270(widget); + + const gchar * title = terminal->session.title; + + if(!title) + title = lib3270_get_url(GTK_V3270(widget)->host); - if(!url) - url = _( "No host defined" ); + if(!title) + title = _( "No host defined" ); - return g_strconcat(v3270_get_session_name(widget)," - ",url,NULL); + return g_strconcat(v3270_get_session_name(widget)," - ",title,NULL); } diff --git a/src/terminal/properties/set.c b/src/terminal/properties/set.c index 6faf24a..3e6509d 100644 --- a/src/terminal/properties/set.c +++ b/src/terminal/properties/set.c @@ -153,22 +153,18 @@ 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)) { + if(!strcmp(GTK_V3270(widget)->session.name,name)) { // Same session name, keep it. return; } - g_free(GTK_V3270(widget)->session_name); + 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); + GTK_V3270(widget)->session.name = g_strdup(name); g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[V3270_SIGNAL_SESSION_CHANGED], 0); g_object_notify_by_pspec(G_OBJECT(widget), GTK_V3270_GET_CLASS(widget)->properties.session_name); diff --git a/src/terminal/widget.c b/src/terminal/widget.c index a574412..b046848 100644 --- a/src/terminal/widget.c +++ b/src/terminal/widget.c @@ -590,10 +590,16 @@ static void v3270_destroy(GtkWidget *widget) v3270_clear_selection(terminal); - if(terminal->session_name) + if(terminal->session.name) { - g_free(terminal->session_name); - terminal->session_name = NULL; + g_free(terminal->session.name); + terminal->session.name = NULL; + } + + if(terminal->session.title) + { + g_free(terminal->session.title); + terminal->session.title = NULL; } GTK_WIDGET_CLASS(v3270_parent_class)->destroy(widget); diff --git a/src/testprogram/testprogram.c b/src/testprogram/testprogram.c index f77fb37..3970766 100644 --- a/src/testprogram/testprogram.c +++ b/src/testprogram/testprogram.c @@ -44,7 +44,7 @@ /*---[ Implement ]----------------------------------------------------------------------------------*/ static void session_changed(GtkWidget *terminal, GtkWidget *window) { - gtk_window_set_title(GTK_WINDOW(window),v3270_get_session_name(terminal)); + gtk_window_set_title(GTK_WINDOW(window),v3270_get_session_title(terminal)); } static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { @@ -80,7 +80,7 @@ // v3270_trace_window_new(terminal,NULL); // Setup and show main window - gtk_window_set_title(GTK_WINDOW(window),v3270_get_session_name(terminal)); + gtk_window_set_title(GTK_WINDOW(window),v3270_get_session_title(terminal)); gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); gtk_window_set_default_size (GTK_WINDOW (window), 800, 500); gtk_container_add(GTK_CONTAINER(window),vBox); -- libgit2 0.21.2