overhaul get_sleep_time
This commit is contained in:
		
							parent
							
								
									5d46cd700c
								
							
						
					
					
						commit
						1f0e8d2181
					
				
							
								
								
									
										34
									
								
								src/dunst.c
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								src/dunst.c
									
									
									
									
									
								
							| @ -174,28 +174,34 @@ void wake_up(void) | ||||
| 
 | ||||
| static gint64 get_sleep_time(void) | ||||
| { | ||||
|         gint64 time = g_get_monotonic_time(); | ||||
|         gint64 sleep = G_MAXINT64; | ||||
| 
 | ||||
|         gint64 max_age = 0; | ||||
|         for (GList *iter = g_queue_peek_head_link(displayed); iter; | ||||
|                         iter = iter->next) { | ||||
|                 notification *n = iter->data; | ||||
|                 gint64 ttl = n->timeout - (time - n->start); | ||||
| 
 | ||||
|                 max_age = MAX(max_age, notification_get_age(n)); | ||||
|                 gint64 ttl = notification_get_ttl(n); | ||||
|                 if (ttl >= 0) | ||||
|                         sleep = MIN(sleep, ttl); | ||||
|                 if (n->timeout > 0) { | ||||
|                         if (ttl > 0) | ||||
|                                 sleep = MIN(sleep, ttl); | ||||
|                         else | ||||
|                                 // while we're processing, the notification already timed out
 | ||||
|                                 return 0; | ||||
|                 } | ||||
| 
 | ||||
|                 if (settings.show_age_threshold >= 0) { | ||||
|                         gint64 age = time - n->timestamp; | ||||
| 
 | ||||
|                         if (age > settings.show_age_threshold) | ||||
|                                 // sleep exactly until the next shift of the second happens
 | ||||
|                                 sleep = MIN(sleep, ((G_USEC_PER_SEC) - (age % (G_USEC_PER_SEC)))); | ||||
|                         else if (ttl > settings.show_age_threshold) | ||||
|                                 sleep = MIN(sleep, settings.show_age_threshold); | ||||
|                 } | ||||
|         } | ||||
| 
 | ||||
|         /* if age_threshold is hit, seconds have to get updated every second */ | ||||
|         if (settings.show_age_threshold >= 0) { | ||||
|                 if (settings.show_age_threshold > max_age) | ||||
|                         sleep = MIN(sleep, settings.show_age_threshold - max_age); | ||||
|                 else | ||||
|                         sleep = MIN(sleep, 1000*1000); | ||||
|         } | ||||
| 
 | ||||
|         return sleep; | ||||
|         return sleep != G_MAXINT64 ? sleep : -1; | ||||
| } | ||||
| 
 | ||||
| gboolean run(void *data) | ||||
|  | ||||
| @ -699,18 +699,6 @@ void notification_update_text_to_render(notification *n) | ||||
|         n->text_to_render = buf; | ||||
| } | ||||
| 
 | ||||
| gint64 notification_get_ttl(notification *n) { | ||||
|         if (n->timeout < 0) { | ||||
|                 return -1; | ||||
|         } else { | ||||
|                 return n->timeout - (g_get_monotonic_time() - n->start); | ||||
|         } | ||||
| } | ||||
| 
 | ||||
| gint64 notification_get_age(notification *n) { | ||||
|         return g_get_monotonic_time() - n->timestamp; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * If the notification has exactly one action, or one is marked as default, | ||||
|  * invoke it. If there are multiple and no default, open the context menu. If | ||||
|  | ||||
| @ -74,8 +74,6 @@ int notification_close(notification *n, int reason); | ||||
| void notification_print(notification *n); | ||||
| void notification_replace_single_field(char **haystack, char **needle, const char *replacement, enum markup_mode markup_mode); | ||||
| void notification_update_text_to_render(notification *n); | ||||
| gint64 notification_get_ttl(notification *n); | ||||
| gint64 notification_get_age(notification *n); | ||||
| void notification_do_action(notification *n); | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Benedikt Heine
						Benedikt Heine