## MetaDisplay

MetaDisplay — Mutter X display handler

## Synopsis

    enum                MetaTabList;
    enum                MetaTabShowType;
    #define             meta_XFree                          (p)
    void                meta_display_get_compositor_version (MetaDisplay *display,
                                                             int *major,
                                                             int *minor);
    int                 meta_display_get_xinput_opcode      (MetaDisplay *display);
    gboolean            meta_display_supports_extended_barriers
                                                            (MetaDisplay *display);
    Display *           meta_display_get_xdisplay           (MetaDisplay *display);
    MetaCompositor *    meta_display_get_compositor         (MetaDisplay *display);
    GSList *            meta_display_get_screens            (MetaDisplay *display);
    gboolean            meta_display_has_shape              (MetaDisplay *display);
    MetaScreen *        meta_display_screen_for_root        (MetaDisplay *display,
                                                             Window xroot);
    MetaWindow *        meta_display_get_focus_window       (MetaDisplay *display);
    gboolean            meta_display_xwindow_is_a_no_focus_window
                                                            (MetaDisplay *display,
                                                             Window xwindow);
    int                 meta_display_get_damage_event_base  (MetaDisplay *display);
    int                 meta_display_get_shape_event_base   (MetaDisplay *display);
    gboolean            meta_display_xserver_time_is_before (MetaDisplay *display,
                                                             guint32 time1,
                                                             guint32 time2);
    guint32             meta_display_get_last_user_time     (MetaDisplay *display);
    guint32             meta_display_get_current_time       (MetaDisplay *display);
    guint32             meta_display_get_current_time_roundtrip
                                                            (MetaDisplay *display);
    unsigned int        meta_display_get_ignored_modifier_mask
                                                            (MetaDisplay *display);
    GList *             meta_display_get_tab_list           (MetaDisplay *display,
                                                             MetaTabList type,
                                                             MetaScreen *screen,
                                                             MetaWorkspace *workspace);
    MetaWindow *        meta_display_get_tab_next           (MetaDisplay *display,
                                                             MetaTabList type,
                                                             MetaScreen *screen,
                                                             MetaWorkspace *workspace,
                                                             MetaWindow *window,
                                                             gboolean backward);
    MetaWindow *        meta_display_get_tab_current        (MetaDisplay *display,
                                                             MetaTabList type,
                                                             MetaScreen *screen,
                                                             MetaWorkspace *workspace);
    gboolean            meta_display_begin_grab_op          (MetaDisplay *display,
                                                             MetaScreen *screen,
                                                             MetaWindow *window,
                                                             MetaGrabOp op,
                                                             gboolean pointer_already_grabbed,
                                                             gboolean frame_action,
                                                             int button,
                                                             gulong modmask,
                                                             guint32 timestamp,
                                                             int root_x,
                                                             int root_y);
    void                meta_display_end_grab_op            (MetaDisplay *display,
                                                             guint32 timestamp);
    MetaGrabOp          meta_display_get_grab_op            (MetaDisplay *display);
    guint               meta_display_add_keybinding         (MetaDisplay *display,
                                                             const char *name,
                                                             GSettings *settings,
                                                             MetaKeyBindingFlags flags,
                                                             MetaKeyHandlerFunc handler,
                                                             gpointer user_data,
                                                             GDestroyNotify free_data);
    gboolean            meta_display_remove_keybinding      (MetaDisplay *display,
                                                             const char *name);
    guint               meta_display_get_keybinding_action  (MetaDisplay *display,
                                                             unsigned int keycode,
                                                             unsigned long  mask);
    void                meta_display_set_input_focus_window (MetaDisplay *display,
                                                             MetaWindow *window,
                                                             gboolean focus_frame,
                                                             guint32 timestamp);
    void                meta_display_focus_the_no_focus_window
                                                            (MetaDisplay *display,
                                                             MetaScreen *screen,
                                                             guint32 timestamp);
    GSList *            meta_display_sort_windows_by_stacking
                                                            (MetaDisplay *display,
                                                             GSList *windows);
    Window              meta_display_get_leader_window      (MetaDisplay *display);
    void                meta_display_add_ignored_crossing_serial
                                                            (MetaDisplay *display,
                                                             unsigned long  serial);
    void                meta_display_unmanage_screen        (MetaDisplay *display,
                                                             MetaScreen *screen,
                                                             guint32 timestamp);
    void                meta_display_clear_mouse_mode       (MetaDisplay *display);
                        MetaDisplay;
                        MetaDisplayClass;

