Left over from the cleanup which basically resulted in the active window
being put to the inactive's window opacity.
Thanks for the early notification of that issue.
BUG: 306449
FIXED-IN: 4.9.2
The effect should have had two animations:
* on move resize
* on active/inactive change
But the timeline was adjusted in the prePaintWindow call and the timeline
is effect global and not per window. Which means that for each window the
same time is added. So instead of adding time t each frame t*n with n
being the number of windows got added. So in most cases the animation
ended in the first or second frame which means its not visible.
Through git blame I was able to track down that this incorrect behavior
was introduced in 2008. An animation broken for more than four years
without anybody noticing is probably not required. Because of that it's
dropped from the effect. As this includes quite some code and performance
improvements it goes into the release branch.
A better solution could be implemented, but that should be for 4.10.
BUG: 306263
FIXED-IN: 4.9.2
REVIEW: 106335
There were quite some useless checks like e.g. first checking whether
a window is the desktop and taking a different code path for that case
and in the other code path checking again.
Also using the new introduced boolean values for the checks instead of
comparing floating point numbers all the time.
The effect gets a set of boolean values to check whether it is active for
one of the categories (e.g. move resize, decorations).
This allows to easily check whether the effect is active at all, that is
if all values are at 1.0 the effect will never affect a window.
In all other cases it can be combined with looking at the available
windows to e.g. enable the effect for move resize only when there is a
window which is either moved or resized. This check is performed whenever
an action happens which could cause a window to become inactive.
BUG: 306262
FIXED-IN: 4.9.2
The Shader might have left-overs from last usage which might
cause the effect to not work properly.
BUG: 304404
FIXED-IN: 4.9.1
Reviewed By: Thomas Lübking
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
The code assumed that screens border to each other. That is the height
of the one screen is the y position of the other screen.
BUG: 304520
FIXED-IN: 4.9.1
REVIEW: 105958
* KDE/4.9:
Fix callback race in the session save and shutdown code.
Update for 4.9.0 release
SVN_SILENT made messages (.desktop file)
SVN_SILENT made messages (.desktop file)
Fix regression in QML shutdown menu. Ampersands should be removed from menu entries' text by default.
Fix typos in a message that broke string freeze.
Fix potential parallel build failure.
Conflicts:
CMakeLists.txt
Ensures that we can access the minimized property in Effects
which want to not animate a closed, minimized window.
Make use of it in the Fade Effect Script to not fade out a
minimized window which would mean showing the actual not
visible window.
BUG: 303891
FIXED-IN: 4.9.0
REVIEW: 105647
The public member variables for opacity, saturation and brightness
are removed in favor for getter and setters. The variables are
moved into a private class. Those are now qreal instead of double.
To make usage inside the effects easier a multiply method is added
which multiplies the current value with passed in factor and returns
the new value in a functional programming style.
This commit is the top-most of a patch series to refactor
ScreenPaintData and WindowPaintData. Other related commits are:
* 0811772
* ebdc7ec
* 2c8dd8d
* 7699726
* 68e0201
* 611cb09
REVIEW: 105141
BUG: 303314
FIXED-IN: 4.10
No effect has ever made use of contents opacity. Which means it
is not needed. Removing means faster effects as we used to
multiply the value (always 1.0) with the opacity in each frame
for each window.
The logout effect was rather broken. First of all it was
excluded from build if OpenGL ES is present at build time. The
reason for this is that the effect did not work with GLES.
In order to fix that the vignetting is ported over to OpenGL 2
by using a dedicated shader. As well the lod based blur is
added through a dedicated shader and uses framebuffer blit to
get the current rendered buffer before rendering the logout
window into a texture.
Last but not least the isActive method was broken and is fixed
by checking whether the logout window is around.
BUG: 303096
FIXED-IN: 4.9.0
REVIEW: 105459
Cube effect modifies the ScreenTransformation matrix. While each
window resets the matrix on a global level it's not reset. That
means if the last rendered window had the screen rotated the
ScreenTransformation keeps the rotation even after the cube
ended. This causes a rotated window in e.g. TaskbarThumbnails.
REVIEW: 104918
CCBUG: 299869
Effects can specify their minimum requirements in their
desktop file:
* OpenGL
* OpenGL 2 (GLSL required)
* Shaders (either ARB or OpenGL 2)
The configuration module uses this information in combination
with which backend KWin is currently using. So if e.g. OpenGL
is used and an effect requires OpenGL 2 a detailed error
message can be showed that OpenGL 2 is required.
BUG: 209213
FIXED-IN: 4.9.0
REVIEW: 104847
A CMake variable is used to specify the name of the binary.
By default this is "kwin" but building for PA changes the
name to "kwinactive". The variable adjusts all names, e.g.
kwinnvidiahack becomes kwinactivenvidiahack.
The remaining usage of kwinrc in core and libs is replaced
by a cmakedefine for the configuration name and all data
installations are moved to the defined name. Dynamic loading
for scripts & co is adjusted for loading based on defined name.
This change allows the side-by-side installation of both kwin
for desktop and kwin for Plasma Desktop without the known
issues like conflicts in config files or missing build options
if kwin desktop is used for Plasma Active.
Likewise the KCMs are not adjusted as they are not intended to
be used for kwinactive.
REVIEW: 104299
BUG: 296084
FIXED-IN: 4.9.0
CCMAIL: active@kde.org
Additional TabBox Mode which allows to switch between all open
windows of the current selected application. By default Alt+tilde
is used which is on qwerty just one key above tab. For non-qwerty
layouts the shortcut is unfortunately not convenient.
REVIEW: 104730
FEATURE: 299308
FIXED-IN: 4.9.0
Effects that need GLSL require that OpenGL 2 is active.
It does not matter whether the GPU would support it if
OpenGL 2 is not used.
Cherry-picked from db42152
CCBUG: 299426
Creating an EffectFrame requires I/O which takes on my system
during testing between 10 and 40 msec. Also it needs a little
bit of memory.
This changes moves out the creation of EffectFrames at Effect
load till the Effect actually needs the EffectFrame. E.g. if a
user does not filter in PresentWindows there is no need to ever
create it.
BoxSwitch effect is ignored as it should be dropped for 4.9.
REVIEW: 104815
Cube effect loads 0 to 2 textures which has been
performed during configuration. This change delays
loading the textures till cube is activated for the
first time and the loading from file is moved into
a thread.
This means that for a very short time the texture
is not yet visible, but this is not a problem as
the cube animates from fully opaque starting state.
So during the loading the texture would not be
visible anyway.
REVIEW: 104807
This makes kwin in OpenGL2 mode more coherent with kwin_gles.
Despite some fullscreen effects they should now make the same
(pure) OpenGL calls.
REVIEW: 103804
Some old restructuring caused -DKWIN_HAVE_OPENGLES to no longer be
passed to the compiler, causing OpenGL-specific code to be built
while the libraries to link it were not available.
REVIEW: 104558
For the normal TabBox the TabBoxClient's icon method is
adjusted to use the "user-desktop" icon instead of the
window icon.
For the effects a method to set the caption is extended
to also set the icon on the caption frame.
REVIEW: 104444
FlipSwitch can be navigated with up and down keys as well
as left/right and CoverSwitch only with left and right
keys while Alt+Tab is used.
REVIEW: 104438
FEATURE: 178595
FIXED-IN: 4.9.0
Our first effect written in JavaScript to replace an existing C++
effect. Fade effect has been chosen as it has shown to be problematic
in the past and would have needed a migration to AnimationEffect anyway.
This reduces the repaints in cases where several blur regions are
stacked on top of each other (e.g. oxygen-transparent) and the topmost
layer needs to be updated (e.g. a blurry window is moved).
The old blur version wrongly marked a cache region as valid with the
reason that this region would never become visible. It didnt matter
because the only case that this region could become visible was a
movement of the window on top, which back then would have forced a
workspace repaint of that region and as such would have invalidated
the cache anyway. With the introduction of addLayerRepaint the
last point is no longer true and we have to track the valid cache
regions more carefully.
This patch adds a new function Toplevel::addLayerRepaint, that in contrast
to addWorkspaceRepaint does not invalidate every blur texture cache that
overlaps with that region. As the name suggests it rather invalidates the
to the window associated layer at that position. This is especially useful
in the case of move/resize events in combination with oxygen-transparent,
where the altered window is almost always the topmost window and the blur
texture cache of the windows underneath are unchanged.
For the case of fully opaque windows the behaviour of addLayerRepaint
and addWorkspaceRepaint should be same.
REVIEW: 103906
Most effects would not compile anymopre as they are not adjusted
to changes in the effect system (e.g. change to slots).
Also we have enough proper effects to no longer need some demo or
howto effects.
REVIEW: 103744
The effect did not check whether the ShaderManager is valid causing
a null pointer access when trying to use the shader.
Additionally this change moves the Shader init into the close window
slot as close window referrenced windows without checking whether the
effect would work. If the effect would not work each closed window
would be referrenced without any chance to being unreffed again as this
code is in a block checking whether the effect is valid.
BUG: 291390
FIXED-IN: 4.8.0
This is a condensed version of Martin's patch that fixes a high cpu
usage in KWin and X. It seems to be due to a window being created and
deleted at almost the same time, such that the fade effect never quits.
The bug was reliably reproducable with starting Amarok.
CCBUG: 290025
CCBUG: 288948
Too many crash reports in the fglrx driver when using ARB shaders.
It's a pity to disable functionality for all fglrx users, but it's
better than crash reports.
Blur effect can still be enabled manually and Lanczos can still be
enabled through the environment variable.
REVIEW: 103556
CCBUG: 270818
CCBUG: 286795
also
- replace QHash::operator[]
- replace double by float (-> ARM, and we don't need that precision)
- weaken some value checks ("== 1.0f")
- fix last paint of hiding windows (w->addRepaintFull() trap)
REVIEW: 103404
Finally it is possible :-) If it causes an impact on performance
during the release candidates I'm going to revert.
REVIEW: 103375
BUG: 255106
FIXED-IN: 4.8.0
Make use of new extension of protocol for magic number -1.
If offset is -1 KWin has to decide the offset. This fixes all the
incorrect animations and allows us to perform clipping again by
filtering out the window quads which should not be visible.
Additionally the effect now sanitizes the offset. That is for e.g.
Yakuake setting an offset of 0, but there is a strut on the top
corner causing Yakuake not to appear on 0, but with an offset of
the strut. Such cases are now considered as well and the animation
is fixed.
REVIEW: 103367
BUG: 287602
CCBUG: 261159
CCBUG: 278760
FIXED-IN: 4.8.0
The windows, that are considered to be always on top and that are on
all desktops, should also be always painted on top of everything while
switching the desktop.
This fixes graphical glitches that appear next to the borders of plasma
tooltips. Additionally I added a variable that forces the effect to
drop the cache, which might be useful in the future to fix bugs.
This should fix 2 issues with the blur effect:
- It is now sufficient to have a damaged EXPANDED blurArea to trigger
an update of the caching texture.
- No glitches in cases where the taskbarthumbnail effect paints a
thumbnail of a blurred window.
CCBUG: 288568
* BoxSwitch users are migrated to new QML TabBox thumbnails layout
* Thumbnail layout is new default (as before was BoxSwitch)
* Removed obsoleted settings from TabBox config
BUG: 283481
it's even worse, since it interferes with generally upscaled windows
(keeps them big, applies false transition and causes a final snapback)
and windata->highlight doesn't end at zero, so the entire screen is
still a little scaled when the effect ends (and snaps down afterwards)
now it snaps down when starting the leave what is better in general
and the only usable solution for upscaled windows.
some day presentwindows might be derived from the yet-to-add
animationeffect class ;-)
This patch introduces some kind of damage propagation. In the old version of the blur effect
we had to repaint the whole window if sth behind the blurred area was damaged. The new texture
cache, which was introduced by the last patch, gives us the opportunity to only update parts of
blurred background texture. This means that the damaged area can only propagate with the speed
of the blurring radius per window layer.
REVIEW: 102665
This caused situations in which the shader was pushed but never
popped from the stack as for the latter case there was a check
whether the effect is active.
BUG: 280455
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
This is actually a bloody hack by forcing the screen to be
repainted in each frame. This needs to be fixed in a different
way or we at least have to turn blur off by default for GLES in
the next release.
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.
Due to changes in build system we have always either OpenGL or OpenGL ES.
This allows to remove the KWIN_HAVE_OPENGL_COMPOSITING define. In the
effects the define is kept as KWIN_HAVE_OPENGL which can be used in
future to build also an XRender only effect system.
BUG: 262543
pint desktop as background when including desktop in switcher
BUG: 262137
zoom windows as hover/selection indicaton (1/8 of the screen or 105%)
BUG: 215348
CCBUG: 175521
no closer on "show desktop" desktop
show closer immediately but have it disabled for a short time to allow the user realize it
REVIEW: 101318
If we have OpenGL ES but not OpenGL the KWIN_HAVE_OPENGL is set
causing the first compile pass to fail as it tries to build
against OpenGL. As a solution the first pass links against
OpenGL ES if OpenGL is not found.
This means both kwin and kwin_gles are built against GLES.
Nuno has to decide whether the new option will become default or not, for now it is disabled by default.
You can enable it in effects kcm, now Login effect has a configuration dialog.
It does not (yet) however check for non-fullscreen effects, so they might look weird when this is enabled.
REVIEW: 101812
CCMAIL: nuno@oxygen-icons.org
Reflection in a vertical multiscreen setup are kind of broken without
PaintClipper. But we have to ask ourselfe whether CoverSwitch in a
vertical multi screen setup makes sense and whether it's useful to
have reflections in such a setup.
Horizontal multiscreen setup works fine (also with reflections).
We have to set the bit depth of the XPixmap to 32 in order to get
an alpha channel and we have to render the grabbed image using
composition mode Source in order to just copy all pixels to the
destination pixmap.
BUG: 276719
FIXED-IN: 4.7.0
Since the funtionality of TopMenu did no longer work in KDE4 this feature was
removed from Workspace. Every reference to it was removed as well as commentaries
and documentation.
REVIEW: 101485
The uniforms textureWidth and textureHeight were only needed for
normal windows. For everything else it was just 1.0/1.0, that is
normalized.
The makeArrays method is changed to produce normalized texcoords
obsoleting the need for these uniforms. So two uniforms less, one
calculation in vertex shaders less and many many lines of code
removed.
At the same time makeArrays is also adjusted to take care of
yInverted of the texture, which is needed as we no longer can use
the enableUnnormalizedTexCoords which did the yInverted transformation.
REVIEW: 101646
Actually it's more a hack and should be addressed in the next
release cycle by allowing effects to modify the scene's blend
equation.
BUG: 274424
FIXED-IN: 4.7.0
For what reason ever motion manager thinks that windows are not
moving during the start animation (but are during the stop animation).
So we also have to look on the timeline to decide whether we should
disable lanczos filter on the windows.
Now wonder the animation was stuttering.
BUG: 274292
FIXED-IN: 4.7.0
Due to changes in the blur effect, the EffectFrame was flickering
with GLES. This can be worked around by doing full repaints whenever
a window is damagded while boxswitch is active with GLES. The problem
only occurs with the GLES backend due to the way how the buffers are
swapped.
BUG: 272688
With raster a QPixmap is no longer a XPixmap which fails all code
which assumes that an QPixmap is an XPixmap. Depending on were in
the codebase we either convert such pixmaps to images (OpenGL) or
create a XPixmap and use QPixmap::fromX11Pixmap to get a "real"
pixmap.
It is possible that there are more code pathes were we would need
a XPixmap. Currently tested is basic functionality of no-compositing,
XRender compositing, OpenGl/GLX and OpenGL ES/EGL compositing.
For OpenGL compositing raster might result in performance improvements,
for XRender it is possible that there are regressions when using raster.
By default KWin uses whatever is the default of the system, so we just
no longer enforce native.
Of course it is a bad idea to use graphicssystem OpenGL. As that
is broken anyways in Qt, we do not check for it.
Many thanks to Philipp Knechtges for bringing up the issue, convincing
me that we need it and providing most of the patch.
REVIEW: 101132
CCMAIL: Philipp.Knechtges@rwth-aachen.de
The new build option restricts the building of effects to those
useable for Plasma Active:
* blur
* dialogparent
* fade
* login
* outline
* presentwindows
* slidingpopups
* taskbarthumbnails
* screenshot
Additionally all effect KCMs are excluded from building in the
assumption that when building with this option, KWIN_BUILD_KCMS
is turned off.
CCMAIL: sebas@kde.org
Optimize the region of the screen that's painted in each frame,
and paint the windows top-to-bottom when the damaged region doesn't
intersect any blurred areas.
This fixes most of the rendering issues with cube in multi
screen setups and GLSL backend. For cylinder and sphere the
rendering of areas between screen is currently disabled if
using the GLSL backend. It needs adjustments to use another
vertex shader. Not sure if it is worth the effort.
also rewrite of the regular grid assignment - was
a) a suboptimal implementation
b) required because otherwise broken in desktopgrid proxy mode (which btw. polluted the effect through QHash::operator[])
BUG:262485
Warnings were:
glide.h:74:16: warning: possible problem detected in invocation of delete operator:
glide.h:74:16: warning: invalid use of incomplete type 'struct QTimeLine'
glide.h:28:7: warning: forward declaration of 'struct QTimeLine'
glide.h:74:16: note: neither the destructor nor the class-specific operator delete will be called, even if they are declared when the class is defined.
By making Dashboard Effect a fullscreen effect the blurring got
accidentially broken (blur ignores fullscreen effects). Reenabling
by setting the force blur role on the dashboard window(s).
Reapplied commit 629e17d18526ccfae3d3579066e8be927a92437d from KDE/4.6.
CCBUG: 259797
As this area was not repainted it caused visual garbage during
animationgs. Most visible with yakuake and a panel at the top.
Offset in that case is the upper screenedge while yakuake is
positioned below the panel. The area of the panel did not get
repainted causing the garbage.
CCBUG: 264765
The not initialized boolean value seemed to have evaluated to true
and causing the animation to stop and therefore the darkening not
to apply.
Giving a default value to the EffectWindow pointer doesn't hurt either.
Patch does not apply to 4.6 branch, because of that only in master.
BUG: 264552
FIXED-IN: 4.7.0
The branch contains the first step in reworking the kwineffects
library. This includes:
* replacing virtuals by signals and slots
* dropping some unused methods
* remove KWin::TimeLine
More to come.
Conflicts:
kwin/workspace.cpp
The KWin::TimeLine class was only a small wrapper around QTimeLine
without adding anything to QTimeLine what is not present in QTimeLine.
The initial idea was to make it possible to provide more curve shapes.
This is now obsoleted by Qt shipping more useful curves with QTimeLine.
So let's clean up a little bit and use QTimeLine directly instead of
the small wrapper.
All effects are adjusted to use QTimeLine directly.
First a signal is emitted when the user starts a move/resize operation.
During the move/resize operation each geometry change emits an update signal.
Last but not least a finish signal is emitted.
This eliminates the specific method for geometry updates in drawbound resize
mode.
The signal includes the state for horizontal and vertical maximize state.
It would be better to use the enum fro, KDecorationDefines but we don't want
to depend on decorations library.
Wobbly windows is adjusted to use this new signal - it is the only effect
interested in maximize state change.
This needs to be improved in core. Currently ClientGroup does not yet
emit signals, as it would be difficult to connect them. Nevertheless
the effects dependency should be removed.
EffectsHandlerImpl just forwards the signals from TabBox. In order
to have a valid pointer to the TabBox, the TabBox is now initialized
before compositing in Workspace.
QMatrix4x4 accepts data in row-major order, but returns them in
column-major order, which is not documented and because of that
I expected them to be in row-major order.
This commit fixes it and rewrites the shaders to apply the matrix
multiplications in the right order.
REVIEW: 100759
1. The I18N_ARGUMENT_MISSING that appears when moving or resizing one
window. The problem happens because when declaring the variables
myResizeString, myCoordString[0] and myCoordString_[1] i18nc tries to
replace %1, %2, %3, and %4, but those arguments are not passed here.
Using #define we avoid the argument passsage.
2. Replace QString::arg() with direct formating, which is better for
performance.
I know we should avoid #define but in this case I think it is the best
option. If anyone has a better alternative feel free to change this
commit.
EffectsHandlerImpl connects to the Workspace signal clientActivated.
The emitting of the signal is slightly moved from before the activation logic
to after the activation logic. This might change behavior in the scripting
component, but the previous code looked wrong.
Client and Unmanaged use a signal to notify that they are about to be closed.
The EffectsHandlerImpl is connected to those signals and emits the appropriate
windowClosed signal to which the effects are connected.
All previously existing windowAdded methods are renamed to slotWindowAdded.
EffectsHandlerImpl is connected to Workspace's clientAdded signal, which is
emitted a little bit earlier than the previous direct method call. This might
change behavior.
Another signal is added to Workspace to signal that an unmanaged is added.
The first signal used between EffectsHandler and Effects.
The signal is actually emitted by the EffectsHandlerImpl and only
the interested effects connect to this signal.
EffectsHandlerImpl itself is also notified by a signal from Workspace,
allowing to remove one of the many if (effects) checks.
Since the EffectFrames have been moved into KWin core nothing in the
Effects lib actually used Plasma. The only remaining method is moved
to core as it's not used in the Effects. The Effects itself still
link against Plasma, so nothing changes for them.
The Plasma includes in the kwineffects header seemed to pull in
quite some additional headers, so the includes in some effects have
to be adjusted (most often KConfigGroup). This should speed up the
compilation of the library and the effects.