summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2011-04-28 14:45:20 +0100
committerMatthias Clasen <mclasen@redhat.com>2011-05-02 23:36:52 -0400
commit1c40dfaff48194c68378e07d0385171498dcb584 (patch)
tree83fcebc733a274d57d304a03176a568121d852e8
parentae361b0d9601ffd0bc398f01ca50025695a7c7bf (diff)
downloadlibnotify-1c40dfaff48194c68378e07d0385171498dcb584.tar.gz
Add notify_notification_set_app_name() to set the application name for the notification
When a daemon like gnome-settings-daemon has multiple plugins, if a plugin uses notify_set_app_name() then subsequent notifications get the wrong 'Application name' in the gnome-shell persistent message tray. This new function is per-notification and is thus allows us to set a custom application name without overwriting the application name stored by notify_init(). https://bugzilla.gnome.org/show_bug.cgi?id=648947
-rw-r--r--libnotify/notification.c69
-rw-r--r--libnotify/notification.h3
2 files changed, 69 insertions, 3 deletions
diff --git a/libnotify/notification.c b/libnotify/notification.c
index c10dcb4..6f36402 100644
--- a/libnotify/notification.c
+++ b/libnotify/notification.c
@@ -65,6 +65,7 @@ typedef struct
struct _NotifyNotificationPrivate
{
guint32 id;
+ char *app_name;
char *summary;
char *body;
@@ -100,6 +101,7 @@ enum
{
PROP_0,
PROP_ID,
+ PROP_APP_NAME,
PROP_SUMMARY,
PROP_BODY,
PROP_ICON_NAME,
@@ -179,6 +181,17 @@ notify_notification_class_init (NotifyNotificationClass *klass)
| G_PARAM_STATIC_BLURB));
g_object_class_install_property (object_class,
+ PROP_APP_NAME,
+ g_param_spec_string ("app-name",
+ "Application name",
+ "The application name to use for this notification",
+ NULL,
+ G_PARAM_READWRITE
+ | G_PARAM_STATIC_NAME
+ | G_PARAM_STATIC_NICK
+ | G_PARAM_STATIC_BLURB));
+
+ g_object_class_install_property (object_class,
PROP_SUMMARY,
g_param_spec_string ("summary",
"Summary",
@@ -230,6 +243,7 @@ notify_notification_class_init (NotifyNotificationClass *klass)
static void
notify_notification_update_internal (NotifyNotification *notification,
+ const char *app_name,
const char *summary,
const char *body,
const char *icon);
@@ -248,8 +262,17 @@ notify_notification_set_property (GObject *object,
priv->id = g_value_get_int (value);
break;
+ case PROP_APP_NAME:
+ notify_notification_update_internal (notification,
+ g_value_get_string (value),
+ priv->summary,
+ priv->body,
+ priv->icon_name);
+ break;
+
case PROP_SUMMARY:
notify_notification_update_internal (notification,
+ priv->app_name,
g_value_get_string (value),
priv->body,
priv->icon_name);
@@ -257,6 +280,7 @@ notify_notification_set_property (GObject *object,
case PROP_BODY:
notify_notification_update_internal (notification,
+ priv->app_name,
priv->summary,
g_value_get_string (value),
priv->icon_name);
@@ -264,6 +288,7 @@ notify_notification_set_property (GObject *object,
case PROP_ICON_NAME:
notify_notification_update_internal (notification,
+ priv->app_name,
priv->summary,
priv->body,
g_value_get_string (value));
@@ -293,6 +318,10 @@ notify_notification_get_property (GObject *object,
g_value_set_string (value, priv->summary);
break;
+ case PROP_APP_NAME:
+ g_value_set_string (value, priv->app_name);
+ break;
+
case PROP_BODY:
g_value_set_string (value, priv->body);
break;
@@ -347,6 +376,7 @@ notify_notification_finalize (GObject *object)
_notify_cache_remove_notification (obj);
+ g_free (priv->app_name);
g_free (priv->summary);
g_free (priv->body);
g_free (priv->icon_name);
@@ -397,10 +427,17 @@ notify_notification_new (const char *summary,
static void
notify_notification_update_internal (NotifyNotification *notification,
+ const char *app_name,
const char *summary,
const char *body,
const char *icon)
{
+ if (notification->priv->app_name != app_name) {
+ g_free (notification->priv->app_name);
+ notification->priv->app_name = g_strdup (app_name);
+ g_object_notify (G_OBJECT (notification), "app-name");
+ }
+
if (notification->priv->summary != summary) {
g_free (notification->priv->summary);
notification->priv->summary = g_strdup (summary);
@@ -447,7 +484,9 @@ notify_notification_update (NotifyNotification *notification,
g_return_val_if_fail (NOTIFY_IS_NOTIFICATION (notification), FALSE);
g_return_val_if_fail (summary != NULL && *summary != '\0', FALSE);
- notify_notification_update_internal (notification, summary, body, icon);
+ notify_notification_update_internal (notification,
+ notification->priv->app_name,
+ summary, body, icon);
return TRUE;
}
@@ -524,7 +563,7 @@ notify_notification_show (NotifyNotification *notification,
g_return_val_if_fail (NOTIFY_IS_NOTIFICATION (notification), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- if (notify_get_app_name () == NULL) {
+ if (!notify_is_initted ()) {
g_warning ("you must call notify_init() before showing");
g_assert_not_reached ();
}
@@ -557,7 +596,7 @@ notify_notification_show (NotifyNotification *notification,
result = g_dbus_proxy_call_sync (proxy,
"Notify",
g_variant_new ("(susssasa{sv}i)",
- notify_get_app_name (),
+ priv->app_name ? priv->app_name : notify_get_app_name (),
priv->id,
priv->icon_name ? priv->icon_name : "",
priv->summary ? priv->summary : "",
@@ -769,6 +808,30 @@ notify_notification_set_hint (NotifyNotification *notification,
}
/**
+ * notify_notification_set_app_name:
+ * @notification: a #NotifyNotification
+ * @app_name: the localised application name
+ *
+ * Sets the application name for the notification. If this function is
+ * not called or if @app_name is %NULL, the application name will be
+ * set from the value used in notify_init() or overridden with
+ * notify_set_app_name().
+ *
+ * Since: 0.7.3
+ */
+void
+notify_notification_set_app_name (NotifyNotification *notification,
+ const char *app_name)
+{
+ g_return_if_fail (NOTIFY_IS_NOTIFICATION (notification));
+
+ g_free (notification->priv->app_name);
+ notification->priv->app_name = g_strdup (app_name);
+
+ g_object_notify (G_OBJECT (notification), "app-name");
+}
+
+/**
* notify_notification_set_hint_int32:
* @notification: The notification.
* @key: The hint.
diff --git a/libnotify/notification.h b/libnotify/notification.h
index 39aa6b0..1f29f2e 100644
--- a/libnotify/notification.h
+++ b/libnotify/notification.h
@@ -165,6 +165,9 @@ void notify_notification_set_hint (NotifyNotificatio
const char *key,
GVariant *value);
+void notify_notification_set_app_name (NotifyNotification *notification,
+ const char *app_name);
+
void notify_notification_clear_hints (NotifyNotification *notification);
void notify_notification_add_action (NotifyNotification *notification,