Hi all, One of the things we talked about during Akademy was better support for convertible hardware. I've played around a bit with my Thinkpad X1 Yoga and screen rotation. I can of course rotate the screen "manually" through XRandR (Wayland is another story on that altogether), but that will screw up the touchscreen. Doing some research, I found out that:
- touchscreen and display are completely separate things, the system doesn't know they're sitting on top of each other - They need to be rotated separately - rotation in X goes through XInput2, on Wayland, I don't know I'm working on some code that does the rotation from KScreen right now. My idea is to add this to KScreen's API and allow the KScreen user to also rotate the display. On X, this happens async, and this bears the risk that input ends up on different coordinates during switching (display has already rotated, touchscreen still in process, or some race condition like that -- I don't think we can really prevent that), on Wayland, we should be able to prevent that from happening as we hopefully can make input rotation atomic along with the rotation itself, the protocol and API of screen management in Wayland allow that. We probably will need to guess which display has a touchscreen attached, but for some cases, I think we can make some pretty reasonable guesses - one display, one touchscreen seems like a the most common case, and is clear - one touchscreen and multiple displays: touchscreen may be on the internal display The mapping heuristic is kept internally, and we can work on that later, once we got the basics in place. Architecture / API design: My idea right now is to add a new relatively simple type class to the KScreen API, TouchScreen, that can be received from an Output, something like output->setRotation(Output::Left); TouchscreenList *touchscreens = output->touchscreens(); for (auto touchscreen : touchscreens) { touchscreens.at(0)->setRotation(Output::Left); } // ... then setting the new config as usual through SetConfigOperation() This would have to also be implemented in the specific backends in KScreen. It's just an idea for now, but I'd like to get some feedback about it at this point. -- sebas http://www.kde.org | http://vizZzion.org