--- src/modules/notifications/notification.c | 26 ++++++++++++++++++++------ src/modules/notifications/notification.h | 23 ++++++++++++++++++----- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/src/modules/notifications/notification.c b/src/modules/notifications/notification.c index cb6bca1..f3757d7 100644 --- a/src/modules/notifications/notification.c +++ b/src/modules/notifications/notification.c @@ -25,26 +25,40 @@ #include <pulse/xmalloc.h> +#include <pulsecore/hashmap.h> + #include "notification.h" #include "notification-backend.h" pa_ui_notification* pa_ui_notification_new(pa_ui_notification_reply_cb_t reply_cb, void *userdata) { - pa_ui_notification *n = pa_xnew(pa_ui_notification, 1); + pa_ui_notification *n = pa_xnew0(pa_ui_notification, 1); - n->replaces_id = 0; n->summary = ""; n->body = ""; - n->actions = NULL; - n->num_actions = 0; /* TODO: actions */ n->expire_timeout = -1; - + n->actions = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func); n->handle_reply = reply_cb; n->userdata = userdata; - return n; } void pa_ui_notification_free(pa_ui_notification *n) { + pa_hashmap_free(n->actions, NULL, NULL); pa_xfree(n); } + +pa_ui_notification_reply* pa_ui_notification_reply_new(pa_ui_notification_reply_type_t type, pa_ui_notification *source, char *action_key) { + pa_ui_notification_reply *reply = pa_xnew0(pa_ui_notification_reply, 1); + + reply->type = type; + reply->source = source; + reply->action_key = action_key; + + return reply; +} + +void pa_ui_notification_reply_free(pa_ui_notification_reply *reply) { + pa_ui_notification_free(reply->source); + pa_xfree(reply); +} diff --git a/src/modules/notifications/notification.h b/src/modules/notifications/notification.h index 03623a6..1944311 100644 --- a/src/modules/notifications/notification.h +++ b/src/modules/notifications/notification.h @@ -20,7 +20,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. ***/ -#include <stdint.h> +#include <pulsecore/hashmap.h> typedef struct pa_ui_notification pa_ui_notification; typedef struct pa_ui_notification_reply pa_ui_notification_reply; @@ -28,22 +28,35 @@ typedef struct pa_ui_notification_reply pa_ui_notification_reply; typedef void(*pa_ui_notification_reply_cb_t)(pa_ui_notification_reply *reply); struct pa_ui_notification { - uint32_t replaces_id; + unsigned replaces_id; char *summary; char *body; - char **actions; - size_t num_actions; - int32_t expire_timeout; + pa_hashmap *actions; + int expire_timeout; pa_ui_notification_reply_cb_t handle_reply; void* userdata; }; +typedef enum pa_ui_notification_reply_type { + PA_UI_NOTIFCATION_REPLY_ERROR, + PA_UI_NOTIFCATION_REPLY_CANCELLED, + PA_UI_NOTIFCATION_REPLY_DISMISSED, + PA_UI_NOTIFCATION_REPLY_EXPIRED, + PA_UI_NOTIFCATION_REPLY_ACTION_INVOKED, + PA_UI_NOTIFCATION_REPLY_MAX +} pa_ui_notification_reply_type_t; + struct pa_ui_notification_reply { + pa_ui_notification_reply_type_t type; pa_ui_notification *source; + char *action_key; }; pa_ui_notification* pa_ui_notification_new(pa_ui_notification_reply_cb_t reply_cb, void *userdata); void pa_ui_notification_free(pa_ui_notification *notification); +pa_ui_notification_reply* pa_ui_notification_reply_new(pa_ui_notification_reply_type_t type, pa_ui_notification *source, char *action_key); +void pa_ui_notification_reply_free(pa_ui_notification_reply *reply); + #endif -- 1.7.10.4