Commit graph

9730 commits

Author SHA1 Message Date
Martin Gräßlin
85510b91aa Use KConfigXT in ThumbnailAside effect
Thanks to Andrea Scarpino for providing the patch.

REVIEW: 106436
2012-09-19 10:24:04 +02:00
Martin Gräßlin
bd91fb10d7 Use KConfigXT in WindowGeometry
Thanks to Andrea Scarpino for providing the patch.

REVIEW: 106413
2012-09-19 10:17:17 +02:00
Martin Gräßlin
9ac20a382d Use KConfigXT in MagicLamp effect
Thanks to Andrea Scarpino for providing the patch

REVIEW: 106412
2012-09-19 09:29:27 +02:00
Martin Gräßlin
8ad02b5582 Use KConfigXT in Dashboard Effect
Thanks to Andrea Scarpino for providing the patch.

REVIEW: 106390
2012-09-19 09:21:15 +02:00
Martin Gräßlin
914729324c Use KConfigXT in Login Effect
Thanks to Andrea Scarpino for providing the patch.

REVIEW: 106387
2012-09-19 09:01:59 +02:00
Script Kiddy
203a9c1838 SVN_SILENT made messages (.desktop file) 2012-09-19 01:16:25 +02:00
Script Kiddy
31464244e1 SVN_SILENT made messages (.desktop file) 2012-09-18 19:14:07 +02:00
Martin Gräßlin
22dd2ca2c9 Merge branch 'KDE/4.9'
Conflicts:
	plasma/generic/scriptengines/python/plasma_importer.py
2012-09-16 21:34:04 +02:00
Martin Gräßlin
967be8b95a Improve performance of Scene::Window
Replace dynamic_casts to check the type for for Toplevel by isFoo()
calls and use static_casts in such blocks.

Furthermore method shape() returns now a constant reference instead of a
copy of the QRegion.

REVIEW: 106364
2012-09-16 21:31:20 +02:00
Martin Gräßlin
5a6d9400b2 Split SceneOpenGL into a concrete SceneOpenGL1 and SceneOpenGL2
SceneOpenGL turns into an abstract class with two concrete subclasses:
* SceneOpenGL1
* SceneOpenGL2

It provides a factory method which first creates either the GLX or EGL
backend which is passed to a static supported() method in the concrete
sub classes. These method can test whether the backend is sufficient to
be used for the OpenGL version in question. E.g. the OpenGL 2 scene
checks whether the context is direct.

The actual rendering is moved into the subclasses with specific OpenGL 1
and OpenGL 2 code. This should make the code more readable and requires
less checks whether a Shader is bound. This is now known through the
Scene: the OpenGL1 scene will never have a shader bound, the OpenGL2 scene
will always have a shader bound.

To make this more reliable the ShaderManager is extended by a disable
method used by SceneOpenGL1 to ensure that the ShaderManager will never
be used. This also obsoletes the need to read the KWin configuration
whether legacy GL is enabled. The check is moved into the supported
method of the OpenGL2 scene.

REVIEW: 106357
2012-09-16 21:28:11 +02:00
Martin Gräßlin
db9368fc26 Merge the code to render Client's and Deleted's decoration in SceneOpenGL
The code was basically copy'n'pasted to handle both Client and Deleted
requiring to cast the Toplevel to both Client and Deleted to test whether
it is one of those.

This is now changed from runtime to compile time polymorphism. A
templated method is used to start the rendering process for the decos.
This on the one hand simplifies the code and on the other does not
require any dynamic casts any more as we use the available check on
Toplevel whether it is a Client or Deleted.
2012-09-16 21:28:06 +02:00
Martin Gräßlin
fe440377bb Split SceneOpenGL::Window into specific classes for OpenGL 1 and 2
The Window implementation performed many checks whether the rendering
uses the OpenGL 1 or OpenGL 2 code path and there were quite a few
cludges around to make this work.

So instead of many if-else blocks the specific code has now been moved
into a specific sub class and calls to pure virtual method in the base
class are used to trigger this behavior. Although that adds some overhead
in a rather hot code path it should be better than the many chained
method calls used before to handle OpenGL 1 and 2.

