[glib] GNotification: add priority
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] GNotification: add priority
- Date: Sat, 28 Jun 2014 18:07:15 +0000 (UTC)
commit 01098e34c188b4ec93944e14dbece6818d786aec
Author: Lars Uebernickel <lars uebernickel canonical com>
Date: Sun Jun 15 15:42:31 2014 +0200
GNotification: add priority
https://bugzilla.gnome.org/show_bug.cgi?id=731623
gio/gfdonotificationbackend.c | 26 ++++++++++++++++++-
gio/gioenums.h | 26 +++++++++++++++++++
gio/gnotification-private.h | 2 +-
gio/gnotification.c | 55 ++++++++++++++++++++++++++++++++--------
gio/gnotification.h | 7 ++++-
gio/tests/gnotification.c | 8 +++---
6 files changed, 105 insertions(+), 19 deletions(-)
---
diff --git a/gio/gfdonotificationbackend.c b/gio/gfdonotificationbackend.c
index 69ba230..1603f6e 100644
--- a/gio/gfdonotificationbackend.c
+++ b/gio/gfdonotificationbackend.c
@@ -181,6 +181,27 @@ notify_signal (GDBusConnection *connection,
freedesktop_notification_free (n);
}
+/* Converts a GNotificationPriority to an urgency level as defined by
+ * the freedesktop spec (0: low, 1: normal, 2: critical).
+ */
+static guchar
+urgency_from_priority (GNotificationPriority priority)
+{
+ switch (priority)
+ {
+ case G_NOTIFICATION_PRIORITY_LOW:
+ return 0;
+
+ default:
+ case G_NOTIFICATION_PRIORITY_NORMAL:
+ return 1;
+
+ case G_NOTIFICATION_PRIORITY_HIGH:
+ case G_NOTIFICATION_PRIORITY_URGENT:
+ return 2;
+ }
+}
+
static void
call_notify (GDBusConnection *con,
GApplication *app,
@@ -196,6 +217,7 @@ call_notify (GDBusConnection *con,
GIcon *icon;
GVariant *parameters;
const gchar *body;
+ guchar urgency;
g_variant_builder_init (&action_builder, G_VARIANT_TYPE_STRING_ARRAY);
if (g_notification_get_default_action (notification, NULL, NULL))
@@ -237,8 +259,8 @@ call_notify (GDBusConnection *con,
g_variant_builder_init (&hints_builder, G_VARIANT_TYPE ("a{sv}"));
g_variant_builder_add (&hints_builder, "{sv}", "desktop-entry",
g_variant_new_string (g_application_get_application_id (app)));
- if (g_notification_get_urgent (notification))
- g_variant_builder_add (&hints_builder, "{sv}", "urgency", g_variant_new_byte (2));
+ urgency = urgency_from_priority (g_notification_get_priority (notification));
+ g_variant_builder_add (&hints_builder, "{sv}", "urgency", g_variant_new_byte (urgency));
icon = g_notification_get_icon (notification);
if (icon != NULL && G_IS_FILE_ICON (icon))
{
diff --git a/gio/gioenums.h b/gio/gioenums.h
index b9846b4..00d4c88 100644
--- a/gio/gioenums.h
+++ b/gio/gioenums.h
@@ -1783,6 +1783,32 @@ typedef enum {
G_SUBPROCESS_FLAGS_INHERIT_FDS = (1u << 7)
} GSubprocessFlags;
+/**
+ * GNotificationPriority:
+ * @G_NOTIFICATION_PRIORITY_LOW: for notifications that do not require
+ * immediate attention - typically used for contextual background
+ * information, such as contact birthdays or local weather
+ * @G_NOTIFICATION_PRIORITY_NORMAL: the default priority, to be used for the
+ * majority of notifications (for example email messages, software updates,
+ * completed download/sync operations)
+ * @G_NOTIFICATION_PRIORITY_HIGH: for events that require more attention,
+ * usually because responses are time-sensitive (for example chat and SMS
+ * messages or alarms)
+ * @G_NOTIFICATION_PRIORITY_URGENT: for urgent notifications, or notifications
+ * that require a response in a short space of time (for example phone calls
+ * or emergency warnings)
+ *
+ * Priority levels for #GNotifications.
+ *
+ * Since: 2.42
+ */
+typedef enum {
+ G_NOTIFICATION_PRIORITY_NORMAL,
+ G_NOTIFICATION_PRIORITY_LOW,
+ G_NOTIFICATION_PRIORITY_HIGH,
+ G_NOTIFICATION_PRIORITY_URGENT
+} GNotificationPriority;
+
G_END_DECLS
#endif /* __GIO_ENUMS_H__ */
diff --git a/gio/gnotification-private.h b/gio/gnotification-private.h
index 8b65050..e12a423 100644
--- a/gio/gnotification-private.h
+++ b/gio/gnotification-private.h
@@ -30,7 +30,7 @@ const gchar * g_notification_get_body (GNotifi
GIcon * g_notification_get_icon (GNotification *notification);
-gboolean g_notification_get_urgent (GNotification *notification);
+GNotificationPriority g_notification_get_priority (GNotification *notification);
guint g_notification_get_n_buttons (GNotification *notification);
diff --git a/gio/gnotification.c b/gio/gnotification.c
index e15da5e..53c5c6b 100644
--- a/gio/gnotification.c
+++ b/gio/gnotification.c
@@ -23,6 +23,7 @@
#include "gdbusutils.h"
#include "gicon.h"
#include "gaction.h"
+#include "gioenumtypes.h"
/**
* SECTION:gnotification
@@ -72,7 +73,7 @@ struct _GNotification
gchar *title;
gchar *body;
GIcon *icon;
- gboolean urgent;
+ GNotificationPriority priority;
GPtrArray *buttons;
gchar *default_action;
GVariant *default_action_target;
@@ -286,19 +287,19 @@ g_notification_set_icon (GNotification *notification,
}
/*< private >
- * g_notification_get_urgent:
+ * g_notification_get_priority:
* @notification: a #GNotification
*
- * Returns %TRUE if @notification is marked as urgent.
+ * Returns the priority of @notification
*
- * Since: 2.40
+ * Since: 2.42
*/
-gboolean
-g_notification_get_urgent (GNotification *notification)
+GNotificationPriority
+g_notification_get_priority (GNotification *notification)
{
- g_return_val_if_fail (G_IS_NOTIFICATION (notification), FALSE);
+ g_return_val_if_fail (G_IS_NOTIFICATION (notification), G_NOTIFICATION_PRIORITY_NORMAL);
- return notification->urgent;
+ return notification->priority;
}
/**
@@ -306,7 +307,7 @@ g_notification_get_urgent (GNotification *notification)
* @notification: a #GNotification
* @urgent: %TRUE if @notification is urgent
*
- * Sets or unsets whether @notification is marked as urgent.
+ * Deprecated in favor of g_notification_set_priority().
*
* Since: 2.40
*/
@@ -316,7 +317,24 @@ g_notification_set_urgent (GNotification *notification,
{
g_return_if_fail (G_IS_NOTIFICATION (notification));
- notification->urgent = urgent;
+ g_notification_set_priority (notification, G_NOTIFICATION_PRIORITY_URGENT);
+}
+
+/**
+ * g_notification_set_priority:
+ * @notification: a #GNotification
+ * @priority: a #GNotificationPriority
+ *
+ * Sets the priority of @notification to @priority. See
+ * #GNotificationPriority for possible values.
+ */
+void
+g_notification_set_priority (GNotification *notification,
+ GNotificationPriority priority)
+{
+ g_return_if_fail (G_IS_NOTIFICATION (notification));
+
+ notification->priority = priority;
}
/**
@@ -687,6 +705,21 @@ g_notification_serialize_button (Button *button)
return g_variant_builder_end (&builder);
}
+static GVariant *
+g_notification_get_priority_nick (GNotification *notification)
+{
+ GEnumClass *enum_class;
+ GEnumValue *value;
+ GVariant *nick;
+
+ enum_class = g_type_class_ref (G_TYPE_NOTIFICATION_PRIORITY);
+ value = g_enum_get_value (enum_class, g_notification_get_priority (notification));
+ nick = g_variant_new_string (value->value_nick);
+ g_type_class_unref (enum_class);
+
+ return nick;
+}
+
/*< private >
* g_notification_serialize:
*
@@ -718,7 +751,7 @@ g_notification_serialize (GNotification *notification)
}
}
- g_variant_builder_add (&builder, "{sv}", "urgent", g_variant_new_boolean (notification->urgent));
+ g_variant_builder_add (&builder, "{sv}", "priority", g_notification_get_priority_nick (notification));
if (notification->default_action)
{
diff --git a/gio/gnotification.h b/gio/gnotification.h
index 11226fe..07600b3 100644
--- a/gio/gnotification.h
+++ b/gio/gnotification.h
@@ -25,6 +25,7 @@
#endif
#include <gio/giotypes.h>
+#include <gio/gioenums.h>
G_BEGIN_DECLS
@@ -50,10 +51,14 @@ GLIB_AVAILABLE_IN_2_40
void g_notification_set_icon (GNotification *notification,
GIcon *icon);
-GLIB_AVAILABLE_IN_2_40
+GLIB_DEPRECATED_IN_2_42_FOR(g_notification_set_priority)
void g_notification_set_urgent (GNotification *notification,
gboolean urgent);
+GLIB_AVAILABLE_IN_2_42
+void g_notification_set_priority (GNotification *notification,
+ GNotificationPriority priority);
+
GLIB_AVAILABLE_IN_2_40
void g_notification_add_button (GNotification *notification,
const gchar *label,
diff --git a/gio/tests/gnotification.c b/gio/tests/gnotification.c
index 5ae989b..db14b49 100644
--- a/gio/tests/gnotification.c
+++ b/gio/tests/gnotification.c
@@ -41,7 +41,7 @@ activate_app (GApplication *application,
g_object_unref (icon);
g_notification_set_body (notification, "body");
- g_notification_set_urgent (notification, TRUE);
+ g_notification_set_priority (notification, G_NOTIFICATION_PRIORITY_URGENT);
g_notification_set_default_action_and_target (notification, "app.action", "i", 42);
g_notification_add_button_with_target (notification, "label", "app.action2", "s", "bla");
@@ -179,7 +179,7 @@ struct _GNotification
gchar *title;
gchar *body;
GIcon *icon;
- gboolean urgent;
+ GNotificationPriority priority;
GPtrArray *buttons;
gchar *default_action;
GVariant *default_action_target;
@@ -208,7 +208,7 @@ test_properties (void)
icon = g_themed_icon_new ("i-c-o-n");
g_notification_set_icon (n, icon);
g_object_unref (icon);
- g_notification_set_urgent (n, TRUE);
+ g_notification_set_priority (n, G_NOTIFICATION_PRIORITY_HIGH);
g_notification_add_button (n, "label1", "app.action1::target1");
g_notification_set_default_action (n, "app.action2::target2");
@@ -220,7 +220,7 @@ test_properties (void)
names = g_themed_icon_get_names (G_THEMED_ICON (rn->icon));
g_assert_cmpstr (names[0], ==, "i-c-o-n");
g_assert (names[1] == NULL);
- g_assert (rn->urgent);
+ g_assert (rn->priority == G_NOTIFICATION_PRIORITY_HIGH);
g_assert_cmpint (rn->buttons->len, ==, 1);
b = (Button*)rn->buttons->pdata[0];
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]