Commit 110bebbee2f48632065afc0bf3c8da1e1ddc9289

Authored by Perry Werneck
1 parent ca73fc5d
Exists in master and in 1 other branch develop

Implement save/load of the session-name property.

src/include/v3270/dialogs.h
@@ -47,7 +47,6 @@ @@ -47,7 +47,6 @@
47 47
48 LIB3270_EXPORT GtkTreeModel * v3270_font_family_model_new(GtkWidget *widget, const gchar *selected, GtkTreeIter * active); 48 LIB3270_EXPORT GtkTreeModel * v3270_font_family_model_new(GtkWidget *widget, const gchar *selected, GtkTreeIter * active);
49 49
50 -  
51 G_END_DECLS 50 G_END_DECLS
52 51
53 #endif // V3270_DIALOGS_H_INCLUDED 52 #endif // V3270_DIALOGS_H_INCLUDED
src/terminal/keyfile.c
@@ -236,6 +236,34 @@ @@ -236,6 +236,34 @@
236 v3270 * terminal = GTK_V3270(widget); 236 v3270 * terminal = GTK_V3270(widget);
237 v3270Class * klass = GTK_V3270_GET_CLASS(widget); 237 v3270Class * klass = GTK_V3270_GET_CLASS(widget);
238 238
  239 + // Save session name.
  240 + {
  241 + g_autofree gchar * session_name = g_strdup(terminal->session.name ? terminal->session.name : G_STRINGIFY(PRODUCT_NAME));
  242 +
  243 + gchar *ptr = strrchr(session_name,':');
  244 + if(ptr)
  245 + *ptr = 0;
  246 +
  247 + if(g_ascii_strcasecmp(session_name,G_STRINGIFY(PRODUCT_NAME))) {
  248 +
  249 + g_key_file_set_string(
  250 + key_file,
  251 + group_name,
  252 + "session-name",
  253 + session_name
  254 + );
  255 +
  256 + } else {
  257 + g_key_file_remove_key(
  258 + key_file,
  259 + group_name,
  260 + "session-name",
  261 + NULL
  262 + );
  263 + }
  264 +
  265 + }
  266 +
239 // Save Toggles 267 // Save Toggles
240 for(ix = 0; ix < G_N_ELEMENTS(klass->properties.toggle); ix++) 268 for(ix = 0; ix < G_N_ELEMENTS(klass->properties.toggle); ix++)
241 save_by_pspec(widget,klass->properties.toggle[ix],key_file,group_name); 269 save_by_pspec(widget,klass->properties.toggle[ix],key_file,group_name);
@@ -266,6 +294,19 @@ @@ -266,6 +294,19 @@
266 g_object_freeze_notify(G_OBJECT(widget)); 294 g_object_freeze_notify(G_OBJECT(widget));
267 terminal->freeze = 1; 295 terminal->freeze = 1;
268 296
  297 + // Load session_name
  298 + if(g_key_file_has_key(key_file,group_name,"session-name",NULL)) {
  299 +
  300 + g_autofree gchar * session_name = g_key_file_get_string(key_file,group_name,"session-name",NULL);
  301 +
  302 + gchar *ptr = strrchr(session_name,':');
  303 + if(ptr)
  304 + *ptr = 0;
  305 +
  306 + v3270_set_session_name(widget, session_name);
  307 +
  308 + }
  309 +