It also makes the code a little bit more readable as all the complete
OpenGL 1 implementation is now in one block ifdefed for OpenGL ES.
2012-09-16 21:28:06 +02:00
Martin Gräßlin
6152cc4fa5 Split out the windowing system related part of SceneOpenGL
The handling for creating and managing the OpenGL context is
split out of the SceneOpenGL into the abstract OpenGLBackend
and it's two subclasses GlxBackend and EglOnXBackend.

The backends take care of creating the OpenGL context on the
windowing system, e.g. on glx an OpenGL context on the overlay
window is created and in the egl case an EGL context is created.
This means that the SceneOpenGL itself does not have to care
about the specific underlying infrastructure.

Furthermore the backend provides the Textures for the specific
texture from pixmap operations. For that in each of the backend
files an additional subclass of the TexturePrivate is defined.
These subclasses hold the EglImage and GLXPixmap respectively.

The backend is able to create such a private texture and for
that the ctor of the Texture is changed to take the backend as
a parameter and the Scene provides a factory method for
creating Textures. To make this work inside Window the Textures
are now hold as pointers which seems a better choice anyway as
to the member functions pointers are passed.
2012-09-16 21:28:05 +02:00
Casian Andrei
ba4cd78419 CC: Redo init and uninit, try to avoid fatal IO errors
Additional checks for GL errors.
Attempt to fix transparency issues again.
2012-09-16 16:30:35 +03:00
Casian Andrei
8bec3fda71 CC: Fix color correction init signal connections 2012-09-16 14:29:06 +03:00
Casian Andrei
87515dc9a9 Merge remote-tracking branch 'origin/master' into color2
Conflicts:
	kwin/workspace.cpp
2012-09-16 13:42:45 +03:00
Lilian A. Moraru
66f568342a Use KConfigXT in DesktopGrid effect
REVIEW: 106398
2012-09-15 11:24:11 +02:00
Lilian A. Moraru
99fcab5c36 Use KConfigXT in Blur effect
REVIEW: 106400
2012-09-15 11:24:11 +02:00
Lilian A. Moraru
607817eeef Use KConfigXT in FlipSwitch effect
REVIEW: 106401
2012-09-15 11:24:11 +02:00
Giuseppe Calà
500310b0e8 Use KConfigXT in LookingGlass Effect
REVIEW: 106406
2012-09-15 11:24:11 +02:00
Alexander Jones
f1df9ee2f0 Use KConfigXT in Zoom Effect
REVIEW: 106402
2012-09-14 10:39:28 +02:00
Alexander Jones
f581e22e38 Use KConfigXT in Resize Effect
REVIEW: 106397
2012-09-14 10:39:28 +02:00
Bernhard Friedreich
968d10c14a Use KConfigXT in Wobblywindows effect
REVIEW: 106389
2012-09-14 10:39:28 +02:00
Dario Cambié
581f9b9394 Use KConfigXT in Glide Effect
REVIEW: 106392
2012-09-14 10:39:28 +02:00
Dirk Sarpe
31fa04d653 Use KConfigXT in PresentWindows Effect
REVIEW: 106407
2012-09-14 10:39:28 +02:00
Giuseppe Calà
ab305a1aba Use KConfigXT in MouseMark Effect
REVIEW: 106414
2012-09-14 10:39:28 +02:00
Giuseppe Calà
65bb42a801 Use KConfigXT in ShowFps Effect
REVIEW: 106415
2012-09-14 10:39:27 +02:00
Giuseppe Calà
6ac2014533 Use KConfigXT in TrackMouse Effect
REVIEW: 106416
2012-09-14 10:39:27 +02:00
Salva Ardid
b8630d19ec Use KConfigXT in DimInactive Effect
REVIEW: 106422
2012-09-14 10:39:27 +02:00
Francesco Cecconi
062f5ff66b Use KConfigXT in Cube/CubeSlide effect
REVIEW: 106403
2012-09-14 10:39:27 +02:00
Fredrik Höglund
f21ef431c4 kwin: Don't enable/disable texturing when using shaders
This state has no affect on the programmable pipeline.
2012-09-13 22:54:09 +02:00
Fredrik Höglund
faf27f481e kwin: Don't hold an X server grab while painting the screen
According to Pierre-Loup Griffais (Plagman on IRC) this is causing
choppy VDPAU video playback when compositing is enabled.

