sandmann 15824cf
--- compiz-3173a142efe5e7af83ebb534a074d9d2a0c67a86/src/session.c.restart	2006-08-17 17:36:07.000000000 -0400
sandmann 15824cf
+++ compiz-3173a142efe5e7af83ebb534a074d9d2a0c67a86/src/session.c	2006-09-26 13:57:18.000000000 -0400
sandmann 15824cf
@@ -49,6 +49,71 @@
sandmann 15824cf
 static void iceInit (void);
sandmann 15824cf
 
sandmann 15824cf
 static void
sandmann 15824cf
+set_string_list_property (SmcConn connection,
sandmann 15824cf
+			  const char *name,
sandmann 15824cf
+			  const char **values)
sandmann 15824cf
+{
sandmann 15824cf
+    SmProp prop, *pProp;
sandmann 15824cf
+    int i;
sandmann 15824cf
+
sandmann 15824cf
+    prop.name = (char *)name;
sandmann 15824cf
+    prop.type = SmLISTofARRAY8;
sandmann 15824cf
+
sandmann 15824cf
+    i = 0;
sandmann 15824cf
+    while (values[i] != NULL)
sandmann 15824cf
+	i++;
sandmann 15824cf
+
sandmann 15824cf
+    prop.vals = malloc (i * sizeof (SmPropValue));
sandmann 15824cf
+    if (!prop.vals)
sandmann 15824cf
+	return;
sandmann 15824cf
+
sandmann 15824cf
+    i = 0;
sandmann 15824cf
+    while (values[i] != NULL)
sandmann 15824cf
+    {
sandmann 15824cf
+	prop.vals[i].value = (char *)values[i];
sandmann 15824cf
+	prop.vals[i].length = strlen (values[i]);
sandmann 15824cf
+
sandmann 15824cf
+	i++;
sandmann 15824cf
+    }
sandmann 15824cf
+
sandmann 15824cf
+    prop.num_vals = i;
sandmann 15824cf
+
sandmann 15824cf
+    pProp = ∝
sandmann 15824cf
+    SmcSetProperties (connection, 1, &pProp);
sandmann 15824cf
+
sandmann 15824cf
+    free (prop.vals);
sandmann 15824cf
+}
sandmann 15824cf
+
sandmann 15824cf
+static void
sandmann 15824cf
+set_clone_restart_commands (SmcConn connection)
sandmann 15824cf
+{
sandmann 15824cf
+    const char *clone[] = { "compiz", NULL };
sandmann 15824cf
+    const char *restart[] = { "compiz", "gconf", NULL };
sandmann 15824cf
+    
sandmann 15824cf
+    set_string_list_property (connection, SmCloneCommand, clone);
sandmann 15824cf
+    set_string_list_property (connection, SmRestartCommand, restart);
sandmann 15824cf
+}
sandmann 15824cf
+
sandmann 15824cf
+static void
sandmann 15824cf
+set_restart_style (SmcConn	connection)
sandmann 15824cf
+{
sandmann 15824cf
+    SmProp	prop, *pProp;
sandmann 15824cf
+    SmPropValue propVal;
sandmann 15824cf
+    char        hint = SmRestartImmediately;
sandmann 15824cf
+
sandmann 15824cf
+    prop.name = SmRestartStyleHint;
sandmann 15824cf
+    prop.type = SmCARD8;
sandmann 15824cf
+    prop.num_vals = 1;
sandmann 15824cf
+    prop.vals = &propVal;
sandmann 15824cf
+    propVal.value = &hint;
sandmann 15824cf
+    propVal.length = 1;
sandmann 15824cf
+
sandmann 15824cf
+    pProp = ∝
sandmann 15824cf
+
sandmann 15824cf
+    SmcSetProperties (connection, 1, &pProp);
sandmann 15824cf
+}
sandmann 15824cf
+
sandmann 15824cf
+static void
sandmann 15824cf
 saveYourselfGotProps (SmcConn   connection,
sandmann 15824cf
 		      SmPointer client_data,
sandmann 15824cf
 		      int       num_props,
sandmann 15824cf
@@ -69,13 +134,16 @@
sandmann 15824cf
 		    SmcSetProperties (connection, 1, &props[p]);
sandmann 15824cf
 		    props[p]->vals[i + 1] = oldVal;
sandmann 15824cf
 
sandmann 15824cf
-		    SmcSaveYourselfDone (connection, 1);
sandmann 15824cf
-		    return;
sandmann 15824cf
+		    goto out;
sandmann 15824cf
 		}
sandmann 15824cf
 	    }
sandmann 15824cf
 	}
sandmann 15824cf
     }
sandmann 15824cf
 
sandmann 15824cf
+out:
sandmann 15824cf
+    set_restart_style (connection);
sandmann 15824cf
+    set_clone_restart_commands (connection);
sandmann 15824cf
+    
sandmann 15824cf
     SmcSaveYourselfDone (connection, 1);
sandmann 15824cf
 }
sandmann 15824cf