[StWidget] add list-like methods for style_class and pseudo_class

Since style_class and pseudo_class are space-separated lists of names,
add new methods to add and remove individual names rather than just
re-setting the entire name.

Update existing code to use the new pseudo-class methods where
appropriate. In some cases, this may result in actors having multiple
pseudoclasses where previously they only had one at a time, but there
don't seem to be any visible differences.

(There are some places that could usefully use the new style_class
methods as well, but this patch doesn't change them.)

Also, update test-theme.c to test the new methods.

https://bugzilla.gnome.org/show_bug.cgi?id=604943
This commit is contained in:
Dan Winship
2010-03-19 11:37:04 -04:00
parent 7c37e94eda
commit 909b5ec43c
14 changed files with 367 additions and 88 deletions

View File

@ -133,21 +133,13 @@ st_button_style_changed (StWidget *widget)
static void
st_button_real_pressed (StButton *button)
{
st_widget_set_style_pseudo_class ((StWidget*) button, "active");
st_widget_add_style_pseudo_class ((StWidget*) button, "active");
}
static void
st_button_real_released (StButton *button)
{
StButtonPrivate *priv = button->priv;
if (priv->is_checked)
st_widget_set_style_pseudo_class ((StWidget*) button, "checked");
else if (!priv->is_hover)
st_widget_set_style_pseudo_class ((StWidget*) button, NULL);
else
st_widget_set_style_pseudo_class ((StWidget*) button, "hover");
st_widget_remove_style_pseudo_class ((StWidget*) button, "active");
}
static gboolean
@ -212,8 +204,7 @@ st_button_enter (ClutterActor *actor,
{
StButton *button = ST_BUTTON (actor);
if (!button->priv->is_checked)
st_widget_set_style_pseudo_class ((StWidget*) button, "hover");
st_widget_add_style_pseudo_class ((StWidget*) button, "hover");
button->priv->is_hover = 1;
@ -240,10 +231,7 @@ st_button_leave (ClutterActor *actor,
klass->released (button);
}
if (button->priv->is_checked)
st_widget_set_style_pseudo_class ((StWidget*) button, "checked");
else
st_widget_set_style_pseudo_class ((StWidget*) button, NULL);
st_widget_remove_style_pseudo_class ((StWidget*) button, "hover");
return CLUTTER_ACTOR_CLASS (st_button_parent_class)->leave_event (actor, event);
}
@ -558,12 +546,9 @@ st_button_set_checked (StButton *button,
button->priv->is_checked = checked;
if (checked)
st_widget_set_style_pseudo_class ((StWidget*) button, "checked");
st_widget_add_style_pseudo_class ((StWidget*) button, "checked");
else
if (button->priv->is_hover)
st_widget_set_style_pseudo_class ((StWidget*) button, "hover");
else
st_widget_set_style_pseudo_class ((StWidget*) button, NULL);
st_widget_remove_style_pseudo_class ((StWidget*) button, "checked");
}
g_object_notify (G_OBJECT (button), "checked");