-#define SM_ERR_LEN 1024
-
- SmcCallbacks cb;
- char sm_err[SM_ERR_LEN];
-
- cb.save_yourself.callback = sm_save_yourself;
- cb.save_yourself.client_data = NULL;
-
- cb.die.callback = sm_die;
- cb.die.client_data = NULL;
-
- cb.save_complete.callback = sm_save_complete;
- cb.save_complete.client_data = NULL;
-
- cb.shutdown_cancelled.callback = sm_shutdown_cancelled;
- cb.shutdown_cancelled.client_data = NULL;
-
- ob_sm_conn = SmcOpenConnection(NULL, NULL, 1, 0,
- SmcSaveYourselfProcMask |
- SmcDieProcMask |
- SmcSaveCompleteProcMask |
- SmcShutdownCancelledProcMask,
- &cb, ob_sm_id, &ob_sm_id,
- SM_ERR_LEN, sm_err);
- if (ob_sm_conn == NULL)
- g_warning("Failed to connect to session manager: %s", sm_err);
- else {
- SmPropValue val_prog;
- SmPropValue val_uid;
- SmPropValue val_hint;
- SmPropValue val_pri;
- SmPropValue val_pid;
- SmProp prop_cmd = { SmCloneCommand, SmLISTofARRAY8, 1, };
- SmProp prop_res = { SmRestartCommand, SmLISTofARRAY8, };
- SmProp prop_prog = { SmProgram, SmARRAY8, 1, };
- SmProp prop_uid = { SmUserID, SmARRAY8, 1, };
- SmProp prop_hint = { SmRestartStyleHint, SmCARD8, 1, };
- SmProp prop_pid = { SmProcessID, SmARRAY8, 1, };
- SmProp prop_pri = { "_GSM_Priority", SmCARD8, 1, };
- SmProp *props[7];
- gulong hint, pri;
- gchar pid[32];
- gint i;
- gboolean has_id;
-
- for (i = 1; i < argc - 1; ++i)
- if (strcmp(argv[i], "-sm-client-id") == 0)
- break;
- has_id = (i < argc - 1);
-
- prop_cmd.vals = g_new(SmPropValue, (has_id ? argc-2 : argc));
- prop_cmd.num_vals = (has_id ? argc-2 : argc);
- for (i = 0; i < argc; ++i) {
- if (strcmp (argv[i], "-sm-client-id") == 0) {
- ++i; /* skip the next as well */
- } else {
- prop_cmd.vals[i].value = argv[i];
- prop_cmd.vals[i].length = strlen(argv[i]);
+ event_startup(reconfigure);
+ grab_startup(reconfigure);
+ /* focus_backup is used for stacking, so this needs to come before
+ anything that calls stacking_add */
+ focus_startup(reconfigure);
+ window_startup(reconfigure);
+ sn_startup(reconfigure);
+
+ {
+ ObParseInst *i;
+ xmlDocPtr doc;
+ xmlNodePtr node;
+
+ /* startup the parsing so everything can register sections
+ of the rc */
+ i = parse_startup();
+
+ config_startup(i);
+ /* parse/load user options */
+ if (parse_load_rc(&doc, &node))
+ parse_tree(i, doc, node->xmlChildrenNode);
+ /* we're done with parsing now, kill it */
+ xmlFreeDoc(doc);
+ parse_shutdown(i);