pywlroots icon indicating copy to clipboard operation
pywlroots copied to clipboard

including some libinput boiler plate?

Open m-col opened this issue 4 years ago • 9 comments

Compositers generally allow for a smalll amount of user configuration of the input devices via libinput. Example settings are tap-to-click, point accelleration etc, see https://wayland.freedesktop.org/libinput/doc/latest/configuration.html

Example usage by a wlroots compositer is to set these options to a device when the device is added via the backend's new input event, e.g.:

    if (wlr_input_device_is_libinput(device)) {
	struct libinput_device *ldev = wlr_libinput_get_device_handle(device);
	if (libinput_device_config_tap_get_finger_count(ldev) > 1) {
	   libinput_device_config_tap_set_enabled(ldev, LIBINPUT_CONFIG_TAP_ENABLED);
	}
    }
    wlr_cursor_attach_input_device(wimp.cursor, device);

Here there are a couple wlroots functions but also functions from libinput. Do you think it would make sense to also include some of these libinput device configuring functions in the lib, perhaps exposed methods to InputDevice?

m-col avatar May 22 '21 09:05 m-col

The options exposed by sway are here: https://github.com/swaywm/sway/blob/master/sway/config/input.c#L22

m-col avatar May 23 '21 13:05 m-col

This is pretty much the list of things that users reasonably would want to configure https://github.com/wayland-project/libinput/blob/master/src/libinput.h#L4315-L4330

m-col avatar May 23 '21 16:05 m-col

I've been playing around with adding a small CFFI interface to libinput within Qtile, but I'm coming up with a problem with using it with pywlroots' cffi. It seems as though the issue should be resolved simply by doing ffi_builder.include(pywlroots_ffi_builder), but then oddly the libinput ffi has trouble compiling. Perhaps you might be able to spot an error in how pywlroots is being included? My ffi build script is here: https://github.com/m-col/qtile/blob/libinput/libqtile/backend/wayland/libinput_ffi_build.py

This script shows all the parts above that would be required for full coverage of all available input configuration options that people might use/expect from a compositor, so if you think they are better off in pywlroots then it's simply a cut-paste job.

m-col avatar Jun 01 '21 11:06 m-col

Over on https://github.com/qtile/qtile/pull/2548 I'm trying to build another CFFI module that imports the source from pywlroots much like it does from pywayland and python-xkbcommon. The problem is that wlroots.ffi_build.py requires some files in its repository that aren't packaged. Do you think we could move the include folder into the python module and package it, or might there be a better solution?

m-col avatar Nov 14 '21 23:11 m-col

The libinput wrapping module in Qtile is merged, so I'd be happy to close this and keep it as 'out of scope' for pywlroots.

m-col avatar Feb 13 '22 17:02 m-col

I would like to try and implement some libinput boilerplate in Keyboard.py and Pointer.py.

@flacjacket Are you open to such patches? Or would it be considered out of scope?

Shinyzenith avatar Jun 27 '22 17:06 Shinyzenith

Yeah, that would be great! If there are things that make sense to package to use with wlroots, that would be fine to add in.

flacjacket avatar Jul 01 '22 23:07 flacjacket

If it's the same things that Qtile has that you're trying to add support for in your compositor, taking out Qtile's code and incorporating it into these classes might be a good solution. Qtile can also drop its own code and interface with libinput this way.

m-col avatar Jul 02 '22 12:07 m-col

If it's the same things that Qtile has that you're trying to add support for in your compositor, taking out Qtile's code and incorporating it into these classes might be a good solution. Qtile can also drop its own code and interface with libinput this way.

Yep I am currently just copy pasting qtiles libinput ffi generator and having it incorporated into wlroots would save me 1 build step 🤣. I was thinking of just incorporating qtiles code into wlroots.

I'll get start on this as soon as possible!

Shinyzenith avatar Jul 02 '22 17:07 Shinyzenith