Jakub Filak 81e31ed
From 796ac63aa1eb75c8558faa6d21721b331297b4a6 Mon Sep 17 00:00:00 2001
Jakub Filak 81e31ed
From: Matej Habrnal <mhabrnal@redhat.com>
Jakub Filak 81e31ed
Date: Wed, 24 Jun 2015 09:33:19 +0200
Jakub Filak 81e31ed
Subject: [PATCH] Fix loading applicaton icons
Jakub Filak 81e31ed
Jakub Filak 81e31ed
Without this patch gnome-abrt raises an exception in the case the
Jakub Filak 81e31ed
application icon should exists but doesn't.
Jakub Filak 81e31ed
Jakub Filak 81e31ed
Related to rhbz#1234732
Jakub Filak 81e31ed
Jakub Filak 81e31ed
v2: jfilak@redhat.com
Jakub Filak 81e31ed
- added a new function load_icon()
Jakub Filak 81e31ed
Jakub Filak 81e31ed
Signed-off-by: Matej Habrnal <mhabrnal@redhat.com>
Jakub Filak 81e31ed
Signed-off-by: Jakub Filak <jfilak@redhat.com>
Jakub Filak 81e31ed
---
Jakub Filak 81e31ed
 src/gnome_abrt/tools.py | 37 +++++++++++++++++++++++++++++++++++++
Jakub Filak 81e31ed
 src/gnome_abrt/views.py | 26 +++++++++-----------------
Jakub Filak 81e31ed
 2 files changed, 46 insertions(+), 17 deletions(-)
Jakub Filak 81e31ed
Jakub Filak 81e31ed
diff --git a/src/gnome_abrt/tools.py b/src/gnome_abrt/tools.py
Jakub Filak 81e31ed
index 7e440a3..a7361a0 100644
Jakub Filak 81e31ed
--- a/src/gnome_abrt/tools.py
Jakub Filak 81e31ed
+++ b/src/gnome_abrt/tools.py
Jakub Filak 81e31ed
@@ -17,6 +17,12 @@
Jakub Filak 81e31ed
 
Jakub Filak 81e31ed
 import datetime
Jakub Filak 81e31ed
 import calendar
Jakub Filak 81e31ed
+import logging
Jakub Filak 81e31ed
+
Jakub Filak 81e31ed
+#pylint: disable=E0611
Jakub Filak 81e31ed
+from gi.repository import GLib
Jakub Filak 81e31ed
+#pylint: disable=E0611
Jakub Filak 81e31ed
+from gi.repository import Gtk
Jakub Filak 81e31ed
 
Jakub Filak 81e31ed
 from gnome_abrt.l10n import _
Jakub Filak 81e31ed
 from gnome_abrt.l10n import ngettext
Jakub Filak 81e31ed
@@ -61,3 +67,34 @@ def smart_truncate(content, length=100, suffix='...'):
Jakub Filak 81e31ed
         return content
Jakub Filak 81e31ed
     else:
Jakub Filak 81e31ed
         return content[:length].rsplit(' ', 1)[0] + suffix
Jakub Filak 81e31ed
+
Jakub Filak 81e31ed
+
Jakub Filak 81e31ed
+def load_icon(name=None, gicon=None):
Jakub Filak 81e31ed
+    theme = Gtk.IconTheme.get_default()
Jakub Filak 81e31ed
+
Jakub Filak 81e31ed
+    icon = None
Jakub Filak 81e31ed
+    if not gicon is None and name is None:
Jakub Filak 81e31ed
+        name = gicon.to_string()
Jakub Filak 81e31ed
+        icon = theme.lookup_by_gicon(gicon, 128,
Jakub Filak 81e31ed
+                                        Gtk.IconLookupFlags.FORCE_SIZE)
Jakub Filak 81e31ed
+    elif not name is None and gicon is None:
Jakub Filak 81e31ed
+        icon = theme.lookup_icon(name, 128,
Jakub Filak 81e31ed
+                                        Gtk.IconLookupFlags.FORCE_SIZE
Jakub Filak 81e31ed
+                                        | Gtk.IconLookupFlags.FORCE_SYMBOLIC)
Jakub Filak 81e31ed
+    else:
Jakub Filak 81e31ed
+        logging.error("BUG: invalid arguments in load_icon():" \
Jakub Filak 81e31ed
+                      "name={0}, gicon={1}".format(str(name), str(gicon)))
Jakub Filak 81e31ed
+        return None
Jakub Filak 81e31ed
+
Jakub Filak 81e31ed
+    if icon is None:
Jakub Filak 81e31ed
+        logging.warning(_("Failed to find icon '{0}'").format(name))
Jakub Filak 81e31ed
+        return None
Jakub Filak 81e31ed
+
Jakub Filak 81e31ed
+    try:
Jakub Filak 81e31ed
+        return icon.load_icon()
Jakub Filak 81e31ed
+    #pylint: disable=E0712
Jakub Filak 81e31ed
+    except GLib.Error as ex:
Jakub Filak 81e31ed
+        logging.warning(_("Failed to load icon '{0}': {1}")
Jakub Filak 81e31ed
+                            .format(name, str(ex)))
Jakub Filak 81e31ed
+
Jakub Filak 81e31ed
+    return None
Jakub Filak 81e31ed
diff --git a/src/gnome_abrt/views.py b/src/gnome_abrt/views.py
Jakub Filak 81e31ed
index 95c9639..a1e684b 100644
Jakub Filak 81e31ed
--- a/src/gnome_abrt/views.py
Jakub Filak 81e31ed
+++ b/src/gnome_abrt/views.py
Jakub Filak 81e31ed
@@ -40,7 +40,7 @@ import gnome_abrt.wrappers as wrappers
Jakub Filak 81e31ed
 import gnome_abrt.errors as errors
