use n_stack for history
This commit is contained in:
		
							parent
							
								
									b2a20c0524
								
							
						
					
					
						commit
						b641a9c881
					
				
							
								
								
									
										25
									
								
								container.c
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								container.c
									
									
									
									
									
								
							| @ -263,4 +263,29 @@ void l_sort(list * l, int (*f) (void *, void *)) | |||||||
|         free(old_list); |         free(old_list); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void n_stack_push(n_stack **s, notification *n) | ||||||
|  | { | ||||||
|  |         if (!n) | ||||||
|  |                 return; | ||||||
|  | 
 | ||||||
|  |         n_stack *new = malloc(sizeof(n_stack)); | ||||||
|  |         new->n = n; | ||||||
|  |         new->next = *s; | ||||||
|  |         *s = new; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | notification *n_stack_pop(n_stack **s) | ||||||
|  | { | ||||||
|  |         if (!s || !*s) | ||||||
|  |                 return NULL; | ||||||
|  | 
 | ||||||
|  |         n_stack *head = *s; | ||||||
|  |         *s = (*s)->next; | ||||||
|  | 
 | ||||||
|  |         notification *n = head->n; | ||||||
|  |         free(head); | ||||||
|  | 
 | ||||||
|  |         return n; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /* vim: set ts=8 sw=8 tw=0: */ | /* vim: set ts=8 sw=8 tw=0: */ | ||||||
|  | |||||||
							
								
								
									
										27
									
								
								container.h
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								container.h
									
									
									
									
									
								
							| @ -1,6 +1,8 @@ | |||||||
| #ifndef _LIST_H | #ifndef _LIST_H | ||||||
| #define _LIST_H | #define _LIST_H | ||||||
| 
 | 
 | ||||||
|  | #include "dunst.h" | ||||||
|  | 
 | ||||||
| typedef struct _l_node { | typedef struct _l_node { | ||||||
|         struct _l_node *next; |         struct _l_node *next; | ||||||
|         void *data; |         void *data; | ||||||
| @ -10,6 +12,11 @@ typedef struct _list { | |||||||
|         l_node *head; |         l_node *head; | ||||||
| } list; | } list; | ||||||
| 
 | 
 | ||||||
|  | typedef struct _n_stack { | ||||||
|  |         notification *n; | ||||||
|  |         struct _n_stack *next; | ||||||
|  | } n_stack; | ||||||
|  | 
 | ||||||
| /* append to end of list */ | /* append to end of list */ | ||||||
| int l_push(list * l, void *data); | int l_push(list * l, void *data); | ||||||
| 
 | 
 | ||||||
| @ -54,6 +61,24 @@ int l_move(list * from, list * to, l_node * node); | |||||||
| void l_sort(list * l, int (*f) (void *, void *)); | void l_sort(list * l, int (*f) (void *, void *)); | ||||||
| 
 | 
 | ||||||
| list *l_init(void); | list *l_init(void); | ||||||
| #endif |  | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | /************
 | ||||||
|  |  * stack | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * push notification onto stack | ||||||
|  |  * creates a new stack if *s == NULL | ||||||
|  |  */ | ||||||
|  | void n_stack_push(n_stack **s, notification *n); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * remove and return notification from stack | ||||||
|  |  * sets *s to NULL if stack is empty | ||||||
|  |  */ | ||||||
|  | notification *n_stack_pop(n_stack **s); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
| /* vim: set ts=8 sw=8 tw=0: */ | /* vim: set ts=8 sw=8 tw=0: */ | ||||||
|  | |||||||
							
								
								
									
										29
									
								
								dunst.c
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								dunst.c
									
									
									
									
									
								
							| @ -84,7 +84,7 @@ bool deprecated_dunstrc_shortcuts = false; | |||||||
| /* notification lists */ | /* notification lists */ | ||||||
| list *notification_queue = NULL;        /* all new notifications get into here */ | list *notification_queue = NULL;        /* all new notifications get into here */ | ||||||
| list *displayed_notifications = NULL;   /* currently displayed notifications */ | list *displayed_notifications = NULL;   /* currently displayed notifications */ | ||||||
| list *notification_history = NULL;      /* history of displayed notifications */ | n_stack *n_history = NULL;      /* history of displayed notifications */ | ||||||
| 
 | 
 | ||||||
| /* misc funtions */ | /* misc funtions */ | ||||||
| void apply_rules(notification * n); | void apply_rules(notification * n); | ||||||
| @ -884,22 +884,15 @@ void move_all_to_history() | |||||||
| 
 | 
 | ||||||
| void history_pop(void) | void history_pop(void) | ||||||
| { | { | ||||||
|         l_node *iter; |  | ||||||
|         notification *data; |  | ||||||
| 
 | 
 | ||||||
|         /* nothing to do */ |         if (!n_history) | ||||||
|         if (l_is_empty(notification_history)) { |  | ||||||
|                 return; |                 return; | ||||||
|         } |  | ||||||
| 
 | 
 | ||||||
|         for (iter = notification_history->head; iter->next; iter = iter->next) ; |         notification *n = n_stack_pop(&n_history); | ||||||
|         data = (notification *) iter->data; |         n->redisplayed = true; | ||||||
|         data->redisplayed = true; |         n->start = 0; | ||||||
|         data->start = 0; |         n->timeout = sticky_history ? 0 : n->timeout; | ||||||
|         if (sticky_history) { |         l_push(notification_queue, n); | ||||||
|                 data->timeout = 0; |  | ||||||
|         } |  | ||||||
|         l_move(notification_history, notification_queue, iter); |  | ||||||
| 
 | 
 | ||||||
|         if (!visible) { |         if (!visible) { | ||||||
|                 map_win(); |                 map_win(); | ||||||
| @ -1040,8 +1033,8 @@ int close_notification_by_id(int id, int reason) | |||||||
|         for (iter = displayed_notifications->head; iter; iter = iter->next) { |         for (iter = displayed_notifications->head; iter; iter = iter->next) { | ||||||
|                 notification *n = (notification *) iter->data; |                 notification *n = (notification *) iter->data; | ||||||
|                 if (n->id == id) { |                 if (n->id == id) { | ||||||
|                         l_move(displayed_notifications, notification_history, |                         l_remove(displayed_notifications, iter); | ||||||
|                                iter); |                         n_stack_push(&n_history, n); | ||||||
|                         target = n; |                         target = n; | ||||||
|                         break; |                         break; | ||||||
|                 } |                 } | ||||||
| @ -1050,7 +1043,8 @@ int close_notification_by_id(int id, int reason) | |||||||
|         for (iter = notification_queue->head; iter; iter = iter->next) { |         for (iter = notification_queue->head; iter; iter = iter->next) { | ||||||
|                 notification *n = (notification *) iter->data; |                 notification *n = (notification *) iter->data; | ||||||
|                 if (n->id == id) { |                 if (n->id == id) { | ||||||
|                         l_move(notification_queue, notification_history, iter); |                         l_remove(notification_queue, iter); | ||||||
|  |                         n_stack_push(&n_history, n); | ||||||
|                         target = n; |                         target = n; | ||||||
|                         break; |                         break; | ||||||
|                 } |                 } | ||||||
| @ -1677,7 +1671,6 @@ int main(int argc, char *argv[]) | |||||||
|         now = time(&now); |         now = time(&now); | ||||||
| 
 | 
 | ||||||
|         notification_queue = l_init(); |         notification_queue = l_init(); | ||||||
|         notification_history = l_init(); |  | ||||||
|         displayed_notifications = l_init(); |         displayed_notifications = l_init(); | ||||||
|         r_line_cache_init(&line_cache); |         r_line_cache_init(&line_cache); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Sascha Kruse
						Sascha Kruse