## Object Hierarchy

      GObject
       +----MetaDisplay

## Properties

      "focus-window"             MetaWindow*           : Read

## Signals

      "accelerator-activated"                          : Run Last
      "grab-op-begin"                                  : Run Last
      "grab-op-end"                                    : Run Last
      "modifiers-accelerator-activated"                : Run Last
      "overlay-key"                                    : Run Last
      "window-created"                                 : Run Last
      "window-demands-attention"                       : Run Last
      "window-marked-urgent"                           : Run Last

## Description

The display is represented as a MetaDisplay struct.

## Details

### enum MetaTabList

    typedef enum {
      META_TAB_LIST_NORMAL,
      META_TAB_LIST_DOCKS,
      META_TAB_LIST_GROUP,
      META_TAB_LIST_NORMAL_ALL
    } MetaTabList;

`META_TAB_LIST_NORMAL` | Normal windows
`META_TAB_LIST_DOCKS` | Dock windows
`META_TAB_LIST_GROUP` | Groups
`META_TAB_LIST_NORMAL_ALL` | All windows

### enum MetaTabShowType

    typedef enum {
      META_TAB_SHOW_ICON,      /* Alt-Tab mode */
      META_TAB_SHOW_INSTANTLY  /* Alt-Esc mode */
    } MetaTabShowType;

`META_TAB_SHOW_ICON` | Show icon (Alt-Tab mode)
`META_TAB_SHOW_INSTANTLY` | Show instantly (Alt-Esc mode)

### meta_XFree()

    #define meta_XFree(p) do { if ((p)) XFree ((p)); } while (0)

### meta_display_get_compositor_version ()

    void                meta_display_get_compositor_version (MetaDisplay *display,
                                                             int *major,
                                                             int *minor);

### meta_display_get_xinput_opcode ()

    int                 meta_display_get_xinput_opcode      (MetaDisplay *display);

`display` : | a MetaDisplay

### meta_display_supports_extended_barriers ()

    gboolean            meta_display_supports_extended_barriers
                                                            (MetaDisplay *display);

`display` : | a MetaDisplay
Returns : | whether the X server supports extended barrier features as defined in version 2.3 of the XInput 2 specification. Clients should use this method to determine whether their interfaces should depend on new barrier features.

### meta_display_get_xdisplay ()

    Display *           meta_display_get_xdisplay           (MetaDisplay *display);

`display` : | a MetaDisplay

### meta_display_get_compositor ()

    MetaCompositor *    meta_display_get_compositor         (MetaDisplay *display);

`display` : | a MetaDisplay

### meta_display_get_screens ()

    GSList *            meta_display_get_screens            (MetaDisplay *display);

`display` : | a MetaDisplay
Returns : | Screens for this display. [transfer none][element-type Meta.Screen]

### meta_display_has_shape ()

    gboolean            meta_display_has_shape              (MetaDisplay *display);

### meta_display_screen_for_root ()

    MetaScreen *        meta_display_screen_for_root        (MetaDisplay *display,
                                                             Window xroot);

Return the MetaScreen corresponding to a specified X root window ID.

`display` : | a MetaDisplay
`xroot` : | a X window
Returns : | the screen for the specified root window ID, or `NULL`. [transfer none]

### meta_display_get_focus_window ()

    MetaWindow *        meta_display_get_focus_window       (MetaDisplay *display);

Get our best guess as to the "currently" focused window (that is, the window that we expect will be focused at the point when the X server processes our next request).

`display` : | a MetaDisplay
Returns : | The current focus window. [transfer none]

### meta_display_xwindow_is_a_no_focus_window ()

    gboolean            meta_display_xwindow_is_a_no_focus_window
                                                            (MetaDisplay *display,
                                                             Window xwindow);

