aboutsummaryrefslogtreecommitdiffstats
path: root/swaybar
diff options
context:
space:
mode:
authorLibravatar Ian Fan <ianfan0@gmail.com>2019-06-15 08:58:24 +0100
committerLibravatar Simon Ser <contact@emersion.fr>2020-03-30 17:31:00 +0200
commit3b894c387dc38e8715186d5c0171b6048b36c435 (patch)
treee562ef9007dbe4fc9f4364830211583e85a1b457 /swaybar
parenttray: better errors when parsing index.theme (diff)
downloadsway-3b894c387dc38e8715186d5c0171b6048b36c435.tar.gz
sway-3b894c387dc38e8715186d5c0171b6048b36c435.tar.zst
sway-3b894c387dc38e8715186d5c0171b6048b36c435.zip
tray: allow themes to inherit from multiple themes
Diffstat (limited to 'swaybar')
-rw-r--r--swaybar/tray/icon.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/swaybar/tray/icon.c b/swaybar/tray/icon.c
index 9c62911d..69df3582 100644
--- a/swaybar/tray/icon.c
+++ b/swaybar/tray/icon.c
@@ -69,7 +69,7 @@ static void destroy_theme(struct icon_theme *theme) {
69 } 69 }
70 free(theme->name); 70 free(theme->name);
71 free(theme->comment); 71 free(theme->comment);
72 free(theme->inherits); 72 list_free_items_and_destroy(theme->inherits);
73 list_free_items_and_destroy(theme->directories); 73 list_free_items_and_destroy(theme->directories);
74 free(theme->dir); 74 free(theme->dir);
75 75
@@ -149,7 +149,7 @@ static const char *entry_handler(char *group, char *key, char *value,
149 } else if (strcmp(key, "Comment") == 0) { 149 } else if (strcmp(key, "Comment") == 0) {
150 theme->comment = strdup(value); 150 theme->comment = strdup(value);
151 } else if (strcmp(key, "Inherits") == 0) { 151 } else if (strcmp(key, "Inherits") == 0) {
152 theme->inherits = strdup(value); 152 theme->inherits = split_string(value, ",");
153 } else if (strcmp(key, "Directories") == 0) { 153 } else if (strcmp(key, "Directories") == 0) {
154 theme->directories = split_string(value, ","); 154 theme->directories = split_string(value, ",");
155 } // Ignored: ScaledDirectories, Hidden, Example 155 } // Ignored: ScaledDirectories, Hidden, Example
@@ -496,8 +496,13 @@ static char *find_icon_with_theme(list_t *basedirs, list_t *themes, char *name,
496 } 496 }
497 497
498 if (!icon && theme->inherits) { 498 if (!icon && theme->inherits) {
499 icon = find_icon_with_theme(basedirs, themes, name, size, 499 for (int i = 0; i < theme->inherits->length; ++i) {
500 theme->inherits, min_size, max_size); 500 icon = find_icon_with_theme(basedirs, themes, name, size,
501 theme->inherits->items[i], min_size, max_size);
502 if (icon) {
503 break;
504 }
505 }
501 } 506 }
502 507
503 return icon; 508 return icon;