mirror of
				https://github.com/rad4day/Waybar.git
				synced 2025-10-30 23:42:42 +01:00 
			
		
		
		
	Merge pull request #1018 from jgmdev/taskbar-icons
[wlr/taskbar] Fix unhandled exception crash when icon name is a path.
This commit is contained in:
		| @@ -1,5 +1,7 @@ | |||||||
| #include "modules/wlr/taskbar.hpp" | #include "modules/wlr/taskbar.hpp" | ||||||
|  |  | ||||||
|  | #include "glibmm/error.h" | ||||||
|  | #include "glibmm/fileutils.h" | ||||||
| #include "glibmm/refptr.h" | #include "glibmm/refptr.h" | ||||||
| #include "util/format.hpp" | #include "util/format.hpp" | ||||||
|  |  | ||||||
| @@ -74,6 +76,16 @@ static std::vector<std::string> search_prefix() | |||||||
|     return prefixes; |     return prefixes; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static Glib::RefPtr<Gdk::Pixbuf> load_icon_from_file(std::string icon_path, int size) | ||||||
|  | { | ||||||
|  |     try { | ||||||
|  |         auto pb = Gdk::Pixbuf::create_from_file(icon_path, size, size); | ||||||
|  |         return pb; | ||||||
|  |     } catch(...) { | ||||||
|  |         return {}; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| /* Method 1 - get the correct icon name from the desktop file */ | /* Method 1 - get the correct icon name from the desktop file */ | ||||||
| static std::string get_from_desktop_app_info(const std::string &app_id) | static std::string get_from_desktop_app_info(const std::string &app_id) | ||||||
| { | { | ||||||
| @@ -172,7 +184,17 @@ static bool image_load_icon(Gtk::Image& image, const Glib::RefPtr<Gtk::IconTheme | |||||||
|         if (icon_name.empty()) |         if (icon_name.empty()) | ||||||
|             icon_name = "unknown"; |             icon_name = "unknown"; | ||||||
|  |  | ||||||
|         auto pixbuf = icon_theme->load_icon(icon_name, size, Gtk::ICON_LOOKUP_FORCE_SIZE); |         Glib::RefPtr<Gdk::Pixbuf> pixbuf; | ||||||
|  |  | ||||||
|  |         try { | ||||||
|  |             pixbuf = icon_theme->load_icon(icon_name, size, Gtk::ICON_LOOKUP_FORCE_SIZE); | ||||||
|  |         } catch(...) { | ||||||
|  |             if (Glib::file_test(icon_name, Glib::FILE_TEST_EXISTS)) | ||||||
|  |                 pixbuf = load_icon_from_file(icon_name, size); | ||||||
|  |             else | ||||||
|  |                 pixbuf = {}; | ||||||
|  |         } | ||||||
|  |  | ||||||
|         if (pixbuf) { |         if (pixbuf) { | ||||||
|             image.set(pixbuf); |             image.set(pixbuf); | ||||||
|             found = true; |             found = true; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Alex
					Alex