`display` : | A MetaDisplay
`xwindow` : | An X11 window
Returns : | `TRUE` iff window is one of mutter's internal "no focus" windows (there is one per screen) which will have the focus when there is no actual client window focused.

### meta_display_get_damage_event_base ()

    int                 meta_display_get_damage_event_base  (MetaDisplay *display);

### meta_display_get_shape_event_base ()

    int                 meta_display_get_shape_event_base   (MetaDisplay *display);

### meta_display_xserver_time_is_before ()

    gboolean            meta_display_xserver_time_is_before (MetaDisplay *display,
                                                             guint32 time1,
                                                             guint32 time2);

Xserver time can wraparound, thus comparing two timestamps needs to take this into account. If no wraparound has occurred, this is equivalent to time1 < time2 Otherwise, we need to account for the fact that wraparound can occur and the fact that a timestamp of 0 must be special-cased since it means "older than anything else".

Note that this is NOT an equivalent for time1 <= time2; if that's what you need then you'll need to swap the order of the arguments and negate the result.

`display` : | a MetaDisplay
`time1` : | An event timestamp
`time2` : | An event timestamp

### meta_display_get_last_user_time ()

    guint32             meta_display_get_last_user_time     (MetaDisplay *display);

`display` : | a MetaDisplay
Returns : | Timestamp of the last user interaction event with a window

### meta_display_get_current_time ()

    guint32             meta_display_get_current_time       (MetaDisplay *display);

### meta_display_get_current_time_roundtrip ()

    guint32             meta_display_get_current_time_roundtrip
                                                            (MetaDisplay *display);

### meta_display_get_ignored_modifier_mask ()

    unsigned int        meta_display_get_ignored_modifier_mask
                                                            (MetaDisplay *display);

`display` : | a MetaDisplay
Returns : | a mask of modifiers that should be ignored when matching keybindings to events

### meta_display_get_tab_list ()

    GList *             meta_display_get_tab_list           (MetaDisplay *display,
                                                             MetaTabList type,
                                                             MetaScreen *screen,
                                                             MetaWorkspace *workspace);

Determine the list of windows that should be displayed for Alt-TAB functionality. The windows are returned in most recently used order. If `workspace` is not `NULL`, the list only conains windows that are on `workspace` or have the demands-attention hint set; otherwise it contains all windows on `screen`.

`display` : | a MetaDisplay
`type` : | type of tab list
`screen` : | a MetaScreen
`workspace` : | origin workspace. [allow-none]
Returns : | List of windows. [transfer container][element-type Meta.Window]

### meta_display_get_tab_next ()

    MetaWindow *        meta_display_get_tab_next           (MetaDisplay *display,
                                                             MetaTabList type,
                                                             MetaScreen *screen,
                                                             MetaWorkspace *workspace,
                                                             MetaWindow *window,
                                                             gboolean backward);

Determine the next window that should be displayed for Alt-TAB functionality.

`display` : | a MetaDisplay
`type` : | type of tab list
`screen` : | a MetaScreen
`workspace` : | origin workspace
`window` : | starting window. [allow-none]
`backward` : | If `TRUE`, look for the previous window.
Returns : | Next window. [transfer none]

### meta_display_get_tab_current ()

    MetaWindow *        meta_display_get_tab_current        (MetaDisplay *display,
                                                             MetaTabList type,
                                                             MetaScreen *screen,
                                                             MetaWorkspace *workspace);

Determine the active window that should be displayed for Alt-TAB.

`display` : | a MetaDisplay
`type` : | type of tab list
`screen` : | a MetaScreen
`workspace` : | origin workspace
Returns : | Current window. [transfer none]

### meta_display_begin_grab_op ()

    gboolean            meta_display_begin_grab_op          (MetaDisplay *display,
                                                             MetaScreen *screen,
                                                             MetaWindow *window,
                                                             MetaGrabOp op,
                                                             gboolean pointer_already_grabbed,
                                                             gboolean frame_action,
                                                             int button,
                                                             gulong modmask,
                                                             guint32 timestamp,
                                                             int root_x,
                                                             int root_y);

