D22418: WIP [wayland] make automatic backend selection truly automatic

Alexey Min <[email protected]>
Newsgroups gmane.comp.kde.devel.kwin,gmane.comp.kde.devel.plasma
Message-ID <[email protected]>
alexeymin added a comment.


  > not convinced that removing the ifdef is the solution
  
  It is, because now availability and presence of command-line options is decided at KWin **compile** time, and it should be decided at **run** time based on the actual list of available plugins. Just removing `#ifdefs` already solves the problem that I cannot pass `--hwcomposer` argument to `kwin_wayland` if KWin was built without libhybris support and hwcomposer plugin is installed later and it can be loaded perfectly (and works fine). That's why we'll have to remove `#ifdef`s anyway.
  
  I wanted to go with the minimalistic and non-invasive approach, with as little bloodshed as possible. But if you wish to see some rewrites, how about this:
  
  - Each plugin has a method to help in autodetection process (`canLoad()`) that quickly checks if the environment conditions are correct and allow loading of this plugin. Previously there was a function `automaticBackendSelection()`, that did that by just checking `qEnvironmentVariableIsSet` and so; now each plugin can do more complicated tests than just env vars checking.
  - Each plugin has a concept of "priority" for automatic loading, because we need some order among them. This was previously also in `automaticBackendSelection()`, the order of `if` statements. The priority is saved in JSON metadata, the same way as the `"input"` property is now stored and tested in `Application::initPlatform() `: https://cgit.kde.org/kwin.git/tree/main.cpp?h=Plasma/5.17#n442
  
  It is not trivial to move CLI args providing and parsing into plugins, because some common arguments like `--width` and `--height` are only used for windowed backends, for example ( https://cgit.kde.org/kwin.git/tree/main_wayland.cpp?h=Plasma/5.17#n420 ) and some plugins have specific CLI options, like `--x11-display` for x11-windowed backend or `--fb-device` for framebuffer backend, `--wayland-display` for nested wayland. But maybe it's still possible by extending base `Platform` class even more...

REPOSITORY
  R108 KWin

REVISION DETAIL
  https://phabricator.kde.org/D22418

To: alexeymin, romangg, #kwin
Cc: PureTryOut, graesslin, kwin, plasma-devel, LeGast00n, The-Feren-OS-Dev, sbergeron, jraleigh, fbampaloukas, GB_2, mkulinski, ragreen, jackyalcine, iodelay, crozbo, bwowk, ZrenBot, ngraham, alexeymin, himcesjf, lesliezhai, ali-mohamed, hardening, romangg, jensreuterberg, abetts, sebas, apol, ahiemstra, mart
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.