Update tag colors

This kind of incurs a lot of writes usually for no reason. The only
place this matters is when cold-opening a /query. I wonder if there's a
better way to do that.
weechat-hashes
Curtis McEnroe 2019-02-25 16:12:41 -05:00
parent 6b97c59756
commit d85c1c3f96
No known key found for this signature in database
GPG Key ID: CEA2F97ADCFCD77C
2 changed files with 10 additions and 3 deletions

8
tag.c
View File

@ -45,11 +45,15 @@ struct Tag tagFind(const char *name) {
struct Tag tagFor(const char *name, enum IRCColor color) { struct Tag tagFor(const char *name, enum IRCColor color) {
struct Tag tag = tagFind(name); struct Tag tag = tagFind(name);
if (tag.id != TagNone.id) return tag; if (tag.id != TagNone.id) {
tag.color = tags.color[tag.id] = color;
return tag;
}
if (tags.len == TagsLen) return TagStatus; if (tags.len == TagsLen) return TagStatus;
size_t id = tags.len++; size_t id = tags.len++;
tags.name[id] = strdup(name); tags.name[id] = strdup(name);
if (!tags.name[id]) err(EX_OSERR, "strdup");
tags.color[id] = color; tags.color[id] = color;
if (!tags.name[id]) err(EX_OSERR, "strdup");
return (struct Tag) { id, tags.name[id], color }; return (struct Tag) { id, tags.name[id], color };
} }

5
ui.c
View File

@ -85,7 +85,10 @@ static void windowRemove(struct Window *win) {
static struct Window *windowFor(struct Tag tag) { static struct Window *windowFor(struct Tag tag) {
struct Window *win = windows.tag[tag.id]; struct Window *win = windows.tag[tag.id];
if (win) return win; if (win) {
win->tag = tag;
return win;
}
win = calloc(1, sizeof(*win)); win = calloc(1, sizeof(*win));
if (!win) err(EX_OSERR, "calloc"); if (!win) err(EX_OSERR, "calloc");