From ada82a0ed1fd5f5c7a4b8d63c73222dce2fd964a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Mon, 5 Dec 2022 18:44:16 +0100 Subject: [PATCH] feedback-theme: Allow to get and set parent theme name If set the parent theme's feedbackd and profiles should be merged into this theme. --- src/fbd-feedback-theme.c | 42 +++++++++++++++++++++++++++++++++ src/fbd-feedback-theme.h | 3 +++ tests/test-fbd-feedback-theme.c | 4 ++++ 3 files changed, 49 insertions(+) diff --git a/src/fbd-feedback-theme.c b/src/fbd-feedback-theme.c index f6dd8e0..6d1bc22 100644 --- a/src/fbd-feedback-theme.c +++ b/src/fbd-feedback-theme.c @@ -18,6 +18,7 @@ enum { PROP_0, PROP_NAME, + PROP_PARENT_NAME, PROP_PROFILES, PROP_LAST_PROP, }; @@ -27,6 +28,8 @@ typedef struct _FbdFeedbackTheme { GObject parent; char *name; + char *parent_name; + GHashTable *profiles; } FbdFeedbackTheme; @@ -125,6 +128,9 @@ fbd_feedback_theme_set_property (GObject *object, case PROP_NAME: fbd_feedback_theme_set_name (self, g_value_get_string (value)); break; + case PROP_PARENT_NAME: + fbd_feedback_theme_set_parent_name (self, g_value_get_string (value)); + break; case PROP_PROFILES: if (self->profiles) g_hash_table_unref (self->profiles); @@ -149,6 +155,9 @@ fbd_feedback_theme_get_property (GObject *object, case PROP_NAME: g_value_set_string (value, fbd_feedback_theme_get_name (self)); break; + case PROP_PARENT_NAME: + g_value_set_string (value, fbd_feedback_theme_get_parent_name (self)); + break; case PROP_PROFILES: g_value_set_boxed (value, self->profiles); break; @@ -204,6 +213,14 @@ fbd_feedback_theme_class_init (FbdFeedbackThemeClass *klass) NULL, G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + props[PROP_PARENT_NAME] = + g_param_spec_string ( + "parent-name", + "Parent theme Name", + "The parent theme name", + NULL, + G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + props[PROP_PROFILES] = g_param_spec_boxed ( "profiles", @@ -278,6 +295,31 @@ fbd_feedback_theme_get_name (FbdFeedbackTheme *self) return self->name; } + +void +fbd_feedback_theme_set_parent_name (FbdFeedbackTheme *self, const char *parent_name) +{ + g_return_if_fail (FBD_IS_FEEDBACK_THEME (self)); + + if (g_strcmp0 (self->parent_name, parent_name) == 0) + return; + + g_free (self->parent_name); + self->parent_name = g_strdup (parent_name); + + g_object_notify_by_pspec (G_OBJECT (self), props[PROP_PARENT_NAME]); +} + + +const char * +fbd_feedback_theme_get_parent_name (FbdFeedbackTheme *self) +{ + g_return_val_if_fail (FBD_IS_FEEDBACK_THEME (self), ""); + + return self->parent_name; +} + + void fbd_feedback_theme_add_profile (FbdFeedbackTheme *self, FbdFeedbackProfile *profile) { diff --git a/src/fbd-feedback-theme.h b/src/fbd-feedback-theme.h index ddddc46..3485eb0 100644 --- a/src/fbd-feedback-theme.h +++ b/src/fbd-feedback-theme.h @@ -25,6 +25,9 @@ void fbd_feedback_theme_update (FbdFeedbackTheme *self, FbdFeedba const char *fbd_feedback_theme_get_name (FbdFeedbackTheme *self); void fbd_feedback_theme_set_name (FbdFeedbackTheme *self, const char *name); +void fbd_feedback_theme_set_parent_name (FbdFeedbackTheme *self, + const char *parent_name); +const char *fbd_feedback_theme_get_parent_name (FbdFeedbackTheme *self); void fbd_feedback_theme_add_profile (FbdFeedbackTheme *self, FbdFeedbackProfile *profile); FbdFeedbackProfile *fbd_feedback_theme_get_profile (FbdFeedbackTheme *self, const char *name); diff --git a/tests/test-fbd-feedback-theme.c b/tests/test-fbd-feedback-theme.c index 421b4a2..c5cb636 100644 --- a/tests/test-fbd-feedback-theme.c +++ b/tests/test-fbd-feedback-theme.c @@ -65,6 +65,7 @@ test_fbd_feedback_theme_parse (void) const char *json =" " "{ " " \"name\" : \"test\", " + " \"parent-name\" : \"parent-test\", " " \"profiles\" : [ " " { " " \"name\" : \"full\", " @@ -106,6 +107,9 @@ test_fbd_feedback_theme_parse (void) name = fbd_feedback_theme_get_name (theme); g_assert_cmpstr ("test", ==, name); + name = fbd_feedback_theme_get_parent_name (theme); + g_assert_cmpstr ("parent-test", ==, name); + profile = fbd_feedback_theme_get_profile (theme, "full"); g_assert_true (FBD_IS_FEEDBACK_PROFILE(profile)); g_assert_cmpstr ("full", ==,