[glib/wip/tintou/gnotification-sound-theme] gnotification: add sound theme support and implement the backends
- From: Corentin Noël <corentinnoel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib/wip/tintou/gnotification-sound-theme] gnotification: add sound theme support and implement the backends
- Date: Sat, 10 Feb 2018 01:11:04 +0000 (UTC)
commit 83f8edb06e3144f8867a74ac1e681294b8d6ee8f
Author: Corentin Noël <corentin elementary io>
Date: Sat Feb 10 00:55:03 2018 +0000
gnotification: add sound theme support and implement the backends
gio/gcocoanotificationbackend.c | 9 +++++++-
gio/gfdonotificationbackend.c | 8 +++++++
gio/gnotification.c | 51 +++++++++++++++++++++++++++++++++++++++++
gio/gnotification.h | 4 ++++
4 files changed, 71 insertions(+), 1 deletion(-)
---
diff --git a/gio/gcocoanotificationbackend.c b/gio/gcocoanotificationbackend.c
index ae4ad8833..84abc00b6 100644
--- a/gio/gcocoanotificationbackend.c
+++ b/gio/gcocoanotificationbackend.c
@@ -202,7 +202,7 @@ g_cocoa_notification_backend_send_notification (GNotificationBackend *backend,
const gchar *cstr_id,
GNotification *notification)
{
- NSString *str_title = nil, *str_text = nil, *str_id = nil;
+ NSString *str_title = nil, *str_text = nil, *str_id = nil, *str_sound_name = nil;
NSImage *content = nil;
const char *cstr;
GIcon *icon;
@@ -215,6 +215,8 @@ g_cocoa_notification_backend_send_notification (GNotificationBackend *backend,
str_text = nsstring_from_cstr (cstr);
if (cstr_id != NULL)
str_id = nsstring_from_cstr (cstr_id);
+ if ((cstr = g_notification_get_sound_name (notification)))
+ str_sound_name = nsstring_from_cstr (cstr);
if ((icon = g_notification_get_icon (notification)))
content = nsimage_from_gicon (icon);
/* NOTE: There is no priority */
@@ -224,6 +226,11 @@ g_cocoa_notification_backend_send_notification (GNotificationBackend *backend,
userNotification.informativeText = str_text;
userNotification.identifier = str_id;
userNotification.contentImage = content;
+ if (!str_sound_name)
+ userNotification.soundName = str_sound_name;
+ else
+ userNotification.soundName = NSUserNotificationDefaultSoundName;
+
/* NOTE: Buttons only show up if your bundle has NSUserNotificationAlertStyle set to "alerts" */
add_actions_to_notification (userNotification, notification);
diff --git a/gio/gfdonotificationbackend.c b/gio/gfdonotificationbackend.c
index a0d481433..b9bce190a 100644
--- a/gio/gfdonotificationbackend.c
+++ b/gio/gfdonotificationbackend.c
@@ -223,6 +223,7 @@ call_notify (GDBusConnection *con,
GIcon *icon;
GVariant *parameters;
const gchar *body;
+ const gchar *sound_name;
guchar urgency;
g_variant_builder_init (&action_builder, G_VARIANT_TYPE_STRING_ARRAY);
@@ -267,6 +268,13 @@ call_notify (GDBusConnection *con,
g_variant_new_string (g_application_get_application_id (app)));
urgency = urgency_from_priority (g_notification_get_priority (notification));
g_variant_builder_add (&hints_builder, "{sv}", "urgency", g_variant_new_byte (urgency));
+ sound_name = g_notification_get_sound_name (app);
+ if (sound_name != NULL)
+ {
+ g_variant_builder_add (&hints_builder, "{sv}", "sound-name",
+ g_variant_new_string (sound_name));
+ }
+
icon = g_notification_get_icon (notification);
if (icon != NULL)
{
diff --git a/gio/gnotification.c b/gio/gnotification.c
index 8e837ed03..113c73948 100644
--- a/gio/gnotification.c
+++ b/gio/gnotification.c
@@ -77,6 +77,7 @@ struct _GNotification
GPtrArray *buttons;
gchar *default_action;
GVariant *default_action_target;
+ gchar *sound_name;
};
typedef struct
@@ -122,6 +123,7 @@ g_notification_finalize (GObject *object)
if (notification->default_action_target)
g_variant_unref (notification->default_action_target);
g_ptr_array_free (notification->buttons, TRUE);
+ g_free (notification->sound_name);
G_OBJECT_CLASS (g_notification_parent_class)->finalize (object);
}
@@ -784,5 +786,54 @@ g_notification_serialize (GNotification *notification)
g_variant_builder_add (&builder, "{sv}", "buttons", g_variant_builder_end (&actions_builder));
}
+ if (notification->sound_name)
+ g_variant_builder_add (&builder, "{sv}", "sound-name", g_variant_new_string (notification->sound_name));
+
return g_variant_builder_end (&builder);
}
+
+/*< private >
+ * g_notification_get_sound_name:
+ * @notification: a #GNotification
+ *
+ * Gets the title of @notification.
+ *
+ * Returns: (nullable): the sound requested to be played when showing the @notification
+ *
+ * Since: 2.56
+ */
+const gchar *
+g_notification_get_sound_name (GNotification *notification)
+{
+ g_return_val_if_fail (G_IS_NOTIFICATION (notification), NULL);
+
+ return notification->sound_name;
+}
+
+/**
+ * g_notification_set_sound_name:
+ * @notification: a #GNotification
+ * @sound_name: (nullable): the name of the sound requested to be played when
+ * showing the @notification, or %NULL to play the default sound
+ *
+ * Sets the name of the sound played when showing of @notification to
+ * @sound_name. The name of the sound should follow the freedesktop sound theme
+ * specification (See https://freedesktop.org/wiki/Specifications/sound-theme-spec/
+ * for further information).
+ *
+ * If @sound_name is NULL, the default sound will be played.
+ *
+ * Since: 2.56
+ */
+void
+g_notification_set_sound_name (GNotification *notification,
+ const gchar *sound_name)
+{
+ g_return_if_fail (G_IS_NOTIFICATION (notification));
+
+ g_free (notification->sound_name);
+ if (sound_name)
+ {
+ notification->sound_name = g_strdup (sound_name);
+ }
+}
diff --git a/gio/gnotification.h b/gio/gnotification.h
index 55e683012..a47e69ec3 100644
--- a/gio/gnotification.h
+++ b/gio/gnotification.h
@@ -92,6 +92,10 @@ void g_notification_set_default_action_and_target_value (GNotifi
const gchar *action,
GVariant *target);
+GLIB_AVAILABLE_IN_2_56
+void g_notification_set_sound_name (GNotification *notification,
+ const gchar *sound_name);
+
G_END_DECLS
#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]