From 66bcb31a0e6a6bedf1f9a129c9369a8487b1bff8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Wed, 21 Apr 2021 18:26:29 +0200 Subject: [PATCH] fbd-event: Add sender property This allows us to store the DBus sender --- src/fbd-event.c | 40 +++++++++++++++++++++++++++++++++++++++- src/fbd-event.h | 3 ++- tests/test-fbd-event.c | 15 ++++++++++----- 3 files changed, 51 insertions(+), 7 deletions(-) diff --git a/src/fbd-event.c b/src/fbd-event.c index 73f37c2..00408ef 100644 --- a/src/fbd-event.c +++ b/src/fbd-event.c @@ -25,6 +25,7 @@ enum { PROP_END_REASON, PROP_FEEDBACKS_ENDED, PROP_TIMEOUT, + PROP_SENDER, PROP_LAST_PROP, }; static GParamSpec *props[PROP_LAST_PROP]; @@ -35,6 +36,7 @@ typedef struct _FbdEvent { guint id; char *app_id; char *event; + char *sender; int timeout; gboolean expired; @@ -118,6 +120,10 @@ fbd_event_set_property (GObject *object, case PROP_END_REASON: fbd_event_set_end_reason (self, g_value_get_enum (value)); break; + case PROP_SENDER: + g_free (self->sender); + self->sender = g_value_dup_string (value); + break; case PROP_FEEDBACKS_ENDED: default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -152,6 +158,9 @@ fbd_event_get_property (GObject *object, case PROP_FEEDBACKS_ENDED: g_value_set_boolean (value, self->ended); break; + case PROP_SENDER: + g_value_set_string (value, self->sender); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -181,6 +190,7 @@ fbd_event_finalize (GObject *object) g_clear_pointer (&self->app_id, g_free); g_clear_pointer (&self->event, g_free); + g_clear_pointer (&self->sender, g_free); G_OBJECT_CLASS (fbd_event_parent_class)->finalize (object); } @@ -245,6 +255,19 @@ fbd_event_class_init (FbdEventClass *klass) FBD_EVENT_END_REASON_NATURAL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); + /** + * FbdEvent:Sender: + * + * The DBus name of the sender + */ + props[PROP_SENDER] = + g_param_spec_string ( + "sender", + "", + "", + NULL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); + g_object_class_install_properties (object_class, PROP_LAST_PROP, props); /** @@ -267,13 +290,14 @@ fbd_event_init (FbdEvent *self) } FbdEvent * -fbd_event_new (int id, const char *app_id, const char *event, int timeout) +fbd_event_new (int id, const char *app_id, const char *event, int timeout, const char *sender) { return FBD_EVENT (g_object_new (FBD_TYPE_EVENT, "id", id, "app_id", app_id, "event", event, "timeout", timeout, + "sender", sender, NULL)); } @@ -447,3 +471,17 @@ fbd_event_get_end_reason (FbdEvent *self) return self->end_reason; } + +/** + * fbd_event_get_sender: + * @self: The Event + * + * Returns: The DBus sender that triggered the event. + */ +const char * +fbd_event_get_sender (FbdEvent *self) +{ + g_return_val_if_fail (FBD_IS_EVENT (self), FBD_EVENT_END_REASON_NATURAL); + + return self->sender; +} diff --git a/src/fbd-event.h b/src/fbd-event.h index b497613..f7844c2 100644 --- a/src/fbd-event.h +++ b/src/fbd-event.h @@ -33,7 +33,7 @@ typedef enum _FbdEventTimeout { G_DECLARE_FINAL_TYPE (FbdEvent, fbd_event, FBD, EVENT, GObject); -FbdEvent *fbd_event_new (gint id, const char *app_id, const char *event, int timeout); +FbdEvent *fbd_event_new (gint id, const char *app_id, const char *event, int timeout, const char *sender); const char *fbd_event_get_event (FbdEvent *event); const char *fbd_event_get_app_id (FbdEvent *event); guint fbd_event_get_id (FbdEvent *event); @@ -48,5 +48,6 @@ int fbd_event_remove_feedback (FbdEvent *self, void fbd_event_run_feedbacks (FbdEvent *self); void fbd_event_end_feedbacks (FbdEvent *self); gboolean fbd_event_get_feedbacks_ended (FbdEvent *self); +const char *fbd_event_get_sender (FbdEvent *self); G_END_DECLS diff --git a/tests/test-fbd-event.c b/tests/test-fbd-event.c index 0e5aa2f..cac2c89 100644 --- a/tests/test-fbd-event.c +++ b/tests/test-fbd-event.c @@ -15,10 +15,11 @@ test_fbd_event (void) g_autoptr(FbdEvent) event = NULL; g_autofree gchar *appid = NULL; g_autofree gchar *name = NULL; + g_autofree gchar *sender = NULL; FbdEventEndReason reason; gint timeout; - event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, 2); + event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, 2, "sender-id"); g_assert_true (FBD_IS_EVENT (event)); g_object_get (event, @@ -26,6 +27,7 @@ test_fbd_event (void) "event", &name, "app-id", &appid, "timeout", &timeout, + "sender", &sender, NULL); g_assert_cmpstr (fbd_event_get_event (event), ==, TEST_EVENT); @@ -37,6 +39,9 @@ test_fbd_event (void) g_assert_cmpint (fbd_event_get_timeout (event), ==, timeout); g_assert_cmpint (timeout, ==, 2); + g_assert_cmpstr (fbd_event_get_sender (event), ==, sender); + g_assert_cmpstr (sender, ==, "sender-id"); + g_assert_cmpint (fbd_event_get_end_reason (event), ==, FBD_EVENT_END_REASON_NATURAL); g_assert_cmpint (reason, ==, FBD_EVENT_END_REASON_NATURAL); } @@ -49,7 +54,7 @@ test_fbd_event_feedback (void) g_autoptr(FbdFeedbackDummy) feedback1 = NULL; g_autoptr(FbdFeedbackDummy) feedback2 = NULL; - event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, -1); + event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, -1, NULL); feedback1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL); feedback2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL); @@ -96,7 +101,7 @@ test_fbd_event_feedback_ended (void) g_autoptr(FbdFeedbackDummy) feedback2 = NULL; gboolean ended = FALSE; - event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, FBD_EVENT_TIMEOUT_ONESHOT); + event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, FBD_EVENT_TIMEOUT_ONESHOT, NULL); feedback1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL); fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback1)); feedback2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL); @@ -117,7 +122,7 @@ test_fbd_event_feedback_loop (void) g_autoptr(FbdFeedbackDummy) feedback2 = NULL; gboolean ended = FALSE; - event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, FBD_EVENT_TIMEOUT_LOOP); + event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, FBD_EVENT_TIMEOUT_LOOP, NULL); feedback1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL); fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback1)); feedback2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL); @@ -139,7 +144,7 @@ test_fbd_event_feedback_timeout (void) g_autoptr(FbdFeedbackDummy) feedback2 = NULL; gboolean ended = FALSE; - event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, 1); + event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, 1, NULL); feedback1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL); fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback1)); feedback2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);