Skip to content

Commit

Permalink
Merge pull request #1018 from jgmdev/taskbar-icons
Browse files Browse the repository at this point in the history
[wlr/taskbar] Fix unhandled exception crash when icon name is a path.
  • Loading branch information
Alexays authored Feb 4, 2021
2 parents ff9f09a + e293b89 commit 71f9ed3
Showing 1 changed file with 23 additions and 1 deletion.
24 changes: 23 additions & 1 deletion src/modules/wlr/taskbar.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#include "modules/wlr/taskbar.hpp"

#include "glibmm/error.h"
#include "glibmm/fileutils.h"
#include "glibmm/refptr.h"
#include "util/format.hpp"

Expand Down Expand Up @@ -74,6 +76,16 @@ static std::vector<std::string> search_prefix()
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 */
static std::string get_from_desktop_app_info(const std::string &app_id)
{
Expand Down Expand Up @@ -172,7 +184,17 @@ static bool image_load_icon(Gtk::Image& image, const Glib::RefPtr<Gtk::IconTheme
if (icon_name.empty())
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) {
image.set(pixbuf);
found = true;
Expand Down

0 comments on commit 71f9ed3

Please sign in to comment.