KWin/KConfigXT Effects: Difference between revisions

From KDE Community Wiki
Line 55: Line 55:
{{FeatureProjectInProgress |PresentWindows|[https://git.reviewboard.kde.org/r/106407/ 106407]|[email protected]}}
{{FeatureProjectInProgress |PresentWindows|[https://git.reviewboard.kde.org/r/106407/ 106407]|[email protected]}}
{{FeatureProjectInProgress |Resize|[https://git.reviewboard.kde.org/r/106397/ 106397]|[email protected]|alexanderjones}}
{{FeatureProjectInProgress |Resize|[https://git.reviewboard.kde.org/r/106397/ 106397]|[email protected]|alexanderjones}}
{{FeatureProjectInProgress |ShowFPS|-|[email protected]|gcala}}
{{FeatureProjectInProgress |ShowFPS|[https://git.reviewboard.kde.org/r/106415/ 106415]|[email protected]|gcala}}
{{FeatureProjectInProgress |ThumbnailAside|-|[email protected]|ascarpino}}
{{FeatureProjectInProgress |ThumbnailAside|-|[email protected]|ascarpino}}
{{FeatureProjectTodo |Trackmouse|-|-}}
{{FeatureProjectTodo |Trackmouse|-|-}}

Revision as of 09:38, 10 September 2012

KConfigXT for KWin Effects

Motivation

To port the configuration of an Effect to KConfigXT no programming skills are required, though can be helpful. The task is to move the configuration from being hard coded values in the source code into an XML definition from which source code get's generated. This improves the maintenance of the source code and makes it more difficult to have errors caused by typos. Furthermore the business logic to update and track the user interface can be managed automatically limiting the risk of errors there.

Last but not least it allows to move the configuration interfaces in future to new technologies like QML.

Performing a Port

Best first read the tutorial on KConfigXT, then pick an effect of those listed below. The source code for the effects can be found here, each effect is in an own sub directory. Locate the file effectname_config.cpp, that's the most important one to look at. In there you find some code starting with void EffectNameConfig::load(), there you find many readEntry() lines. Each readEntry contains the name of the config option, the default value and the data type. Each of these config options becomes an entry in the kcfg file.

Now start creating the kcfg file. As a name use effectname.kcfg. For the name attribute of "kcfgfile" use kwinrc. The kcfg file should have exactly one group. The name of this you can find in the source code in a method call EffectsHandler::effectConfig("Foo") which gets appended to a Effect-, e.g. Effect-Foo. This should be enough to define the complete kcfg file for the effect.

The next step is to update the ui file in the same directory. Best do that in Qt designer and for each widget update the object name to be kcfg_ConfigOption as explained in the tutorial.

Now all that is needed is defining the kcfgc file:

File=foo.kcfg
ClassName=FooConfig
NameSpace=KWin
Singleton=true
Mutators=true

If you have some developer experience, please also update the CMakeLists.txt and the source code of the effect and the configuration. Though this is no requirement.

A complete example for such a port can be found in Review Request for Translucency Effect.

Publish the Result

Best is to upload a Review Request on Review Board for group KWin. Alternative is to send your changes to KWin's mailing list. Bonus for being a git format-patched diff as that allows that the change in the repository will be addressed to the correct author.

Effects

Status Effect Review Board Claimed By
IN PROGRESS Blur 106400 <[email protected]>
IN PROGRESS CoverSwitch 106396 <[email protected]>
IN PROGRESS Cube 106403 <[email protected]>
IN PROGRESS Dashboard 106390 <[email protected]>
IN PROGRESS DesktopGrid 106398 <[email protected]>
IN PROGRESS DimInactive - <[email protected]>
IN PROGRESS FlipSwitch 106401 <[email protected]>
IN PROGRESS Glide 106392 <[email protected]>
IN PROGRESS Invert 106408 <[email protected]>
IN PROGRESS Login 106387 <[email protected]>
IN PROGRESS LookingGlass 106406 <[email protected]>
IN PROGRESS MagicLamp 106412 <[email protected]>
IN PROGRESS Magnifier - <[email protected]>
IN PROGRESS MouseMark 106414 <[email protected]>
IN PROGRESS PresentWindows 106407 <[email protected]>
IN PROGRESS Resize 106397 <[email protected]>
IN PROGRESS ShowFPS 106415 <[email protected]>
IN PROGRESS ThumbnailAside - <[email protected]>
TODO Trackmouse - <->
IN PROGRESS Translucency 106310 <[email protected]>
IN PROGRESS WindowGeometry 106413 <[email protected]>
IN PROGRESS WobblyWindows 106389 <[email protected]>
IN PROGRESS Zoom 106402 <[email protected]>