listbox: Add a ::show-separators property

This is getting translated into a .separators style
class on the list box css node.
This commit is contained in:
Matthias Clasen 2019-04-12 20:24:40 -04:00
parent 9a1da43890
commit 0249bd4f8a
3 changed files with 74 additions and 2 deletions

View File

@ -362,6 +362,8 @@ gtk_list_box_get_selected_row
GtkListBoxForeachFunc
gtk_list_box_selected_foreach
gtk_list_box_get_selected_rows
gtk_list_box_set_show_separators
gtk_list_box_get_show_separators
gtk_list_box_set_selection_mode
gtk_list_box_get_selection_mode

View File

@ -73,11 +73,12 @@
* # CSS nodes
*
* |[<!-- language="plain" -->
* list
* list[.separators]
* row[.activatable]
* ]|
*
* GtkListBox uses a single CSS node named list. Each GtkListBoxRow uses
* GtkListBox uses a single CSS node named list. It may carry the .separators style
* class, when the #GtkListBox::show-separators property is set. Each GtkListBoxRow uses
* a single CSS node named row. The row nodes get the .activatable
* style class added when appropriate.
*/
@ -113,6 +114,7 @@ typedef struct
GtkAdjustment *adjustment;
gboolean activate_single_click;
gboolean accept_unpaired_release;
gboolean show_separators;
/* DnD */
GtkListBoxRow *drag_highlighted_row;
@ -160,6 +162,7 @@ enum {
PROP_SELECTION_MODE,
PROP_ACTIVATE_ON_SINGLE_CLICK,
PROP_ACCEPT_UNPAIRED_RELEASE,
PROP_SHOW_SEPARATORS,
LAST_PROPERTY
};
@ -332,6 +335,9 @@ gtk_list_box_get_property (GObject *obj,
case PROP_ACCEPT_UNPAIRED_RELEASE:
g_value_set_boolean (value, priv->accept_unpaired_release);
break;
case PROP_SHOW_SEPARATORS:
g_value_set_boolean (value, priv->show_separators);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
break;
@ -357,6 +363,9 @@ gtk_list_box_set_property (GObject *obj,
case PROP_ACCEPT_UNPAIRED_RELEASE:
gtk_list_box_set_accept_unpaired_release (box, g_value_get_boolean (value));
break;
case PROP_SHOW_SEPARATORS:
gtk_list_box_set_show_separators (box, g_value_get_boolean (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
break;
@ -446,6 +455,13 @@ gtk_list_box_class_init (GtkListBoxClass *klass)
FALSE,
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
properties[PROP_SHOW_SEPARATORS] =
g_param_spec_boolean ("show-separators",
P_("Show separators"),
P_("Show separators between rows"),
FALSE,
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
g_object_class_install_properties (object_class, LAST_PROPERTY, properties);
/**
@ -3599,3 +3615,51 @@ gtk_list_box_bind_model (GtkListBox *box,
g_signal_connect (priv->bound_model, "items-changed", G_CALLBACK (gtk_list_box_bound_model_changed), box);
gtk_list_box_bound_model_changed (model, 0, 0, g_list_model_get_n_items (model), box);
}
/**
* gtk_list_box_set_show_separators:
* @box: a #GtkListBox
* @show_separators: %TRUE to show separators
*
* Sets whether the list box should show separators
* between rows.
*/
void
gtk_list_box_set_show_separators (GtkListBox *box,
gboolean show_separators)
{
GtkListBoxPrivate *priv = BOX_PRIV (box);
g_return_if_fail (GTK_IS_LIST_BOX (box));
if (priv->show_separators == show_separators)
return;
priv->show_separators = show_separators;
if (show_separators)
gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (box)), "separators");
else
gtk_style_context_remove_class (gtk_widget_get_style_context (GTK_WIDGET (box)), "separators");
g_object_notify_by_pspec (G_OBJECT (box), properties[PROP_SHOW_SEPARATORS]);
}
/**
* gtk_list_box_get_show_separators:
* @box: a #GtkListBox
*
* Returns whether the list box should show separators
* between rows.
*
* Returns: %TRUE if the list box shows separators
*/
gboolean
gtk_list_box_get_show_separators (GtkListBox *box)
{
GtkListBoxPrivate *priv = BOX_PRIV (box);
g_return_if_fail (GTK_IS_LIST_BOX (box));
return priv->show_separators;
}

View File

@ -300,6 +300,12 @@ void gtk_list_box_bind_model (GtkListBox
gpointer user_data,
GDestroyNotify user_data_free_func);
GDK_AVAILABLE_IN_ALL
void gtk_list_box_set_show_separators (GtkListBox *box,
gboolean show_separators);
GDK_AVAILABLE_IN_ALL
gboolean gtk_list_box_get_show_separators (GtkListBox *box);
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkListBox, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkListBoxRow, g_object_unref)