269 // Load Toggles 310 // Load Toggles
270 for(ix = 0; ix < G_N_ELEMENTS(klass->properties.toggle); ix++) 311 for(ix = 0; ix < G_N_ELEMENTS(klass->properties.toggle); ix++)
271 load_by_pspec(widget,klass->properties.toggle[ix],key_file,group_name); 312 load_by_pspec(widget,klass->properties.toggle[ix],key_file,group_name);
src/terminal/properties/set.c
@@ -171,20 +171,46 @@ LIB3270_EXPORT void v3270_set_url(GtkWidget *widget, const gchar *uri) @@ -171,20 +171,46 @@ LIB3270_EXPORT void v3270_set_url(GtkWidget *widget, const gchar *uri)
171 LIB3270_EXPORT void v3270_set_session_name(GtkWidget *widget, const gchar *name) 171 LIB3270_EXPORT void v3270_set_session_name(GtkWidget *widget, const gchar *name)
172 { 172 {
173 g_return_if_fail(GTK_IS_V3270(widget)); 173 g_return_if_fail(GTK_IS_V3270(widget));
174 - g_return_if_fail(name != NULL);  
175 174
176 - if(GTK_V3270(widget)->session.name) { 175 + v3270 * terminal = GTK_V3270(widget);
  176 +
  177 + if(!(name && *name))
  178 + name = G_STRINGIFY(PRODUCT_NAME);
  179 +
  180 + if(terminal->session.name) {
177 181
178 - if(!strcmp(GTK_V3270(widget)->session.name,name)) {  
179 - // Same session name, keep it. 182 + // If it's the same name ignore it.
  183 + if(!strcmp(terminal->session.name,name))
180 return; 184 return;
  185 +
  186 + g_free(terminal->session.name);
  187 + terminal->session.name = NULL;
  188 +
  189 + }
  190 +
  191 + g_autofree gchar * new_name = g_strdup(name);
  192 +
  193 + // Check for session id
  194 + gchar session_id = 0;
  195 + {
  196 + gchar *ptr = strrchr(new_name,':');
  197 + if(ptr) {
  198 + *(ptr++) = 0;
  199 + session_id = *ptr;
  200 + lib3270_set_session_id(terminal->host,session_id);
181 } 201 }
  202 + }
182 203
183 - g_free(GTK_V3270(widget)->session.name); 204 + if(!session_id)
  205 + session_id = lib3270_get_session_id(terminal->host);
184 206
  207 + if(session_id) {
  208 + terminal->session.name = g_strdup_printf("%s:%c",new_name,session_id);
  209 + } else {
  210 + terminal->session.name = g_strdup(new_name);
185 } 211 }
186 212
187 - GTK_V3270(widget)->session.name = g_strdup(name); 213 + g_message("Session name changes to \"%s\"",terminal->session.name);
188 214
189 g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[V3270_SIGNAL_SESSION_CHANGED], 0); 215 g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[V3270_SIGNAL_SESSION_CHANGED], 0);
190 g_object_notify_by_pspec(G_OBJECT(widget), GTK_V3270_GET_CLASS(widget)->properties.session_name); 216 g_object_notify_by_pspec(G_OBJECT(widget), GTK_V3270_GET_CLASS(widget)->properties.session_name);
src/terminal/windows/registry.c
@@ -212,6 +212,22 @@ @@ -212,6 +212,22 @@
212 v3270 * terminal = GTK_V3270(widget); 212 v3270 * terminal = GTK_V3270(widget);
213 v3270Class * klass = GTK_V3270_GET_CLASS(widget); 213 v3270Class * klass = GTK_V3270_GET_CLASS(widget);
214 214
  215 + // Save session name.
  216 + {
  217 + g_autofree gchar * session_name = g_strdup(terminal->session.name ? terminal->session.name : G_STRINGIFY(PRODUCT_NAME));
  218 +
  219 + gchar *ptr = strrchr(session_name,':');
  220 + if(ptr)
  221 + *ptr = 0;
  222 +
  223 + if(g_ascii_strcasecmp(session_name,G_STRINGIFY(PRODUCT_NAME))) {
  224 + RegSetValueEx(hKey,"session-name",0,REG_SZ,(const BYTE *) session_name,strlen(session_name)+1);
  225 + } else {
  226 + RegDeleteValue(hKey,"session-name");
  227 + }
  228 +
  229 + }
  230 +
215 // Save Toggles 231 // Save Toggles
216 for(ix = 0; ix < G_N_ELEMENTS(klass->properties.toggle); ix++) 232 for(ix = 0; ix < G_N_ELEMENTS(klass->properties.toggle); ix++)
217 save_by_pspec(widget,klass->properties.toggle[ix],hKey); 233 save_by_pspec(widget,klass->properties.toggle[ix],hKey);
@@ -251,6 +267,22 @@ @@ -251,6 +267,22 @@
251 267
252 g_object_freeze_notify(G_OBJECT(widget)); 268 g_object_freeze_notify(G_OBJECT(widget));
253 269
  270 + // Load session name
  271 + {
  272 + BYTE data[4097];
  273 + unsigned long datatype;
  274 + unsigned long datalen = 4096;
  275 +
  276 + memset(data,0,sizeof(data));
  277 +
  278 + if(RegQueryValueExA(hKey,"session-name",NULL,&datatype,data,&datalen) == ERROR_SUCCESS) {
  279 +
  280 + v3270_set_session_name(widget, (const gchar *) data);
  281 +
  282 + }
  283 +
  284 + }
  285 +
254 // Load Toggles 286 // Load Toggles
255 for(ix = 0; ix < G_N_ELEMENTS(klass->properties.toggle); ix++) 287 for(ix = 0; ix < G_N_ELEMENTS(klass->properties.toggle); ix++)
256 load_by_pspec(widget,klass->properties.toggle[ix],hKey); 288 load_by_pspec(widget,klass->properties.toggle[ix],hKey);