obey urgency
This commit is contained in:
parent
732b52480f
commit
0d84f1c720
56
dunst.c
56
dunst.c
@ -25,6 +25,7 @@ typedef struct _msg_queue_t {
|
|||||||
struct _msg_queue_t *next;
|
struct _msg_queue_t *next;
|
||||||
time_t start;
|
time_t start;
|
||||||
int timeout;
|
int timeout;
|
||||||
|
int urgency;
|
||||||
} msg_queue_t;
|
} msg_queue_t;
|
||||||
|
|
||||||
typedef struct _dimension_t {
|
typedef struct _dimension_t {
|
||||||
@ -44,7 +45,13 @@ typedef struct _screen_info {
|
|||||||
static const char *font = NULL;
|
static const char *font = NULL;
|
||||||
static const char *normbgcolor = "#cccccc";
|
static const char *normbgcolor = "#cccccc";
|
||||||
static const char *normfgcolor = "#000000";
|
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 normcol[ColLast];
|
||||||
|
static unsigned long critcol[ColLast];
|
||||||
|
static unsigned long lowcol[ColLast];
|
||||||
static Atom utf8;
|
static Atom utf8;
|
||||||
static DC *dc;
|
static DC *dc;
|
||||||
static Window win;
|
static Window win;
|
||||||
@ -60,7 +67,7 @@ static dimension_t geometry;
|
|||||||
static int font_h;
|
static int font_h;
|
||||||
|
|
||||||
/* list functions */
|
/* 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 *delete(msg_queue_t *elem);
|
||||||
msg_queue_t *pop(msg_queue_t *queue);
|
msg_queue_t *pop(msg_queue_t *queue);
|
||||||
int list_len(msg_queue_t *list);
|
int list_len(msg_queue_t *list);
|
||||||
@ -80,17 +87,18 @@ char *xml_unescape(char *str);
|
|||||||
#include "dunst_dbus.h"
|
#include "dunst_dbus.h"
|
||||||
|
|
||||||
msg_queue_t*
|
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 *new = malloc(sizeof(msg_queue_t));
|
||||||
msg_queue_t *last;
|
msg_queue_t *last;
|
||||||
new->msg = xml_unescape(msg);
|
new->msg = xml_unescape(msg);
|
||||||
|
new->urgency = urgency;
|
||||||
if(to == -1) {
|
if(to == -1) {
|
||||||
new->timeout = global_timeout;
|
new->timeout = global_timeout;
|
||||||
} else {
|
} else {
|
||||||
new->timeout = to;
|
new->timeout = to;
|
||||||
}
|
}
|
||||||
new->start = 0;
|
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;
|
new->next = NULL;
|
||||||
if(queue == NULL) {
|
if(queue == NULL) {
|
||||||
return new;
|
return new;
|
||||||
@ -267,7 +275,25 @@ drawmsg(void) {
|
|||||||
if(cur_msg->start == 0)
|
if(cur_msg->start == 0)
|
||||||
cur_msg->start = now;
|
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;
|
dc->y += font_h;
|
||||||
cur_msg = cur_msg->next;
|
cur_msg = cur_msg->next;
|
||||||
}
|
}
|
||||||
@ -342,8 +368,12 @@ setup(void) {
|
|||||||
}
|
}
|
||||||
root = RootWindow(dc->dpy, DefaultScreen(dc->dpy));
|
root = RootWindow(dc->dpy, DefaultScreen(dc->dpy));
|
||||||
|
|
||||||
normcol[ColBG] = getcolor(dc, normbgcolor);
|
normcol[ColBG] = getcolor(dc, normbgcolor);
|
||||||
normcol[ColFG] = getcolor(dc, normfgcolor);
|
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);
|
utf8 = XInternAtom(dc->dpy, "UTF8_STRING", False);
|
||||||
|
|
||||||
@ -483,14 +513,22 @@ main(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
else if(!strcmp(argv[i], "-fn"))
|
else if(!strcmp(argv[i], "-fn"))
|
||||||
font = argv[++i];
|
font = argv[++i];
|
||||||
else if(!strcmp(argv[i], "-nb") || !strcmp(argv[i], "-bg"))
|
else if(!strcmp(argv[i], "-nb"))
|
||||||
normbgcolor = argv[++i];
|
normbgcolor = argv[++i];
|
||||||
else if(!strcmp(argv[i], "-nf") || !strcmp(argv[i], "-fg"))
|
else if(!strcmp(argv[i], "-nf"))
|
||||||
normfgcolor = argv[++i];
|
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"))
|
else if(!strcmp(argv[i], "-to"))
|
||||||
global_timeout = atoi(argv[++i]);
|
global_timeout = atoi(argv[++i]);
|
||||||
else if(!strcmp(argv[i], "-msg")) {
|
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;
|
listen_to_dbus = False;
|
||||||
}
|
}
|
||||||
else if(!strcmp(argv[i], "-mon")) {
|
else if(!strcmp(argv[i], "-mon")) {
|
||||||
|
30
dunst_dbus.c
30
dunst_dbus.c
@ -155,12 +155,17 @@ void
|
|||||||
notify(DBusMessage *dmsg) {
|
notify(DBusMessage *dmsg) {
|
||||||
DBusMessage *reply;
|
DBusMessage *reply;
|
||||||
DBusMessageIter args;
|
DBusMessageIter args;
|
||||||
|
DBusMessageIter hints;
|
||||||
|
DBusMessageIter hint;
|
||||||
|
DBusMessageIter hint_value;
|
||||||
|
char *hint_name;
|
||||||
|
|
||||||
int id = 23;
|
int id = 23;
|
||||||
const char *appname;
|
const char *appname;
|
||||||
const char *summary;
|
const char *summary;
|
||||||
const char *body;
|
const char *body;
|
||||||
const char *icon;
|
const char *icon;
|
||||||
|
int urgency = 1;
|
||||||
char *msg;
|
char *msg;
|
||||||
dbus_uint32_t nid=0;
|
dbus_uint32_t nid=0;
|
||||||
dbus_int32_t expires=-1;
|
dbus_int32_t expires=-1;
|
||||||
@ -178,9 +183,32 @@ notify(DBusMessage *dmsg) {
|
|||||||
dbus_message_iter_get_basic(&args, &body);
|
dbus_message_iter_get_basic(&args, &body);
|
||||||
dbus_message_iter_next( &args );
|
dbus_message_iter_next( &args );
|
||||||
dbus_message_iter_next( &args );
|
dbus_message_iter_next( &args );
|
||||||
|
dbus_message_iter_recurse(&args, &hints);
|
||||||
dbus_message_iter_next( &args );
|
dbus_message_iter_next( &args );
|
||||||
dbus_message_iter_get_basic(&args, &expires);
|
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) {
|
if(strlen(body) > 0) {
|
||||||
msg = malloc(
|
msg = malloc(
|
||||||
@ -202,7 +230,7 @@ notify(DBusMessage *dmsg) {
|
|||||||
if(expires > 0) {
|
if(expires > 0) {
|
||||||
expires = expires/1000;
|
expires = expires/1000;
|
||||||
}
|
}
|
||||||
msgqueue = append(msgqueue, msg, expires);
|
msgqueue = append(msgqueue, msg, expires, urgency);
|
||||||
drawmsg();
|
drawmsg();
|
||||||
|
|
||||||
reply = dbus_message_new_method_return(dmsg);
|
reply = dbus_message_new_method_return(dmsg);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user