## MetaBarrier

MetaBarrier — Pointer barriers

## Synopsis

    struct              MetaBarrier;
    struct              MetaBarrierClass;
    gboolean            meta_barrier_is_active              (MetaBarrier *barrier);
    void                meta_barrier_destroy                (MetaBarrier *barrier);
    void                meta_barrier_release                (MetaBarrier *barrier,
                                                             MetaBarrierEvent *event);
    enum                MetaBarrierDirection;
    struct              MetaBarrierEvent;

## Object Hierarchy

      GObject
       +----MetaBarrier

      GBoxed
       +----MetaBarrierEvent

## Properties

      "directions"               MetaBarrierDirection  : Read / Write / Construct Only
      "display"                  MetaDisplay*          : Read / Write / Construct Only
      "x1"                       gint                  : Read / Write / Construct Only
      "x2"                       gint                  : Read / Write / Construct Only
      "y1"                       gint                  : Read / Write / Construct Only
      "y2"                       gint                  : Read / Write / Construct Only

## Signals

      "hit"                                            : Run First
      "left"                                           : Run First

## Description

## Details

### struct MetaBarrier

    struct MetaBarrier;

The MetaBarrier structure contains only private data and should be accessed using the provided API

### struct MetaBarrierClass

    struct MetaBarrierClass {
    };

The MetaBarrierClass structure contains only private data.

### meta_barrier_is_active ()

    gboolean            meta_barrier_is_active              (MetaBarrier *barrier);

### meta_barrier_destroy ()

    void                meta_barrier_destroy                (MetaBarrier *barrier);

### meta_barrier_release ()

    void                meta_barrier_release                (MetaBarrier *barrier,
                                                             MetaBarrierEvent *event);

In XI2.3, pointer barriers provide a feature where they can be temporarily released so that the pointer goes through them. Pass a MetaBarrierEvent to release the barrier for this event sequence.

`barrier` : | The barrier to release
`event` : | The event to release the pointer for

### enum MetaBarrierDirection

    typedef enum {
      META_BARRIER_DIRECTION_POSITIVE_X = 1 << 0,
      META_BARRIER_DIRECTION_POSITIVE_Y = 1 << 1,
      META_BARRIER_DIRECTION_NEGATIVE_X = 1 << 2,
      META_BARRIER_DIRECTION_NEGATIVE_Y = 1 << 3,
    } MetaBarrierDirection;

`META_BARRIER_DIRECTION_POSITIVE_X` | Positive direction in the X axis
`META_BARRIER_DIRECTION_POSITIVE_Y` | Positive direction in the Y axis
`META_BARRIER_DIRECTION_NEGATIVE_X` | Negative direction in the X axis
`META_BARRIER_DIRECTION_NEGATIVE_Y` | Negative direction in the Y axis

### struct MetaBarrierEvent

    struct MetaBarrierEvent {
      int event_id;
      int dt;
      guint32 time;
      double x;
      double y;
      double dx;
      double dy;
      gboolean released;
      gboolean grabbed;
    };

int `event_id`; | A unique integer ID identifying a consecutive series of motions at or along the barrier
int `dt`; | Server time, in milliseconds, since the last event sent for this barrier
guint32 `time`; | Server time, in milliseconds
double `x`; | The cursor X position in screen coordinates
double `y`; | The cursor Y position in screen coordinates.
double `dx`; | If the cursor hadn't been constrained, the delta of X movement past the barrier, in screen coordinates
double `dy`; | If the cursor hadn't been constrained, the delta of X movement past the barrier, in screen coordinates
gboolean `released`; | A boolean flag, `TRUE` if this event generated by the pointer leaving the barrier as a result of a client calling `meta_barrier_release()` (will be set only for MetaBarrier::leave signals)
gboolean `grabbed`; | A boolean flag, `TRUE` if the pointer was grabbed at the time this event was sent

## Property Details

### The `"directions"` property

      "directions"               MetaBarrierDirection  : Read / Write / Construct Only

A set of directions to let the pointer through.

### The `"display"` property

      "display"                  MetaDisplay*          : Read / Write / Construct Only

The display to construct the pointer barrier on.

### The `"x1"` property

      "x1"                       gint                  : Read / Write / Construct Only

The first X coordinate of the barrier.

Allowed values: [0,32767]

Default value: 0

### The `"x2"` property

      "x2"                       gint                  : Read / Write / Construct Only

The second X coordinate of the barrier.

Allowed values: [0,32767]

Default value: 32767

### The `"y1"` property

      "y1"                       gint                  : Read / Write / Construct Only

The first Y coordinate of the barrier.

Allowed values: [0,32767]

Default value: 0

### The `"y2"` property

      "y2"                       gint                  : Read / Write / Construct Only

The second Y coordinate of the barrier.

Allowed values: [0,32767]

Default value: 32767

## Signal Details

### The `"hit"` signal

    void                user_function                      (MetaBarrier      *barrier,
                                                            MetaBarrierEvent *event,
                                                            gpointer          user_data)      : Run First

When a pointer barrier is hit, this will trigger. This requires an XI2-enabled server.

`barrier` : | The MetaBarrier that was hit
`event` : | A MetaBarrierEvent that has the details of how the barrier was hit.
`user_data` : | user data set when the signal handler was connected.

### The `"left"` signal

    void                user_function                      (MetaBarrier      *barrier,
                                                            MetaBarrierEvent *event,
                                                            gpointer          user_data)      : Run First

When a pointer barrier hitbox was left, this will trigger. This requires an XI2-enabled server.

`barrier` : | The MetaBarrier that was left
`event` : | A MetaBarrierEvent that has the details of how the barrier was left.
`user_data` : | user data set when the signal handler was connected.