fbd-event: Add sender property

This allows us to store the DBus sender
This commit is contained in:
Guido Günther
2021-04-22 14:43:30 +02:00
parent abab07a2f2
commit 66bcb31a0e
3 changed files with 51 additions and 7 deletions
+39 -1
View File
@@ -25,6 +25,7 @@ enum {
PROP_END_REASON, PROP_END_REASON,
PROP_FEEDBACKS_ENDED, PROP_FEEDBACKS_ENDED,
PROP_TIMEOUT, PROP_TIMEOUT,
PROP_SENDER,
PROP_LAST_PROP, PROP_LAST_PROP,
}; };
static GParamSpec *props[PROP_LAST_PROP]; static GParamSpec *props[PROP_LAST_PROP];
@@ -35,6 +36,7 @@ typedef struct _FbdEvent {
guint id; guint id;
char *app_id; char *app_id;
char *event; char *event;
char *sender;
int timeout; int timeout;
gboolean expired; gboolean expired;
@@ -118,6 +120,10 @@ fbd_event_set_property (GObject *object,
case PROP_END_REASON: case PROP_END_REASON:
fbd_event_set_end_reason (self, g_value_get_enum (value)); fbd_event_set_end_reason (self, g_value_get_enum (value));
break; break;
case PROP_SENDER:
g_free (self->sender);
self->sender = g_value_dup_string (value);
break;
case PROP_FEEDBACKS_ENDED: case PROP_FEEDBACKS_ENDED:
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -152,6 +158,9 @@ fbd_event_get_property (GObject *object,
case PROP_FEEDBACKS_ENDED: case PROP_FEEDBACKS_ENDED:
g_value_set_boolean (value, self->ended); g_value_set_boolean (value, self->ended);
break; break;
case PROP_SENDER:
g_value_set_string (value, self->sender);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break; break;
@@ -181,6 +190,7 @@ fbd_event_finalize (GObject *object)
g_clear_pointer (&self->app_id, g_free); g_clear_pointer (&self->app_id, g_free);
g_clear_pointer (&self->event, 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); G_OBJECT_CLASS (fbd_event_parent_class)->finalize (object);
} }
@@ -245,6 +255,19 @@ fbd_event_class_init (FbdEventClass *klass)
FBD_EVENT_END_REASON_NATURAL, FBD_EVENT_END_REASON_NATURAL,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); 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); g_object_class_install_properties (object_class, PROP_LAST_PROP, props);
/** /**
@@ -267,13 +290,14 @@ fbd_event_init (FbdEvent *self)
} }
FbdEvent * 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, return FBD_EVENT (g_object_new (FBD_TYPE_EVENT,
"id", id, "id", id,
"app_id", app_id, "app_id", app_id,
"event", event, "event", event,
"timeout", timeout, "timeout", timeout,
"sender", sender,
NULL)); NULL));
} }
@@ -447,3 +471,17 @@ fbd_event_get_end_reason (FbdEvent *self)
return self->end_reason; 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;
}
+2 -1
View File
@@ -33,7 +33,7 @@ typedef enum _FbdEventTimeout {
G_DECLARE_FINAL_TYPE (FbdEvent, fbd_event, FBD, EVENT, GObject); 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_event (FbdEvent *event);
const char *fbd_event_get_app_id (FbdEvent *event); const char *fbd_event_get_app_id (FbdEvent *event);
guint fbd_event_get_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_run_feedbacks (FbdEvent *self);
void fbd_event_end_feedbacks (FbdEvent *self); void fbd_event_end_feedbacks (FbdEvent *self);
gboolean fbd_event_get_feedbacks_ended (FbdEvent *self); gboolean fbd_event_get_feedbacks_ended (FbdEvent *self);
const char *fbd_event_get_sender (FbdEvent *self);
G_END_DECLS G_END_DECLS
+10 -5
View File
@@ -15,10 +15,11 @@ test_fbd_event (void)
g_autoptr(FbdEvent) event = NULL; g_autoptr(FbdEvent) event = NULL;
g_autofree gchar *appid = NULL; g_autofree gchar *appid = NULL;
g_autofree gchar *name = NULL; g_autofree gchar *name = NULL;
g_autofree gchar *sender = NULL;
FbdEventEndReason reason; FbdEventEndReason reason;
gint timeout; 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_assert_true (FBD_IS_EVENT (event));
g_object_get (event, g_object_get (event,
@@ -26,6 +27,7 @@ test_fbd_event (void)
"event", &name, "event", &name,
"app-id", &appid, "app-id", &appid,
"timeout", &timeout, "timeout", &timeout,
"sender", &sender,
NULL); NULL);
g_assert_cmpstr (fbd_event_get_event (event), ==, TEST_EVENT); 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 (fbd_event_get_timeout (event), ==, timeout);
g_assert_cmpint (timeout, ==, 2); 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 (fbd_event_get_end_reason (event), ==, FBD_EVENT_END_REASON_NATURAL);
g_assert_cmpint (reason, ==, 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) feedback1 = NULL;
g_autoptr(FbdFeedbackDummy) feedback2 = 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); feedback1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
feedback2 = 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; g_autoptr(FbdFeedbackDummy) feedback2 = NULL;
gboolean ended = FALSE; 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); feedback1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback1)); fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback1));
feedback2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL); feedback2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
@@ -117,7 +122,7 @@ test_fbd_event_feedback_loop (void)
g_autoptr(FbdFeedbackDummy) feedback2 = NULL; g_autoptr(FbdFeedbackDummy) feedback2 = NULL;
gboolean ended = FALSE; 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); feedback1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback1)); fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback1));
feedback2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL); feedback2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
@@ -139,7 +144,7 @@ test_fbd_event_feedback_timeout (void)
g_autoptr(FbdFeedbackDummy) feedback2 = NULL; g_autoptr(FbdFeedbackDummy) feedback2 = NULL;
gboolean ended = FALSE; 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); feedback1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback1)); fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback1));
feedback2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL); feedback2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);