GtkListBox: Refactor ::activatable implementation

Store the value in the row struct, and split the style updating
out into a separate function.
This commit is contained in:
Matthias Clasen
2014-07-15 22:42:29 -04:00
parent dc87027af9
commit 83e9e0bd8f

View File

@ -101,8 +101,9 @@ typedef struct
GtkWidget *header; GtkWidget *header;
gint y; gint y;
gint height; gint height;
gboolean visible; guint visible :1;
gboolean selected; guint selected :1;
guint activatable :1;
} GtkListBoxRowPrivate; } GtkListBoxRowPrivate;
enum { enum {
@ -2828,6 +2829,8 @@ gtk_list_box_row_init (GtkListBoxRow *row)
gtk_widget_set_can_focus (GTK_WIDGET (row), TRUE); gtk_widget_set_can_focus (GTK_WIDGET (row), TRUE);
gtk_widget_set_redraw_on_allocate (GTK_WIDGET (row), TRUE); gtk_widget_set_redraw_on_allocate (GTK_WIDGET (row), TRUE);
ROW_PRIV (row)->activatable = TRUE;
context = gtk_widget_get_style_context (GTK_WIDGET (row)); context = gtk_widget_get_style_context (GTK_WIDGET (row));
gtk_style_context_add_class (context, GTK_STYLE_CLASS_LIST_ROW); gtk_style_context_add_class (context, GTK_STYLE_CLASS_LIST_ROW);
gtk_style_context_add_class (context, GTK_STYLE_CLASS_BUTTON); gtk_style_context_add_class (context, GTK_STYLE_CLASS_BUTTON);
@ -3222,6 +3225,18 @@ gtk_list_box_row_is_selected (GtkListBoxRow *row)
return ROW_PRIV (row)->selected; return ROW_PRIV (row)->selected;
} }
static void
update_row_style (GtkListBoxRow *row)
{
GtkStyleContext *context;
context = gtk_widget_get_style_context (GTK_WIDGET (row));
if (ROW_PRIV (row)->activatable)
gtk_style_context_add_class (context, GTK_STYLE_CLASS_BUTTON);
else
gtk_style_context_remove_class (context, GTK_STYLE_CLASS_BUTTON);
}
/** /**
* gtk_list_box_row_set_activatable: * gtk_list_box_row_set_activatable:
* @row: a #GTkListBoxrow * @row: a #GTkListBoxrow
@ -3235,24 +3250,18 @@ void
gtk_list_box_row_set_activatable (GtkListBoxRow *row, gtk_list_box_row_set_activatable (GtkListBoxRow *row,
gboolean activatable) gboolean activatable)
{ {
GtkStyleContext *context;
g_return_if_fail (GTK_IS_LIST_BOX_ROW (row)); g_return_if_fail (GTK_IS_LIST_BOX_ROW (row));
activatable = activatable != FALSE; activatable = activatable != FALSE;
if (activatable == gtk_list_box_row_get_activatable (row)) if (ROW_PRIV (row)->activatable != activatable)
return; {
ROW_PRIV (row)->activatable = activatable;
context = gtk_widget_get_style_context (GTK_WIDGET (row));
if (activatable)
gtk_style_context_add_class (context, GTK_STYLE_CLASS_BUTTON);
else
gtk_style_context_remove_class (context, GTK_STYLE_CLASS_BUTTON);
update_row_style (row);
g_object_notify (G_OBJECT (row), "activatable"); g_object_notify (G_OBJECT (row), "activatable");
} }
}
/** /**
* gtk_list_box_row_get_activatable: * gtk_list_box_row_get_activatable:
@ -3268,13 +3277,9 @@ gtk_list_box_row_set_activatable (GtkListBoxRow *row,
gboolean gboolean
gtk_list_box_row_get_activatable (GtkListBoxRow *row) gtk_list_box_row_get_activatable (GtkListBoxRow *row)
{ {
GtkStyleContext *context;
g_return_val_if_fail (GTK_IS_LIST_BOX_ROW (row), TRUE); g_return_val_if_fail (GTK_IS_LIST_BOX_ROW (row), TRUE);
context = gtk_widget_get_style_context (GTK_WIDGET (row)); return ROW_PRIV (row)->activatable;
return gtk_style_context_has_class (context, GTK_STYLE_CLASS_BUTTON);
} }
static void static void