[wlr/taskbar] Fix unhandled exception crash when icon name is a path.
parent
ac6667b1c9
commit
22ed153004
|
@ -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,18 @@ static std::vector<std::string> search_prefix()
|
||||||
return prefixes;
|
return prefixes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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(Glib::Error&) {
|
||||||
|
return {};
|
||||||
|
} 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 +186,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;
|
||||||
|
|
Loading…
Reference in New Issue