## ExoIconView

ExoIconView — A widget which displays a list of icons in a grid

## Synopsis

    #include <exo/exo.h>

    struct              ExoIconView;
    enum                ExoIconViewDropPosition;
    enum                ExoIconViewLayoutMode;
    GtkWidget *         exo_icon_view_new                   (void);
    GtkWidget *         exo_icon_view_new_with_model        (GtkTreeModel *model);
    GtkTreeModel *      exo_icon_view_get_model             (const ExoIconView *icon_view);
    void                exo_icon_view_set_model             (ExoIconView *icon_view,
                                                             GtkTreeModel *model);
    GtkOrientation      exo_icon_view_get_orientation       (const ExoIconView *icon_view);
    void                exo_icon_view_set_orientation       (ExoIconView *icon_view,
                                                             GtkOrientation orientation);
    gint                exo_icon_view_get_columns           (const ExoIconView *icon_view);
    void                exo_icon_view_set_columns           (ExoIconView *icon_view,
                                                             gint columns);
    gint                exo_icon_view_get_item_width        (const ExoIconView *icon_view);
    void                exo_icon_view_set_item_width        (ExoIconView *icon_view,
                                                             gint item_width);
    gint                exo_icon_view_get_spacing           (const ExoIconView *icon_view);
    void                exo_icon_view_set_spacing           (ExoIconView *icon_view,
                                                             gint spacing);
    gint                exo_icon_view_get_row_spacing       (const ExoIconView *icon_view);
    void                exo_icon_view_set_row_spacing       (ExoIconView *icon_view,
                                                             gint row_spacing);
    gint                exo_icon_view_get_column_spacing    (const ExoIconView *icon_view);
    void                exo_icon_view_set_column_spacing    (ExoIconView *icon_view,
                                                             gint column_spacing);
    gint                exo_icon_view_get_margin            (const ExoIconView *icon_view);
    void                exo_icon_view_set_margin            (ExoIconView *icon_view,
                                                             gint margin);
    GtkSelectionMode    exo_icon_view_get_selection_mode    (const ExoIconView *icon_view);
    void                exo_icon_view_set_selection_mode    (ExoIconView *icon_view,
                                                             GtkSelectionMode mode);
    ExoIconViewLayoutMode exo_icon_view_get_layout_mode     (const ExoIconView *icon_view);
    void                exo_icon_view_set_layout_mode       (ExoIconView *icon_view,
                                                             ExoIconViewLayoutMode layout_mode);
    gboolean            exo_icon_view_get_single_click      (const ExoIconView *icon_view);
    void                exo_icon_view_set_single_click      (ExoIconView *icon_view,
                                                             gboolean single_click);
    guint               exo_icon_view_get_single_click_timeout
                                                            (const ExoIconView *icon_view);
    void                exo_icon_view_set_single_click_timeout
                                                            (ExoIconView *icon_view,
                                                             guint single_click_timeout);
    void                exo_icon_view_widget_to_icon_coords (const ExoIconView *icon_view,
                                                             gint wx,
                                                             gint wy,
                                                             gint *ix,
                                                             gint *iy);
    void                exo_icon_view_icon_to_widget_coords (const ExoIconView *icon_view,
                                                             gint ix,
                                                             gint iy,
                                                             gint *wx,
                                                             gint *wy);
    GtkTreePath *       exo_icon_view_get_path_at_pos       (const ExoIconView *icon_view,
                                                             gint x,
                                                             gint y);
    gboolean            exo_icon_view_get_item_at_pos       (const ExoIconView *icon_view,
                                                             gint x,
                                                             gint y,
                                                             GtkTreePath **path,
                                                             GtkCellRenderer **cell);
    gboolean            exo_icon_view_get_visible_range     (const ExoIconView *icon_view,
                                                             GtkTreePath **start_path,
                                                             GtkTreePath **end_path);
    void                (*ExoIconViewForeachFunc)           (ExoIconView *icon_view,
                                                             GtkTreePath *path,
                                                             gpointer user_data);
    void                exo_icon_view_selected_foreach      (ExoIconView *icon_view,
                                                             ExoIconViewForeachFunc func,
                                                             gpointer data);
    void                exo_icon_view_select_path           (ExoIconView *icon_view,
                                                             GtkTreePath *path);
    void                exo_icon_view_unselect_path         (ExoIconView *icon_view,
                                                             GtkTreePath *path);
    gboolean            exo_icon_view_path_is_selected      (const ExoIconView *icon_view,
                                                             GtkTreePath *path);
    gint                exo_icon_view_get_item_column       (ExoIconView *icon_view,
                                                             GtkTreePath *path);
    gint                exo_icon_view_get_item_row          (ExoIconView *icon_view,
                                                             GtkTreePath *path);
    GList *             exo_icon_view_get_selected_items    (const ExoIconView *icon_view);
    void                exo_icon_view_select_all            (ExoIconView *icon_view);
    void                exo_icon_view_unselect_all          (ExoIconView *icon_view);
    void                exo_icon_view_selection_invert      (ExoIconView *icon_view);
    void                exo_icon_view_item_activated        (ExoIconView *icon_view,
                                                             GtkTreePath *path);
    gboolean            exo_icon_view_get_cursor            (const ExoIconView *icon_view,
                                                             GtkTreePath **path,
                                                             GtkCellRenderer **cell);
    void                exo_icon_view_set_cursor            (ExoIconView *icon_view,
                                                             GtkTreePath *path,
                                                             GtkCellRenderer *cell,
                                                             gboolean start_editing);
    void                exo_icon_view_scroll_to_path        (ExoIconView *icon_view,
                                                             GtkTreePath *path,
                                                             gboolean use_align,
                                                             gfloat row_align,
                                                             gfloat col_align);
    void                exo_icon_view_enable_model_drag_source
                                                            (ExoIconView *icon_view,
                                                             GdkModifierType start_button_mask,
                                                             const GtkTargetEntry *targets,
                                                             gint n_targets,
                                                             GdkDragAction actions);
    void                exo_icon_view_enable_model_drag_dest
                                                            (ExoIconView *icon_view,
                                                             const GtkTargetEntry *targets,
                                                             gint n_targets,
                                                             GdkDragAction actions);
    void                exo_icon_view_unset_model_drag_source
                                                            (ExoIconView *icon_view);
    void                exo_icon_view_unset_model_drag_dest (ExoIconView *icon_view);
    void                exo_icon_view_set_reorderable       (ExoIconView *icon_view,
                                                             gboolean reorderable);
    gboolean            exo_icon_view_get_reorderable       (ExoIconView *icon_view);
    void                exo_icon_view_set_drag_dest_item    (ExoIconView *icon_view,
                                                             GtkTreePath *path,
                                                             ExoIconViewDropPosition pos);
    void                exo_icon_view_get_drag_dest_item    (ExoIconView *icon_view,
                                                             GtkTreePath **path,
                                                             ExoIconViewDropPosition *pos);
    gboolean            exo_icon_view_get_dest_item_at_pos  (ExoIconView *icon_view,
                                                             gint drag_x,
                                                             gint drag_y,
                                                             GtkTreePath **path,
                                                             ExoIconViewDropPosition *pos);
    GdkPixmap *         exo_icon_view_create_drag_icon      (ExoIconView *icon_view,
                                                             GtkTreePath *path);
    gboolean            (*ExoIconViewSearchEqualFunc)       (GtkTreeModel *model,
                                                             gint column,
                                                             const gchar *key,
                                                             GtkTreeIter *iter,
                                                             gpointer search_data);
    void                (*ExoIconViewSearchPositionFunc)    (ExoIconView *icon_view,
                                                             GtkWidget *search_dialog,
                                                             gpointer user_data);
    gboolean            exo_icon_view_get_enable_search     (const ExoIconView *icon_view);
    void                exo_icon_view_set_enable_search     (ExoIconView *icon_view,
                                                             gboolean enable_search);
    gint                exo_icon_view_get_search_column     (const ExoIconView *icon_view);
    void                exo_icon_view_set_search_column     (ExoIconView *icon_view,
                                                             gint search_column);
    ExoIconViewSearchEqualFunc exo_icon_view_get_search_equal_func
                                                            (const ExoIconView *icon_view);
    void                exo_icon_view_set_search_equal_func (ExoIconView *icon_view,
                                                             ExoIconViewSearchEqualFunc search_equal_func,
                                                             gpointer search_equal_data,
                                                             GDestroyNotify search_equal_destroy);
    ExoIconViewSearchPositionFunc exo_icon_view_get_search_position_func
                                                            (const ExoIconView *icon_view);
    void                exo_icon_view_set_search_position_func
                                                            (ExoIconView *icon_view,
                                                             ExoIconViewSearchPositionFunc search_position_func,
                                                             gpointer search_position_data,
                                                             GDestroyNotify search_position_destroy);