Removing these calls doesn't seem to cause any regressions, and the
commit that added them doesn't give a reason.  So let's just get rid
of them for now.

This commit should be cherry-picked to the stable branch if no one
else notices any regressions.

CCMAIL: kwin@kde.org
2012-09-12 23:50:03 +02:00
Script Kiddy
1c91a1be97 SVN_SILENT made messages (.desktop file) 2012-09-09 10:29:47 +02:00
Martin Gräßlin
d5e8b9398d Merge branch 'KDE/4.9' 2012-09-08 19:48:13 +02:00
Martin Gräßlin
4240494130 Initialize m_vBlankTime in Options
Thanks to Albert for spotting this issue.

BUG: 306457
FIXED-IN: 4.9.2
2012-09-08 19:47:03 +02:00
Martin Gräßlin
167b550280 Drop supperfluous and wrong inactive check in translucency effect
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
2012-09-08 19:43:01 +02:00
Martin Gräßlin
62d5e8124c Toplevel::windowType becomes a pure virtual function
The method windowType needs actually two implementations:
* one for Clients
* one for Unmanaged

as for Clients also the window rules are checked and hacks are applied
which is both not needed for Unmanaged windows.

To have the Client specific behavior in windowType the function used to
perform two dynamic_casts which made this method one of the most
expensive during compositing, e.g. for ~1000 frames
* called ~43000 times
* ~85000 dynamic casts
* incl. cost of method: 0.24
* self cost of method: 0.05
* incl. cost of the casts: 0.12

After the change to remove the dynamic casts we have for ~1500 frames
in Client::windowType:
* called ~31000 times
* incl. cost of 0.06
* self cost of 0.02

Calls on Unmanaged and Deleted are so low that we do not need to consider
them.

BUG: 306384
FIXED-IN: 4.10
REVIEW: 106349
2012-09-07 08:03:05 +02:00
Martin Gräßlin
3aee94d798 Merge branch 'KDE/4.9'
Conflicts:
	ksysguard/gui/ksysguard.desktop
	kwin/effects/translucency/translucency.cpp
2012-09-07 07:59:10 +02:00
Martin Gräßlin
633694b7b4 Drop openoffice.org 1.x related hack for windowType detection
The oo.o related hack can be removed for several reasons:
1. The dialog in question from bug 66065 is nowadays a utility
2. The window class name changed to libreoffice
3. It's not the task of the window manager to workaround bugs in Clients

CCBUG: 66065
BUG: 306383
FIXED-IN: 4.9.2
2012-09-07 07:53:11 +02:00
Martin Gräßlin
a38e87afea Drop hack for NET::Menu means NET::TopMenu
KDE has not supported the TopMenu in any 4.x release and most of the
TopMenu related code has already been dropped from KWin. It is extremely
unlikely that there is still a window around which would need this
specific check. And even if there were such a check it would be broken.

So let's just remove this hack which means less checks in one of the
hottest code pathes of KWin.

CCBUG: 306383
2012-09-07 07:52:28 +02:00
Martin Gräßlin
2cf35aa21a Remove animations from Translucency effect
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
2012-09-07 07:39:50 +02:00
Martin Gräßlin
bf0c69100a Improve the various checks in Translucency Effect
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.
2012-09-07 07:39:32 +02:00
Martin Gräßlin
f125dbd3d6 Translucency Effect supports isActive hook
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
2012-09-07 07:39:32 +02:00
Martin Gräßlin
8bfffed27d Deprecate KDecoration's AbilityColor
Nobody is interested in whether the Abilities are supported.
There is one method in KWin core checking for the colors
supported by the currently loaded decoration:
Workspace::decorationSupportedColors

This method is not called from anywhere inside KWin, but is
part of the D-Bus interface, though nobody in KDE's repository
is calling it [1].

As it is part of public API the Abilities are only deprecated
and scheduled for removal with the next big break.

[1] http://lxr.kde.org/search?filestring=&string=decorationSupportedColors

REVIEW: 105785
2012-09-07 07:33:39 +02:00
Martin Gräßlin
2764565f9d Allow Scripts to add menus to the UserActionsMenu
A script can register a callback through registerUserActionsMenu to be
informed when the UserActionsMenu is about to be shown. This menu calls
the Scripting component to gather actions to add to a Scripts submenu.

