Merge pull request #566 from bebehei/notification-colors
Notification colors
This commit is contained in:
commit
0a2802af75
12
config.h
12
config.h
@ -4,12 +4,12 @@ struct settings defaults = {
|
|||||||
|
|
||||||
.font = "-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*",
|
.font = "-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*",
|
||||||
.markup = MARKUP_NO,
|
.markup = MARKUP_NO,
|
||||||
.normbgcolor = "#1793D1",
|
.colors_norm.bg = "#1793D1",
|
||||||
.normfgcolor = "#DDDDDD",
|
.colors_norm.fg = "#DDDDDD",
|
||||||
.critbgcolor = "#ffaaaa",
|
.colors_crit.bg = "#ffaaaa",
|
||||||
.critfgcolor = "#000000",
|
.colors_crit.fg = "#000000",
|
||||||
.lowbgcolor = "#aaaaff",
|
.colors_low.bg = "#aaaaff",
|
||||||
.lowfgcolor = "#000000",
|
.colors_low.fg = "#000000",
|
||||||
.format = "%s %b", /* default format */
|
.format = "%s %b", /* default format */
|
||||||
|
|
||||||
.timeouts = { S2US(10), S2US(10), S2US(0) }, /* low, normal, critical */
|
.timeouts = { S2US(10), S2US(10), S2US(0) }, /* low, normal, critical */
|
||||||
|
@ -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);
|
dict_value = g_variant_lookup_value(content, "fgcolor", G_VARIANT_TYPE_STRING);
|
||||||
if (dict_value) {
|
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);
|
g_variant_unref(dict_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
dict_value = g_variant_lookup_value(content, "bgcolor", G_VARIANT_TYPE_STRING);
|
dict_value = g_variant_lookup_value(content, "bgcolor", G_VARIANT_TYPE_STRING);
|
||||||
if (dict_value) {
|
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);
|
g_variant_unref(dict_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
dict_value = g_variant_lookup_value(content, "frcolor", G_VARIANT_TYPE_STRING);
|
dict_value = g_variant_lookup_value(content, "frcolor", G_VARIANT_TYPE_STRING);
|
||||||
if (dict_value) {
|
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);
|
g_variant_unref(dict_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -281,9 +281,9 @@ static struct colored_layout *layout_init_shared(cairo_t *c, const struct notifi
|
|||||||
cl->icon = NULL;
|
cl->icon = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
cl->fg = string_to_color(n->colors[ColFG]);
|
cl->fg = string_to_color(n->colors.fg);
|
||||||
cl->bg = string_to_color(n->colors[ColBG]);
|
cl->bg = string_to_color(n->colors.bg);
|
||||||
cl->frame = string_to_color(n->colors[ColFrame]);
|
cl->frame = string_to_color(n->colors.frame);
|
||||||
|
|
||||||
cl->n = n;
|
cl->n = n;
|
||||||
|
|
||||||
|
@ -10,11 +10,6 @@
|
|||||||
|
|
||||||
#include "notification.h"
|
#include "notification.h"
|
||||||
|
|
||||||
#define ColLast 3
|
|
||||||
#define ColFrame 2
|
|
||||||
#define ColFG 1
|
|
||||||
#define ColBG 0
|
|
||||||
|
|
||||||
//!< A structure to describe dunst's global window status
|
//!< A structure to describe dunst's global window status
|
||||||
struct dunst_status {
|
struct dunst_status {
|
||||||
bool fullscreen; //!< a fullscreen window is currently focused
|
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);
|
struct dunst_status dunst_status_get(void);
|
||||||
|
|
||||||
extern const char *colors[3][3];
|
|
||||||
|
|
||||||
void wake_up(void);
|
void wake_up(void);
|
||||||
|
|
||||||
int dunst_main(int argc, char *argv[]);
|
int dunst_main(int argc, char *argv[]);
|
||||||
|
@ -2,7 +2,12 @@
|
|||||||
#ifndef DUNST_MARKUP_H
|
#ifndef DUNST_MARKUP_H
|
||||||
#define 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.
|
* Strip any markup from text; turn it in to plain text.
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
#include "rules.h"
|
#include "rules.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "x11/x.h"
|
|
||||||
|
|
||||||
static void notification_extract_urls(struct notification *n);
|
static void notification_extract_urls(struct notification *n);
|
||||||
static void notification_format_message(struct notification *n);
|
static void notification_format_message(struct notification *n);
|
||||||
@ -61,9 +60,9 @@ void notification_print(const struct notification *n)
|
|||||||
printf("\turgency: %s\n", notification_urgency_to_string(n->urgency));
|
printf("\turgency: %s\n", notification_urgency_to_string(n->urgency));
|
||||||
printf("\ttransient: %d\n", n->transient);
|
printf("\ttransient: %d\n", n->transient);
|
||||||
printf("\tformatted: '%s'\n", n->msg);
|
printf("\tformatted: '%s'\n", n->msg);
|
||||||
printf("\tfg: %s\n", n->colors[ColFG]);
|
printf("\tfg: %s\n", n->colors.fg);
|
||||||
printf("\tbg: %s\n", n->colors[ColBG]);
|
printf("\tbg: %s\n", n->colors.bg);
|
||||||
printf("\tframe: %s\n", n->colors[ColFrame]);
|
printf("\tframe: %s\n", n->colors.frame);
|
||||||
printf("\tfullscreen: %s\n", enum_to_string_fullscreen(n->fullscreen));
|
printf("\tfullscreen: %s\n", enum_to_string_fullscreen(n->fullscreen));
|
||||||
printf("\tprogress: %d\n", n->progress);
|
printf("\tprogress: %d\n", n->progress);
|
||||||
printf("\tstack_tag: %s\n", (n->stack_tag ? n->stack_tag : ""));
|
printf("\tstack_tag: %s\n", (n->stack_tag ? n->stack_tag : ""));
|
||||||
@ -249,9 +248,9 @@ void notification_unref(struct notification *n)
|
|||||||
g_free(n->category);
|
g_free(n->category);
|
||||||
g_free(n->text_to_render);
|
g_free(n->text_to_render);
|
||||||
g_free(n->urls);
|
g_free(n->urls);
|
||||||
g_free(n->colors[ColFG]);
|
g_free(n->colors.fg);
|
||||||
g_free(n->colors[ColBG]);
|
g_free(n->colors.bg);
|
||||||
g_free(n->colors[ColFrame]);
|
g_free(n->colors.frame);
|
||||||
g_free(n->stack_tag);
|
g_free(n->stack_tag);
|
||||||
|
|
||||||
actions_free(n->actions);
|
actions_free(n->actions);
|
||||||
@ -348,12 +347,26 @@ void notification_init(struct notification *n)
|
|||||||
n->icon = g_strdup(settings.icons[n->urgency]);
|
n->icon = g_strdup(settings.icons[n->urgency]);
|
||||||
|
|
||||||
/* Color hints */
|
/* Color hints */
|
||||||
if (!n->colors[ColFG])
|
struct notification_colors defcolors;
|
||||||
n->colors[ColFG] = g_strdup(xctx.colors[ColFG][n->urgency]);
|
switch (n->urgency) {
|
||||||
if (!n->colors[ColBG])
|
case URG_LOW:
|
||||||
n->colors[ColBG] = g_strdup(xctx.colors[ColBG][n->urgency]);
|
defcolors = settings.colors_low;
|
||||||
if (!n->colors[ColFrame])
|
break;
|
||||||
n->colors[ColFrame] = g_strdup(xctx.colors[ColFrame][n->urgency]);
|
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(defcolors.fg);
|
||||||
|
if (!n->colors.bg)
|
||||||
|
n->colors.bg = g_strdup(defcolors.bg);
|
||||||
|
if (!n->colors.frame)
|
||||||
|
n->colors.frame = g_strdup(defcolors.frame);
|
||||||
|
|
||||||
/* Sanitize misc hints */
|
/* Sanitize misc hints */
|
||||||
if (n->progress < 0)
|
if (n->progress < 0)
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#include "settings.h"
|
#include "markup.h"
|
||||||
|
|
||||||
#define DUNST_NOTIF_MAX_CHARS 5000
|
#define DUNST_NOTIF_MAX_CHARS 5000
|
||||||
|
|
||||||
@ -44,6 +44,12 @@ struct actions {
|
|||||||
|
|
||||||
typedef struct _notification_private NotificationPrivate;
|
typedef struct _notification_private NotificationPrivate;
|
||||||
|
|
||||||
|
struct notification_colors {
|
||||||
|
char *frame;
|
||||||
|
char *bg;
|
||||||
|
char *fg;
|
||||||
|
};
|
||||||
|
|
||||||
struct notification {
|
struct notification {
|
||||||
NotificationPrivate *priv;
|
NotificationPrivate *priv;
|
||||||
int id;
|
int id;
|
||||||
@ -68,7 +74,7 @@ struct notification {
|
|||||||
enum markup_mode markup;
|
enum markup_mode markup;
|
||||||
const char *format;
|
const char *format;
|
||||||
const char *script;
|
const char *script;
|
||||||
char *colors[3];
|
struct notification_colors colors;
|
||||||
|
|
||||||
char *stack_tag; /**< stack notifications by tag */
|
char *stack_tag; /**< stack notifications by tag */
|
||||||
|
|
||||||
|
12
src/rules.c
12
src/rules.c
@ -32,16 +32,16 @@ void rule_apply(struct rule *r, struct notification *n)
|
|||||||
g_clear_pointer(&n->raw_icon, rawimage_free);
|
g_clear_pointer(&n->raw_icon, rawimage_free);
|
||||||
}
|
}
|
||||||
if (r->fg) {
|
if (r->fg) {
|
||||||
g_free(n->colors[ColFG]);
|
g_free(n->colors.fg);
|
||||||
n->colors[ColFG] = g_strdup(r->fg);
|
n->colors.fg = g_strdup(r->fg);
|
||||||
}
|
}
|
||||||
if (r->bg) {
|
if (r->bg) {
|
||||||
g_free(n->colors[ColBG]);
|
g_free(n->colors.bg);
|
||||||
n->colors[ColBG] = g_strdup(r->bg);
|
n->colors.bg = g_strdup(r->bg);
|
||||||
}
|
}
|
||||||
if (r->fc) {
|
if (r->fc) {
|
||||||
g_free(n->colors[ColFrame]);
|
g_free(n->colors.frame);
|
||||||
n->colors[ColFrame] = g_strdup(r->fc);
|
n->colors.frame = g_strdup(r->fc);
|
||||||
}
|
}
|
||||||
if (r->format)
|
if (r->format)
|
||||||
n->format = r->format;
|
n->format = r->format;
|
||||||
|
@ -621,21 +621,21 @@ void load_settings(char *cmdline_config_path)
|
|||||||
g_free(c);
|
g_free(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
settings.lowbgcolor = option_get_string(
|
settings.colors_low.bg = option_get_string(
|
||||||
"urgency_low",
|
"urgency_low",
|
||||||
"background", "-lb", defaults.lowbgcolor,
|
"background", "-lb", defaults.colors_low.bg,
|
||||||
"Background color for notifications with low urgency"
|
"Background color for notifications with low urgency"
|
||||||
);
|
);
|
||||||
|
|
||||||
settings.lowfgcolor = option_get_string(
|
settings.colors_low.fg = option_get_string(
|
||||||
"urgency_low",
|
"urgency_low",
|
||||||
"foreground", "-lf", defaults.lowfgcolor,
|
"foreground", "-lf", defaults.colors_low.fg,
|
||||||
"Foreground color for notifications with low urgency"
|
"Foreground color for notifications with low urgency"
|
||||||
);
|
);
|
||||||
|
|
||||||
settings.lowframecolor = option_get_string(
|
settings.colors_low.frame = option_get_string(
|
||||||
"urgency_low",
|
"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"
|
"Frame color for notifications with low urgency"
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -651,21 +651,21 @@ void load_settings(char *cmdline_config_path)
|
|||||||
"Icon for notifications with low urgency"
|
"Icon for notifications with low urgency"
|
||||||
);
|
);
|
||||||
|
|
||||||
settings.normbgcolor = option_get_string(
|
settings.colors_norm.bg = option_get_string(
|
||||||
"urgency_normal",
|
"urgency_normal",
|
||||||
"background", "-nb", defaults.normbgcolor,
|
"background", "-nb", defaults.colors_norm.bg,
|
||||||
"Background color for notifications with normal urgency"
|
"Background color for notifications with normal urgency"
|
||||||
);
|
);
|
||||||
|
|
||||||
settings.normfgcolor = option_get_string(
|
settings.colors_norm.fg = option_get_string(
|
||||||
"urgency_normal",
|
"urgency_normal",
|
||||||
"foreground", "-nf", defaults.normfgcolor,
|
"foreground", "-nf", defaults.colors_norm.fg,
|
||||||
"Foreground color for notifications with normal urgency"
|
"Foreground color for notifications with normal urgency"
|
||||||
);
|
);
|
||||||
|
|
||||||
settings.normframecolor = option_get_string(
|
settings.colors_norm.frame = option_get_string(
|
||||||
"urgency_normal",
|
"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"
|
"Frame color for notifications with normal urgency"
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -681,21 +681,21 @@ void load_settings(char *cmdline_config_path)
|
|||||||
"Icon for notifications with normal urgency"
|
"Icon for notifications with normal urgency"
|
||||||
);
|
);
|
||||||
|
|
||||||
settings.critbgcolor = option_get_string(
|
settings.colors_crit.bg = option_get_string(
|
||||||
"urgency_critical",
|
"urgency_critical",
|
||||||
"background", "-cb", defaults.critbgcolor,
|
"background", "-cb", defaults.colors_crit.bg,
|
||||||
"Background color for notifications with critical urgency"
|
"Background color for notifications with critical urgency"
|
||||||
);
|
);
|
||||||
|
|
||||||
settings.critfgcolor = option_get_string(
|
settings.colors_crit.fg = option_get_string(
|
||||||
"urgency_critical",
|
"urgency_critical",
|
||||||
"foreground", "-cf", defaults.critfgcolor,
|
"foreground", "-cf", defaults.colors_crit.fg,
|
||||||
"Foreground color for notifications with critical urgency"
|
"Foreground color for notifications with ciritical urgency"
|
||||||
);
|
);
|
||||||
|
|
||||||
settings.critframecolor = option_get_string(
|
settings.colors_crit.frame = option_get_string(
|
||||||
"urgency_critical",
|
"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"
|
"Frame color for notifications with critical urgency"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#include "markup.h"
|
||||||
|
#include "notification.h"
|
||||||
#include "x11/x.h"
|
#include "x11/x.h"
|
||||||
|
|
||||||
enum alignment { ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT };
|
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 icon_position { ICON_LEFT, ICON_RIGHT, ICON_OFF };
|
||||||
enum separator_color { SEP_FOREGROUND, SEP_AUTO, SEP_FRAME, SEP_CUSTOM };
|
enum separator_color { SEP_FOREGROUND, SEP_AUTO, SEP_FRAME, SEP_CUSTOM };
|
||||||
enum follow_mode { FOLLOW_NONE, FOLLOW_MOUSE, FOLLOW_KEYBOARD };
|
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 };
|
enum mouse_action { MOUSE_NONE, MOUSE_DO_ACTION, MOUSE_CLOSE_CURRENT, MOUSE_CLOSE_ALL };
|
||||||
|
|
||||||
struct geometry {
|
struct geometry {
|
||||||
@ -33,15 +34,9 @@ struct settings {
|
|||||||
bool stack_duplicates;
|
bool stack_duplicates;
|
||||||
bool hide_duplicate_count;
|
bool hide_duplicate_count;
|
||||||
char *font;
|
char *font;
|
||||||
char *normbgcolor;
|
struct notification_colors colors_low;
|
||||||
char *normfgcolor;
|
struct notification_colors colors_norm;
|
||||||
char *normframecolor;
|
struct notification_colors colors_crit;
|
||||||
char *critbgcolor;
|
|
||||||
char *critfgcolor;
|
|
||||||
char *critframecolor;
|
|
||||||
char *lowbgcolor;
|
|
||||||
char *lowfgcolor;
|
|
||||||
char *lowframecolor;
|
|
||||||
char *format;
|
char *format;
|
||||||
gint64 timeouts[3];
|
gint64 timeouts[3];
|
||||||
char *icons[3];
|
char *icons[3];
|
||||||
|
21
src/x11/x.c
21
src/x11/x.c
@ -464,27 +464,6 @@ void x_setup(void)
|
|||||||
x_shortcut_grab(&settings.context_ks);
|
x_shortcut_grab(&settings.context_ks);
|
||||||
x_shortcut_ungrab(&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[ColBG][URG_LOW] = settings.lowbgcolor;
|
|
||||||
xctx.colors[ColBG][URG_NORM] = settings.normbgcolor;
|
|
||||||
xctx.colors[ColBG][URG_CRIT] = settings.critbgcolor;
|
|
||||||
|
|
||||||
if (settings.lowframecolor)
|
|
||||||
xctx.colors[ColFrame][URG_LOW] = settings.lowframecolor;
|
|
||||||
else
|
|
||||||
xctx.colors[ColFrame][URG_LOW] = settings.frame_color;
|
|
||||||
if (settings.normframecolor)
|
|
||||||
xctx.colors[ColFrame][URG_NORM] = settings.normframecolor;
|
|
||||||
else
|
|
||||||
xctx.colors[ColFrame][URG_NORM] = settings.frame_color;
|
|
||||||
if (settings.critframecolor)
|
|
||||||
xctx.colors[ColFrame][URG_CRIT] = settings.critframecolor;
|
|
||||||
else
|
|
||||||
xctx.colors[ColFrame][URG_CRIT] = settings.frame_color;
|
|
||||||
|
|
||||||
xctx.screensaver_info = XScreenSaverAllocInfo();
|
xctx.screensaver_info = XScreenSaverAllocInfo();
|
||||||
|
|
||||||
init_screens();
|
init_screens();
|
||||||
|
@ -37,7 +37,6 @@ struct dimensions {
|
|||||||
|
|
||||||
struct x_context {
|
struct x_context {
|
||||||
Display *dpy;
|
Display *dpy;
|
||||||
const char *colors[3][3];
|
|
||||||
XScreenSaverInfo *screensaver_info;
|
XScreenSaverInfo *screensaver_info;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user