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:
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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", ==,
|
||||||
|
|||||||
Reference in New Issue
Block a user