## Object Hierarchy

      GObject
       +----GInitiallyUnowned
             +----GtkObject
                   +----GtkWidget
                         +----GtkContainer
                               +----ExoIconView

## Implemented Interfaces

ExoIconView implements AtkImplementorIface, GtkBuildable and GtkCellLayout.

## Properties

      "column-spacing"           gint                  : Read / Write
      "columns"                  gint                  : Read / Write
      "enable-search"            gboolean              : Read / Write
      "icon-column"              gint                  : Read / Write
      "item-width"               gint                  : Read / Write
      "layout-mode"              ExoIconViewLayoutMode  : Read / Write
      "margin"                   gint                  : Read / Write
      "markup-column"            gint                  : Read / Write
      "model"                    GtkTreeModel*         : Read / Write
      "orientation"              GtkOrientation        : Read / Write
      "pixbuf-column"            gint                  : Read / Write
      "reorderable"              gboolean              : Read / Write
      "row-spacing"              gint                  : Read / Write
      "search-column"            gint                  : Read / Write
      "selection-mode"           GtkSelectionMode      : Read / Write
      "single-click"             gboolean              : Read / Write
      "single-click-timeout"     guint                 : Read / Write
      "spacing"                  gint                  : Read / Write
      "text-column"              gint                  : Read / Write

## Signals

      "activate-cursor-item"                           : Action
      "item-activated"                                 : Run Last
      "move-cursor"                                    : Action
      "select-all"                                     : Action
      "select-cursor-item"                             : Action
      "selection-changed"                              : Run First
      "set-scroll-adjustments"                         : Run Last
      "start-interactive-search"                       : Action
      "toggle-cursor-item"                             : Action
      "unselect-all"                                   : Action

## Description

ExoIconView provides an alternative view on a list model. It displays the model as a grid of icons with labels. Like GtkTreeView, it allows to select one or multiple items (depending on the selection mode, see `exo_icon_view_set_selection_mode()`). In addition to selection with the arrow keys, ExoIconView supports rubberband selection, which is controlled by dragging the pointer.

## Details

### struct ExoIconView

    struct ExoIconView;

### enum ExoIconViewDropPosition

    typedef enum {
      EXO_ICON_VIEW_NO_DROP,
      EXO_ICON_VIEW_DROP_INTO,
      EXO_ICON_VIEW_DROP_LEFT,
      EXO_ICON_VIEW_DROP_RIGHT,
      EXO_ICON_VIEW_DROP_ABOVE,
      EXO_ICON_VIEW_DROP_BELOW
    } ExoIconViewDropPosition;

Specifies whether to display the drop indicator, i.e. where to drop into the icon view.

`EXO_ICON_VIEW_NO_DROP` | no drop indicator.
`EXO_ICON_VIEW_DROP_INTO` | drop indicator on an item.
`EXO_ICON_VIEW_DROP_LEFT` | drop indicator on the left of an item.
`EXO_ICON_VIEW_DROP_RIGHT` | drop indicator on the right of an item.
`EXO_ICON_VIEW_DROP_ABOVE` | drop indicator above an item.
`EXO_ICON_VIEW_DROP_BELOW` | drop indicator below an item.

### enum ExoIconViewLayoutMode

    typedef enum {
      EXO_ICON_VIEW_LAYOUT_ROWS,
      EXO_ICON_VIEW_LAYOUT_COLS
    } ExoIconViewLayoutMode;

Specifies the layouting mode of an ExoIconView. `EXO_ICON_VIEW_LAYOUT_ROWS` is the default, which lays out items vertically in rows from top to bottom. `EXO_ICON_VIEW_LAYOUT_COLS` lays out items horizontally in columns from left to right.

