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 47  
48 48 LIB3270_EXPORT GtkTreeModel * v3270_font_family_model_new(GtkWidget *widget, const gchar *selected, GtkTreeIter * active);
49 49  
50   -
51 50 G_END_DECLS
52 51  
53 52 #endif // V3270_DIALOGS_H_INCLUDED
... ...
src/terminal/keyfile.c
... ... @@ -236,6 +236,34 @@
236 236 v3270 * terminal = GTK_V3270(widget);
237 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 267 // Save Toggles
240 268 for(ix = 0; ix < G_N_ELEMENTS(klass->properties.toggle); ix++)
241 269 save_by_pspec(widget,klass->properties.toggle[ix],key_file,group_name);
... ... @@ -266,6 +294,19 @@
266 294 g_object_freeze_notify(G_OBJECT(widget));
267 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 310 // Load Toggles
270 311 for(ix = 0; ix < G_N_ELEMENTS(klass->properties.toggle); ix++)
271 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 171 LIB3270_EXPORT void v3270_set_session_name(GtkWidget *widget, const gchar *name)
172 172 {
173 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 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 215 g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[V3270_SIGNAL_SESSION_CHANGED], 0);
190 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 212 v3270 * terminal = GTK_V3270(widget);
213 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 231 // Save Toggles
216 232 for(ix = 0; ix < G_N_ELEMENTS(klass->properties.toggle); ix++)
217 233 save_by_pspec(widget,klass->properties.toggle[ix],hKey);
... ... @@ -251,6 +267,22 @@
251 267  
252 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 286 // Load Toggles
255 287 for(ix = 0; ix < G_N_ELEMENTS(klass->properties.toggle); ix++)
256 288 load_by_pspec(widget,klass->properties.toggle[ix],hKey);
... ...