From 14ffd9722dd73f6d7ee9d68ffbe6c412f77c42e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Tue, 9 Apr 2024 13:22:11 +0200 Subject: [PATCH] libfeedback: Allow to set important hint --- debian/libfeedback-0.0-0.symbols | 2 ++ libfeedback/lfb-event.c | 62 ++++++++++++++++++++++++++++++++ libfeedback/lfb-event.h | 3 ++ tests/test-lfb-event.c | 3 ++ tests/test-lfb-integration.c | 1 + 5 files changed, 71 insertions(+) diff --git a/debian/libfeedback-0.0-0.symbols b/debian/libfeedback-0.0-0.symbols index 114ab85..d67a7af 100644 --- a/debian/libfeedback-0.0-0.symbols +++ b/debian/libfeedback-0.0-0.symbols @@ -9,12 +9,14 @@ libfeedback-0.0.so.0 libfeedback-0.0-0 #MINVER# lfb_event_get_end_reason@LIBFEEDBACK_0_0_0 0.1.1 lfb_event_get_event@LIBFEEDBACK_0_0_0 0.1.1 lfb_event_get_feedback_profile@LIBFEEDBACK_0_0_0 0.1.1 + lfb_event_get_important@LIBFEEDBACK_0_0_0 0.2.1 lfb_event_get_state@LIBFEEDBACK_0_0_0 0.1.1 lfb_event_get_timeout@LIBFEEDBACK_0_0_0 0.1.1 lfb_event_get_type@LIBFEEDBACK_0_0_0 0.1.1 lfb_event_new@LIBFEEDBACK_0_0_0 0.1.1 lfb_event_set_app_id@LIBFEEDBACK_0_0_0 0.2.0 lfb_event_set_feedback_profile@LIBFEEDBACK_0_0_0 0.1.1 + lfb_event_set_important@LIBFEEDBACK_0_0_0 0.2.1 lfb_event_set_timeout@LIBFEEDBACK_0_0_0 0.1.1 lfb_event_state_get_type@LIBFEEDBACK_0_0_0 0.1.1 lfb_event_trigger_feedback@LIBFEEDBACK_0_0_0 0.1.1 diff --git a/libfeedback/lfb-event.c b/libfeedback/lfb-event.c index 3fdf78a..20a6556 100644 --- a/libfeedback/lfb-event.c +++ b/libfeedback/lfb-event.c @@ -79,6 +79,7 @@ enum { PROP_STATE, PROP_END_REASON, PROP_FEEDBACK_PROFILE, + PROP_IMPORTANT, PROP_APP_ID, PROP_LAST_PROP, }; @@ -96,6 +97,7 @@ typedef struct _LfbEvent { char *event; gint timeout; gchar *profile; + gboolean important; char *app_id; guint id; @@ -139,6 +141,8 @@ build_hints (LfbEvent *self) g_variant_builder_init (&hints_builder, G_VARIANT_TYPE ("a{sv}")); if (self->profile) g_variant_builder_add (&hints_builder, "{sv}", "profile", g_variant_new_string (self->profile)); + if (self->important) + g_variant_builder_add (&hints_builder, "{sv}", "important", g_variant_new_boolean (self->important)); return g_variant_builder_end (&hints_builder); } @@ -223,6 +227,9 @@ lfb_event_set_property (GObject *object, case PROP_FEEDBACK_PROFILE: lfb_event_set_feedback_profile (self, g_value_get_string (value)); break; + case PROP_IMPORTANT: + lfb_event_set_important (self, g_value_get_boolean (value)); + break; case PROP_APP_ID: lfb_event_set_app_id (self, g_value_get_string (value)); break; @@ -251,6 +258,9 @@ lfb_event_get_property (GObject *object, case PROP_FEEDBACK_PROFILE: g_value_set_string (value, lfb_event_get_feedback_profile (self)); break; + case PROP_IMPORTANT: + g_value_set_boolean (value, lfb_event_get_important (self)); + break; case PROP_APP_ID: g_value_set_string (value, lfb_event_get_app_id (self)); break; @@ -345,6 +355,20 @@ lfb_event_class_init (LfbEventClass *klass) NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); + /** + * LfbEvent:important: + * + * Whether to flag this event as important. + * [method@LfbEvent.set_imporant] for details. + */ + props[PROP_IMPORTANT] = + g_param_spec_boolean ( + "important", + "Important", + "Whether to flags this event as important", + FALSE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); + /** * LfbEvent:app-id: * @@ -757,6 +781,44 @@ lfb_event_get_feedback_profile (LfbEvent *self) return self->profile; } +/** + * lfb_event_set_important: + * @self: The event + * @important: Whether to flag this event as important + * + * Tells the feedback server that the sender deems this to be an + * important event. A feedback server might allow the sender to + * override the current feedback level when this is set. + */ +void +lfb_event_set_important (LfbEvent *self, gboolean important) +{ + g_return_if_fail (LFB_IS_EVENT (self)); + + if (self->important == important) + return; + + self->important = important; + g_object_notify_by_pspec (G_OBJECT (self), props[PROP_IMPORTANT]); +} + +/** + * lfb_event_get_important: + * @self: The event + * + * Gets the set feedback profile. If no profile was set it returns + * %NULL. The event uses the system wide profile in this case. + * + * Returns: The set feedback profile to use for this event or %NULL. + */ +gboolean +lfb_event_get_important (LfbEvent *self) +{ + g_return_val_if_fail (LFB_IS_EVENT (self), FALSE); + + return self->important; +} + /** * lfb_event_set_app_id: * @self: The event diff --git a/libfeedback/lfb-event.h b/libfeedback/lfb-event.h index 6437c60..c4c66cf 100644 --- a/libfeedback/lfb-event.h +++ b/libfeedback/lfb-event.h @@ -75,9 +75,12 @@ void lfb_event_set_timeout (LfbEvent *self, gint timeout); gint lfb_event_get_timeout (LfbEvent *self); void lfb_event_set_feedback_profile (LfbEvent *self, const char *profile); const char *lfb_event_get_feedback_profile (LfbEvent *self); +void lfb_event_set_important (LfbEvent *self, gboolean important); +gboolean lfb_event_get_important (LfbEvent *self); void lfb_event_set_app_id (LfbEvent *self, const char *app_id); const char *lfb_event_get_app_id (LfbEvent *self); const char *lfb_event_get_event (LfbEvent *self); + LfbEventState lfb_event_get_state (LfbEvent *self); LfbEventEndReason lfb_event_get_end_reason (LfbEvent *self); diff --git a/tests/test-lfb-event.c b/tests/test-lfb-event.c index d52b9fb..f59237f 100644 --- a/tests/test-lfb-event.c +++ b/tests/test-lfb-event.c @@ -15,6 +15,7 @@ test_lfb_event_props (void) g_autofree gchar *evname = NULL; g_autofree gchar *profile = NULL; g_autofree gchar *app_id = NULL; + gboolean important; gint timeout; g_assert_true (lfb_init (TEST_APP_ID, NULL)); @@ -27,10 +28,12 @@ test_lfb_event_props (void) "timeout", &timeout, "feedback-profile", &profile, "app-id", &app_id, + "important", &important, NULL); g_assert_cmpstr (evname, ==, "window-close"); g_assert_cmpint (timeout, ==, -1); g_assert_null (profile); + g_assert_false (important); g_assert_null (app_id); g_assert_cmpint (lfb_event_get_end_reason (event), ==, LFB_EVENT_END_REASON_NATURAL); diff --git a/tests/test-lfb-integration.c b/tests/test-lfb-integration.c index 48b39b3..74ebcf7 100644 --- a/tests/test-lfb-integration.c +++ b/tests/test-lfb-integration.c @@ -238,6 +238,7 @@ test_lfb_integration_event_async (void) lfb_event_set_timeout (event10, 1); g_assert_cmpint (lfb_event_get_timeout (event10), ==, 1); lfb_event_set_feedback_profile (event10, "quiet"); + lfb_event_set_important (event10, FALSE); g_signal_connect (event10, "feedback-ended", (GCallback)on_feedback_ended, &cmp1); /* The async callback ends the main loop */