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 { enum {
PROP_0, PROP_0,
PROP_NAME, PROP_NAME,
PROP_PARENT_NAME,
PROP_PROFILES, PROP_PROFILES,
PROP_LAST_PROP, PROP_LAST_PROP,
}; };
@@ -27,6 +28,8 @@ typedef struct _FbdFeedbackTheme {
GObject parent; GObject parent;
char *name; char *name;
char *parent_name;
GHashTable *profiles; GHashTable *profiles;
} FbdFeedbackTheme; } FbdFeedbackTheme;
@@ -125,6 +128,9 @@ fbd_feedback_theme_set_property (GObject *object,
case PROP_NAME: case PROP_NAME:
fbd_feedback_theme_set_name (self, g_value_get_string (value)); fbd_feedback_theme_set_name (self, g_value_get_string (value));
break; break;
case PROP_PARENT_NAME:
fbd_feedback_theme_set_parent_name (self, g_value_get_string (value));
break;
case PROP_PROFILES: case PROP_PROFILES:
if (self->profiles) if (self->profiles)
g_hash_table_unref (self->profiles); g_hash_table_unref (self->profiles);
@@ -149,6 +155,9 @@ fbd_feedback_theme_get_property (GObject *object,
case PROP_NAME: case PROP_NAME:
g_value_set_string (value, fbd_feedback_theme_get_name (self)); g_value_set_string (value, fbd_feedback_theme_get_name (self));
break; break;
case PROP_PARENT_NAME:
g_value_set_string (value, fbd_feedback_theme_get_parent_name (self));
break;
case PROP_PROFILES: case PROP_PROFILES:
g_value_set_boxed (value, self->profiles); g_value_set_boxed (value, self->profiles);
break; break;
@@ -204,6 +213,14 @@ fbd_feedback_theme_class_init (FbdFeedbackThemeClass *klass)
NULL, NULL,
G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); 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] = props[PROP_PROFILES] =
g_param_spec_boxed ( g_param_spec_boxed (
"profiles", "profiles",
@@ -278,6 +295,31 @@ fbd_feedback_theme_get_name (FbdFeedbackTheme *self)
return self->name; 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 void
fbd_feedback_theme_add_profile (FbdFeedbackTheme *self, FbdFeedbackProfile *profile) 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); 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_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, void fbd_feedback_theme_add_profile (FbdFeedbackTheme *self,
FbdFeedbackProfile *profile); FbdFeedbackProfile *profile);
FbdFeedbackProfile *fbd_feedback_theme_get_profile (FbdFeedbackTheme *self, const char *name); 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 =" " const char *json =" "
"{ " "{ "
" \"name\" : \"test\", " " \"name\" : \"test\", "
" \"parent-name\" : \"parent-test\", "
" \"profiles\" : [ " " \"profiles\" : [ "
" { " " { "
" \"name\" : \"full\", " " \"name\" : \"full\", "
@@ -106,6 +107,9 @@ test_fbd_feedback_theme_parse (void)
name = fbd_feedback_theme_get_name (theme); name = fbd_feedback_theme_get_name (theme);
g_assert_cmpstr ("test", ==, name); 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"); profile = fbd_feedback_theme_get_profile (theme, "full");
g_assert_true (FBD_IS_FEEDBACK_PROFILE(profile)); g_assert_true (FBD_IS_FEEDBACK_PROFILE(profile));
g_assert_cmpstr ("full", ==, g_assert_cmpstr ("full", ==,