mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-26 06:35:58 +01:00
seat/keyboard: allow no keymap
This commit is contained in:
parent
0910fa9179
commit
69aeccddb7
1 changed files with 25 additions and 2 deletions
|
@ -1,7 +1,9 @@
|
||||||
#define _POSIX_C_SOURCE 200809L
|
#define _POSIX_C_SOURCE 200809L
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include <wayland-server-core.h>
|
#include <wayland-server-core.h>
|
||||||
#include <wlr/types/wlr_compositor.h>
|
#include <wlr/types/wlr_compositor.h>
|
||||||
#include <wlr/types/wlr_data_device.h>
|
#include <wlr/types/wlr_data_device.h>
|
||||||
|
@ -340,6 +342,24 @@ static void seat_client_send_keymap(struct wlr_seat_client *client,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum wl_keyboard_keymap_format format;
|
||||||
|
int fd, devnull = -1;
|
||||||
|
uint32_t size;
|
||||||
|
if (keyboard->keymap != NULL) {
|
||||||
|
format = WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1;
|
||||||
|
fd = keyboard->keymap_fd;
|
||||||
|
size = keyboard->keymap_size;
|
||||||
|
} else {
|
||||||
|
format = WL_KEYBOARD_KEYMAP_FORMAT_NO_KEYMAP;
|
||||||
|
devnull = open("/dev/null", O_RDONLY | O_CLOEXEC);
|
||||||
|
if (devnull < 0) {
|
||||||
|
wlr_log_errno(WLR_ERROR, "Failed to open /dev/null");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fd = devnull;
|
||||||
|
size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: We should probably lift all of the keys set by the other
|
// TODO: We should probably lift all of the keys set by the other
|
||||||
// keyboard
|
// keyboard
|
||||||
struct wl_resource *resource;
|
struct wl_resource *resource;
|
||||||
|
@ -348,8 +368,11 @@ static void seat_client_send_keymap(struct wlr_seat_client *client,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
wl_keyboard_send_keymap(resource, WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1,
|
wl_keyboard_send_keymap(resource, format, fd, size);
|
||||||
keyboard->keymap_fd, keyboard->keymap_size);
|
}
|
||||||
|
|
||||||
|
if (devnull >= 0) {
|
||||||
|
close(devnull);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue