Extract icon path function from get_pixbuf_from_icon
This commit is contained in:
		
							parent
							
								
									e90f605a52
								
							
						
					
					
						commit
						59f994ee94
					
				
							
								
								
									
										39
									
								
								src/icon.c
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								src/icon.c
									
									
									
									
									
								
							| @ -195,14 +195,14 @@ GdkPixbuf *get_pixbuf_from_file(const char *filename) | ||||
|         return pixbuf; | ||||
| } | ||||
| 
 | ||||
| GdkPixbuf *get_pixbuf_from_icon(const char *iconname) | ||||
| char *get_path_from_icon_name(const char *iconname) | ||||
| { | ||||
|         if (STR_EMPTY(iconname)) | ||||
|                 return NULL; | ||||
| 
 | ||||
|         const char *suffixes[] = { ".svg", ".svgz", ".png", ".xpm", NULL }; | ||||
|         GdkPixbuf *pixbuf = NULL; | ||||
|         gchar *uri_path = NULL; | ||||
|         char *new_name = NULL; | ||||
| 
 | ||||
|         if (g_str_has_prefix(iconname, "file://")) { | ||||
|                 uri_path = g_filename_from_uri(iconname, NULL, NULL); | ||||
| @ -212,7 +212,7 @@ GdkPixbuf *get_pixbuf_from_icon(const char *iconname) | ||||
| 
 | ||||
|         /* absolute path? */ | ||||
|         if (iconname[0] == '/' || iconname[0] == '~') { | ||||
|                 pixbuf = get_pixbuf_from_file(iconname); | ||||
|                 new_name = g_strdup(iconname); | ||||
|         } else { | ||||
|         /* search in icon_path */ | ||||
|                 char *start = settings.icon_path, | ||||
| @ -224,26 +224,47 @@ GdkPixbuf *get_pixbuf_from_icon(const char *iconname) | ||||
|                         current_folder = g_strndup(start, end - start); | ||||
| 
 | ||||
|                         for (const char **suf = suffixes; *suf; suf++) { | ||||
|                                 maybe_icon_path = g_strconcat(current_folder, "/", iconname, *suf, NULL); | ||||
|                                 if (is_readable_file(maybe_icon_path)) | ||||
|                                         pixbuf = get_pixbuf_from_file(maybe_icon_path); | ||||
|                                 gchar *name_with_extension = g_strconcat(iconname, *suf, NULL); | ||||
|                                 maybe_icon_path = g_build_filename(current_folder, name_with_extension, NULL); | ||||
|                                 if (is_readable_file(maybe_icon_path)) { | ||||
|                                         new_name = g_strdup(maybe_icon_path); | ||||
|                                 } | ||||
|                                 g_free(name_with_extension); | ||||
|                                 g_free(maybe_icon_path); | ||||
| 
 | ||||
|                                 if (pixbuf) | ||||
|                                 if (new_name) | ||||
|                                         break; | ||||
|                         } | ||||
| 
 | ||||
|                         g_free(current_folder); | ||||
|                         if (pixbuf) | ||||
|                         if (new_name) | ||||
|                                 break; | ||||
| 
 | ||||
|                         start = end + 1; | ||||
|                 } while (STR_FULL(end)); | ||||
|                 if (!pixbuf) | ||||
|                 if (!new_name) | ||||
|                         LOG_W("No icon found in path: '%s'", iconname); | ||||
|         } | ||||
| 
 | ||||
|         g_free(uri_path); | ||||
|         return new_name; | ||||
| } | ||||
| 
 | ||||
| GdkPixbuf *get_pixbuf_from_icon(const char *iconname) | ||||
| { | ||||
|         char *path = get_path_from_icon_name(iconname); | ||||
|         if (!path) { | ||||
|                 return NULL; | ||||
|         } | ||||
| 
 | ||||
|         GdkPixbuf *pixbuf = NULL; | ||||
| 
 | ||||
|         pixbuf = get_pixbuf_from_file(path); | ||||
|         g_free(path); | ||||
| 
 | ||||
|         if (!pixbuf) | ||||
|                 LOG_W("No icon found in path: '%s'", iconname); | ||||
| 
 | ||||
|         return pixbuf; | ||||
| } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										11
									
								
								src/icon.h
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								src/icon.h
									
									
									
									
									
								
							| @ -17,6 +17,17 @@ cairo_surface_t *gdk_pixbuf_to_cairo_surface(GdkPixbuf *pixbuf); | ||||
|  */ | ||||
| GdkPixbuf *get_pixbuf_from_file(const char *filename); | ||||
| 
 | ||||
| /** Retrieve a path from an icon name.
 | ||||
|  * | ||||
|  * @param iconname A string describing a `file://` URL, an arbitary filename
 | ||||
|  *                 or an icon name, which then gets searched for in the | ||||
|  *                 settings.icon_path | ||||
|  * | ||||
|  * @return a newly allocated string with the icon path | ||||
|  * @retval NULL: file does not exist, not readable, etc.. | ||||
|  */ | ||||
| char *get_path_from_icon_name(const char *iconname); | ||||
| 
 | ||||
| /** Retrieve an icon by its name sent via the notification bus, scaled according to settings
 | ||||
|  * | ||||
|  * @param iconname A string describing a `file://` URL, an arbitary filename
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 fwsmit
						fwsmit