summaryrefslogtreecommitdiff
path: root/src/iconthemewrapper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/iconthemewrapper.cpp')
-rw-r--r--src/iconthemewrapper.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/iconthemewrapper.cpp b/src/iconthemewrapper.cpp
index e44bdcd..f5ab4ef 100644
--- a/src/iconthemewrapper.cpp
+++ b/src/iconthemewrapper.cpp
@@ -27,3 +27,31 @@ procman::IconThemeWrapper::load_icon(const Glib::ustring& icon_name, int size) c
}
}
+Glib::RefPtr<Gdk::Pixbuf>
+procman::IconThemeWrapper::load_gicon(const Glib::RefPtr<Gio::Icon>& gicon,
+ int size, Gtk::IconLookupFlags flags) const
+{
+ Gtk::IconInfo icon_info;
+ gint scale = gdk_window_get_scale_factor (gdk_get_default_root_window ());
+ icon_info = Gtk::IconTheme::get_default()->lookup_icon(gicon, size, scale, flags);
+
+ if (!icon_info) {
+ return Glib::RefPtr<Gdk::Pixbuf>();
+ }
+
+ try
+ {
+ return icon_info.load_icon();
+ }
+ catch (Gtk::IconThemeError &error)
+ {
+ if (error.code() != Gtk::IconThemeError::ICON_THEME_NOT_FOUND)
+ g_error("Cannot load gicon from theme: %s", error.what().c_str());
+ return Glib::RefPtr<Gdk::Pixbuf>();
+ }
+ catch (Gio::Error &error)
+ {
+ g_debug("Could not load gicon: %s", error.what().c_str());
+ return Glib::RefPtr<Gdk::Pixbuf>();
+ }
+}