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.
This commit is contained in:
Guido Günther
2022-12-08 10:05:47 +01:00
parent e10b2cc150
commit ada82a0ed1
3 changed files with 49 additions and 0 deletions
+42
View File
@@ -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)
{
+3
View File
@@ -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);
+4
View File
@@ -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", ==,