flacjacket / pywlroots

Python binding to the wlroots library using cffi
University of Illinois/NCSA Open Source License
51 stars 12 forks source link

including some libinput boiler plate? #31

Open m-col opened 3 years ago

m-col commented 3 years ago

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 commented 3 years ago

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

m-col commented 3 years ago

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 commented 3 years ago

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 commented 2 years ago

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 commented 2 years ago

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.

Shinyzenith commented 2 years ago

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?

flacjacket commented 2 years ago

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.

m-col commented 2 years ago

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.

Shinyzenith commented 2 years ago

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!