## InfTextGtkView InfTextGtkView — Drawing remote cursors and selections in a GtkTextView |

## Stability Level

Unstable, unless otherwise indicated

## Functions

InfTextGtkView * | inf_text_gtk_view_new ()
GtkTextView * | inf_text_gtk_view_get_text_view ()
InfUserTable * | inf_text_gtk_view_get_user_table ()
void | inf_text_gtk_view_set_active_user ()
InfTextUser * | inf_text_gtk_view_get_active_user ()
void | inf_text_gtk_view_set_show_remote_cursors ()
void | inf_text_gtk_view_set_show_remote_selections ()
void | inf_text_gtk_view_set_show_remote_current_lines ()

## Properties

InfTextUser * | active-user | Read / Write
InfIo * | io | Read / Write / Construct Only
gboolean | show-remote-current-lines | Read / Write
gboolean | show-remote-cursors | Read / Write
gboolean | show-remote-selections | Read / Write
InfUserTable * | user-table | Read / Write / Construct Only
GtkTextView * | view | Read / Write / Construct Only

## Types and Values

struct | InfTextGtkView
struct | InfTextGtkViewClass

## Object Hierarchy

        GObject
        ╰── InfTextGtkView

## Includes

    #include <libinftextgtk/inf-text-gtk-view.h>

## Description

InfTextGtkView is a helper object which, as long as it is alive, draws the cursor position, selected text of remote users into a GtkTextView widget. It can also highlight the current line of a remote user in a similar way the GtkSourceView widget can highlight the current line of the local user.

This functionality was not implemented by subclassing GtkTextView such that it can also be used with existing subclasses, such as GtkSourceView.

With the function `inf_text_gtk_view_set_active_user()` the local InfTextUser who is editing the text can be set, if there is any. The insertion position, seleceted text or current line are not drawn for this user, since the normal GtkTextView takes care of that already. This assumes the local user cursor position and selection is synchronized to the corresponding InfTextUser properties, which is automatically the case when a InfTextGtkBuffer is used for the buffer the GtkTextView is displaying.

See InfTextGtkViewport for drawing a marker at remote users' location into the scrollbar.

## Functions

### inf_text_gtk_view_new ()

    InfTextGtkView *
    inf_text_gtk_view_new (InfIo *io,
                           GtkTextView *view,
                           InfUserTable *user_table);

Creates a new InfTextGtkView for `view` . This draws remote user's cursors and selections into the text view.

[constructor]

#### Parameters

io | A InfIo. |
view | A GtkTextView. |
user_table | The InfUserTable for the text session displayed in `view` . |

#### Returns

A new InfTextGtkView.

[transfer full]

### inf_text_gtk_view_get_text_view ()

    GtkTextView *
    inf_text_gtk_view_get_text_view (InfTextGtkView *view);

Returns the underlying GtkTextView.

#### Parameters

view | A InfTextGtkView. |

#### Returns

The InfTextGtkView's GtkTextView.

[transfer none]

### inf_text_gtk_view_get_user_table ()

    InfUserTable *
    inf_text_gtk_view_get_user_table (InfTextGtkView *view);

Returns the InfUserTable containing the users of the session the InfTextGtkView's GtkTextView is displaying.

#### Parameters

view | A InfTextGtkView. |

#### Returns

The InfTextGtkView's InfUserTable.

[transfer none]

### inf_text_gtk_view_set_active_user ()

    void
    inf_text_gtk_view_set_active_user (InfTextGtkView *view,
                                       InfTextUser *user);

Sets the user for which perspective to draw the view. The selection and cursor position is not drawn for this user since it is assumed that the view's buffer cursor position and selection match the active user ones (which is automatically the case if the buffer is managed by a InfTextGtkBuffer).

#### Parameters

view | A InfTextGtkView. |
user | A user from `view` 's user table, or `NULL`. | [allow-none]

### inf_text_gtk_view_get_active_user ()

    InfTextUser *
    inf_text_gtk_view_get_active_user (InfTextGtkView *view);

Returns the active user of `view` . See `inf_text_gtk_view_set_active_user()`.

#### Parameters

view | A InfTextGtkView. |

#### Returns

The active user of `view` .

[transfer none][allow-none]

### inf_text_gtk_view_set_show_remote_cursors ()

    void
    inf_text_gtk_view_set_show_remote_cursors
                                   (InfTextGtkView *view,
                                    gboolean show);

If `show` is `TRUE` then `view` draws a cursor for each non-local user in `INF_USER_ACTIVE` status in that user's color into its underlying GtkTextView. If it is `FALSE` then remote cursors are not drawn.

#### Parameters

view | A InfTextGtkView. |
show | Whether to show cursors of non-local users. |

### inf_text_gtk_view_set_show_remote_selections ()

    void
    inf_text_gtk_view_set_show_remote_selections
                                   (InfTextGtkView *view,
                                    gboolean show);

If `show` is `TRUE` then `view` draws the selection ranges for each non-local user in `INF_USER_ACTIVE` status. The selection range is drawn shaded in that user's color on top of the author color which indicates who wrote the selected text. If more than one user has a given piece of text selected then an alternating stripe pattern with each of the user's colors is drawn. If `show` is `FALSE` then selection ranges of remote users are not drawn.

#### Parameters

view | A InfTextGtkView. |
show | Whether to show selections of non-local users. |

### inf_text_gtk_view_set_show_remote_current_lines ()

    void
    inf_text_gtk_view_set_show_remote_current_lines
                                   (InfTextGtkView *view,
                                    gboolean show);

If `show` is `TRUE` then all lines in which the cursor of a non-local user in `INF_USER_ACTIVE` status is is highlighted with that user's color, similar to GtkSourceView's "highlight current line" functionality. If it is `FALSE` then the current line of non-local users is not highlighted.

#### Parameters

view | A InfTextGtkView. |
show | Whether to highlight the current line of non-local users. |

## Types and Values

### struct InfTextGtkView

    struct InfTextGtkView;

InfTextGtkView is an opaque data type. You should only access it via the public API functions.

### struct InfTextGtkViewClass

    struct InfTextGtkViewClass {
    };

This structure does not contain any public fields.

## Property Details

### The `“active-user”` property

      “active-user”              InfTextUser *

The user for which to show the view.

Flags: Read / Write

### The `“io”` property

      “io”                       InfIo *

The IO object to schedule timeouts.

Flags: Read / Write / Construct Only

### The `“show-remote-current-lines”` property

      “show-remote-current-lines” gboolean

Whether to highlight the line in which the cursor of non-local users is.

Flags: Read / Write

Default value: TRUE

### The `“show-remote-cursors”` property

      “show-remote-cursors”      gboolean

Whether to show cursors of non-local users.

Flags: Read / Write

Default value: TRUE

### The `“show-remote-selections”` property

      “show-remote-selections”   gboolean

Whether to highlight text selected by non-local users.

Flags: Read / Write

Default value: TRUE

### The `“user-table”` property

      “user-table”               InfUserTable *

The user table containing the users of the session shown in the view.

Flags: Read / Write / Construct Only

### The `“view”` property

      “view”                     GtkTextView *

The underlying GtkTextView.

Flags: Read / Write / Construct Only

## See Also

InfTextGtkBuffer, InfTextGtkViewport