`EXO_ICON_VIEW_LAYOUT_ROWS` | layout items in rows.
`EXO_ICON_VIEW_LAYOUT_COLS` | layout items in columns.

### exo_icon_view_new ()

    GtkWidget *         exo_icon_view_new                   (void);

Creates a new ExoIconView widget

Returns : | A newly created ExoIconView widget

### exo_icon_view_new_with_model ()

    GtkWidget *         exo_icon_view_new_with_model        (GtkTreeModel *model);

Creates a new ExoIconView widget with the model `model`.

`model` : | The model.
Returns : | A newly created ExoIconView widget.

### exo_icon_view_get_model ()

    GtkTreeModel *      exo_icon_view_get_model             (const ExoIconView *icon_view);

Returns the model the ExoIconView is based on. Returns `NULL` if the model is unset.

`icon_view` : | a ExoIconView
Returns : | A GtkTreeModel, or `NULL` if none is currently being used.

### exo_icon_view_set_model ()

    void                exo_icon_view_set_model             (ExoIconView *icon_view,
                                                             GtkTreeModel *model);

Sets the model for a ExoIconView. If the `icon_view` already has a model set, it will remove it before setting the new model. If `model` is `NULL`, then it will unset the old model.

`icon_view` : | A ExoIconView.
`model` : | The model.

### exo_icon_view_get_orientation ()

    GtkOrientation      exo_icon_view_get_orientation       (const ExoIconView *icon_view);

Returns the value of the ::orientation property which determines whether the labels are drawn beside the icons instead of below.

`icon_view` : | a ExoIconView
Returns : | the relative position of texts and icons

Since 0.3.1

### exo_icon_view_set_orientation ()

    void                exo_icon_view_set_orientation       (ExoIconView *icon_view,
                                                             GtkOrientation orientation);

Sets the ::orientation property which determines whether the labels are drawn beside the icons instead of below.

`icon_view` : | a ExoIconView
`orientation` : | the relative position of texts and icons

Since 0.3.1

### exo_icon_view_get_columns ()

    gint                exo_icon_view_get_columns           (const ExoIconView *icon_view);

Returns the value of the ::columns property.

`icon_view` : | a ExoIconView
Returns : | the number of columns, or -1

### exo_icon_view_set_columns ()

    void                exo_icon_view_set_columns           (ExoIconView *icon_view,
                                                             gint columns);

Sets the ::columns property which determines in how many columns the icons are arranged. If `columns` is -1, the number of columns will be chosen automatically to fill the available area.

`icon_view` : | a ExoIconView
`columns` : | the number of columns

Since 0.3.1

### exo_icon_view_get_item_width ()

    gint                exo_icon_view_get_item_width        (const ExoIconView *icon_view);

Returns the value of the ::item-width property.

`icon_view` : | a ExoIconView
Returns : | the width of a single item, or -1

Since 0.3.1

### exo_icon_view_set_item_width ()

    void                exo_icon_view_set_item_width        (ExoIconView *icon_view,
                                                             gint item_width);

Sets the ::item-width property which specifies the width to use for each item. If it is set to -1, the icon view will automatically determine a suitable item size.

`icon_view` : | a ExoIconView
`item_width` : | the width for each item

Since 0.3.1

### exo_icon_view_get_spacing ()

    gint                exo_icon_view_get_spacing           (const ExoIconView *icon_view);

Returns the value of the ::spacing property.

`icon_view` : | a ExoIconView
Returns : | the space between cells

Since 0.3.1

### exo_icon_view_set_spacing ()

    void                exo_icon_view_set_spacing           (ExoIconView *icon_view,
                                                             gint spacing);

Sets the ::spacing property which specifies the space which is inserted between the cells (i.e. the icon and the text) of an item.

`icon_view` : | a ExoIconView
`spacing` : | the spacing

Since 0.3.1

### exo_icon_view_get_row_spacing ()

    gint                exo_icon_view_get_row_spacing       (const ExoIconView *icon_view);

Returns the value of the ::row-spacing property.

`icon_view` : | a ExoIconView
Returns : | the space between rows

Since 0.3.1

### exo_icon_view_set_row_spacing ()

    void                exo_icon_view_set_row_spacing       (ExoIconView *icon_view,
                                                             gint row_spacing);

Sets the ::row-spacing property which specifies the space which is inserted between the rows of the icon view.

`icon_view` : | a ExoIconView
`row_spacing` : | the row spacing

Since 0.3.1

### exo_icon_view_get_column_spacing ()

    gint                exo_icon_view_get_column_spacing    (const ExoIconView *icon_view);

Returns the value of the ::column-spacing property.

`icon_view` : | a ExoIconView
Returns : | the space between columns

Since 0.3.1

### exo_icon_view_set_column_spacing ()

    void                exo_icon_view_set_column_spacing    (ExoIconView *icon_view,
                                                             gint column_spacing);

Sets the ::column-spacing property which specifies the space which is inserted between the columns of the icon view.

`icon_view` : | a ExoIconView
`column_spacing` : | the column spacing

Since 0.3.1

### exo_icon_view_get_margin ()

    gint                exo_icon_view_get_margin            (const ExoIconView *icon_view);

Returns the value of the ::margin property.

`icon_view` : | a ExoIconView
Returns : | the space at the borders

Since 0.3.1

### exo_icon_view_set_margin ()

    void                exo_icon_view_set_margin            (ExoIconView *icon_view,
                                                             gint margin);

Sets the ::margin property which specifies the space which is inserted at the top, bottom, left and right of the icon view.

`icon_view` : | a ExoIconView
`margin` : | the margin

Since 0.3.1

### exo_icon_view_get_selection_mode ()

    GtkSelectionMode    exo_icon_view_get_selection_mode    (const ExoIconView *icon_view);

Gets the selection mode of the `icon_view`.

`icon_view` : | A ExoIconView.
Returns : | the current selection mode

### exo_icon_view_set_selection_mode ()

    void                exo_icon_view_set_selection_mode    (ExoIconView *icon_view,
                                                             GtkSelectionMode mode);

Sets the selection mode of the `icon_view`.