Jakub Filak 81e31ed
 import gnome_abrt.desktop as desktop
Jakub Filak 81e31ed
 from gnome_abrt import GNOME_ABRT_UI_DIR
Jakub Filak 81e31ed
-from gnome_abrt.tools import fancydate, smart_truncate
Jakub Filak 81e31ed
+from gnome_abrt.tools import fancydate, smart_truncate, load_icon
Jakub Filak 81e31ed
 from gnome_abrt.l10n import _, GETTEXT_PROGNAME
Jakub Filak 81e31ed
 
Jakub Filak 81e31ed
 
Jakub Filak 81e31ed
@@ -833,23 +833,15 @@ class OopsWindow(Gtk.ApplicationWindow):
Jakub Filak 81e31ed
             self._builder.lbl_detected_value.set_tooltip_text(
Jakub Filak 81e31ed
                 problem['date'].strftime(config.get_configuration()['D_T_FMT']))
Jakub Filak 81e31ed
 
Jakub Filak 81e31ed
+            icon_buf = None
Jakub Filak 81e31ed
             if app.icon:
Jakub Filak 81e31ed
-                self._builder.img_app_icon.set_from_pixbuf(
Jakub Filak 81e31ed
-                        Gtk.IconTheme
Jakub Filak 81e31ed
-                            .get_default()
Jakub Filak 81e31ed
-                            .lookup_by_gicon(app.icon,
Jakub Filak 81e31ed
-                                             128,
Jakub Filak 81e31ed
-                                             Gtk.IconLookupFlags.FORCE_SIZE)
Jakub Filak 81e31ed
-                            .load_icon())
Jakub Filak 81e31ed
-            else:
Jakub Filak 81e31ed
-                self._builder.img_app_icon.set_from_pixbuf(
Jakub Filak 81e31ed
-                        Gtk.IconTheme
Jakub Filak 81e31ed
-                            .get_default()
Jakub Filak 81e31ed
-                            .lookup_icon("system-run-symbolic",
Jakub Filak 81e31ed
-                                         128,
Jakub Filak 81e31ed
-                                         Gtk.IconLookupFlags.FORCE_SIZE |
Jakub Filak 81e31ed
-                                         Gtk.IconLookupFlags.FORCE_SYMBOLIC)
Jakub Filak 81e31ed
-                            .load_icon())
Jakub Filak 81e31ed
+                icon_buf = load_icon(gicon=app.icon)
Jakub Filak 81e31ed
+
Jakub Filak 81e31ed
+            if icon_buf is None:
Jakub Filak 81e31ed
+                icon_buf = load_icon(name="system-run-symbolic")
Jakub Filak 81e31ed
+
Jakub Filak 81e31ed
+            # icon_buf can be None and if it is None, no icon will be displayed
Jakub Filak 81e31ed
+            self._builder.img_app_icon.set_from_pixbuf(icon_buf)
Jakub Filak 81e31ed
 
Jakub Filak 81e31ed
             self._builder.lbl_reported_value.show()
Jakub Filak 81e31ed
             self._builder.lbl_reported.set_text(_("Reported"))
Jakub Filak 81e31ed
-- 
Jakub Filak 81e31ed
2.4.5
Jakub Filak 81e31ed