wlserver: stop using headless backend for keyboard

The headless backend forces a wlroots renderer to be initialized.
Stop using it, so that it's easier to get rid of the headless
backend altogether.
This commit is contained in:
Simon Ser 2021-08-03 11:04:00 +02:00
parent ee96a669ef
commit 482f1f3b0b

View file

@ -26,6 +26,8 @@ extern "C" {
#include <wlr/backend/multi.h> #include <wlr/backend/multi.h>
#include <wlr/backend/libinput.h> #include <wlr/backend/libinput.h>
#include <wlr/backend/noop.h> #include <wlr/backend/noop.h>
#include <wlr/interfaces/wlr_input_device.h>
#include <wlr/interfaces/wlr_keyboard.h>
#include <wlr/render/wlr_renderer.h> #include <wlr/render/wlr_renderer.h>
#include <wlr/types/wlr_keyboard.h> #include <wlr/types/wlr_keyboard.h>
#include <wlr/types/wlr_pointer.h> #include <wlr/types/wlr_pointer.h>
@ -577,6 +579,7 @@ int wlserver_init(int argc, char **argv, bool bIsNested) {
wlserver.wlr.output = wlr_noop_add_output( wlserver.wlr.noop_backend ); wlserver.wlr.output = wlr_noop_add_output( wlserver.wlr.noop_backend );
struct wlr_input_device *kbd_dev = nullptr;
if ( bIsDRM == True ) if ( bIsDRM == True )
{ {
wlserver.wlr.libinput_backend = wlr_libinput_backend_create( wlserver.display, wlserver.wlr.session ); wlserver.wlr.libinput_backend = wlr_libinput_backend_create( wlserver.display, wlserver.wlr.session );
@ -588,7 +591,15 @@ int wlserver_init(int argc, char **argv, bool bIsNested) {
} }
else else
{ {
wlr_headless_add_input_device( wlserver.wlr.headless_backend, WLR_INPUT_DEVICE_KEYBOARD ); // Create a stub wlr_keyboard only used to set the keymap
struct wlr_keyboard *kbd = (struct wlr_keyboard *) calloc(1, sizeof(*kbd));
wlr_keyboard_init(kbd, nullptr);
kbd_dev = (struct wlr_input_device *) calloc(1, sizeof(*kbd_dev));
wlr_input_device_init(kbd_dev, WLR_INPUT_DEVICE_KEYBOARD, nullptr, "noop", 0, 0);
kbd_dev->keyboard = kbd;
// We need to wait for the backend to be started before adding the device
} }
struct wlr_renderer *headless_renderer = wlr_backend_get_renderer( wlserver.wlr.multi_backend ); struct wlr_renderer *headless_renderer = wlr_backend_get_renderer( wlserver.wlr.multi_backend );
@ -633,6 +644,9 @@ int wlserver_init(int argc, char **argv, bool bIsNested) {
return 1; return 1;
} }
if ( kbd_dev != nullptr )
wl_signal_emit( &wlserver.wlr.multi_backend->events.new_input, kbd_dev );
wlr_output_enable( wlserver.wlr.output, true ); wlr_output_enable( wlserver.wlr.output, true );
wlr_output_set_custom_mode( wlserver.wlr.output, g_nNestedWidth, g_nNestedHeight, g_nOutputRefresh * 1000 ); wlr_output_set_custom_mode( wlserver.wlr.output, g_nNestedWidth, g_nNestedHeight, g_nOutputRefresh * 1000 );
if ( !wlr_output_commit( wlserver.wlr.output ) ) if ( !wlr_output_commit( wlserver.wlr.output ) )