`icon_view` : | A ExoIconView.
`mode` : | The selection mode

### exo_icon_view_get_layout_mode ()

    ExoIconViewLayoutMode exo_icon_view_get_layout_mode     (const ExoIconView *icon_view);

Returns the ExoIconViewLayoutMode used to layout the items in the `icon_view`.

`icon_view` : | A ExoIconView.
Returns : | the layout mode of `icon_view`.

Since 0.3.1.5

### exo_icon_view_set_layout_mode ()

    void                exo_icon_view_set_layout_mode       (ExoIconView *icon_view,
                                                             ExoIconViewLayoutMode layout_mode);

Sets the layout mode of `icon_view` to `layout_mode`.

`icon_view` : | a ExoIconView.
`layout_mode` : | the new ExoIconViewLayoutMode for `icon_view`.

Since 0.3.1.5

### exo_icon_view_get_single_click ()

    gboolean            exo_icon_view_get_single_click      (const ExoIconView *icon_view);

Returns `TRUE` if `icon_view` is currently in single click mode, else `FALSE` will be returned.

`icon_view` : | a ExoIconView.
Returns : | whether `icon_view` is currently in single click mode.

Since 0.3.1.3

### exo_icon_view_set_single_click ()

    void                exo_icon_view_set_single_click      (ExoIconView *icon_view,
                                                             gboolean single_click);

If `single_click` is `TRUE`, `icon_view` will be in single click mode afterwards, else `icon_view` will be in double click mode.

`icon_view` : | a ExoIconView.
`single_click` : | `TRUE` for single click, `FALSE` for double click mode.

Since 0.3.1.3

### exo_icon_view_get_single_click_timeout ()

    guint               exo_icon_view_get_single_click_timeout
                                                            (const ExoIconView *icon_view);

Returns the amount of time in milliseconds after which the item under the mouse cursor will be selected automatically in single click mode. A value of `0` means that the behavior is disabled and the user must alter the selection manually.

`icon_view` : | a ExoIconView.
Returns : | the single click autoselect timeout or `0` if the behavior is disabled.

Since 0.3.1.5

### exo_icon_view_set_single_click_timeout ()

    void                exo_icon_view_set_single_click_timeout
                                                            (ExoIconView *icon_view,
                                                             guint single_click_timeout);

If `single_click_timeout` is a value greater than zero, it specifies the amount of time in milliseconds after which the item under the mouse cursor will be selected automatically in single click mode. A value of `0` for `single_click_timeout` disables the autoselection for `icon_view`.

This setting does not have any effect unless the `icon_view` is in single-click mode, see `exo_icon_view_set_single_click()`.

`icon_view` : | a ExoIconView.
`single_click_timeout` : | the new timeout or `0` to disable.

Since 0.3.1.5

### exo_icon_view_widget_to_icon_coords ()

    void                exo_icon_view_widget_to_icon_coords (const ExoIconView *icon_view,
                                                             gint wx,
                                                             gint wy,
                                                             gint *ix,
                                                             gint *iy);

Converts widget coordinates to coordinates for the icon window (the full scrollable area of the icon view).

`icon_view` : | a ExoIconView.
`wx` : | widget x coordinate.
`wy` : | widget y coordinate.
`ix` : | return location for icon x coordinate or `NULL`.
`iy` : | return location for icon y coordinate or `NULL`.

### exo_icon_view_icon_to_widget_coords ()

    void                exo_icon_view_icon_to_widget_coords (const ExoIconView *icon_view,
                                                             gint ix,
                                                             gint iy,
                                                             gint *wx,
                                                             gint *wy);

Converts icon view coordinates (coordinates in full scrollable area of the icon view) to widget coordinates.

`icon_view` : | a ExoIconView.
`ix` : | icon x coordinate.
`iy` : | icon y coordinate.
`wx` : | return location for widget x coordinate or `NULL`.
`wy` : | return location for widget y coordinate or `NULL`.

### exo_icon_view_get_path_at_pos ()

    GtkTreePath *       exo_icon_view_get_path_at_pos       (const ExoIconView *icon_view,
                                                             gint x,
                                                             gint y);

Finds the path at the point (`x`, `y`), relative to widget coordinates. See `exo_icon_view_get_item_at_pos()`, if you are also interested in the cell at the specified position.

`icon_view` : | A ExoIconView.
`x` : | The x position to be identified
`y` : | The y position to be identified
Returns : | The GtkTreePath corresponding to the icon or `NULL` if no icon exists at that position.

### exo_icon_view_get_item_at_pos ()

    gboolean            exo_icon_view_get_item_at_pos       (const ExoIconView *icon_view,
                                                             gint x,
                                                             gint y,
                                                             GtkTreePath **path,
                                                             GtkCellRenderer **cell);

Finds the path at the point (`x`, `y`), relative to widget coordinates. In contrast to `exo_icon_view_get_path_at_pos()`, this function also obtains the cell at the specified position. The returned path should be freed with `gtk_tree_path_free()`.

`icon_view` : | A ExoIconView.
`x` : | The x position to be identified
`y` : | The y position to be identified
`path` : | Return location for the path, or `NULL`
`cell` : | Return location for the renderer responsible for the cell at (`x`, `y`), or `NULL`
Returns : | `TRUE` if an item exists at the specified position

Since 0.3.1

### exo_icon_view_get_visible_range ()

    gboolean            exo_icon_view_get_visible_range     (const ExoIconView *icon_view,
                                                             GtkTreePath **start_path,
                                                             GtkTreePath **end_path);

Sets `start_path` and `end_path` to be the first and last visible path. Note that there may be invisible paths in between.

Both paths should be freed with `gtk_tree_path_free()` after use.

`icon_view` : | A ExoIconView
`start_path` : | Return location for start of region, or `NULL`
`end_path` : | Return location for end of region, or `NULL`
Returns : | `TRUE`, if valid paths were placed in `start_path` and `end_path`

Since 0.3.1

### ExoIconViewForeachFunc ()

    void                (*ExoIconViewForeachFunc)           (ExoIconView *icon_view,
                                                             GtkTreePath *path,
                                                             gpointer user_data);

Callback function prototype, invoked for every selected path in the `icon_view`. See `exo_icon_view_selected_foreach()` for details.

`icon_view` : | an ExoIconView.
`path` : | the current path.
`user_data` : | the user data supplied to `exo_icon_view_selected_foreach()`.

### exo_icon_view_selected_foreach ()

    void                exo_icon_view_selected_foreach      (ExoIconView *icon_view,
                                                             ExoIconViewForeachFunc func,
                                                             gpointer data);

Calls a function for each selected icon. Note that the model or selection cannot be modified from within this function.

`icon_view` : | A ExoIconView.
`func` : | The funcion to call for each selected icon.
`data` : | User data to pass to the function.

### exo_icon_view_select_path ()

    void                exo_icon_view_select_path           (ExoIconView *icon_view,
                                                             GtkTreePath *path);

Selects the row at `path`.

`icon_view` : | A ExoIconView.
`path` : | The GtkTreePath to be selected.

### exo_icon_view_unselect_path ()

    void                exo_icon_view_unselect_path         (ExoIconView *icon_view,
                                                             GtkTreePath *path);

Unselects the row at `path`.

`icon_view` : | A ExoIconView.
`path` : | The GtkTreePath to be unselected.

### exo_icon_view_path_is_selected ()

    gboolean            exo_icon_view_path_is_selected      (const ExoIconView *icon_view,
                                                             GtkTreePath *path);

Returns `TRUE` if the icon pointed to by `path` is currently selected. If `icon` does not point to a valid location, `FALSE` is returned.

`icon_view` : | A ExoIconView.
`path` : | A GtkTreePath to check selection on.
Returns : | `TRUE` if `path` is selected.

### exo_icon_view_get_item_column ()

    gint                exo_icon_view_get_item_column       (ExoIconView *icon_view,
                                                             GtkTreePath *path);

Gets the column in which the item `path` is currently displayed. Column numbers start at 0.

`icon_view` : | A ExoIconView.
`path` : | The GtkTreePath of the item.
Returns : | The column in which the item is displayed

Since 0.7.1

### exo_icon_view_get_item_row ()

    gint                exo_icon_view_get_item_row          (ExoIconView *icon_view,
                                                             GtkTreePath *path);

Gets the row in which the item `path` is currently displayed. Row numbers start at 0.

`icon_view` : | A ExoIconView.
`path` : | The GtkTreePath of the item.
Returns : | The row in which the item is displayed

Since 0.7.1

### exo_icon_view_get_selected_items ()

    GList *             exo_icon_view_get_selected_items    (const ExoIconView *icon_view);

Creates a list of paths of all selected items. Additionally, if you are planning on modifying the model after calling this function, you may want to convert the returned list into a list of GtkTreeRowReferences. To do this, you can use `gtk_tree_row_reference_new()`.

To free the return value, use:

    g_list_foreach (list, gtk_tree_path_free, NULL);
    g_list_free (list);

`icon_view` : | A ExoIconView.
Returns : | A GList containing a GtkTreePath for each selected row.

### exo_icon_view_select_all ()

    void                exo_icon_view_select_all            (ExoIconView *icon_view);

Selects all the icons. `icon_view` must has its selection mode set to GTK_SELECTION_MULTIPLE.

`icon_view` : | A ExoIconView.

### exo_icon_view_unselect_all ()

    void                exo_icon_view_unselect_all          (ExoIconView *icon_view);

Unselects all the icons.

`icon_view` : | A ExoIconView.

### exo_icon_view_selection_invert ()

    void                exo_icon_view_selection_invert      (ExoIconView *icon_view);

Selects all the icons that are currently not selected. `icon_view` must has its selection mode set to GTK_SELECTION_MULTIPLE.

`icon_view` : | A ExoIconView.

### exo_icon_view_item_activated ()

    void                exo_icon_view_item_activated        (ExoIconView *icon_view,
                                                             GtkTreePath *path);

Activates the item determined by `path`.

`icon_view` : | a ExoIconView
`path` : | the GtkTreePath to be activated

### exo_icon_view_get_cursor ()

    gboolean            exo_icon_view_get_cursor            (const ExoIconView *icon_view,
                                                             GtkTreePath **path,
                                                             GtkCellRenderer **cell);

Fills in `path` and `cell` with the current cursor path and cell. If the cursor isn't currently set, then *`path` will be `NULL`. If no cell currently has focus, then *`cell` will be `NULL`.

The returned GtkTreePath must be freed with `gtk_tree_path_free()`.

`icon_view` : | A ExoIconView
`path` : | Return location for the current cursor path, or `NULL`
`cell` : | Return location the current focus cell, or `NULL`
Returns : | `TRUE` if the cursor is set.

Since 0.3.1

### exo_icon_view_set_cursor ()

    void                exo_icon_view_set_cursor            (ExoIconView *icon_view,
                                                             GtkTreePath *path,
                                                             GtkCellRenderer *cell,
                                                             gboolean start_editing);

Sets the current keyboard focus to be at `path`, and selects it. This is useful when you want to focus the user's attention on a particular item. If `cell` is not `NULL`, then focus is given to the cell specified by it. Additionally, if `start_editing` is `TRUE`, then editing should be started in the specified cell.

This function is often followed by `gtk_widget_grab_focus (icon_view)` in order to give keyboard focus to the widget. Please note that editing can only happen when the widget is realized.

`icon_view` : | a ExoIconView
`path` : | a GtkTreePath
`cell` : | a GtkCellRenderer or `NULL`
`start_editing` : | `TRUE` if the specified cell should start being edited.

Since 0.3.1

### exo_icon_view_scroll_to_path ()

    void                exo_icon_view_scroll_to_path        (ExoIconView *icon_view,
                                                             GtkTreePath *path,
                                                             gboolean use_align,
                                                             gfloat row_align,
                                                             gfloat col_align);

Moves the alignments of `icon_view` to the position specified by `path`. `row_align` determines where the row is placed, and `col_align` determines where `column` is placed. Both are expected to be between 0.0 and 1.0. 0.0 means left/top alignment, 1.0 means right/bottom alignment, 0.5 means center.

If `use_align` is `FALSE`, then the alignment arguments are ignored, and the tree does the minimum amount of work to scroll the item onto the screen. This means that the item will be scrolled to the edge closest to its current position. If the item is currently visible on the screen, nothing is done.

This function only works if the model is set, and `path` is a valid row on the model. If the model changes before the `tree_view` is realized, the centered path will be modified to reflect this change.

`icon_view` : | A ExoIconView.
`path` : | The path of the item to move to.
`use_align` : | whether to use alignment arguments, or `FALSE`.
`row_align` : | The vertical alignment of the item specified by `path`.
`col_align` : | The horizontal alignment of the item specified by `column`.

Since 0.3.1

### exo_icon_view_enable_model_drag_source ()

    void                exo_icon_view_enable_model_drag_source
                                                            (ExoIconView *icon_view,
                                                             GdkModifierType start_button_mask,
                                                             const GtkTargetEntry *targets,
                                                             gint n_targets,
                                                             GdkDragAction actions);

Turns `icon_view` into a drag source for automatic DND.

`icon_view` : | a GtkIconTreeView
`start_button_mask` : | Mask of allowed buttons to start drag
`targets` : | the table of targets that the drag will support
`n_targets` : | the number of items in `targets`
`actions` : | the bitmask of possible actions for a drag from this widget

Since 0.3.1

### exo_icon_view_enable_model_drag_dest ()

    void                exo_icon_view_enable_model_drag_dest
                                                            (ExoIconView *icon_view,
                                                             const GtkTargetEntry *targets,
                                                             gint n_targets,
                                                             GdkDragAction actions);

Turns `icon_view` into a drop destination for automatic DND.

`icon_view` : | a ExoIconView
`targets` : | the table of targets that the drag will support
`n_targets` : | the number of items in `targets`
`actions` : | the bitmask of possible actions for a drag from this widget

Since 0.3.1

### exo_icon_view_unset_model_drag_source ()

    void                exo_icon_view_unset_model_drag_source
                                                            (ExoIconView *icon_view);

Undoes the effect of #`exo_icon_view_enable_model_drag_source()`.

`icon_view` : | a ExoIconView

Since 0.3.1

### exo_icon_view_unset_model_drag_dest ()

    void                exo_icon_view_unset_model_drag_dest (ExoIconView *icon_view);

Undoes the effect of #`exo_icon_view_enable_model_drag_dest()`.

`icon_view` : | a ExoIconView

Since 0.3.1

### exo_icon_view_set_reorderable ()

    void                exo_icon_view_set_reorderable       (ExoIconView *icon_view,
                                                             gboolean reorderable);

This function is a convenience function to allow you to reorder models that support the GtkTreeDragSourceIface and the GtkTreeDragDestIface. Both GtkTreeStore and GtkListStore support these. If `reorderable` is `TRUE`, then the user can reorder the model by dragging and dropping rows. The developer can listen to these changes by connecting to the model's ::row-inserted and ::row-deleted signals.

This function does not give you any degree of control over the order -- any reordering is allowed. If more control is needed, you should probably handle drag and drop manually.

`icon_view` : | A ExoIconView.
`reorderable` : | `TRUE`, if the list of items can be reordered.

Since 0.3.1

### exo_icon_view_get_reorderable ()

    gboolean            exo_icon_view_get_reorderable       (ExoIconView *icon_view);

Retrieves whether the user can reorder the list via drag-and-drop. See `exo_icon_view_set_reorderable()`.

`icon_view` : | a ExoIconView
Returns : | `TRUE` if the list can be reordered.

Since 0.3.1

### exo_icon_view_set_drag_dest_item ()

    void                exo_icon_view_set_drag_dest_item    (ExoIconView *icon_view,
                                                             GtkTreePath *path,
                                                             ExoIconViewDropPosition pos);

Sets the item that is highlighted for feedback.

`icon_view` : | a ExoIconView
`path` : | The path of the item to highlight, or `NULL`.
`pos` : | Specifies whether to drop, relative to the item

Since 0.3.1

### exo_icon_view_get_drag_dest_item ()

    void                exo_icon_view_get_drag_dest_item    (ExoIconView *icon_view,
                                                             GtkTreePath **path,
                                                             ExoIconViewDropPosition *pos);

Gets information about the item that is highlighted for feedback.

`icon_view` : | a ExoIconView
`path` : | Return location for the path of the highlighted item, or `NULL`.
`pos` : | Return location for the drop position, or `NULL`

Since 0.3.1

### exo_icon_view_get_dest_item_at_pos ()

    gboolean            exo_icon_view_get_dest_item_at_pos  (ExoIconView *icon_view,
                                                             gint drag_x,
                                                             gint drag_y,
                                                             GtkTreePath **path,
                                                             ExoIconViewDropPosition *pos);

Determines the destination item for a given position.

Both `drag_x` and `drag_y` are given in icon window coordinates. Use #`exo_icon_view_widget_to_icon_coords()` if you need to translate widget coordinates first.

`icon_view` : | a ExoIconView
`drag_x` : | the position to determine the destination item for
`drag_y` : | the position to determine the destination item for
`path` : | Return location for the path of the highlighted item, or `NULL`.
`pos` : | Return location for the drop position, or `NULL`
Returns : | whether there is an item at the given position.

Since 0.3.1

### exo_icon_view_create_drag_icon ()

    GdkPixmap *         exo_icon_view_create_drag_icon      (ExoIconView *icon_view,
                                                             GtkTreePath *path);

Creates a GdkPixmap representation of the item at `path`. This image is used for a drag icon.

`icon_view` : | a ExoIconView
`path` : | a GtkTreePath in `icon_view`
Returns : | a newly-allocated pixmap of the drag icon.

Since 0.3.1

### ExoIconViewSearchEqualFunc ()

    gboolean            (*ExoIconViewSearchEqualFunc)       (GtkTreeModel *model,
                                                             gint column,
                                                             const gchar *key,
                                                             GtkTreeIter *iter,
                                                             gpointer search_data);

A function used for checking whether a row in `model` matches a search key string entered by the user. Note the return value is reversed from what you would normally expect, though it has some similarity to `strcmp()` returning 0 for equal strings.

`model` : | the GtkTreeModel being searched.
`column` : | the search column set by `exo_icon_view_set_search_column()`.
`key` : | the key string to compare with.
`iter` : | the GtkTreeIter of the current item.
`search_data` : | user data from `exo_icon_view_set_search_equal_func()`.
Returns : | `FALSE` if the row matches, `TRUE` otherwise.

### ExoIconViewSearchPositionFunc ()

    void                (*ExoIconViewSearchPositionFunc)    (ExoIconView *icon_view,
                                                             GtkWidget *search_dialog,
                                                             gpointer user_data);

A function used to place the `search_dialog` for the `icon_view`.

`icon_view` : | an ExoIconView.
`search_dialog` : | the search dialog window to place.
`user_data` : | user data from `exo_icon_view_set_search_position_func()`.

### exo_icon_view_get_enable_search ()

    gboolean            exo_icon_view_get_enable_search     (const ExoIconView *icon_view);

Returns whether or not the `icon_view` allows to start interactive searching by typing in text.

`icon_view` : | an ExoIconView.
Returns : | whether or not to let the user search interactively.

Since 0.3.1.3

### exo_icon_view_set_enable_search ()

    void                exo_icon_view_set_enable_search     (ExoIconView *icon_view,
                                                             gboolean enable_search);

If `enable_search` is set, then the user can type in text to search through the `icon_view` interactively (this is sometimes called "typeahead find").

Note that even if this is `FALSE`, the user can still initiate a search using the "start-interactive-search" key binding.

`icon_view` : | an ExoIconView.
`enable_search` : | `TRUE` if the user can search interactively.

Since 0.3.1.3

### exo_icon_view_get_search_column ()

    gint                exo_icon_view_get_search_column     (const ExoIconView *icon_view);

Returns the column searched on by the interactive search code.

`icon_view` : | an ExoIconView.
Returns : | the column the interactive search code searches in.

Since 0.3.1.3

### exo_icon_view_set_search_column ()

    void                exo_icon_view_set_search_column     (ExoIconView *icon_view,
                                                             gint search_column);

Sets `search_column` as the column where the interactive search code should search in.

If the search column is set, user can use the "start-interactive-search" key binding to bring up search popup. The "enable-search" property controls whether simply typing text will also start an interactive search.

Note that `search_column` refers to a column of the model.

`icon_view` : | an ExoIconView.
`search_column` : | the column of the model to search in, or -1 to disable searching.

Since 0.3.1.3

### exo_icon_view_get_search_equal_func ()

    ExoIconViewSearchEqualFunc exo_icon_view_get_search_equal_func
                                                            (const ExoIconView *icon_view);

Returns the compare function currently in use.

`icon_view` : | an ExoIconView.
Returns : | the currently used compare function for the search code.

Since 0.3.1.3

### exo_icon_view_set_search_equal_func ()

    void                exo_icon_view_set_search_equal_func (ExoIconView *icon_view,
                                                             ExoIconViewSearchEqualFunc search_equal_func,
                                                             gpointer search_equal_data,
                                                             GDestroyNotify search_equal_destroy);

Sets the compare function for the interactive search capabilities; note that some like `strcmp()` returning 0 for equality ExoIconViewSearchEqualFunc returns `FALSE` on matches.

Specifying `NULL` for `search_equal_func` will reset `icon_view` to use the default search equal function.

`icon_view` : | an ExoIconView.
`search_equal_func` : | the compare function to use during the search, or `NULL`.
`search_equal_data` : | user data to pass to `search_equal_func`, or `NULL`.
`search_equal_destroy` : | destroy notifier for `search_equal_data`, or `NULL`.

Since 0.3.1.3

### exo_icon_view_get_search_position_func ()

    ExoIconViewSearchPositionFunc exo_icon_view_get_search_position_func
                                                            (const ExoIconView *icon_view);

Returns the search dialog positioning function currently in use.

`icon_view` : | an ExoIconView.
Returns : | the currently used function for positioning the search dialog.

Since 0.3.1.3

### exo_icon_view_set_search_position_func ()

    void                exo_icon_view_set_search_position_func
                                                            (ExoIconView *icon_view,
                                                             ExoIconViewSearchPositionFunc search_position_func,
                                                             gpointer search_position_data,
                                                             GDestroyNotify search_position_destroy);

Sets the function to use when positioning the seach dialog.

Specifying `NULL` for `search_position_func` will reset `icon_view` to use the default search position function.

`icon_view` : | an ExoIconView.
`search_position_func` : | the function to use to position the search dialog, or `NULL`.
`search_position_data` : | user data to pass to `search_position_func`, or `NULL`.
`search_position_destroy` : | destroy notifier for `search_position_data`, or `NULL`.

Since 0.3.1.3

## Property Details

### The `"column-spacing"` property

      "column-spacing"           gint                  : Read / Write

The column-spacing property specifies the space which is inserted between the columns of the icon view.

Allowed values: >= 0

Default value: 6

Since 0.3.1

### The `"columns"` property

      "columns"                  gint                  : Read / Write

The columns property contains the number of the columns in which the items should be displayed. If it is -1, the number of columns will be chosen automatically to fill the available area.

Allowed values: >= G_MAXULONG

Default value: -1

Since 0.3.1

### The `"enable-search"` property

      "enable-search"            gboolean              : Read / Write

View allows user to search through columns interactively.

Default value: TRUE

Since 0.3.1.3

### The `"icon-column"` property

      "icon-column"              gint                  : Read / Write

The ::icon-column property contains the number of the model column containing an absolute path to an image file to render. The icon column must be of type G_TYPE_STRING. Setting this property to -1 turns off the display of icons.

Allowed values: >= G_MAXULONG

Default value: -1

Since 0.10.2

### The `"item-width"` property

      "item-width"               gint                  : Read / Write

The item-width property specifies the width to use for each item. If it is set to -1, the icon view will automatically determine a suitable item size.

Allowed values: >= G_MAXULONG

Default value: -1

Since 0.3.1

### The `"layout-mode"` property

      "layout-mode"              ExoIconViewLayoutMode  : Read / Write

The layout-mode property specifies the way items are layed out in the ExoIconView. This can be either `EXO_ICON_VIEW_LAYOUT_ROWS`, which is the default, where items are layed out horizontally in rows from top to bottom, or `EXO_ICON_VIEW_LAYOUT_COLS`, where items are layed out vertically in columns from left to right.

Default value: EXO_ICON_VIEW_LAYOUT_ROWS

Since 0.3.1.5

### The `"margin"` property

      "margin"                   gint                  : Read / Write

The margin property specifies the space which is inserted at the edges of the icon view.

Allowed values: >= 0

Default value: 6

Since 0.3.1

### The `"markup-column"` property

      "markup-column"            gint                  : Read / Write

The markup-column property contains the number of the model column containing markup information to be displayed. The markup column must be of type G_TYPE_STRING. If this property and the text-column property are both set to column numbers, it overrides the text column. If both are set to -1, no texts are displayed.

Allowed values: >= G_MAXULONG

Default value: -1

### The `"model"` property

      "model"                    GtkTreeModel*         : Read / Write

The model property contains the GtkTreeModel, which should be display by this icon view. Setting this property to `NULL` turns off the display of anything.

### The `"orientation"` property

      "orientation"              GtkOrientation        : Read / Write

The orientation property specifies how the cells (i.e. the icon and the text) of the item are positioned relative to each other.

Default value: GTK_ORIENTATION_VERTICAL

### The `"pixbuf-column"` property

      "pixbuf-column"            gint                  : Read / Write

The ::pixbuf-column property contains the number of the model column containing the pixbufs which are displayed. The pixbuf column must be of type GDK_TYPE_PIXBUF. Setting this property to -1 turns off the display of pixbufs.

Allowed values: >= G_MAXULONG

Default value: -1

### The `"reorderable"` property

      "reorderable"              gboolean              : Read / Write

The reorderable property specifies if the items can be reordered by Drag and Drop.

Default value: FALSE

Since 0.3.1

### The `"row-spacing"` property

      "row-spacing"              gint                  : Read / Write

The row-spacing property specifies the space which is inserted between the rows of the icon view.

Allowed values: >= 0

Default value: 6

Since 0.3.1

### The `"search-column"` property

      "search-column"            gint                  : Read / Write

Model column to search through when searching through code.

Allowed values: >= G_MAXULONG

Default value: -1

Since 0.3.1.3

### The `"selection-mode"` property

      "selection-mode"           GtkSelectionMode      : Read / Write

The selection-mode property specifies the selection mode of icon view. If the mode is GTK_SELECTION_MULTIPLE, rubberband selection is enabled, for the other modes, only keyboard selection is possible.

Default value: GTK_SELECTION_SINGLE

### The `"single-click"` property

      "single-click"             gboolean              : Read / Write

Determines whether items can be activated by single or double clicks.

Default value: FALSE

Since 0.3.1.3

### The `"single-click-timeout"` property

      "single-click-timeout"     guint                 : Read / Write

The amount of time in milliseconds after which a prelited item (an item which is hovered by the mouse cursor) will be selected automatically in single click mode. A value of `0` disables the automatic selection.

Default value: 0

Since 0.3.1.5

### The `"spacing"` property

      "spacing"                  gint                  : Read / Write

The spacing property specifies the space which is inserted between the cells (i.e. the icon and the text) of an item.

Allowed values: >= 0

Default value: 0

Since 0.3.1

### The `"text-column"` property

      "text-column"              gint                  : Read / Write

The text-column property contains the number of the model column containing the texts which are displayed. The text column must be of type G_TYPE_STRING. If this property and the markup-column property are both set to -1, no texts are displayed.

Allowed values: >= G_MAXULONG

Default value: -1

## Signal Details

### The `"activate-cursor-item"` signal

    gboolean            user_function                      (ExoIconView *icon_view,
                                                            gpointer     user_data)      : Action

`icon_view` : | a ExoIconView.
`user_data` : | user data set when the signal handler was connected.

### The `"item-activated"` signal

    void                user_function                      (ExoIconView *icon_view,
                                                            GtkTreePath *path,
                                                            gpointer     user_data)      : Run Last

`icon_view` : | a ExoIconView.
`path` : | the GtkTreePath of the activated item.
`user_data` : | user data set when the signal handler was connected.

### The `"move-cursor"` signal

    gboolean            user_function                      (ExoIconView    *icon_view,
                                                            GtkMovementStep step,
                                                            gint            count,
                                                            gpointer        user_data)      : Action

`icon_view` : | a ExoIconView.
`user_data` : | user data set when the signal handler was connected.

### The `"select-all"` signal

    void                user_function                      (ExoIconView *icon_view,
                                                            gpointer     user_data)      : Action

`icon_view` : | a ExoIconView.
`user_data` : | user data set when the signal handler was connected.

### The `"select-cursor-item"` signal

    void                user_function                      (ExoIconView *icon_view,
                                                            gpointer     user_data)      : Action

`icon_view` : | a ExoIconView.
`user_data` : | user data set when the signal handler was connected.

### The `"selection-changed"` signal

    void                user_function                      (ExoIconView *icon_view,
                                                            gpointer     user_data)      : Run First

`icon_view` : | a ExoIconView.
`user_data` : | user data set when the signal handler was connected.

### The `"set-scroll-adjustments"` signal

    void                user_function                      (ExoIconView   *icon_view,
                                                            GtkAdjustment *hadjustment,
                                                            GtkAdjustment *vadjustment,
                                                            gpointer       user_data)        : Run Last

`icon_view` : | a ExoIconView.
`hadjustment` : | the new horizontal GtkAdjustment.
`vadjustment` : | the new vertical GtkAdjustment.
`user_data` : | user data set when the signal handler was connected.

### The `"start-interactive-search"` signal

    gboolean            user_function                      (ExoIconView *iconb_view,
                                                            gpointer     user_data)       : Action

`iconb_view` : | a ExoIconView.
`user_data` : | user data set when the signal handler was connected.

### The `"toggle-cursor-item"` signal

    void                user_function                      (ExoIconView *icon_view,
                                                            gpointer     user_data)      : Action

`icon_view` : | a ExoIconView.
`user_data` : | user data set when the signal handler was connected.

### The `"unselect-all"` signal

    void                user_function                      (ExoIconView *icon_view,
                                                            gpointer     user_data)      : Action

`icon_view` : | a ExoIconView.
`user_data` : | user data set when the signal handler was connected.