aboutsummaryrefslogtreecommitdiff
path: root/src/im-application-list.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/im-application-list.c')
-rw-r--r--src/im-application-list.c32
1 files changed, 29 insertions, 3 deletions
diff --git a/src/im-application-list.c b/src/im-application-list.c
index b926e77..15e661e 100644
--- a/src/im-application-list.c
+++ b/src/im-application-list.c
@@ -886,14 +886,40 @@ im_application_list_sources_listed (GObject *source_object,
}
static GIcon *
-get_symbolic_app_icon (GAppInfo *info)
+get_symbolic_app_icon (GDesktopAppInfo *info)
{
+ gchar *x_symbolic_icon;
GIcon *icon;
const gchar * const *names;
gchar *symbolic_name;
GIcon *symbolic_icon;
- icon = g_app_info_get_icon (info);
+ /* If X-Ubuntu-SymbolicIcon exists, use that. It is always interpreted
+ * as a filename.
+ *
+ * Simply appending -symbolic to the normal icon doesn't work for
+ * icons specified by file name, because the symbolic icon might be in
+ * a different format (symbolic icons tend to be svg and normal icons
+ * png). Also, icons specified by file names don't allow for fallbacks
+ * (without stating the file from this process), and we'd want to fall
+ * back to the normal app icon.
+ *
+ * See lp: #1365408
+ */
+ if ((x_symbolic_icon = g_desktop_app_info_get_string (info, "X-Ubuntu-SymbolicIcon")))
+ {
+ GFile *file;
+
+ file = g_file_new_for_path (x_symbolic_icon);
+ symbolic_icon = g_file_icon_new (file);
+
+ g_object_unref (file);
+ g_free (x_symbolic_icon);
+
+ return symbolic_icon;
+ }
+
+ icon = g_app_info_get_icon (G_APP_INFO (info));
if (icon == NULL)
return NULL;
@@ -1014,7 +1040,7 @@ im_application_list_message_added (Application *app,
im_application_list_update_root_action (app->list);
}
- app_icon = get_symbolic_app_icon (G_APP_INFO (app->info));
+ app_icon = get_symbolic_app_icon (app->info);
g_signal_emit (app->list, signals[MESSAGE_ADDED], 0,
app->id, app_icon, id, serialized_icon, title,