Make icon set via rules take priority over raw icons
When a notification contains both a raw icon and an icon path according to the GNOME notification specification the raw icon should take priority over anything else. If, however, a user uses the new_icon rule to set a custom icon on a notification, that rule overwrote the icon path and not the raw icon and as a result the raw icon was displayed in place of the user specified one. As a simple fix, a new icon_overridden boolean was added to the notification struct indicating if a custom icon has been set. If so, the icon path should take priority over the raw icon. Fixes #339
This commit is contained in:
		
							parent
							
								
									b06475b4aa
								
							
						
					
					
						commit
						86cbc1d34b
					
				| @ -2,6 +2,9 @@ | |||||||
| 
 | 
 | ||||||
| ## Unreleased | ## Unreleased | ||||||
| 
 | 
 | ||||||
|  | ### Fixed | ||||||
|  | - `new_icon` rule being ignored on notifications that had a raw icon | ||||||
|  | 
 | ||||||
| ## 1.2.0 - 2017-07-12 | ## 1.2.0 - 2017-07-12 | ||||||
| 
 | 
 | ||||||
| ### Added | ### Added | ||||||
|  | |||||||
| @ -34,6 +34,7 @@ typedef struct _notification { | |||||||
|         char *appname; |         char *appname; | ||||||
|         char *summary; |         char *summary; | ||||||
|         char *body; |         char *body; | ||||||
|  |         bool icon_overridden; | ||||||
|         char *icon; |         char *icon; | ||||||
|         RawImage *raw_icon; |         RawImage *raw_icon; | ||||||
|         char *msg;            /* formatted message */ |         char *msg;            /* formatted message */ | ||||||
|  | |||||||
| @ -24,6 +24,7 @@ void rule_apply(rule_t * r, notification * n) | |||||||
|                 if(n->icon) |                 if(n->icon) | ||||||
|                         g_free(n->icon); |                         g_free(n->icon); | ||||||
|                 n->icon = g_strdup(r->new_icon); |                 n->icon = g_strdup(r->new_icon); | ||||||
|  |                 n->icon_overridden = true; | ||||||
|         } |         } | ||||||
|         if (r->fg) |         if (r->fg) | ||||||
|                 n->color_strings[ColFG] = r->fg; |                 n->color_strings[ColFG] = r->fg; | ||||||
|  | |||||||
| @ -408,8 +408,11 @@ static colored_layout *r_init_shared(cairo_t *c, notification *n) | |||||||
| 
 | 
 | ||||||
|         GdkPixbuf *pixbuf = NULL; |         GdkPixbuf *pixbuf = NULL; | ||||||
| 
 | 
 | ||||||
|         if (n->raw_icon && settings.icon_position != icons_off) { |         if (n->raw_icon && !n->icon_overridden && | ||||||
|  |             settings.icon_position != icons_off) { | ||||||
|  | 
 | ||||||
|                 pixbuf = get_pixbuf_from_raw_image(n->raw_icon); |                 pixbuf = get_pixbuf_from_raw_image(n->raw_icon); | ||||||
|  | 
 | ||||||
|         } else if (n->icon && settings.icon_position != icons_off) { |         } else if (n->icon && settings.icon_position != icons_off) { | ||||||
|                 pixbuf = get_pixbuf_from_path(n->icon); |                 pixbuf = get_pixbuf_from_path(n->icon); | ||||||
|         } |         } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Nikos Tsipinakis
						Nikos Tsipinakis