diff options
author | Matthias Clasen <mclasen@redhat.com> | 2019-05-09 18:05:41 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2019-05-09 18:05:41 +0000 |
commit | c52518aba8ffef3282ed0fa2cd8e639985b6413d (patch) | |
tree | 1c48016a9d8e72643647483c90de5758083936a5 | |
parent | 76966e6b2898474362c62c88d49724b10ea87dfa (diff) | |
download | glib-portal-notification-icon.tar.gz |
notification: Don't send file icons to the portalportal-notification-icon
The notification portal only accept themed icons
and bytes icons, so convert file icons to bytes
before sending notifications to the portal.
This was pointed out in
https://github.com/flatpak/xdg-desktop-portal/issues/317
-rw-r--r-- | gio/gportalnotificationbackend.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/gio/gportalnotificationbackend.c b/gio/gportalnotificationbackend.c index b0d67aa2a..eb1fd1387 100644 --- a/gio/gportalnotificationbackend.c +++ b/gio/gportalnotificationbackend.c @@ -25,6 +25,9 @@ #include "gapplication.h" #include "gnotification-private.h" #include "gportalsupport.h" +#include "gfileicon.h" +#include "gfile.h" +#include "gbytesicon.h" #define G_TYPE_PORTAL_NOTIFICATION_BACKEND (g_portal_notification_backend_get_type ()) #define G_PORTAL_NOTIFICATION_BACKEND(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_PORTAL_NOTIFICATION_BACKEND, GPortalNotificationBackend)) @@ -55,6 +58,29 @@ g_portal_notification_backend_send_notification (GNotificationBackend *backend, const gchar *id, GNotification *notification) { + GIcon *icon; + + icon = g_notification_get_icon (notification); + if (G_IS_FILE_ICON (icon)) + { + GFile *file; + GBytes *bytes; + + /* convert a file icon to a bytes icon before + * sending the notification, since the portal + * will accept the latter, but not the former. + */ + file = g_file_icon_get_file (G_FILE_ICON (icon)); + bytes = g_file_load_bytes (file, NULL, NULL, NULL); + if (bytes) + { + icon = g_bytes_icon_new (bytes); + g_notification_set_icon (notification, icon); + g_object_unref (icon); + g_bytes_unref (bytes); + } + } + g_dbus_connection_call (backend->dbus_connection, "org.freedesktop.portal.Desktop", "/org/freedesktop/portal/desktop", |