wlroots/include/wlr/types/wlr_keyboard_shortcuts_inhi...

86 lines
2.6 KiB
C

/*
* This an unstable interface of wlroots. No guarantees are made regarding the
* future consistency of this API.
*/
#ifndef WLR_USE_UNSTABLE
#error "Add -DWLR_USE_UNSTABLE to enable unstable wlroots features"
#endif
#ifndef WLR_TYPES_WLR_KEYBOARD_SHORTCUTS_INHIBIT_V1_H
#define WLR_TYPES_WLR_KEYBOARD_SHORTCUTS_INHIBIT_V1_H
#include <wayland-server-core.h>
#include <wlr/types/wlr_seat.h>
/* This interface permits clients to inhibit keyboard shortcut processing by
* the compositor.
*
* This allows clients to pass them on to e.g. remote desktops or virtual
* machine guests.
*
* Inhibitors are created for surfaces and seats. They should only be in effect
* while this surface has focus.
*/
struct wlr_keyboard_shortcuts_inhibit_manager_v1 {
// wlr_keyboard_shortcuts_inhibitor_v1::link
struct wl_list inhibitors;
struct wl_global *global;
struct wl_listener display_destroy;
struct {
struct wl_signal new_inhibitor; // wlr_keyboard_shortcuts_inhibitor_v1
struct wl_signal destroy;
} events;
void *data;
};
struct wlr_keyboard_shortcuts_inhibitor_v1 {
struct wlr_surface *surface;
struct wlr_seat *seat;
bool active;
struct wl_resource *resource;
struct wl_listener surface_destroy;
struct wl_listener seat_destroy;
// wlr_keyboard_shortcuts_inhibit_manager_v1::inhibitors
struct wl_list link;
struct {
struct wl_signal destroy;
} events;
void *data;
};
/*
* A compositor creating a manager will handle the new_inhibitor event and call
* wlr_keyboard_shortcuts_inhibitor_v1_activate() if it decides to honour the
* inhibitor. This will send the active event to the client, confirming
* activation of the inhibitor. From then on the compositor should respect the
* inhibitor until it calls wlr_keyboard_shortcuts_inhibitor_v1_deactivate() to
* suspend the inhibitor with an inactive event to the client or receives the
* destroy signal from wlroots, telling it that the inhibitor has been
* destroyed.
*
* Not sending the active event to the client is the only way under the
* protocol to let the client know that the compositor will not be honouring an
* inhibitor. It's the client's job to somehow deal with not receiving the
* event, i.e. not assume that shortcuts are inhibited and maybe destroy the
* pending and request a new inhibitor after a timeout.
*/
struct wlr_keyboard_shortcuts_inhibit_manager_v1 *
wlr_keyboard_shortcuts_inhibit_v1_create(struct wl_display *display);
void wlr_keyboard_shortcuts_inhibitor_v1_activate(
struct wlr_keyboard_shortcuts_inhibitor_v1 *inhibitor);
void wlr_keyboard_shortcuts_inhibitor_v1_deactivate(
struct wlr_keyboard_shortcuts_inhibitor_v1 *inhibitor);
#endif