diff --git a/openbox/client.c b/openbox/client.c index a912acb4..cfcc7da2 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -215,8 +215,8 @@ static ObAppSettings *get_settings(ObClient *client) if (!strcmp(app->name, client->name)) { ob_debug("Window matching: %s\n", app->name); - - return app; + if (!app->role || !strcmp(app->role, client->role)) + return app; } a = a->next; diff --git a/openbox/client.h b/openbox/client.h index e2193e98..ab1c830c 100644 --- a/openbox/client.h +++ b/openbox/client.h @@ -273,6 +273,7 @@ struct _ObClient struct _ObAppSettings { gchar *name; + gchar *role; gboolean decor; gboolean shade; gboolean focus; diff --git a/openbox/config.c b/openbox/config.c index e117de27..5b669685 100644 --- a/openbox/config.c +++ b/openbox/config.c @@ -124,6 +124,8 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc, xmlNodePtr n, c; ObAppSettings *settings = g_new0(ObAppSettings, 1); settings->name = name; + if (!parse_attr_string("role", app, &settings->role)) + settings->role = NULL; settings->decor = TRUE; if ((n = parse_find_node("decor", app->children))) @@ -755,7 +757,11 @@ void config_shutdown() g_free(it->data); g_slist_free(config_menu_files); - for (it = config_per_app_settings; it; it = g_slist_next(it)) + for (it = config_per_app_settings; it; it = g_slist_next(it)) { + ObAppSettings *itd = (ObAppSettings *)it->data; + g_free(itd->name); + g_free(itd->role); g_free(it->data); + } g_slist_free(config_per_app_settings); }