### meta_display_end_grab_op ()

    void                meta_display_end_grab_op            (MetaDisplay *display,
                                                             guint32 timestamp);

### meta_display_get_grab_op ()

    MetaGrabOp          meta_display_get_grab_op            (MetaDisplay *display);

Gets the current grab operation, if any.

`display` : | The MetaDisplay that the window is on
Returns : | the current grab operation, or `META_GRAB_OP_NONE` if Mutter doesn't currently have a grab. `META_GRAB_OP_COMPOSITOR` will be returned if a compositor-plugin modal operation is in effect (See `mutter_begin_modal_for_plugin()`)

### meta_display_add_keybinding ()

    guint               meta_display_add_keybinding         (MetaDisplay *display,
                                                             const char *name,
                                                             GSettings *settings,
                                                             MetaKeyBindingFlags flags,
                                                             MetaKeyHandlerFunc handler,
                                                             gpointer user_data,
                                                             GDestroyNotify free_data);

Add a keybinding at runtime. The key `name` in `schema` needs to be of type `G_VARIANT_TYPE_STRING_ARRAY`, with each string describing a keybinding in the form of "<Control>a" or "<Shift><Alt>F1". The parser is fairly liberal and allows lower or upper case, and also abbreviations such as "<Ctl>" and "<Ctrl>". If the key is set to the empty list or a list with a single element of either "" or "disabled", the keybinding is disabled. If `META_KEY_BINDING_REVERSES` is specified in `flags`, the binding may be reversed by holding down the "shift" key; therefore, "<Shift>" cannot be one of the keys used. `handler` is expected to check for the "shift" modifier in this case and reverse its action.

Use `meta_display_remove_keybinding()` to remove the binding.

`display` : | a MetaDisplay
`name` : | the binding's name
`settings` : | the GSettings object where `name` is stored
`flags` : | flags to specify binding details
`handler` : | function to run when the keybinding is invoked
`user_data` : | the data to pass to `handler`
`free_data` : | function to free `user_data`
Returns : | the corresponding keybinding action if the keybinding was added successfully, otherwise `META_KEYBINDING_ACTION_NONE`

### meta_display_remove_keybinding ()

    gboolean            meta_display_remove_keybinding      (MetaDisplay *display,
                                                             const char *name);

Remove keybinding `name`; the function will fail if `name` is not a known keybinding or has not been added with `meta_display_add_keybinding()`.

`display` : | the MetaDisplay
`name` : | name of the keybinding to remove
Returns : | `TRUE` if the binding has been removed sucessfully, otherwise `FALSE`

### meta_display_get_keybinding_action ()

    guint               meta_display_get_keybinding_action  (MetaDisplay *display,
                                                             unsigned int keycode,
                                                             unsigned long  mask);

Get the keybinding action bound to `keycode`. Builtin keybindings have a fixed associated MetaKeyBindingAction, for bindings added dynamically the function will return the keybinding action `meta_display_add_keybinding()` returns on registration.

`display` : | A MetaDisplay
`keycode` : | Raw keycode
`mask` : | Event mask
Returns : | The action that should be taken for the given key, or `META_KEYBINDING_ACTION_NONE`.

### meta_display_set_input_focus_window ()

    void                meta_display_set_input_focus_window (MetaDisplay *display,
                                                             MetaWindow *window,
                                                             gboolean focus_frame,
                                                             guint32 timestamp);

### meta_display_focus_the_no_focus_window ()

    void                meta_display_focus_the_no_focus_window
                                                            (MetaDisplay *display,
                                                             MetaScreen *screen,
                                                             guint32 timestamp);

### meta_display_sort_windows_by_stacking ()

    GSList *            meta_display_sort_windows_by_stacking
                                                            (MetaDisplay *display,
                                                             GSList *windows);

Sorts a set of windows according to their current stacking order. If windows from multiple screens are present in the set of input windows, then all the windows on screen 0 are sorted below all the windows on screen 1, and so forth. Since the stacking order of override-redirect windows isn't controlled by Metacity, if override-redirect windows are in the input, the result may not correspond to the actual stacking order in the X server.

