box gadget: Make it possible to draw focus

There are widgets which use a box gadget and take focus,
like GtkCheckButton.
This commit is contained in:
Matthias Clasen 2016-02-20 10:43:54 -05:00
parent e837aa69b6
commit ebff86d6f6
2 changed files with 18 additions and 9 deletions

View File

@ -36,6 +36,7 @@
typedef struct _GtkBoxGadgetPrivate GtkBoxGadgetPrivate;
struct _GtkBoxGadgetPrivate {
GtkOrientation orientation;
gboolean draw_focus;
GArray *children;
};
@ -448,6 +449,7 @@ gtk_box_gadget_draw (GtkCssGadget *gadget,
int height)
{
GtkBoxGadgetPrivate *priv = gtk_box_gadget_get_instance_private (GTK_BOX_GADGET (gadget));
GtkWidget *owner = gtk_css_gadget_get_owner (gadget);
guint i;
for (i = 0 ; i < priv->children->len; i++)
@ -455,18 +457,14 @@ gtk_box_gadget_draw (GtkCssGadget *gadget,
GtkBoxGadgetChild *child = &g_array_index (priv->children, GtkBoxGadgetChild, i);
if (GTK_IS_WIDGET (child->object))
{
gtk_container_propagate_draw (GTK_CONTAINER (gtk_css_gadget_get_owner (gadget)),
GTK_WIDGET (child->object),
cr);
}
gtk_container_propagate_draw (GTK_CONTAINER (owner), GTK_WIDGET (child->object), cr);
else
{
gtk_css_gadget_draw (GTK_CSS_GADGET (child->object),
cr);
}
gtk_css_gadget_draw (GTK_CSS_GADGET (child->object), cr);
}
if (priv->draw_focus && gtk_widget_has_visible_focus (owner))
return TRUE;
return FALSE;
}
@ -552,6 +550,15 @@ gtk_box_gadget_set_orientation (GtkBoxGadget *gadget,
priv->orientation = orientation;
}
void
gtk_box_gadget_set_draw_focus (GtkBoxGadget *gadget,
gboolean draw_focus)
{
GtkBoxGadgetPrivate *priv = gtk_box_gadget_get_instance_private (gadget);
priv->draw_focus = draw_focus;
}
static GtkCssNode *
get_css_node (GObject *child)
{

View File

@ -56,6 +56,8 @@ GtkCssGadget * gtk_box_gadget_new_for_node (GtkCssNode
void gtk_box_gadget_set_orientation (GtkBoxGadget *gadget,
GtkOrientation orientation);
void gtk_box_gadget_set_draw_focus (GtkBoxGadget *gadget,
gboolean draw_focus);
void gtk_box_gadget_insert_widget (GtkBoxGadget *gadget,
int pos,