obey urgency

This commit is contained in:
Sascha Kruse 2011-09-14 00:26:28 +02:00
parent 732b52480f
commit 0d84f1c720
2 changed files with 76 additions and 10 deletions

56
dunst.c
View File

@ -25,6 +25,7 @@ typedef struct _msg_queue_t {
struct _msg_queue_t *next;
time_t start;
int timeout;
int urgency;
} msg_queue_t;
typedef struct _dimension_t {
@ -44,7 +45,13 @@ typedef struct _screen_info {
static const char *font = NULL;
static const char *normbgcolor = "#cccccc";
static const char *normfgcolor = "#000000";
static const char *critbgcolor = "#ffaaaa";
static const char *critfgcolor = "#000000";
static const char *lowbgcolor = "#aaaaff";
static const char *lowfgcolor = "#000000";
static unsigned long normcol[ColLast];
static unsigned long critcol[ColLast];
static unsigned long lowcol[ColLast];
static Atom utf8;
static DC *dc;
static Window win;
@ -60,7 +67,7 @@ static dimension_t geometry;
static int font_h;
/* list functions */
msg_queue_t *append(msg_queue_t *queue, char *msg, int to);
msg_queue_t *append(msg_queue_t *queue, char *msg, int to, int urgency);
msg_queue_t *delete(msg_queue_t *elem);
msg_queue_t *pop(msg_queue_t *queue);
int list_len(msg_queue_t *list);
@ -80,17 +87,18 @@ char *xml_unescape(char *str);
#include "dunst_dbus.h"
msg_queue_t*
append(msg_queue_t *queue, char *msg, int to) {
append(msg_queue_t *queue, char *msg, int to, int urgency) {
msg_queue_t *new = malloc(sizeof(msg_queue_t));
msg_queue_t *last;
new->msg = xml_unescape(msg);
new->urgency = urgency;
if(to == -1) {
new->timeout = global_timeout;
} else {
new->timeout = to;
}
new->start = 0;
printf("%s (timeout: %d)\n", new->msg, new->timeout);
printf("%s (timeout: %d, urgency: %d)\n", new->msg, new->timeout, urgency);
new->next = NULL;
if(queue == NULL) {
return new;
@ -267,7 +275,25 @@ drawmsg(void) {
if(cur_msg->start == 0)
cur_msg->start = now;
drawtext(dc, cur_msg->msg, normcol);
switch ( cur_msg->urgency ) {
case 0 :
drawrect(dc, 0 , dc->y, width, font_h, True, BG(dc, lowcol));
drawtext(dc, cur_msg->msg, lowcol);
break;
case 1 :
drawrect(dc, 0, dc->y, width, font_h, True, BG(dc, normcol));
drawtext(dc, cur_msg->msg, normcol);
break;
case 2 :
drawrect(dc, 0, dc->y, width, font_h, True, BG(dc, critcol));
drawtext(dc, cur_msg->msg, critcol);
break;
default :
drawrect(dc, 0 ,dc->y, width, font_h, True, BG(dc, lowcol));
drawtext(dc, cur_msg->msg, normcol);
break;
}
dc->y += font_h;
cur_msg = cur_msg->next;
}
@ -342,8 +368,12 @@ setup(void) {
}
root = RootWindow(dc->dpy, DefaultScreen(dc->dpy));
normcol[ColBG] = getcolor(dc, normbgcolor);
normcol[ColFG] = getcolor(dc, normfgcolor);
normcol[ColBG] = getcolor(dc, normbgcolor);
normcol[ColFG] = getcolor(dc, normfgcolor);
critcol[ColBG] = getcolor(dc, critbgcolor);
critcol[ColFG] = getcolor(dc, critfgcolor);
lowcol[ColBG] = getcolor(dc, lowbgcolor);
lowcol[ColFG] = getcolor(dc, lowfgcolor);
utf8 = XInternAtom(dc->dpy, "UTF8_STRING", False);
@ -483,14 +513,22 @@ main(int argc, char *argv[]) {
}
else if(!strcmp(argv[i], "-fn"))
font = argv[++i];
else if(!strcmp(argv[i], "-nb") || !strcmp(argv[i], "-bg"))
else if(!strcmp(argv[i], "-nb"))
normbgcolor = argv[++i];
else if(!strcmp(argv[i], "-nf") || !strcmp(argv[i], "-fg"))
else if(!strcmp(argv[i], "-nf"))
normfgcolor = argv[++i];
else if(!strcmp(argv[i], "-lb"))
lowbgcolor = argv[++i];
else if(!strcmp(argv[i], "-lf"))
lowfgcolor = argv[++i];
else if(!strcmp(argv[i], "-cb"))
critbgcolor = argv[++i];
else if(!strcmp(argv[i], "-cf"))
critfgcolor = argv[++i];
else if(!strcmp(argv[i], "-to"))
global_timeout = atoi(argv[++i]);
else if(!strcmp(argv[i], "-msg")) {
msgqueue = append(msgqueue, strdup(argv[++i]), -1);
msgqueue = append(msgqueue, strdup(argv[++i]), -1, 1);
listen_to_dbus = False;
}
else if(!strcmp(argv[i], "-mon")) {

View File

@ -155,12 +155,17 @@ void
notify(DBusMessage *dmsg) {
DBusMessage *reply;
DBusMessageIter args;
DBusMessageIter hints;
DBusMessageIter hint;
DBusMessageIter hint_value;
char *hint_name;
int id = 23;
const char *appname;
const char *summary;
const char *body;
const char *icon;
int urgency = 1;
char *msg;
dbus_uint32_t nid=0;
dbus_int32_t expires=-1;
@ -178,9 +183,32 @@ notify(DBusMessage *dmsg) {
dbus_message_iter_get_basic(&args, &body);
dbus_message_iter_next( &args );
dbus_message_iter_next( &args );
dbus_message_iter_recurse(&args, &hints);
dbus_message_iter_next( &args );
dbus_message_iter_get_basic(&args, &expires);
do {
dbus_message_iter_recurse(&hints, &hint);
do {
/* 115 == dbus urgency type thingy... i hate this shit */
if(dbus_message_iter_get_arg_type(&hint) != 115) {
continue;
}
dbus_message_iter_get_basic(&hint, &hint_name);
if(!strcmp(hint_name, "urgency")) {
dbus_message_iter_next(&hint);
dbus_message_iter_recurse(&hint, &hint_value);
do {
dbus_message_iter_get_basic(&hint_value, &urgency);
} while(dbus_message_iter_next(&hint));
}
} while(dbus_message_iter_next(&hint));
} while(dbus_message_iter_next(&hints));
if(strlen(body) > 0) {
msg = malloc(
@ -202,7 +230,7 @@ notify(DBusMessage *dmsg) {
if(expires > 0) {
expires = expires/1000;
}
msgqueue = append(msgqueue, msg, expires);
msgqueue = append(msgqueue, msg, expires, urgency);
drawmsg();
reply = dbus_message_new_method_return(dmsg);