]> Dogcows Code - chaz/openbox/blobdiff - openbox/session.c
super correct enter event ignoring that will only ignore what it has to, yay?
[chaz/openbox] / openbox / session.c
index 7a9a081d8072d0c8ece42c52ee31e46a78d12004..d0db0717ffeaf2bf467c8232a090b4d30a12a0fa 100644 (file)
@@ -319,15 +319,12 @@ static void session_setup_clone_command()
 static void session_setup_restart_command()
 {
     gint i;
-    gint num = 4;
 
-    if (ob_config_type) num += 2;
-
-    SmPropValue *vals = g_new(SmPropValue, sm_argc + num);
+    SmPropValue *vals = g_new(SmPropValue, sm_argc + 4);
     SmProp prop = {
         .name = g_strdup(SmRestartCommand),
         .type = g_strdup(SmLISTofARRAY8),
-        .num_vals = sm_argc + num,
+        .num_vals = sm_argc + 4,
         .vals = vals
     };
     SmProp *list = ∝
@@ -353,22 +350,11 @@ static void session_setup_restart_command()
     ob_debug_type(OB_DEBUG_SM, "    %s\n", vals[i+2].value);
     ob_debug_type(OB_DEBUG_SM, "    %s\n", vals[i+3].value);
 
-    if (ob_config_type) {
-        vals[i+4].value = g_strdup("--config-namespace");
-        vals[i+4].length = strlen("--config-namespace") + 1;
-        vals[i+5].value = ob_config_type;
-        vals[i+5].length = strlen(ob_config_type) + 1;
-        ob_debug_type(OB_DEBUG_SM, "    %s\n", vals[i+4].value);
-        ob_debug_type(OB_DEBUG_SM, "    %s\n", vals[i+5].value);
-    }
-
     SmcSetProperties(sm_conn, 1, &list);
     g_free(prop.name);
     g_free(prop.type);
     g_free(vals[i].value);
     g_free(vals[i+2].value);
-    if (ob_config_type)
-        g_free(vals[i+4].value);
     g_free(vals);
 }
 
@@ -527,6 +513,8 @@ static gboolean session_save_to_file(const ObSMSaveData *savedata)
             fprintf(f, "\t<role>%s</role>\n", t);
             g_free(t);
 
+            fprintf(f, "\t<windowtype>%d</windowtype>\n", c->type);
+
             fprintf(f, "\t<desktop>%d</desktop>\n", c->desktop);
             fprintf(f, "\t<x>%d</x>\n", prex);
             fprintf(f, "\t<y>%d</y>\n", prey);
@@ -590,12 +578,14 @@ static gboolean session_state_cmp(ObSessionState *s, ObClient *c)
     ob_debug_type(OB_DEBUG_SM, "  client name: %s \n", c->name);
     ob_debug_type(OB_DEBUG_SM, "  client class: %s \n", c->class);
     ob_debug_type(OB_DEBUG_SM, "  client role: %s \n", c->role);
+    ob_debug_type(OB_DEBUG_SM, "  client type: %s \n", c->type);
     ob_debug_type(OB_DEBUG_SM, "  client command: %s \n",
                   c->wm_command ? c->wm_command : "(null)");
     ob_debug_type(OB_DEBUG_SM, "  state id: %s \n", s->id);
     ob_debug_type(OB_DEBUG_SM, "  state name: %s \n", s->name);
     ob_debug_type(OB_DEBUG_SM, "  state class: %s \n", s->class);
     ob_debug_type(OB_DEBUG_SM, "  state role: %s \n", s->role);
+    ob_debug_type(OB_DEBUG_SM, "  state type: %s \n", s->type);
     ob_debug_type(OB_DEBUG_SM, "  state command: %s \n",
                   s->command ? s->command : "(null)");
 
@@ -604,7 +594,13 @@ static gboolean session_state_cmp(ObSessionState *s, ObClient *c)
     {
         return (!strcmp(s->name, c->name) &&
                 !strcmp(s->class, c->class) &&
-                !strcmp(s->role, c->role));
+                !strcmp(s->role, c->role) &&
+                /* the check for type is to catch broken clients, like
+                   firefox, which open a different window on startup
+                   with the same info as the one we saved. only do this
+                   check for old windows that dont use xsmp, others should
+                   know better ! */
+                (!s->command || c->type == s->type));
     }
     return FALSE;
 }
@@ -653,6 +649,9 @@ static void session_load_file(const gchar *path)
         if (!(n = parse_find_node("role", node->children)))
             goto session_load_bail;
         state->role = parse_string(doc, n);
+        if (!(n = parse_find_node("windowtype", node->children)))
+            goto session_load_bail;
+        state->type = parse_int(doc, n);
         if (!(n = parse_find_node("desktop", node->children)))
             goto session_load_bail;
         state->desktop = parse_int(doc, n);
This page took 0.022189 seconds and 4 git commands to generate.