obey urgency
This commit is contained in:
		
							parent
							
								
									732b52480f
								
							
						
					
					
						commit
						0d84f1c720
					
				
							
								
								
									
										50
									
								
								dunst.c
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								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; | ||||||
| 
 | 
 | ||||||
|  |         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); |                 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; | ||||||
|     } |     } | ||||||
| @ -344,6 +370,10 @@ setup(void) { | |||||||
| 
 | 
 | ||||||
|     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
	 Sascha Kruse
						Sascha Kruse