allow app rules to match windows by their title when mapping
[dana/openbox.git] / openbox / client.c
index fd2afed..f91a783 100644 (file)
@@ -236,7 +236,8 @@ void client_manage(Window window, ObPrompt *prompt)
 
     ob_debug("Window type: %d", self->type);
     ob_debug("Window group: 0x%x", self->group?self->group->leader:0);
 
     ob_debug("Window type: %d", self->type);
     ob_debug("Window group: 0x%x", self->group?self->group->leader:0);
-    ob_debug("Window name: %s class: %s role: %s", self->name, self->class, self->role);
+    ob_debug("Window name: %s class: %s role: %s title: %s",
+             self->name, self->class, self->role, self->title);
 
     /* per-app settings override stuff from client_get_all, and return the
        settings for other uses too. the returned settings is a shallow copy,
 
     /* per-app settings override stuff from client_get_all, and return the
        settings for other uses too. the returned settings is a shallow copy,
@@ -796,7 +797,8 @@ static ObAppSettings *client_get_settings_state(ObClient *self)
         gboolean match = TRUE;
 
         g_assert(app->name != NULL || app->class != NULL ||
         gboolean match = TRUE;
 
         g_assert(app->name != NULL || app->class != NULL ||
-                 app->role != NULL || (signed)app->type >= 0);
+                 app->role != NULL || app->title != NULL ||
+                 (signed)app->type >= 0);
 
         if (app->name &&
             !g_pattern_match(app->name, strlen(self->name), self->name, NULL))
 
         if (app->name &&
             !g_pattern_match(app->name, strlen(self->name), self->name, NULL))
@@ -809,6 +811,10 @@ static ObAppSettings *client_get_settings_state(ObClient *self)
                  !g_pattern_match(app->role,
                                   strlen(self->role), self->role, NULL))
             match = FALSE;
                  !g_pattern_match(app->role,
                                   strlen(self->role), self->role, NULL))
             match = FALSE;
+        else if (app->title &&
+                 !g_pattern_match(app->title,
+                                  strlen(self->title), self->title, NULL))
+            match = FALSE;
         else if ((signed)app->type >= 0 && app->type != self->type) {
             match = FALSE;
         }
         else if ((signed)app->type >= 0 && app->type != self->type) {
             match = FALSE;
         }
@@ -1083,9 +1089,6 @@ static void client_get_all(ObClient *self, gboolean real)
        from per-app settings */
     client_get_session_ids(self);
 
        from per-app settings */
     client_get_session_ids(self);
 
-    /* save the values of the variables used for app rule matching */
-    client_save_app_rule_values(self);
-
     /* now we got everything that can affect the decorations */
     if (!real)
         return;
     /* now we got everything that can affect the decorations */
     if (!real)
         return;
@@ -1093,6 +1096,9 @@ static void client_get_all(ObClient *self, gboolean real)
     /* get this early so we have it for debugging */
     client_update_title(self);
 
     /* get this early so we have it for debugging */
     client_update_title(self);
 
+    /* save the values of the variables used for app rule matching */
+    client_save_app_rule_values(self);
+
     client_update_protocols(self);
 
     client_update_wmhints(self);
     client_update_protocols(self);
 
     client_update_wmhints(self);
@@ -2310,6 +2316,7 @@ static void client_save_app_rule_values(ObClient *self)
     OBT_PROP_SETS(self->window, OB_APP_ROLE, utf8, self->role);
     OBT_PROP_SETS(self->window, OB_APP_NAME, utf8, self->name);
     OBT_PROP_SETS(self->window, OB_APP_CLASS, utf8, self->class);
     OBT_PROP_SETS(self->window, OB_APP_ROLE, utf8, self->role);
     OBT_PROP_SETS(self->window, OB_APP_NAME, utf8, self->name);
     OBT_PROP_SETS(self->window, OB_APP_CLASS, utf8, self->class);
+    OBT_PROP_SETS(self->window, OB_APP_TITLE, utf8, self->original_title);
 
     switch (self->type) {
     case OB_CLIENT_TYPE_NORMAL:
 
     switch (self->type) {
     case OB_CLIENT_TYPE_NORMAL: