### Class

# Gtk ListBox

since: 4.0

#### Description [src]

    final class Gtk.ListBox : Gtk.Widget
      implements Gtk.Accessible, Gtk.Buildable, Gtk.ConstraintTarget {
      /* No available fields */
    }

`GtkListBox` is a vertical list.

A `GtkListBox` only contains `GtkListBoxRow` children. These rows can by dynamically sorted and filtered, and headers can be added dynamically depending on the row content. It also allows keyboard and mouse navigation and selection like a typical list.

Using `GtkListBox` is often an alternative to `GtkTreeView`, especially when the list contents has a more complicated layout than what is allowed by a `GtkCellRenderer`, or when the contents is interactive (i.e. has a button in it).

Although a `GtkListBox` must have only `GtkListBoxRow` children, you can add any kind of widget to it via `gtk_list_box_prepend()`, `gtk_list_box_append()` and `gtk_list_box_insert()` and a `GtkListBoxRow` widget will automatically be inserted between the list and the widget.

`GtkListBoxRows` can be marked as activatable or selectable. If a row is activatable, `GtkListBox::row-activated` will be emitted for it when the user tries to activate it. If it is selectable, the row will be marked as selected when the user tries to select it.

# GtkListBox as GtkBuildable

The `GtkListBox` implementation of the `GtkBuildable` interface supports setting a child as the placeholder by specifying “placeholder” as the “type” attribute of a `<child>` element. See `gtk_list_box_set_placeholder()` for info.

# CSS nodes

    list[.separators][.rich-list][.navigation-sidebar][.boxed-list]
    ╰── row[.activatable]

