summaryrefslogtreecommitdiff
path: root/openbox/client.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2010-01-14 17:24:39 -0500
committerDana Jansens <danakj@orodu.net>2010-01-14 18:41:21 -0500
commit6cf3357036561134383198cc8b853abb3fe5a982 (patch)
tree3c359a2ac24f533755a3f7895c936567dac8fa25 /openbox/client.c
parentae85462f2bf0812755a29ea17080b14f681acaf4 (diff)
allow app rules to match windows by their title when mapping
and save the title in the _OB_APP_TITLE property
Diffstat (limited to 'openbox/client.c')
-rw-r--r--openbox/client.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/openbox/client.c b/openbox/client.c
index fd2afed1..f91a783d 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -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 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,
@@ -796,7 +797,8 @@ static ObAppSettings *client_get_settings_state(ObClient *self)
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))
@@ -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;
+ 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;
}
@@ -1083,9 +1089,6 @@ static void client_get_all(ObClient *self, gboolean real)
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;
@@ -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);
+ /* 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);
@@ -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_TITLE, utf8, self->original_title);
switch (self->type) {
case OB_CLIENT_TYPE_NORMAL: