| 135 "ICE initialized.\n"); |
135 "ICE initialized.\n"); |
| 136 } |
136 } |
| 137 |
137 |
| 138 /* my magic utility function */ |
138 /* my magic utility function */ |
| 139 |
139 |
| 140 static gchar **session_make_command(gchar *client_id) { |
140 static gchar **session_make_command(gchar *client_id, gchar *config_dir) { |
| 141 gint i = 2; |
141 gint i = 2; |
| 142 gint j = 0; |
142 gint j = 0; |
| 143 gchar **ret; |
143 gchar **ret; |
| 144 |
144 |
| 145 if (client_id) i += 2; |
145 if (client_id) i += 2; |
| 146 i += 2; /* we will specify gaim's user dir */ |
146 if (config_dir) i += 2; /* we will specify gaim's user dir */ |
| 147 |
147 |
| 148 ret = g_new(gchar *, i); |
148 ret = g_new(gchar *, i); |
| 149 ret[j++] = g_strdup(myself); |
149 ret[j++] = g_strdup(myself); |
| 150 |
150 |
| 151 if (client_id) { |
151 if (client_id) { |
| 152 ret[j++] = g_strdup("--session"); |
152 ret[j++] = g_strdup("--session"); |
| 153 ret[j++] = g_strdup(client_id); |
153 ret[j++] = g_strdup(client_id); |
| 154 } |
154 } |
| 155 |
155 |
| 156 ret[j++] = g_strdup("--config"); |
156 if (config_dir) { |
| 157 ret[j++] = g_strdup(gaim_user_dir()); |
157 ret[j++] = g_strdup("--config"); |
| |
158 ret[j++] = g_strdup(config_dir); |
| |
159 } |
| 158 |
160 |
| 159 ret[j++] = NULL; |
161 ret[j++] = NULL; |
| 160 |
162 |
| 161 return ret; |
163 return ret; |
| 162 } |
164 } |
| 272 |
274 |
| 273 #endif /* USE_SM */ |
275 #endif /* USE_SM */ |
| 274 |
276 |
| 275 /* setup functions */ |
277 /* setup functions */ |
| 276 |
278 |
| 277 void session_init(gchar *argv0, gchar *previous_id) { |
279 void session_init(gchar *argv0, gchar *previous_id, gchar *config_dir) { |
| 278 #ifdef USE_SM |
280 #ifdef USE_SM |
| 279 SmcCallbacks callbacks; |
281 SmcCallbacks callbacks; |
| 280 gchar *client_id = NULL; |
282 gchar *client_id = NULL; |
| 281 gchar error[ERROR_LENGTH] = ""; |
283 gchar error[ERROR_LENGTH] = ""; |
| 282 gchar *tmp = NULL; |
284 gchar *tmp = NULL; |
| 356 |
358 |
| 357 myself = g_strdup(argv0); |
359 myself = g_strdup(argv0); |
| 358 gaim_debug(GAIM_DEBUG_MISC, "Session Management", |
360 gaim_debug(GAIM_DEBUG_MISC, "Session Management", |
| 359 "Using %s as command\n", myself); |
361 "Using %s as command\n", myself); |
| 360 |
362 |
| 361 cmd = session_make_command(NULL); |
363 cmd = session_make_command(NULL, config_dir); |
| 362 session_set_array(session, SmCloneCommand, cmd); |
364 session_set_array(session, SmCloneCommand, cmd); |
| 363 g_strfreev(cmd); |
365 g_strfreev(cmd); |
| 364 |
366 |
| 365 /* this is currently useless, but gnome-session warns 'the following applications will not |
367 /* this is currently useless, but gnome-session warns 'the following applications will not |
| 366 save their current status' bla bla if we don't have it and the user checks 'Save Session' |
368 save their current status' bla bla if we don't have it and the user checks 'Save Session' |
| 369 cmd[0] = g_strdup("/bin/true"); |
371 cmd[0] = g_strdup("/bin/true"); |
| 370 cmd[1] = NULL; |
372 cmd[1] = NULL; |
| 371 session_set_array(session, SmDiscardCommand, cmd); |
373 session_set_array(session, SmDiscardCommand, cmd); |
| 372 g_strfreev(cmd); |
374 g_strfreev(cmd); |
| 373 |
375 |
| 374 cmd = session_make_command(client_id); |
376 cmd = session_make_command(client_id, config_dir); |
| 375 session_set_array(session, SmRestartCommand, cmd); |
377 session_set_array(session, SmRestartCommand, cmd); |
| 376 g_strfreev(cmd); |
378 g_strfreev(cmd); |
| 377 |
379 |
| 378 g_free(client_id); |
380 g_free(client_id); |
| 379 #endif /* USE_SM */ |
381 #endif /* USE_SM */ |