`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.

It may also carry the .boxed-list style class. In this case, the list will be automatically surrounded by a frame and have separators.

The main list node may also carry style classes to select the style of list presentation: .rich-list, .navigation-sidebar or .data-table.

# Accessibility

`GtkListBox` uses the `GTK_ACCESSIBLE_ROLE_LIST` role and `GtkListBoxRow` uses the `GTK_ACCESSIBLE_ROLE_LIST_ITEM` role.

Available since: 4.0

#### Ancestors

- GtkWidget
- GInitiallyUnowned
- GObject

#### Implements

- GtkAccessible
- GtkBuildable
- GtkConstraintTarget

#### Constructors

###### gtk_list_box_new

Creates a new `GtkListBox` container.

since: 4.0

#### Instance methods

###### gtk_list_box_append

Append a widget to the list.

since: 4.0

###### gtk_list_box_bind_model

Binds `model` to `box`.

since: 4.0

###### gtk_list_box_drag_highlight_row

Add a drag highlight to a row.

since: 4.0

###### gtk_list_box_drag_unhighlight_row

If a row has previously been highlighted via gtk_list_box_drag_highlight_row(), it will have the highlight removed.

since: 4.0

###### gtk_list_box_get_activate_on_single_click

Returns whether rows activate on single clicks.

since: 4.0

###### gtk_list_box_get_adjustment

Gets the adjustment (if any) that the widget uses to for vertical scrolling.

since: 4.0

###### gtk_list_box_get_row_at_index

Gets the n-th child in the list (not counting headers).

since: 4.0

###### gtk_list_box_get_row_at_y

Gets the row at the `y` position.

since: 4.0

###### gtk_list_box_get_selected_row

Gets the selected row, or `NULL` if no rows are selected.

since: 4.0

###### gtk_list_box_get_selected_rows

Creates a list of all selected children.

since: 4.0

###### gtk_list_box_get_selection_mode

Gets the selection mode of the listbox.

since: 4.0

###### gtk_list_box_get_show_separators

Returns whether the list box should show separators between rows.

since: 4.0

###### gtk_list_box_insert

Insert the `child` into the `box` at `position`.

since: 4.0

###### gtk_list_box_invalidate_filter

Update the filtering for all rows.

since: 4.0

###### gtk_list_box_invalidate_headers

Update the separators for all rows.

since: 4.0

###### gtk_list_box_invalidate_sort

Update the sorting for all rows.

since: 4.0

###### gtk_list_box_prepend

Prepend a widget to the list.

since: 4.0

###### gtk_list_box_remove

Removes a child from `box`.

since: 4.0

###### gtk_list_box_remove_all

Removes all rows from `box`.

since: 4.12

###### gtk_list_box_select_all

Select all children of `box`, if the selection mode allows it.

since: 4.0

###### gtk_list_box_select_row

Make `row` the currently selected row.

since: 4.0

###### gtk_list_box_selected_foreach

Calls a function for each selected child.

since: 4.0

###### gtk_list_box_set_activate_on_single_click

If `single` is `TRUE`, rows will be activated when you click on them, otherwise you need to double-click.

since: 4.0

###### gtk_list_box_set_adjustment

Sets the adjustment (if any) that the widget uses to for vertical scrolling.

since: 4.0

###### gtk_list_box_set_filter_func

By setting a filter function on the `box` one can decide dynamically which of the rows to show.

since: 4.0

###### gtk_list_box_set_header_func

Sets a header function.

since: 4.0

###### gtk_list_box_set_placeholder

Sets the placeholder widget that is shown in the list when it doesn’t display any visible children.

since: 4.0

###### gtk_list_box_set_selection_mode

Sets how selection works in the listbox.

since: 4.0

###### gtk_list_box_set_show_separators

Sets whether the list box should show separators between rows.

since: 4.0

###### gtk_list_box_set_sort_func

Sets a sort function.

since: 4.0

###### gtk_list_box_unselect_all

Unselect all children of `box`, if the selection mode allows it.

since: 4.0

###### gtk_list_box_unselect_row

Unselects a single row of `box`, if the selection mode allows it.

since: 4.0

##### Methods inherited from GtkWidget (162)

Please see GtkWidget for a full list of methods.

##### Methods inherited from GObject (43)

Please see GObject for a full list of methods.

##### Methods inherited from GtkAccessible (19)

###### gtk_accessible_announce

Requests the user’s screen reader to announce the given message.

since: 4.14

###### gtk_accessible_get_accessible_parent

Retrieves the accessible parent for an accessible object.

since: 4.10

###### gtk_accessible_get_accessible_role

Retrieves the accessible role of an accessible object.

since: 4.0

###### gtk_accessible_get_at_context

Retrieves the accessible implementation for the given `GtkAccessible`.

since: 4.10

###### gtk_accessible_get_bounds

Queries the coordinates and dimensions of this accessible.

since: 4.10

###### gtk_accessible_get_first_accessible_child

Retrieves the first accessible child of an accessible object.

since: 4.10

###### gtk_accessible_get_next_accessible_sibling

Retrieves the next accessible sibling of an accessible object.

since: 4.10

###### gtk_accessible_get_platform_state

Query a platform state, such as focus.

since: 4.10

###### gtk_accessible_reset_property

Resets the accessible `property` to its default value.

since: 4.0

###### gtk_accessible_reset_relation

Resets the accessible `relation` to its default value.

since: 4.0

###### gtk_accessible_reset_state

Resets the accessible `state` to its default value.

since: 4.0

###### gtk_accessible_set_accessible_parent

Sets the parent and sibling of an accessible object.

since: 4.10

###### gtk_accessible_update_next_accessible_sibling

Updates the next accessible sibling of `self`.

since: 4.10

###### gtk_accessible_update_property

Updates a list of accessible properties.

since: 4.0

###### gtk_accessible_update_property_value

Updates an array of accessible properties.

since: 4.0

###### gtk_accessible_update_relation

Updates a list of accessible relations.

since: 4.0

###### gtk_accessible_update_relation_value

Updates an array of accessible relations.

since: 4.0

###### gtk_accessible_update_state

Updates a list of accessible states. See the `GtkAccessibleState` documentation for the value types of accessible states.

since: 4.0

###### gtk_accessible_update_state_value

Updates an array of accessible states.

since: 4.0

##### Methods inherited from GtkBuildable (1)

###### gtk_buildable_get_buildable_id

Gets the ID of the `buildable` object.

since: 4.0

#### Properties

###### Gtk.ListBox:accept-unpaired-release

Whether to accept unpaired release events.

since: 4.0

###### Gtk.ListBox:activate-on-single-click

Determines whether children can be activated with a single click, or require a double-click.

since: 4.0

###### Gtk.ListBox:selection-mode

The selection mode used by the list box.

since: 4.0

###### Gtk.ListBox:show-separators

Whether to show separators between rows.

since: 4.0

##### Properties inherited from GtkWidget (34)

###### Gtk.Widget:can-focus

Whether the widget or any of its descendents can accept the input focus.

since: 4.0

###### Gtk.Widget:can-target

Whether the widget can receive pointer events.

since: 4.0

###### Gtk.Widget:css-classes

A list of css classes applied to this widget.

since: 4.0

###### Gtk.Widget:css-name

The name of this widget in the CSS tree.

since: 4.0

###### Gtk.Widget:cursor

The cursor used by `widget`.

since: 4.0

###### Gtk.Widget:focus-on-click

Whether the widget should grab focus when it is clicked with the mouse.

since: 4.0

###### Gtk.Widget:focusable

Whether this widget itself will accept the input focus.

since: 4.0

###### Gtk.Widget:halign

How to distribute horizontal space if widget gets extra space.

since: 4.0

###### Gtk.Widget:has-default

Whether the widget is the default widget.

since: 4.0

###### Gtk.Widget:has-focus

Whether the widget has the input focus.

since: 4.0

###### Gtk.Widget:has-tooltip

Enables or disables the emission of the ::query-tooltip signal on `widget`.

since: 4.0

###### Gtk.Widget:height-request

Override for height request of the widget.

since: 4.0

###### Gtk.Widget:hexpand

Whether to expand horizontally.

since: 4.0

###### Gtk.Widget:hexpand-set

Whether to use the `hexpand` property.

since: 4.0

###### Gtk.Widget:layout-manager

The `GtkLayoutManager` instance to use to compute the preferred size of the widget, and allocate its children.

since: 4.0

###### Gtk.Widget:margin-bottom

Margin on bottom side of widget.

since: 4.0

###### Gtk.Widget:margin-end

Margin on end of widget, horizontally.

since: 4.0

###### Gtk.Widget:margin-start

Margin on start of widget, horizontally.

since: 4.0

###### Gtk.Widget:margin-top

Margin on top side of widget.

since: 4.0

###### Gtk.Widget:name

The name of the widget.

since: 4.0

###### Gtk.Widget:opacity

The requested opacity of the widget.

since: 4.0

###### Gtk.Widget:overflow

How content outside the widget’s content area is treated.

since: 4.0

###### Gtk.Widget:parent

The parent widget of this widget.

since: 4.0

###### Gtk.Widget:receives-default

Whether the widget will receive the default action when it is focused.

since: 4.0

###### Gtk.Widget:root

The `GtkRoot` widget of the widget tree containing this widget.

since: 4.0

###### Gtk.Widget:scale-factor

The scale factor of the widget.

since: 4.0

###### Gtk.Widget:sensitive

Whether the widget responds to input.

since: 4.0

###### Gtk.Widget:tooltip-markup

Sets the text of tooltip to be the given string, which is marked up with Pango markup.

since: 4.0

###### Gtk.Widget:tooltip-text

Sets the text of tooltip to be the given string.

since: 4.0

###### Gtk.Widget:valign

How to distribute vertical space if widget gets extra space.

since: 4.0

###### Gtk.Widget:vexpand

Whether to expand vertically.

since: 4.0

###### Gtk.Widget:vexpand-set

Whether to use the `vexpand` property.

since: 4.0

###### Gtk.Widget:visible

Whether the widget is visible.

since: 4.0

###### Gtk.Widget:width-request

Override for width request of the widget.

since: 4.0

##### Properties inherited from GtkAccessible (1)

###### GtkAccessible:accessible-role

The accessible role of the given `GtkAccessible` implementation.

since: 4.0

#### Signals

###### Gtk.ListBox::activate-cursor-row

No description available.

since: 4.0

###### Gtk.ListBox::move-cursor

No description available.

since: 4.0

###### Gtk.ListBox::row-activated

Emitted when a row has been activated by the user.

since: 4.0

###### Gtk.ListBox::row-selected

Emitted when a new row is selected, or (with a `NULL` `row`) when the selection is cleared.

since: 4.0

###### Gtk.ListBox::select-all

Emitted to select all children of the box, if the selection mode permits it.

since: 4.0

###### Gtk.ListBox::selected-rows-changed

Emitted when the set of selected rows changes.

since: 4.0

###### Gtk.ListBox::toggle-cursor-row

No description available.

since: 4.0

###### Gtk.ListBox::unselect-all

Emitted to unselect all children of the box, if the selection mode permits it.

since: 4.0

##### Signals inherited from GtkWidget (13)

###### GtkWidget::destroy

Signals that all holders of a reference to the widget should release the reference that they hold.

since: 4.0

###### GtkWidget::direction-changed

Emitted when the text direction of a widget changes.

since: 4.0

###### GtkWidget::hide

Emitted when `widget` is hidden.

since: 4.0

###### GtkWidget::keynav-failed

Emitted if keyboard navigation fails.

since: 4.0

###### GtkWidget::map

Emitted when `widget` is going to be mapped.

since: 4.0

###### GtkWidget::mnemonic-activate

Emitted when a widget is activated via a mnemonic.

since: 4.0

###### GtkWidget::move-focus

Emitted when the focus is moved.

since: 4.0

###### GtkWidget::query-tooltip

Emitted when the widget’s tooltip is about to be shown.

since: 4.0

###### GtkWidget::realize

Emitted when `widget` is associated with a `GdkSurface`.

since: 4.0

###### GtkWidget::show

Emitted when `widget` is shown.

since: 4.0

###### GtkWidget::state-flags-changed

Emitted when the widget state changes.

since: 4.0

###### GtkWidget::unmap

Emitted when `widget` is going to be unmapped.

since: 4.0

###### GtkWidget::unrealize

Emitted when the `GdkSurface` associated with `widget` is destroyed.

since: 4.0

##### Signals inherited from GObject (1)

###### GObject::notify

The notify signal is emitted on an object when one of its properties has its value set through g_object_set_property(), g_object_set(), et al.

since: 2.0