Hook no-op keyboard handling.

This commit is contained in:
Bartosz Taudul 2022-12-19 23:46:08 +01:00
parent 3b58f5596d
commit 7106b0c5ef
No known key found for this signature in database
GPG Key ID: B7FE2008B7575DF3

View File

@ -47,6 +47,7 @@ static struct xdg_activation_v1* s_activation;
static struct xdg_activation_token_v1* s_actToken; static struct xdg_activation_token_v1* s_actToken;
static struct zxdg_decoration_manager_v1* s_decoration; static struct zxdg_decoration_manager_v1* s_decoration;
static struct zxdg_toplevel_decoration_v1* s_tldec; static struct zxdg_toplevel_decoration_v1* s_tldec;
static struct wl_keyboard* s_keyboard;
struct Output struct Output
{ {
@ -155,9 +156,45 @@ constexpr struct wl_pointer_listener pointerListener = {
}; };
static void KeyboardKeymap( void*, struct wl_keyboard* kbd, uint32_t format, int32_t fd, uint32_t size )
{
}
static void KeyboardEnter( void*, struct wl_keyboard* kbd, uint32_t serial, struct wl_surface* surf, struct wl_array* keys )
{
}
static void KeyboardLeave( void*, struct wl_keyboard* kbd, uint32_t serial, struct wl_surface* surf )
{
}
static void KeyboardKey( void*, struct wl_keyboard* kbd, uint32_t serial, uint32_t time, uint32_t key, uint32_t state )
{
}
static void KeyboardModifiers( void*, struct wl_keyboard* kbd, uint32_t serial, uint32_t mods_depressed, uint32_t mods_latched, uint32_t mods_locked, uint32_t group )
{
}
static void KeyboardRepeatInfo( void*, struct wl_keyboard* kbd, int32_t rate, int32_t delay )
{
}
constexpr struct wl_keyboard_listener keyboardListener = {
.keymap = KeyboardKeymap,
.enter = KeyboardEnter,
.leave = KeyboardLeave,
.key = KeyboardKey,
.modifiers = KeyboardModifiers,
.repeat_info = KeyboardRepeatInfo
};
static void SeatCapabilities( void*, struct wl_seat* seat, uint32_t caps ) static void SeatCapabilities( void*, struct wl_seat* seat, uint32_t caps )
{ {
const bool hasPointer = caps & WL_SEAT_CAPABILITY_POINTER; const bool hasPointer = caps & WL_SEAT_CAPABILITY_POINTER;
const bool hasKeyboard = caps & WL_SEAT_CAPABILITY_KEYBOARD;
if( hasPointer && !s_pointer ) if( hasPointer && !s_pointer )
{ {
s_pointer = wl_seat_get_pointer( s_seat ); s_pointer = wl_seat_get_pointer( s_seat );
@ -168,6 +205,17 @@ static void SeatCapabilities( void*, struct wl_seat* seat, uint32_t caps )
wl_pointer_release( s_pointer ); wl_pointer_release( s_pointer );
s_pointer = nullptr; s_pointer = nullptr;
} }
if( hasKeyboard && !s_keyboard )
{
s_keyboard = wl_seat_get_keyboard( s_seat );
wl_keyboard_add_listener( s_keyboard, &keyboardListener, nullptr );
}
else if( !hasKeyboard && s_keyboard )
{
wl_keyboard_release( s_keyboard );
s_keyboard = nullptr;
}
} }
static void SeatName( void*, struct wl_seat* seat, const char* name ) static void SeatName( void*, struct wl_seat* seat, const char* name )
@ -446,6 +494,7 @@ Backend::~Backend()
if( s_decoration ) zxdg_decoration_manager_v1_destroy( s_decoration ); if( s_decoration ) zxdg_decoration_manager_v1_destroy( s_decoration );
if( s_actToken ) xdg_activation_token_v1_destroy( s_actToken ); if( s_actToken ) xdg_activation_token_v1_destroy( s_actToken );
if( s_activation ) xdg_activation_v1_destroy( s_activation ); if( s_activation ) xdg_activation_v1_destroy( s_activation );
if( s_keyboard ) wl_keyboard_destroy( s_keyboard );
if( s_pointer ) wl_pointer_destroy( s_pointer ); if( s_pointer ) wl_pointer_destroy( s_pointer );
eglMakeCurrent( s_eglDpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT ); eglMakeCurrent( s_eglDpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT );
eglDestroySurface( s_eglDpy, s_eglSurf ); eglDestroySurface( s_eglDpy, s_eglSurf );