From c3cd623f414a49518897d8c04939921ce62162e3 Mon Sep 17 00:00:00 2001 From: Benedikt Heine Date: Fri, 12 Jan 2018 18:15:22 +0100 Subject: [PATCH 1/4] Use notification_colors struct for notification colors --- src/dbus.c | 6 +++--- src/draw.c | 6 +++--- src/notification.c | 24 ++++++++++++------------ src/notification.h | 8 +++++++- src/rules.c | 12 ++++++------ 5 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/dbus.c b/src/dbus.c index 41fbddc..bc07096 100644 --- a/src/dbus.c +++ b/src/dbus.c @@ -192,19 +192,19 @@ static struct notification *dbus_message_to_notification(const gchar *sender, GV dict_value = g_variant_lookup_value(content, "fgcolor", G_VARIANT_TYPE_STRING); if (dict_value) { - n->colors[ColFG] = g_variant_dup_string(dict_value, NULL); + n->colors.fg = g_variant_dup_string(dict_value, NULL); g_variant_unref(dict_value); } dict_value = g_variant_lookup_value(content, "bgcolor", G_VARIANT_TYPE_STRING); if (dict_value) { - n->colors[ColBG] = g_variant_dup_string(dict_value, NULL); + n->colors.bg = g_variant_dup_string(dict_value, NULL); g_variant_unref(dict_value); } dict_value = g_variant_lookup_value(content, "frcolor", G_VARIANT_TYPE_STRING); if (dict_value) { - n->colors[ColFrame] = g_variant_dup_string(dict_value, NULL); + n->colors.frame = g_variant_dup_string(dict_value, NULL); g_variant_unref(dict_value); } diff --git a/src/draw.c b/src/draw.c index cf51ae1..5e50e0b 100644 --- a/src/draw.c +++ b/src/draw.c @@ -281,9 +281,9 @@ static struct colored_layout *layout_init_shared(cairo_t *c, const struct notifi cl->icon = NULL; } - cl->fg = string_to_color(n->colors[ColFG]); - cl->bg = string_to_color(n->colors[ColBG]); - cl->frame = string_to_color(n->colors[ColFrame]); + cl->fg = string_to_color(n->colors.fg); + cl->bg = string_to_color(n->colors.bg); + cl->frame = string_to_color(n->colors.frame); cl->n = n; diff --git a/src/notification.c b/src/notification.c index fabda53..66d9b3b 100644 --- a/src/notification.c +++ b/src/notification.c @@ -61,9 +61,9 @@ void notification_print(const struct notification *n) printf("\turgency: %s\n", notification_urgency_to_string(n->urgency)); printf("\ttransient: %d\n", n->transient); printf("\tformatted: '%s'\n", n->msg); - printf("\tfg: %s\n", n->colors[ColFG]); - printf("\tbg: %s\n", n->colors[ColBG]); - printf("\tframe: %s\n", n->colors[ColFrame]); + printf("\tfg: %s\n", n->colors.fg); + printf("\tbg: %s\n", n->colors.bg); + printf("\tframe: %s\n", n->colors.frame); printf("\tfullscreen: %s\n", enum_to_string_fullscreen(n->fullscreen)); printf("\tprogress: %d\n", n->progress); printf("\tstack_tag: %s\n", (n->stack_tag ? n->stack_tag : "")); @@ -249,9 +249,9 @@ void notification_unref(struct notification *n) g_free(n->category); g_free(n->text_to_render); g_free(n->urls); - g_free(n->colors[ColFG]); - g_free(n->colors[ColBG]); - g_free(n->colors[ColFrame]); + g_free(n->colors.fg); + g_free(n->colors.bg); + g_free(n->colors.frame); g_free(n->stack_tag); actions_free(n->actions); @@ -348,12 +348,12 @@ void notification_init(struct notification *n) n->icon = g_strdup(settings.icons[n->urgency]); /* Color hints */ - if (!n->colors[ColFG]) - n->colors[ColFG] = g_strdup(xctx.colors[ColFG][n->urgency]); - if (!n->colors[ColBG]) - n->colors[ColBG] = g_strdup(xctx.colors[ColBG][n->urgency]); - if (!n->colors[ColFrame]) - n->colors[ColFrame] = g_strdup(xctx.colors[ColFrame][n->urgency]); + if (!n->colors.fg) + n->colors.fg = g_strdup(xctx.colors[ColFG][n->urgency]); + if (!n->colors.bg) + n->colors.bg = g_strdup(xctx.colors[ColBG][n->urgency]); + if (!n->colors.frame) + n->colors.frame = g_strdup(xctx.colors[ColFrame][n->urgency]); /* Sanitize misc hints */ if (n->progress < 0) diff --git a/src/notification.h b/src/notification.h index 185232d..de18926 100644 --- a/src/notification.h +++ b/src/notification.h @@ -44,6 +44,12 @@ struct actions { typedef struct _notification_private NotificationPrivate; +struct notification_colors { + char *frame; + char *bg; + char *fg; +}; + struct notification { NotificationPrivate *priv; int id; @@ -68,7 +74,7 @@ struct notification { enum markup_mode markup; const char *format; const char *script; - char *colors[3]; + struct notification_colors colors; char *stack_tag; /**< stack notifications by tag */ diff --git a/src/rules.c b/src/rules.c index 104b4f2..d23c580 100644 --- a/src/rules.c +++ b/src/rules.c @@ -32,16 +32,16 @@ void rule_apply(struct rule *r, struct notification *n) g_clear_pointer(&n->raw_icon, rawimage_free); } if (r->fg) { - g_free(n->colors[ColFG]); - n->colors[ColFG] = g_strdup(r->fg); + g_free(n->colors.fg); + n->colors.fg = g_strdup(r->fg); } if (r->bg) { - g_free(n->colors[ColBG]); - n->colors[ColBG] = g_strdup(r->bg); + g_free(n->colors.bg); + n->colors.bg = g_strdup(r->bg); } if (r->fc) { - g_free(n->colors[ColFrame]); - n->colors[ColFrame] = g_strdup(r->fc); + g_free(n->colors.frame); + n->colors.frame = g_strdup(r->fc); } if (r->format) n->format = r->format; From 3e205ff15993f71f9c4cfbed14348e8f2ceec8d9 Mon Sep 17 00:00:00 2001 From: Benedikt Heine Date: Fri, 12 Jan 2018 19:10:50 +0100 Subject: [PATCH 2/4] Use notification_colors struct in settings --- config.h | 12 ++++++------ src/markup.h | 7 ++++++- src/notification.h | 2 +- src/settings.c | 32 ++++++++++++++++---------------- src/settings.h | 15 +++++---------- src/x11/x.c | 24 ++++++++++++------------ 6 files changed, 46 insertions(+), 46 deletions(-) diff --git a/config.h b/config.h index 42de31d..25f35b8 100644 --- a/config.h +++ b/config.h @@ -4,12 +4,12 @@ struct settings defaults = { .font = "-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*", .markup = MARKUP_NO, -.normbgcolor = "#1793D1", -.normfgcolor = "#DDDDDD", -.critbgcolor = "#ffaaaa", -.critfgcolor = "#000000", -.lowbgcolor = "#aaaaff", -.lowfgcolor = "#000000", +.colors_norm.bg = "#1793D1", +.colors_norm.fg = "#DDDDDD", +.colors_crit.bg = "#ffaaaa", +.colors_crit.fg = "#000000", +.colors_low.bg = "#aaaaff", +.colors_low.fg = "#000000", .format = "%s %b", /* default format */ .timeouts = { S2US(10), S2US(10), S2US(0) }, /* low, normal, critical */ diff --git a/src/markup.h b/src/markup.h index aea4f0f..41b0e9a 100644 --- a/src/markup.h +++ b/src/markup.h @@ -2,7 +2,12 @@ #ifndef DUNST_MARKUP_H #define DUNST_MARKUP_H -#include "settings.h" +enum markup_mode { + MARKUP_NULL, + MARKUP_NO, + MARKUP_STRIP, + MARKUP_FULL +}; /** * Strip any markup from text; turn it in to plain text. diff --git a/src/notification.h b/src/notification.h index de18926..cc1e26e 100644 --- a/src/notification.h +++ b/src/notification.h @@ -5,7 +5,7 @@ #include #include -#include "settings.h" +#include "markup.h" #define DUNST_NOTIF_MAX_CHARS 5000 diff --git a/src/settings.c b/src/settings.c index bdd299f..fb04d85 100644 --- a/src/settings.c +++ b/src/settings.c @@ -621,19 +621,19 @@ void load_settings(char *cmdline_config_path) g_free(c); } - settings.lowbgcolor = option_get_string( + settings.colors_low.bg = option_get_string( "urgency_low", - "background", "-lb", defaults.lowbgcolor, + "background", "-lb", defaults.colors_low.bg, "Background color for notifications with low urgency" ); - settings.lowfgcolor = option_get_string( + settings.colors_low.fg = option_get_string( "urgency_low", - "foreground", "-lf", defaults.lowfgcolor, + "foreground", "-lf", defaults.colors_low.fg, "Foreground color for notifications with low urgency" ); - settings.lowframecolor = option_get_string( + settings.colors_low.frame = option_get_string( "urgency_low", "frame_color", "-lfr", NULL, "Frame color for notifications with low urgency" @@ -651,19 +651,19 @@ void load_settings(char *cmdline_config_path) "Icon for notifications with low urgency" ); - settings.normbgcolor = option_get_string( + settings.colors_norm.bg = option_get_string( "urgency_normal", - "background", "-nb", defaults.normbgcolor, + "background", "-nb", defaults.colors_norm.bg, "Background color for notifications with normal urgency" ); - settings.normfgcolor = option_get_string( + settings.colors_norm.fg = option_get_string( "urgency_normal", - "foreground", "-nf", defaults.normfgcolor, + "foreground", "-nf", defaults.colors_norm.fg, "Foreground color for notifications with normal urgency" ); - settings.normframecolor = option_get_string( + settings.colors_norm.frame = option_get_string( "urgency_normal", "frame_color", "-nfr", NULL, "Frame color for notifications with normal urgency" @@ -681,19 +681,19 @@ void load_settings(char *cmdline_config_path) "Icon for notifications with normal urgency" ); - settings.critbgcolor = option_get_string( + settings.colors_crit.bg = option_get_string( "urgency_critical", - "background", "-cb", defaults.critbgcolor, + "background", "-cb", defaults.colors_crit.bg, "Background color for notifications with critical urgency" ); - settings.critfgcolor = option_get_string( + settings.colors_crit.fg = option_get_string( "urgency_critical", - "foreground", "-cf", defaults.critfgcolor, - "Foreground color for notifications with critical urgency" + "foreground", "-cf", defaults.colors_crit.fg, + "Foreground color for notifications with ciritical urgency" ); - settings.critframecolor = option_get_string( + settings.colors_crit.frame = option_get_string( "urgency_critical", "frame_color", "-cfr", NULL, "Frame color for notifications with critical urgency" diff --git a/src/settings.h b/src/settings.h index 21419e0..8e64507 100644 --- a/src/settings.h +++ b/src/settings.h @@ -4,6 +4,8 @@ #include +#include "markup.h" +#include "notification.h" #include "x11/x.h" enum alignment { ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT }; @@ -11,7 +13,6 @@ enum ellipsize { ELLIPSE_START, ELLIPSE_MIDDLE, ELLIPSE_END }; enum icon_position { ICON_LEFT, ICON_RIGHT, ICON_OFF }; enum separator_color { SEP_FOREGROUND, SEP_AUTO, SEP_FRAME, SEP_CUSTOM }; enum follow_mode { FOLLOW_NONE, FOLLOW_MOUSE, FOLLOW_KEYBOARD }; -enum markup_mode { MARKUP_NULL, MARKUP_NO, MARKUP_STRIP, MARKUP_FULL }; enum mouse_action { MOUSE_NONE, MOUSE_DO_ACTION, MOUSE_CLOSE_CURRENT, MOUSE_CLOSE_ALL }; struct geometry { @@ -33,15 +34,9 @@ struct settings { bool stack_duplicates; bool hide_duplicate_count; char *font; - char *normbgcolor; - char *normfgcolor; - char *normframecolor; - char *critbgcolor; - char *critfgcolor; - char *critframecolor; - char *lowbgcolor; - char *lowfgcolor; - char *lowframecolor; + struct notification_colors colors_low; + struct notification_colors colors_norm; + struct notification_colors colors_crit; char *format; gint64 timeouts[3]; char *icons[3]; diff --git a/src/x11/x.c b/src/x11/x.c index ca613a6..6007fc1 100644 --- a/src/x11/x.c +++ b/src/x11/x.c @@ -464,24 +464,24 @@ void x_setup(void) x_shortcut_grab(&settings.context_ks); x_shortcut_ungrab(&settings.context_ks); - xctx.colors[ColFG][URG_LOW] = settings.lowfgcolor; - xctx.colors[ColFG][URG_NORM] = settings.normfgcolor; - xctx.colors[ColFG][URG_CRIT] = settings.critfgcolor; + xctx.colors[ColFG][URG_LOW] = settings.colors_low.fg; + xctx.colors[ColFG][URG_NORM] = settings.colors_norm.fg; + xctx.colors[ColFG][URG_CRIT] = settings.colors_crit.fg; - xctx.colors[ColBG][URG_LOW] = settings.lowbgcolor; - xctx.colors[ColBG][URG_NORM] = settings.normbgcolor; - xctx.colors[ColBG][URG_CRIT] = settings.critbgcolor; + xctx.colors[ColBG][URG_LOW] = settings.colors_low.bg; + xctx.colors[ColBG][URG_NORM] = settings.colors_norm.bg; + xctx.colors[ColBG][URG_CRIT] = settings.colors_crit.bg; - if (settings.lowframecolor) - xctx.colors[ColFrame][URG_LOW] = settings.lowframecolor; + if (settings.colors_low.frame) + xctx.colors[ColFrame][URG_LOW] = settings.colors_low.frame; else xctx.colors[ColFrame][URG_LOW] = settings.frame_color; - if (settings.normframecolor) - xctx.colors[ColFrame][URG_NORM] = settings.normframecolor; + if (settings.colors_norm.frame) + xctx.colors[ColFrame][URG_NORM] = settings.colors_norm.frame; else xctx.colors[ColFrame][URG_NORM] = settings.frame_color; - if (settings.critframecolor) - xctx.colors[ColFrame][URG_CRIT] = settings.critframecolor; + if (settings.colors_crit.frame) + xctx.colors[ColFrame][URG_CRIT] = settings.colors_crit.frame; else xctx.colors[ColFrame][URG_CRIT] = settings.frame_color; From 7e81506226acc3841745ec14ac767819f1eb86f7 Mon Sep 17 00:00:00 2001 From: Benedikt Heine Date: Fri, 12 Jan 2018 19:57:33 +0100 Subject: [PATCH 3/4] Remove colors field from xctx The xctx color field is a full duplicate of the settings logic. Only logic included in xctx color fields, are the frame colors, which fall back to the global frame setting. So, this required to handle it directly in settings.c --- src/notification.c | 21 +++++++++++++++++---- src/settings.c | 6 +++--- src/x11/x.c | 21 --------------------- src/x11/x.h | 1 - 4 files changed, 20 insertions(+), 29 deletions(-) diff --git a/src/notification.c b/src/notification.c index 66d9b3b..9657cc1 100644 --- a/src/notification.c +++ b/src/notification.c @@ -22,7 +22,6 @@ #include "rules.h" #include "settings.h" #include "utils.h" -#include "x11/x.h" static void notification_extract_urls(struct notification *n); static void notification_format_message(struct notification *n); @@ -348,12 +347,26 @@ void notification_init(struct notification *n) n->icon = g_strdup(settings.icons[n->urgency]); /* Color hints */ + struct notification_colors defcolors; + switch (n->urgency) { + case URG_LOW: + defcolors = settings.colors_low; + break; + case URG_NORM: + defcolors = settings.colors_norm; + break; + case URG_CRIT: + defcolors = settings.colors_crit; + break; + default: + g_error("Unhandled urgency type: %d", n->urgency); + } if (!n->colors.fg) - n->colors.fg = g_strdup(xctx.colors[ColFG][n->urgency]); + n->colors.fg = g_strdup(defcolors.fg); if (!n->colors.bg) - n->colors.bg = g_strdup(xctx.colors[ColBG][n->urgency]); + n->colors.bg = g_strdup(defcolors.bg); if (!n->colors.frame) - n->colors.frame = g_strdup(xctx.colors[ColFrame][n->urgency]); + n->colors.frame = g_strdup(defcolors.frame); /* Sanitize misc hints */ if (n->progress < 0) diff --git a/src/settings.c b/src/settings.c index fb04d85..64883d2 100644 --- a/src/settings.c +++ b/src/settings.c @@ -635,7 +635,7 @@ void load_settings(char *cmdline_config_path) settings.colors_low.frame = option_get_string( "urgency_low", - "frame_color", "-lfr", NULL, + "frame_color", "-lfr", settings.frame_color ? settings.frame_color : defaults.colors_low.frame, "Frame color for notifications with low urgency" ); @@ -665,7 +665,7 @@ void load_settings(char *cmdline_config_path) settings.colors_norm.frame = option_get_string( "urgency_normal", - "frame_color", "-nfr", NULL, + "frame_color", "-nfr", settings.frame_color ? settings.frame_color : defaults.colors_norm.frame, "Frame color for notifications with normal urgency" ); @@ -695,7 +695,7 @@ void load_settings(char *cmdline_config_path) settings.colors_crit.frame = option_get_string( "urgency_critical", - "frame_color", "-cfr", NULL, + "frame_color", "-cfr", settings.frame_color ? settings.frame_color : defaults.colors_crit.frame, "Frame color for notifications with critical urgency" ); diff --git a/src/x11/x.c b/src/x11/x.c index 6007fc1..8a8a285 100644 --- a/src/x11/x.c +++ b/src/x11/x.c @@ -464,27 +464,6 @@ void x_setup(void) x_shortcut_grab(&settings.context_ks); x_shortcut_ungrab(&settings.context_ks); - xctx.colors[ColFG][URG_LOW] = settings.colors_low.fg; - xctx.colors[ColFG][URG_NORM] = settings.colors_norm.fg; - xctx.colors[ColFG][URG_CRIT] = settings.colors_crit.fg; - - xctx.colors[ColBG][URG_LOW] = settings.colors_low.bg; - xctx.colors[ColBG][URG_NORM] = settings.colors_norm.bg; - xctx.colors[ColBG][URG_CRIT] = settings.colors_crit.bg; - - if (settings.colors_low.frame) - xctx.colors[ColFrame][URG_LOW] = settings.colors_low.frame; - else - xctx.colors[ColFrame][URG_LOW] = settings.frame_color; - if (settings.colors_norm.frame) - xctx.colors[ColFrame][URG_NORM] = settings.colors_norm.frame; - else - xctx.colors[ColFrame][URG_NORM] = settings.frame_color; - if (settings.colors_crit.frame) - xctx.colors[ColFrame][URG_CRIT] = settings.colors_crit.frame; - else - xctx.colors[ColFrame][URG_CRIT] = settings.frame_color; - xctx.screensaver_info = XScreenSaverAllocInfo(); init_screens(); diff --git a/src/x11/x.h b/src/x11/x.h index 6f4ced1..3ed21e3 100644 --- a/src/x11/x.h +++ b/src/x11/x.h @@ -37,7 +37,6 @@ struct dimensions { struct x_context { Display *dpy; - const char *colors[3][3]; XScreenSaverInfo *screensaver_info; }; From ecfe64c4bdf28adcfd8e4a9ef38786f88fcae4aa Mon Sep 17 00:00:00 2001 From: Benedikt Heine Date: Fri, 12 Jan 2018 19:57:58 +0100 Subject: [PATCH 4/4] Cleanup unused macros --- src/dunst.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/dunst.h b/src/dunst.h index 47a2b35..60c9dc4 100644 --- a/src/dunst.h +++ b/src/dunst.h @@ -10,11 +10,6 @@ #include "notification.h" -#define ColLast 3 -#define ColFrame 2 -#define ColFG 1 -#define ColBG 0 - //!< A structure to describe dunst's global window status struct dunst_status { bool fullscreen; //!< a fullscreen window is currently focused @@ -38,8 +33,6 @@ void dunst_status(const enum dunst_status_field field, struct dunst_status dunst_status_get(void); -extern const char *colors[3][3]; - void wake_up(void); int dunst_main(int argc, char *argv[]);