So far the effects could just use the connection() and rootWindow()
provided by kwinglobals. Thus an internal detail from KWin core is
accessed directly.
To be more consistent with the rest of the API it's wrapped through the
EffectsHandler and with a convenient method in Effect.
The connection() is provided as xcbConnection() to free the very generic
name connection which could create confusion once we provide a wayland
connection to the Effects.
The rootWindow() is provided as x11RootWindow() to indicate that it is
for the X11 world.
REVIEW: 117597
Most is just switched to the ::read(). That should be enough for all the
Effects which have a KSharedConfig::Ptr underneath. If not we just need
to find a good place to put the reload.
Instead of using EffectsHandler::sendReloadMessage we generate the dbus
interface in each plugin and call the reconfigure slot directly. That way
it's more type safe and we don't need to link kwineffects from the
configs.
REVIEW: 116875
There are no advantages for the effects KCM to have all the effect
config modules in one plugin.
By having a plugin per effect we can use the KPluginTrader to easily
find the configuration plugin for a given effect and load it.
To make this possible the following changes are done:
* config_builtins.cpp is deleted
* add_subdirectory is used for all effects which have a config module
* toplevel CMakeLists.txt contains the sources again for the effects
which have a config module, but effects which don't have a config
module are still included and thus the macro is still used
* plugin created for the config module, name pattern is:
kwin_effectname_config
* plugin installed to ${PLUGIN_INSTALL_DIR}/kwin/effects/configs
* desktop file adjusted to new plugin name and keyword removed
* desktop file converted to json as meta data and no longer installed
* Uses K_PLUGIN_FACTORY_WITH_JSON
* Macros for config are dropped from kwineffects.h
REVIEW: 116854
Implemented in KWin core to forward to new global shortcut system. This
method should be extended/changed once we go to Qt5/KF5 to make the usage
easier (no more KAction).
Each global shortcut in the effects makes use of this new method.
As all effects have always been compiled into the same .so file it's
questionable whether resolving the effects through a library is useful
at all. By linking against the built-in effects we gain the following
advantages:
* don't have to load/unload the KLibrary
* don't have to resolve the create, supported and enabled functions
* no version check required
* no dependency resolving (effects don't use it)
* remove the KWIN_EFFECT macros from the effects
All the effects are now registered in an effects_builtins file which
maps the name to a factory method and supported or enabled by default
methods.
During loading the effects we first check whether there is a built-in
effect by the given name and make a shortcut to create it through that.
If that's not possible the normal plugin loading is used.
Completely unscientific testing [1] showed an improvement of almost 10
msec during loading all the effects I use.
[1] QElapsedTimer around the loading code, start kwin five times, take
average.
REVIEW: 115073
Videos for the following effects are added:
* Dim Inactive
* Dim Screen for Administration Mode
* Invert
* Looking Glass
* Magnifier
* Mouse Click
* Track Mouse
* Zoom
Link for Present Windows video fixed.
Most effects had a "collection" for one action. We don't need the
action collection, all it was used for is setting the object name.
With the removal of KActionCollection the effects do not need to link
XmlGui any more, though the dependency is still pulled in through
plasma.
With QtQuick2 it's possible that the scene graph rendering context either
lives in an own thread or uses the main GUI thread. In the latter case
it's the same thread as our compositing OpenGL context lives in. This
means our basic assumption that between two rendering passes the context
stays current does not hold.
The code already ensured that before we start a rendering pass the
context is made current, but there are many more possible cases. If we
use OpenGL in areas not triggered by the rendering loop but in response
to other events the context needs to be made current. This includes the
loading and unloading of effects (some effects use OpenGL in the static
effect check, in the ctor and dtor), background loading of texture data,
lazy loading after first usage invoked by shortcut, etc. etc.
To properly handle these cases new methods are added to EffectsHandler
to make the compositing OpenGL context current. These calls delegate down
into the scene. On non-OpenGL scenes they are noop, but on OpenGL they go
into the backend and make the context current. In addition they ensure
that Qt doesn't think that it's QOpenGLContext is current by calling
doneCurrent() on the QOpenGLContext::currentContext(). This unfortunately
causes an additional call to makeCurrent with a null context, but there
is no other way to tell Qt - it doesn't notice when a different context
is made current with low level API calls. In the multi-threaded
architecture this doesn't matter as ::currentContext() returns null.
A short evaluation showed that a transition to QOpenGLContext doesn't
seem feasible. Qt only supports either GLX or EGL while KWin supports
both and when entering the transition phase for Wayland, it would become
extremely tricky if our native platform is X11, but we want a Wayland
EGL context. A future solution might be to have a "KWin-QPA plugin" which
uses either xcb or Wayland and hides everything from Qt.
The API documentation is extended to describe when the effects-framework
ensures that an OpenGL context is current. The effects are changed to
make the context current in cases where it's not guaranteed. This has
been done by looking for creation or deletion of GLTextures and Shaders.
If there are other OpenGL usages outside the rendering loop, ctor/dtor
this needs to be changed, too.
* "" needs to be wrapped in QStringLiteral
* QString::fromUtf8 needed for const char* and QByteArray
* QByteArray::constData() needed to get to the const char*
Many headers included KLocale to use i18n and co. But those methods are
defined in KLocalizedString and not in KLocale.
With KF5 klocale.h does no longer include KLocalizedString causing lots
of compile errors.
First XRender effect which gets ported over. Therefore required bits are
added to CMakeLists.txt.
Port to xcb is luckily rather straight forward. Though the QPixmap usage
needs to be replaced by xcb_pixmap_t together with a XRenderPicture.
The ShaderBinder class can be used for the case that a block of code
should be executed with a given Shader being bound. This is useful for
all the cases where there is a if-block for OpenGL2 execution with a
Shader being pushed in the first line to the ShaderManager and popped in
the last line of the block. With the helper this can be simplified to:
ShaderBinder binder(myCustomShader);
or
ShaderBinder binder(ShaderManager::GenericShader);
The ctor of ShaderBinder pushes the given Shader to the stack and once
the helper goes out of scope it will be popped again from the stack.
In addition the helper can take care of OpenGL 1 compositing, that is it
just does nothing. So it can also be used where there is a shared OpenGL1
and OpenGL2 code path where the Shader should only be pushed in OpenGL2.
This basically removes all the checks for the compositing type before
pushing/popping a Shader to the stack.
REVIEW: 106521
The main usage of ShaderManager::isValid was to have OpenGL2 specific
code pathes. Now we have an actual OpenGL2Compositing type and we know
that the ShaderManager is valid if we have this compositing type and we
know that it is not valid on OpenGL1Compositing. This gives us a much
better check and allows us to use the isValid method just for where we
want to check whether the shaders compiled successfully.
In addition some effects require OpenGL2, so we do not need to check
again that the ShaderManager is valid. Such usages are removed.
The CompositingType enum turns into flags and two new values are
introduced: OpenGL1Compositing and OpenGL2Compositing.
Those new values are or-ed to OpenGLCompositing so that a simple check
for the flag OpenGLCompositing works in case of one of those two new
values. To make the generic check for OpenGL compositing easier a method
in EffectsHandler is introduced to just check for this.
The scenes now return either OpenGL1Compositing or OpenGL2Compositing
depending on which Scene implementation. None returns OpenGLCompositing.
The supportInformation is extended to also read the properties
on all effects. In addition each effect can be queried just for
itself through D-Bus, e.g.:
qdbus org.kde.kwin /KWin supportInformationForEffect kwin4_effect_blur
All effects are extended to provide their configured and read
settings through properties. In some cases also important
runtime information is exposed.
REVIEW: 105977
BUG: 305338
FIXED-IN: 4.9.1
This patch adds an optional texture cache to the blur effect such that damaged windows in
front of the blurred region dont trigger a repaint of the whole blurred region which pretty
often results in a avalanche repaint of nearly the whole screen.
REVIEW: 101977
Each effect is able to declare itself as currently being active,
that is transforming windows or painting or screen or doing anything
during the current rendered frame.
This change eliminates the hottest path inside KWin identified by
callgrind.
REVIEW: 102449
Effect uses framebuffer blit to copy the zoomed are in a scaled
way into an offscreen texture and render the texture after the
rendering. This means instead of two rendering passes we now need
only one pass, but require the blit extension.
svn path=/trunk/KDE/kdebase/workspace/; revision=1214743
The following changes were in SVN, but were removed from git:
M wallpapers/Blue_Wood/metadata.desktop
M wallpapers/Grass/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=1213663
The following changes were in SVN, but were removed from git:
M wallpapers/Air/metadata.desktop
M wallpapers/Autumn/metadata.desktop
M wallpapers/Blue_Wood/metadata.desktop
M wallpapers/Grass/metadata.desktop
M wallpapers/Hanami/metadata.desktop
M wallpapers/Horos/metadata.desktop
M wallpapers/Media_Life/metadata.desktop
M wallpapers/Plasmalicious/metadata.desktop
M wallpapers/Quadros/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=1191511
The following changes were in SVN, but were removed from git:
M wallpapers/Aghi/metadata.desktop
M wallpapers/Air/metadata.desktop
M wallpapers/Autumn/metadata.desktop
M wallpapers/Blue_Wood/metadata.desktop
M wallpapers/Ethais/metadata.desktop
M wallpapers/Evening/metadata.desktop
M wallpapers/Fields_of_Peace/metadata.desktop
M wallpapers/Finally_Summer_in_Germany/metadata.desktop
M wallpapers/Fresh_Morning/metadata.desktop
M wallpapers/Grass/metadata.desktop
M wallpapers/Hanami/metadata.desktop
M wallpapers/Media_Life/metadata.desktop
M wallpapers/Plasmalicious/metadata.desktop
M wallpapers/Quadros/metadata.desktop
M wallpapers/Red_Leaf/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=1177799
The following changes were in SVN, but were removed from git:
M wallpapers/Blue_Wood/metadata.desktop
M wallpapers/Ethais/metadata.desktop
M wallpapers/Fields_of_Peace/metadata.desktop
M wallpapers/Finally_Summer_in_Germany/metadata.desktop
M wallpapers/Grass/metadata.desktop
M wallpapers/Media_Life/metadata.desktop
M wallpapers/Quadros/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=1155392
The following changes were in SVN, but were removed from git:
M wallpapers/Autumn/metadata.desktop
M wallpapers/Blue_Wood/metadata.desktop
M wallpapers/Grass/metadata.desktop
M wallpapers/Hanami/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=1140600
The following changes were in SVN, but were removed from git:
M wallpapers/Autumn/metadata.desktop
M wallpapers/Blue_Wood/metadata.desktop
M wallpapers/Hanami/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=1098905
The following changes were in SVN, but were removed from git:
M wallpapers/Aghi/metadata.desktop
M wallpapers/Code_Poets_Dream/metadata.desktop
M wallpapers/Curls_on_Green/metadata.desktop
M wallpapers/Ethais/metadata.desktop
M wallpapers/Evening/metadata.desktop
M wallpapers/Fields_of_Peace/metadata.desktop
M wallpapers/Finally_Summer_in_Germany/metadata.desktop
M wallpapers/Fresh_Morning/metadata.desktop
M wallpapers/Media_Life/metadata.desktop
M wallpapers/Plasmalicious/metadata.desktop
M wallpapers/Quadros/metadata.desktop
M wallpapers/Red_Leaf/metadata.desktop
M wallpapers/Spring_Sunray/metadata.desktop
M wallpapers/The_Rings_of_Saturn/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=1097842
The following changes were in SVN, but were removed from git:
M wallpapers/Aghi/metadata.desktop
M wallpapers/Air/metadata.desktop
M wallpapers/Code_Poets_Dream/metadata.desktop
M wallpapers/Curls_on_Green/metadata.desktop
M wallpapers/Ethais/metadata.desktop
M wallpapers/Evening/metadata.desktop
M wallpapers/Fields_of_Peace/metadata.desktop
M wallpapers/Finally_Summer_in_Germany/metadata.desktop
M wallpapers/Fresh_Morning/metadata.desktop
M wallpapers/Media_Life/metadata.desktop
M wallpapers/Plasmalicious/metadata.desktop
M wallpapers/Quadros/metadata.desktop
M wallpapers/Red_Leaf/metadata.desktop
M wallpapers/Spring_Sunray/metadata.desktop
M wallpapers/The_Rings_of_Saturn/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=1085566
The following changes were in SVN, but were removed from git:
M wallpapers/Aghi/metadata.desktop
M wallpapers/Air/metadata.desktop
M wallpapers/Code_Poets_Dream/metadata.desktop
M wallpapers/Curls_on_Green/metadata.desktop
M wallpapers/Ethais/metadata.desktop
M wallpapers/Evening/metadata.desktop
M wallpapers/Finally_Summer_in_Germany/metadata.desktop
M wallpapers/Fresh_Morning/metadata.desktop
M wallpapers/Media_Life/metadata.desktop
M wallpapers/Plasmalicious/metadata.desktop
M wallpapers/Quadros/metadata.desktop
M wallpapers/Spring_Sunray/metadata.desktop
M wallpapers/The_Rings_of_Saturn/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=1068486
The following changes were in SVN, but were removed from git:
M wallpapers/Aghi/metadata.desktop
M wallpapers/Air/metadata.desktop
M wallpapers/Curls_on_Green/metadata.desktop
M wallpapers/Evening/metadata.desktop
M wallpapers/Fields_of_Peace/metadata.desktop
M wallpapers/Finally_Summer_in_Germany/metadata.desktop
M wallpapers/Fresh_Morning/metadata.desktop
M wallpapers/Media_Life/metadata.desktop
M wallpapers/Plasmalicious/metadata.desktop
M wallpapers/Quadros/metadata.desktop
M wallpapers/Red_Leaf/metadata.desktop
M wallpapers/Spring_Sunray/metadata.desktop
M wallpapers/The_Rings_of_Saturn/metadata.desktop
M wallpapers/There_is_Rain_on_the_Table/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=1068118
The following changes were in SVN, but were removed from git:
M wallpapers/Aghi/metadata.desktop
M wallpapers/Air/metadata.desktop
M wallpapers/Code_Poets_Dream/metadata.desktop
M wallpapers/Curls_on_Green/metadata.desktop
M wallpapers/Evening/metadata.desktop
M wallpapers/Fields_of_Peace/metadata.desktop
M wallpapers/Finally_Summer_in_Germany/metadata.desktop
M wallpapers/Fresh_Morning/metadata.desktop
M wallpapers/Media_Life/metadata.desktop
M wallpapers/Plasmalicious/metadata.desktop
M wallpapers/Red_Leaf/metadata.desktop
M wallpapers/Spring_Sunray/metadata.desktop
M wallpapers/The_Rings_of_Saturn/metadata.desktop
M wallpapers/There_is_Rain_on_the_Table/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=1040506
The following changes were in SVN, but were removed from git:
M wallpapers/Evening/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=1024781
The following changes were in SVN, but were removed from git:
M wallpapers/Aghi/metadata.desktop
M wallpapers/Air/metadata.desktop
M wallpapers/Atra_Dot/metadata.desktop
M wallpapers/Code_Poets_Dream/metadata.desktop
M wallpapers/Curls_on_Green/metadata.desktop
M wallpapers/EOS/metadata.desktop
M wallpapers/Evening/metadata.desktop
M wallpapers/Fields_of_Peace/metadata.desktop
M wallpapers/Finally_Summer_in_Germany/metadata.desktop
M wallpapers/Fresh_Morning/metadata.desktop
M wallpapers/Plasmalicious/metadata.desktop
M wallpapers/Red_Leaf/metadata.desktop
M wallpapers/Spring_Sunray/metadata.desktop
M wallpapers/The_Rings_of_Saturn/metadata.desktop
M wallpapers/There_is_Rain_on_the_Table/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=1014621
The following changes were in SVN, but were removed from git:
M wallpapers/Air/metadata.desktop
M wallpapers/Code_Poets_Dream/metadata.desktop
M wallpapers/Curls_on_Green/metadata.desktop
M wallpapers/Evening/metadata.desktop
M wallpapers/Fields_of_Peace/metadata.desktop
M wallpapers/Finally_Summer_in_Germany/metadata.desktop
M wallpapers/Fresh_Morning/metadata.desktop
M wallpapers/Red_Leaf/metadata.desktop
M wallpapers/The_Rings_of_Saturn/metadata.desktop
M wallpapers/There_is_Rain_on_the_Table/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=1011290
The following changes were in SVN, but were removed from git:
M wallpapers/Air/metadata.desktop
M wallpapers/Code_Poets_Dream/metadata.desktop
M wallpapers/Curls_on_Green/metadata.desktop
M wallpapers/Evening/metadata.desktop
M wallpapers/Fields_of_Peace/metadata.desktop
M wallpapers/Finally_Summer_in_Germany/metadata.desktop
M wallpapers/Fresh_Morning/metadata.desktop
M wallpapers/Plasmalicious/metadata.desktop
M wallpapers/Red_Leaf/metadata.desktop
M wallpapers/There_is_Rain_on_the_Table/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=985256
The following changes were in SVN, but were removed from git:
M wallpapers/Air/metadata.desktop
M wallpapers/Atra_Dot/metadata.desktop
M wallpapers/Blue_Curl/metadata.desktop
M wallpapers/Code_Poets_Dream/metadata.desktop
M wallpapers/Curls_on_Green/metadata.desktop
M wallpapers/Evening/metadata.desktop
M wallpapers/Finally_Summer_in_Germany/metadata.desktop
M wallpapers/Fresh_Morning/metadata.desktop
M wallpapers/Ladybuggin/metadata.desktop
M wallpapers/Red_Leaf/metadata.desktop
M wallpapers/Spring_Sunray/metadata.desktop
M wallpapers/The_Rings_of_Saturn/metadata.desktop
M wallpapers/There_is_Rain_on_the_Table/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=984807
The following changes were in SVN, but were removed from git:
M wallpapers/Evening/metadata.desktop
M wallpapers/Plasmalicious/metadata.desktop
M wallpapers/Spring_Sunray/metadata.desktop
M wallpapers/The_Rings_of_Saturn/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=984344
The following changes were in SVN, but were removed from git:
M wallpapers/Atra_Dot/metadata.desktop
M wallpapers/Evening/metadata.desktop
M wallpapers/Spring_Sunray/metadata.desktop
M wallpapers/The_Rings_of_Saturn/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=940525
The following changes were in SVN, but were removed from git:
M wallpapers/Air/metadata.desktop
M wallpapers/Blue_Curl/metadata.desktop
M wallpapers/Code_Poets_Dream/metadata.desktop
M wallpapers/Curls_on_Green/metadata.desktop
M wallpapers/Fields_of_Peace/metadata.desktop
M wallpapers/Finally_Summer_in_Germany/metadata.desktop
M wallpapers/Flower_drops/metadata.desktop
M wallpapers/Fresh_Morning/metadata.desktop
M wallpapers/HighTide/metadata.desktop
M wallpapers/Ladybuggin/metadata.desktop
M wallpapers/Red_Leaf/metadata.desktop
M wallpapers/There_is_Rain_on_the_Table/metadata.desktop
M wallpapers/Vector_Sunset/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=939654
The following changes were in SVN, but were removed from git:
M wallpapers/Air/metadata.desktop
M wallpapers/Blue_Curl/metadata.desktop
M wallpapers/Code_Poets_Dream/metadata.desktop
M wallpapers/Curls_on_Green/metadata.desktop
M wallpapers/Fields_of_Peace/metadata.desktop
M wallpapers/Finally_Summer_in_Germany/metadata.desktop
M wallpapers/Flower_drops/metadata.desktop
M wallpapers/Fresh_Morning/metadata.desktop
M wallpapers/HighTide/metadata.desktop
M wallpapers/Ladybuggin/metadata.desktop
M wallpapers/Red_Leaf/metadata.desktop
M wallpapers/There_is_Rain_on_the_Table/metadata.desktop
M wallpapers/Vector_Sunset/metadata.desktop
svn path=/trunk/KDE/kdebase/workspace/; revision=936838
The following changes were in SVN, but were removed from git:
M wallpapers/Blue_Curl/metadata.desktop
M wallpapers/Code_Poets_Dream/metadata.desktop
M wallpapers/Curls_on_Green/metadata.desktop
M wallpapers/EOS/metadata.desktop
M wallpapers/Fields_of_Peace/metadata.desktop
M wallpapers/Finally_Summer_in_Germany/metadata.desktop
M wallpapers/Flower_drops/metadata.desktop
M wallpapers/Fresh_Morning/metadata.desktop
M wallpapers/Ladybuggin/metadata.desktop
M wallpapers/Red_Leaf/metadata.desktop
M wallpapers/There_is_Rain_on_the_Table/metadata.desktop
M wallpapers/Vector_Sunset/metadata.desktop