## Wayland Interaction

Wayland Interaction — Wayland backend-specific functions

## Functions

struct wl_keyboard * | gdk_wayland_device_get_wl_keyboard ()
struct wl_pointer * | gdk_wayland_device_get_wl_pointer ()
struct wl_seat * | gdk_wayland_device_get_wl_seat ()
struct wl_compositor * | gdk_wayland_display_get_wl_compositor ()
struct wl_display * | gdk_wayland_display_get_wl_display ()
struct wl_shell * | gdk_wayland_display_get_wl_shell ()
struct wl_shell_surface * | gdk_wayland_window_get_wl_shell_surface ()
struct wl_surface * | gdk_wayland_window_get_wl_surface ()
void | gdk_wayland_window_set_use_custom_surface ()

## Object Hierarchy

## Includes

    #include <gdk/gdkwayland.h>

## Description

The functions in this section are specific to the GDK Wayland backend. To use them, you need to include the `<gdk/gdkwayland.h>` header and use the Wayland-specific pkg-config files to build your application (either `gdk-wayland-3.0` or `gtk+-wayland-3.0`).

To make your code compile with other GDK backends, guard backend-specific calls by an ifdef as follows. Since GDK may be built with multiple backends, you should also check for the backend that is in use (e.g. by using the `GDK_IS_WAYLAND_DISPLAY()` macro).

    #ifdef GDK_WINDOWING_WAYLAND
      if (GDK_IS_WAYLAND_DISPLAY (display))
        {
          /* make Wayland-specific calls here */
        }
      else
    #endif
    #ifdef GDK_WINDOWING_X11
      if (GDK_IS_X11_DISPLAY (display))
        {
          /* make X11-specific calls here */
        }
      else
    #endif
      g_error ("Unsupported GDK backend");

## Functions

### gdk_wayland_device_get_wl_keyboard ()

    struct wl_keyboard *
    gdk_wayland_device_get_wl_keyboard (GdkDevice *device);

Returns the Wayland wl_keyboard of a GdkDevice

#### Parameters

device | a GdkDevice. | [type GdkWaylandDevice]

#### Returns

a Wayland wl_keyboard.

[transfer none]

Since 3.10

### gdk_wayland_device_get_wl_pointer ()

    struct wl_pointer *
    gdk_wayland_device_get_wl_pointer (GdkDevice *device);

Returns the Wayland wl_pointer of a GdkDevice

#### Parameters

device | a GdkDevice. | [type GdkWaylandDevice]

#### Returns

a Wayland wl_pointer.

[transfer none]

Since 3.10

### gdk_wayland_device_get_wl_seat ()

    struct wl_seat *
    gdk_wayland_device_get_wl_seat (GdkDevice *device);

Returns the Wayland wl_seat of a GdkDevice

#### Parameters

device | a GdkDevice. | [type GdkWaylandDevice]

#### Returns

a Wayland wl_seat.

[transfer none]

Since 3.10

### gdk_wayland_display_get_wl_compositor ()

    struct wl_compositor *
    gdk_wayland_display_get_wl_compositor (GdkDisplay *display);

Returns the Wayland global singleton compositor of a GdkDisplay

#### Parameters

display | a GdkDisplay. | [type GdkWaylandDisplay]

#### Returns

a Wayland wl_compositor.

[transfer none]

Since 3.8

### gdk_wayland_display_get_wl_display ()

    struct wl_display *
    gdk_wayland_display_get_wl_display (GdkDisplay *display);

Returns the Wayland wl_display of a GdkDisplay

#### Parameters

display | a GdkDisplay. | [type GdkWaylandDisplay]

#### Returns

a Wayland wl_display.

[transfer none]

Since 3.8

### gdk_wayland_display_get_wl_shell ()

    struct wl_shell *
    gdk_wayland_display_get_wl_shell (GdkDisplay *display);

Returns the Wayland global singleton shell of a GdkDisplay

#### Parameters

display | a GdkDisplay. | [type GdkWaylandDisplay]

#### Returns

a Wayland wl_shell.

[transfer none]

Since 3.8

### gdk_wayland_window_get_wl_shell_surface ()

    struct wl_shell_surface *
    gdk_wayland_window_get_wl_shell_surface
                                   (GdkWindow *window);

Returns the Wayland shell surface of a GdkWindow

#### Parameters

window | a GdkWindow. | [type GdkWaylandWindow]

#### Returns

a Wayland wl_shell_surface.

[transfer none]

Since 3.8

### gdk_wayland_window_get_wl_surface ()

    struct wl_surface *
    gdk_wayland_window_get_wl_surface (GdkWindow *window);

Returns the Wayland surface of a GdkWindow

#### Parameters

window | a GdkWindow. | [type GdkWaylandWindow]

#### Returns

a Wayland wl_surface.

[transfer none]

Since 3.8

### gdk_wayland_window_set_use_custom_surface ()

    void
    gdk_wayland_window_set_use_custom_surface
                                   (GdkWindow *window);

Marks a GdkWindow as a custom Wayland surface. The application is expected to register the surface as some type of surface using some Wayland interface.

A good example would be writing a panel or on-screen-keyboard as an out-of-process helper - as opposed to having those in the compositor process. In this case the underlying surface isn't a wl_shell surface and the panel or OSK client need to identify the wl_surface as a panel or OSK to the compositor. The assumption is that the compositor will expose a private interface to the special client that lets the client identify the wl_surface as a panel or such.

This function should be called before a GdkWindow is shown. This is best done by connecting to the “realized” signal:

      static void
      widget_realize_cb (GtkWidget *widget)
      {
        GdkWindow *window;
        struct wl_surface *surface;
        struct input_panel_surface *ip_surface;

        window = gtk_widget_get_window (widget);
        gdk_wayland_window_set_custom_surface (window);

        surface = gdk_wayland_window_get_wl_surface (window);
        ip_surface = input_panel_get_input_panel_surface (input_panel, surface);
        input_panel_surface_set_panel (ip_surface);
      }

      static void
      setup_window (GtkWindow *window)
      {
        g_signal_connect (window, "realize", G_CALLBACK (widget_realize_cb), NULL);
      }

#### Parameters

window | a GdkWindow. | [type GdkWaylandWindow]

Since 3.10

## Types and Values