An example of using this would be to sort the list of transient dialogs for a window into their current stacking order.

`display` : | a MetaDisplay
`windows` : | Set of windows. [element-type MetaWindow]
Returns : | Input windows sorted by stacking order, from lowest to highest. [transfer container][element-type MetaWindow]

### meta_display_get_leader_window ()

    Window              meta_display_get_leader_window      (MetaDisplay *display);

Returns the window manager's leader window (as defined by the _NET_SUPPORTING_WM_CHECK mechanism of EWMH). For use by plugins that wish to attach additional custom properties to this window.

`display` : | a MetaDisplay
Returns : | xid of the leader window. [transfer none]

### meta_display_add_ignored_crossing_serial ()

    void                meta_display_add_ignored_crossing_serial
                                                            (MetaDisplay *display,
                                                             unsigned long  serial);

Save the specified serial and ignore crossing events with that serial for the purpose of focus-follows-mouse. This can be used for certain changes to the window hierarchy that we don't want to change the focus window, even if they cause the pointer to end up in a new window.

`display` : | a MetaDisplay
`serial` : | the serial to ignore

### meta_display_unmanage_screen ()

    void                meta_display_unmanage_screen        (MetaDisplay *display,
                                                             MetaScreen *screen,
                                                             guint32 timestamp);

### meta_display_clear_mouse_mode ()

    void                meta_display_clear_mouse_mode       (MetaDisplay *display);

Sets the mouse-mode flag to `FALSE`, which means that motion events are no longer ignored in mouse or sloppy focus. This is an internal function. It should be used only for reimplementing keybindings, and only in a manner compatible with core code.

`display` : | a MetaDisplay

### MetaDisplay

    typedef struct _MetaDisplay MetaDisplay;

### MetaDisplayClass

    typedef struct _MetaDisplayClass MetaDisplayClass;

## Property Details

### The `"focus-window"` property

      "focus-window"             MetaWindow*           : Read

Currently focused window.

## Signal Details

### The `"accelerator-activated"` signal

    void                user_function                      (MetaDisplay *metadisplay,
                                                            guint        arg1,
                                                            guint        arg2,
                                                            guint        arg3,
                                                            gpointer     user_data)        : Run Last

### The `"grab-op-begin"` signal

    void                user_function                      (MetaDisplay *metadisplay,
                                                            MetaScreen  *arg1,
                                                            MetaWindow  *arg2,
                                                            MetaGrabOp   arg3,
                                                            gpointer     user_data)        : Run Last

### The `"grab-op-end"` signal

    void                user_function                      (MetaDisplay *metadisplay,
                                                            MetaScreen  *arg1,
                                                            MetaWindow  *arg2,
                                                            MetaGrabOp   arg3,
                                                            gpointer     user_data)        : Run Last

### The `"modifiers-accelerator-activated"` signal

    gboolean            user_function                      (MetaDisplay *display,
                                                            gpointer     user_data)      : Run Last

The ::modifiers-accelerator-activated signal will be emitted when a special modifiers-only keybinding is activated.

`display` : | the MetaDisplay instance
`user_data` : | user data set when the signal handler was connected.
Returns : | `TRUE` means that the keyboard device should remain frozen and `FALSE` for the default behavior of unfreezing the keyboard.

### The `"overlay-key"` signal

    void                user_function                      (MetaDisplay *metadisplay,
                                                            gpointer     user_data)        : Run Last

### The `"window-created"` signal

    void                user_function                      (MetaDisplay *metadisplay,
                                                            MetaWindow  *arg1,
                                                            gpointer     user_data)        : Run Last

### The `"window-demands-attention"` signal

    void                user_function                      (MetaDisplay *metadisplay,
                                                            MetaWindow  *arg1,
                                                            gpointer     user_data)        : Run Last

### The `"window-marked-urgent"` signal

    void                user_function                      (MetaDisplay *metadisplay,
                                                            MetaWindow  *arg1,
                                                            gpointer     user_data)        : Run Last