The Scripting component now asks all scripts for the actions, which will
invoke the registered callbacks with the Client for which the menu is to
be shown as argument.

The callback is supposed to return a JSON structure describing how the
menu should look like. The returned object can either be a menu item or
a complete menu. If multiple menu items or menus are supposed to be added
by the script it should just register multiple callbacks.

The structure for an item looks like the following:
{
    text: "My caption",
    checkable: true,
    checked: false,
    triggered: function (action) {
       print("The triggered action as parameter");
    }
}

The structure for a complete menu looks quite similar:
{
    text: "My menu caption",
    items: [
         {...}, {...} // items as described above
    ]
}

The C++ part of the script parses the returned object and generates
either QAction or QMenu from it. All objects become children of the
scripts QMenu provided by the UserActionsMenu.

Before the menu is shown again the existing menu is deleted to ensure
that no outdated values from no longer existing scripts are around. This
means the scripts are queried each time the menu is shown.

FEATURE: 303756
FIXED-IN: 4.10
REVIEW: 106285
2012-09-07 07:32:00 +02:00
Martin Gräßlin
9820e4daf6 Introduce dedicated suspend and resume methods on Compositing interface
The new methods suspend and resume are meant to provide a better way to
influence the current compositing state than toggleCompositing. In
addition an overload setCompositing(bool) is added. The resume method is
implemented in a way that it can be used to try to start the compositor
again in case it failed.

Internally the method suspendResume is dropped as it does the same as
setCompositing just with inverted binary logic and worse name. The
compositingToggled signal is now emitted from within setup and finish to
ensure that especially the compositingToggled(true) signal is only
emitted if the Compositor could start.

Also the updateCompositingBlocking is adjusted to use the new dedicated
suspend and resume methods instead of the toggle method.

REVIEW: 106273
2012-09-06 09:59:20 +02:00
Martin Gräßlin
35237aadcb Splitting up of KWin's global D-Bus interface
Two new interfaces are introduced:
* org.kde.kwin.Compositing
* org.kde.kwin.Effects

The Compositing interface is generated from scriptable elements on the
KWin::Compositor class and the Compositor is exported as /Compositor.
It provides the general Compositing related D-Bus methods like whether
the compositor is active and toggling and so on.

The Effects interface is generated from scriptable elements on the
KWin::EffectsHandlerImpl class and the instance is exported as /Effects.
It provides all the effects related D-Bus methods like loading an effect
or the list of all effects.

This removes the need to have all these methods provided on the global
org.kde.KWin interface. For backwards compatibility they are kept, but
no longer provided by the Workspace class. Instead a new DBusInterface
is generated which wrapps the calls and delegates it to one of our three
related Singleton objects:
* Workspace
* Compositor
* EffectsHandlerImpl
2012-09-06 09:58:12 +02:00
Martin Gräßlin
ebbfc26452 Remove superfluous Compositor checks in events.cpp
compositing() ensures that m_compositor is not null.

REVIEW: 106255
2012-09-06 09:55:22 +02:00
Martin Gräßlin
7497ef9148 Make the Compositor a proper Singleton
The Compositor class actually behaves like a Singleton so it should be
one. Therefore four static methods are added:
* self() to access the Singleton
* createCompositor() to be used by Workspace to create the instance
* isCreated() to have a simple check whether the Singleton is already
  created
* compositing() as a shortcut to test whether the compositor has been
  created and is active

The isCreated() check is actually required as especially Clients might
be created and trying to access the Compositor before it is setup.
2012-09-06 09:55:22 +02:00
Martin Gräßlin
ed3effa2d3 Ensure that the start Client to build up the ClientModel is in the Focus Chain
If the start Client is not part of the focus chain the call to
nextClientFocusChain() cannot return the Client again. So the loop break
condition is never reached and as the focus chain is not empty the call
always returns a not null Client which means KWin is caught in an endless
loop.

This change checks that the starting Client is in the focus chain and if
not the first Client of the focus chain is used.

BUG: 306260
BUG: 306275
FIXED-IN: 4.9.2
2012-09-05 20:55:07 +02:00