Blob Blame History Raw
From 796ac63aa1eb75c8558faa6d21721b331297b4a6 Mon Sep 17 00:00:00 2001
From: Matej Habrnal <mhabrnal@redhat.com>
Date: Wed, 24 Jun 2015 09:33:19 +0200
Subject: [PATCH] Fix loading applicaton icons

Without this patch gnome-abrt raises an exception in the case the
application icon should exists but doesn't.

Related to rhbz#1234732

v2: jfilak@redhat.com
- added a new function load_icon()

Signed-off-by: Matej Habrnal <mhabrnal@redhat.com>
Signed-off-by: Jakub Filak <jfilak@redhat.com>
---
 src/gnome_abrt/tools.py | 37 +++++++++++++++++++++++++++++++++++++
 src/gnome_abrt/views.py | 26 +++++++++-----------------
 2 files changed, 46 insertions(+), 17 deletions(-)

diff --git a/src/gnome_abrt/tools.py b/src/gnome_abrt/tools.py
index 7e440a3..a7361a0 100644
--- a/src/gnome_abrt/tools.py
+++ b/src/gnome_abrt/tools.py
@@ -17,6 +17,12 @@
 
 import datetime
 import calendar
+import logging
+
+#pylint: disable=E0611
+from gi.repository import GLib
+#pylint: disable=E0611
+from gi.repository import Gtk
 
 from gnome_abrt.l10n import _
 from gnome_abrt.l10n import ngettext
@@ -61,3 +67,34 @@ def smart_truncate(content, length=100, suffix='...'):
         return content
     else:
         return content[:length].rsplit(' ', 1)[0] + suffix
+
+
+def load_icon(name=None, gicon=None):
+    theme = Gtk.IconTheme.get_default()
+
+    icon = None
+    if not gicon is None and name is None:
+        name = gicon.to_string()
+        icon = theme.lookup_by_gicon(gicon, 128,
+                                        Gtk.IconLookupFlags.FORCE_SIZE)
+    elif not name is None and gicon is None:
+        icon = theme.lookup_icon(name, 128,
+                                        Gtk.IconLookupFlags.FORCE_SIZE
+                                        | Gtk.IconLookupFlags.FORCE_SYMBOLIC)
+    else:
+        logging.error("BUG: invalid arguments in load_icon():" \
+                      "name={0}, gicon={1}".format(str(name), str(gicon)))
+        return None
+
+    if icon is None:
+        logging.warning(_("Failed to find icon '{0}'").format(name))
+        return None
+
+    try:
+        return icon.load_icon()
+    #pylint: disable=E0712
+    except GLib.Error as ex:
+        logging.warning(_("Failed to load icon '{0}': {1}")
+                            .format(name, str(ex)))
+
+    return None
diff --git a/src/gnome_abrt/views.py b/src/gnome_abrt/views.py
index 95c9639..a1e684b 100644
--- a/src/gnome_abrt/views.py
+++ b/src/gnome_abrt/views.py
@@ -40,7 +40,7 @@ import gnome_abrt.wrappers as wrappers
 import gnome_abrt.errors as errors
 import gnome_abrt.desktop as desktop
 from gnome_abrt import GNOME_ABRT_UI_DIR
-from gnome_abrt.tools import fancydate, smart_truncate
+from gnome_abrt.tools import fancydate, smart_truncate, load_icon
 from gnome_abrt.l10n import _, GETTEXT_PROGNAME
 
 
@@ -833,23 +833,15 @@ class OopsWindow(Gtk.ApplicationWindow):
             self._builder.lbl_detected_value.set_tooltip_text(
                 problem['date'].strftime(config.get_configuration()['D_T_FMT']))
 
+            icon_buf = None
             if app.icon:
-                self._builder.img_app_icon.set_from_pixbuf(
-                        Gtk.IconTheme
-                            .get_default()
-                            .lookup_by_gicon(app.icon,
-                                             128,
-                                             Gtk.IconLookupFlags.FORCE_SIZE)
-                            .load_icon())
-            else:
-                self._builder.img_app_icon.set_from_pixbuf(
-                        Gtk.IconTheme
-                            .get_default()
-                            .lookup_icon("system-run-symbolic",
-                                         128,
-                                         Gtk.IconLookupFlags.FORCE_SIZE |
-                                         Gtk.IconLookupFlags.FORCE_SYMBOLIC)
-                            .load_icon())
+                icon_buf = load_icon(gicon=app.icon)
+
+            if icon_buf is None:
+                icon_buf = load_icon(name="system-run-symbolic")
+
+            # icon_buf can be None and if it is None, no icon will be displayed
+            self._builder.img_app_icon.set_from_pixbuf(icon_buf)
 
             self._builder.lbl_reported_value.show()
             self._builder.lbl_reported.set_text(_("Reported"))
-- 
2.4.5