Commit graph

14294 commits

Author SHA1 Message Date
Martin Gräßlin
ee89f3f34f Add a very basic x11/standalone platform plugin
The plugin does not much. It's the most basic plugin we can have to
be loaded from kwin_x11.

Unlike the wayland platform plugins it gets installed to:
org.kde.kwin.platforms
2016-04-12 08:04:16 +02:00
Martin Gräßlin
33dffc0fd7 Move the x11 plugin sources into a x11/windowed directory
Preparation step for having two x11 backends: the windowed for Wayland
and a standalone for kwin_x11.
2016-04-12 08:04:16 +02:00
Martin Gräßlin
2bff90976e Move backends/ to plugins/platforms/
Summary:
Source code reorganization:
The base class AbstractBackend got renamed to Platform, thus the
"backends" are "platforms" now. As they are plugins they should go
together with other KWin plugins which are nowadays in the folder
plugins.

So new location is plugins/platforms/

Reviewers: #plasma, sebas

Subscribers: plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1353
2016-04-12 08:01:27 +02:00
l10n daemon script
390bad1ed8 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2016-04-11 10:23:59 +00:00
l10n daemon script
240be60787 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2016-04-10 09:41:00 +00:00
l10n daemon script
58e2bca56d SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2016-04-09 09:58:54 +00:00
l10n daemon script
bfda50ab68 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2016-04-08 09:41:47 +00:00
Ivan Čukić
1fef4760bf Testing whether m_lastCreatedSettings is not null before calling its method
Summary:
It looks like something was forgotten here - there is
a completely empty body for an if statement that checks
whether the pointer is null.
So this might not be the desired way to fix this.
Should m_lastCreatedSettings be instantiated instead?

Reviewers: graesslin

Reviewed By: graesslin

Subscribers: plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1348
2016-04-08 09:26:48 +02:00
Ivan Čukić
f06dff3390 Checking whether the m_textTexture is not null before dereferencing it
Summary:
It can be null even after updateTextTexture() if there is not text
to generate the texture from:

        if (m_effectFrame->text().isEmpty())
            return;

Reviewers: graesslin

Reviewed By: graesslin

Subscribers: plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1347
2016-04-08 09:26:17 +02:00
Ivan Čukić
2c95a4e6b9 Checking whether m_topLevel is not null before getting its property
Summary:
From the rest of this method, it is obvious that m_topLevel can
be null in any part of the method - we are checking against it
being null in a few places in the method - both before and after
the affending lines.

Now, there is one place where the check is not applied, and
potentially calls ->window() on the null pointer.

p.s. If there are more places where kwin does clear_or_something(); return;
it could benefit from introducing on_scope_exit and similar tricks - see
Alexandrescu's 'Declarative control flow' presentation.

Reviewers: graesslin

Reviewed By: graesslin

Subscribers: plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1346
2016-04-08 09:25:28 +02:00
Martin Gräßlin
d31e9e88b4 Rename abstract_backend.(h|cpp) to platform.(h|cpp)
Reviewers: #plasma

Subscribers: plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1340
2016-04-07 16:18:12 +02:00
Martin Gräßlin
10632f09ca Rename AbstractBackend to Platform 2016-04-07 16:18:12 +02:00
Martin Gräßlin
1d4cd55b9d Drop backend() -> AbstractBackend* from WaylandServer
No longer needed, provided through Application::platform().

Reviewers: #plasma

Subscribers: plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1339
2016-04-07 15:00:11 +02:00
Martin Gräßlin
146af48f22 waylandServer()->backend() replaced by kwinApp()->platform() 2016-04-07 15:00:11 +02:00
l10n daemon script
58b59d3e20 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2016-04-07 10:11:11 +00:00
Martin Gräßlin
7996d954c5 Provide the platform() -> AbstractBackend* in KWin::Application
Summary:
This is the first change in a refactoring series. The aim is to:
* rename AbstractBackend to Platform
* move backends/ to plugins/platforms/
* don't bind platforms to Wayland only
* provide a platform plugin for "normal" X11
* share more code between X11 and Wayland

This change moves the platform/backend from waylandServer to Application.
The init of the plugin happens directly in the Application from the
KPluginMetaData. There is no need to externally init it and set the
parent.

WaylandServer::backend() currently just delegates to
kwinApp()->platform(), the idea is to drop this method completely.

The test infrastructure is also adjusted to this change.

Test Plan: kwin_wayland still works, all tests pass

Reviewers: #plasma, sebas

Subscribers: plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1331
2016-04-07 08:00:12 +02:00
Martin Gräßlin
8d851a0252 Announce support for subcompositor protocol
Reviewers: #plasma

Subscribers: plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1282

BUG: 361403
2016-04-07 07:59:28 +02:00
Martin Gräßlin
54be622958 Render sub-surfaces in OpenGL compositor
This is more a hack than an actual implementation. It just renders
all sub-surfaces after the main window got rendered. But it does not:
* use window quads (e.g. splitting not supported)
* is not combined with rendering of the main surface
* does not support previous pixmap

Still it renders, which is the main goal at the moment.
2016-04-07 07:59:28 +02:00
Martin Gräßlin
1a166f36e2 Properly update EGL Texture for sub-surface buffers
We need to use the tracked damage instead of Toplevel's damage.
2016-04-07 07:59:28 +02:00
Martin Gräßlin
baca72a9c4 Create sub OpenGLWindowPixmap for sub-surfaces 2016-04-07 07:59:28 +02:00
Martin Gräßlin
976981349b Render child WindowPixmap in SceneQPainter
The rendering is done in a recursive way. For updating the buffer an
important change is done: the buffer is copied into a new QImage on each
change and the differences are no longer painted. This is due to damage
region in a sub-surface tree being basically unknown.
2016-04-07 07:59:28 +02:00
Martin Gräßlin
8f9c6ce92f Use new surface() method in WindowPixmap::updateBuffer 2016-04-07 07:59:28 +02:00
Martin Gräßlin
354defe499 Add a SurfaceInterface *WindowPixmap::surface() const
Convenience method to get the Surface for a WindowPixmap which is either
the toplevel's surface or a SubSurface.
2016-04-07 07:59:28 +02:00
Martin Gräßlin
ebbb82906d Add support for SubSurface to WindowPixmap
This change introduces a tree for WindowPixmap. A WindowPixmap can
have a parent WindowPixmap and children. Each child represents a
SubSurface and references the buffer of that SubSurface.

The tree of WindowPixmaps is updated each time updateBuffer is called.
If there are new SubSurfaces new WindowPixmaps are created, for removed
SubSurfaces the old WindowPixmap gets removed. Also the ordering is
updated to reflect the current state.

This is currently rather expensive and should be changed to only rebuild
the tree if it actually changed.
2016-04-07 07:59:28 +02:00
Martin Gräßlin
952122dbe1 Make Scene::Window::window() and WindowPixmap::toplevel() const
No need to have them not const.
2016-04-07 07:59:28 +02:00
Martin Gräßlin
53b35e60e3 Consider change in sub-surface tree as a full damage
A sub-surface changed in a way which needs a repaint. Of course only
if the surface is mapped.
2016-04-07 07:59:28 +02:00
Thomas Pfeiffer
d847ddf841 Fix search keywords between Desktop Effects KCM and Compositing KCM
Searching for "animation speed" now points to the Compositing KCM, where
the animation speed setting is, instead of the Destkop Effects KCM,
where it was before.
Same for compositing, OpenGL, XRender and video settings

BUG: 361436
FIXED-IN: 5.7
Differential Revision: https://phabricator.kde.org/D1326
2016-04-06 19:24:22 +02:00
Martin Gräßlin
7437c3836f [autotest] Validate set options in PointerInputTest::testModifierClickUnrestrictedMove
Just to be sure, the code did what we wanted it to do.
2016-04-06 17:25:24 +02:00
l10n daemon script
9331996a67 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2016-04-05 10:31:41 +00:00
Martin Gräßlin
1ed6f8ba63 Merge branch 'Plasma/5.6' 2016-04-05 10:36:15 +02:00
Martin Gräßlin
09dd9153d8 [autotests] Use DMZ-White as cursor theme
On build.kde.org we cannot use the breeze cursor theme. Instead we have
DMZ-White (debian package dmz-cursor-theme).

This change adjusts the PointerInput test to enforce DMZ-White and uses
SizeAllCursor instead of OpenHandCursor as that one seems to be missing
in that theme.

Hopefully with these changes the test starts to pass on build.kde.org.
2016-04-05 08:36:53 +02:00
Martin Gräßlin
e2328d4299 Use a QTabWidget for the different modes in DebugConsole
Summary: Replaces the custom logic to switch between the three modes by tabs.

Reviewers: #plasma, mart

Reviewed By: mart

Subscribers: mart, plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1271
2016-04-01 10:04:24 +02:00
Martin Gräßlin
90b9b08d7a Use a QTabWidget for the different modes in DebugConsole
Summary: Replaces the custom logic to switch between the three modes by tabs.

Reviewers: #plasma

Subscribers: plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1271
2016-03-31 09:21:18 +02:00
Martin Gräßlin
3edf5a7b0a Input events mode in debug console
Summary: Inspired by xev a new tool which prints out all input events.

Reviewers: #plasma

Subscribers: plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1264
2016-03-30 16:24:55 +02:00
Jonathan Riddell
95c8af33b5 Update version number for 5.6.1
GIT_SILENT
2016-03-29 14:44:59 +01:00
Martin Gräßlin
c1b709b250 [autotests] Fix heap-use-after-free
Thanks build.kde.org!
2016-03-29 11:08:04 +02:00
l10n daemon script
e3272fea36 SVN_SILENT made messages (.desktop file) 2016-03-28 13:15:07 +00:00
Sebastian Kügler
5fecaf3fe7 Revert "desktop grid: zoom hovered window"
Summary:
This reverts commit 14d1fdf63f.

The zoom effect is definitely the wrong way, it's broken (can be
triggered without moving the mouse, expands windows outside of their
allotted area (looks like broken sizing/placement), isn't animated so
feels very choppy, isn't using well-known highlight semantics), the
result is that it feels unnatural and jarring. To be honest, when I
looked at it, I was looking for a bug in the code, e.g. margins not
being taken into account. It didn't come up in me that this could be
wanted behavior, until I read the code.

As to the original commit message: The highlight is useless for this
case, as any window can be dragged or activated, highlighted or not.

What *could* work is to somehow intensify the colors, but that again
would have to be animated, and play well with the ongoing desktop-zoom
animation, the mouse pointer location changes relative to the window, so
it's really complex to get right. I thought of this for a while, I don't
think the complexity that has to be implemented is worth the benefit,
because, what does highlighted really mean here? "window is under the
mouse" isn't a useful metric, as we don't know if the user is changing
desktops or rearranging windows, and "window under mouse" changes
depending on the zoom level, "window can be dragged or activated" also
isn't a useful metric, as I can do that with any window, anyway.

Test Plan: Tested with patch applied, desktopgrid windows don't jump around anymore.

Reviewers: graesslin

Reviewed By: graesslin

Subscribers: plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1209
2016-03-24 16:06:41 +01:00
Sebastian Kügler
746fc49bb6 Revert "desktop grid: zoom hovered window"
Summary:
This reverts commit 14d1fdf63f.

The zoom effect is definitely the wrong way, it's broken (can be
triggered without moving the mouse, expands windows outside of their
allotted area (looks like broken sizing/placement), isn't animated so
feels very choppy, isn't using well-known highlight semantics), the
result is that it feels unnatural and jarring. To be honest, when I
looked at it, I was looking for a bug in the code, e.g. margins not
being taken into account. It didn't come up in me that this could be
wanted behavior, until I read the code.

As to the original commit message: The highlight is useless for this
case, as any window can be dragged or activated, highlighted or not.

What *could* work is to somehow intensify the colors, but that again
would have to be animated, and play well with the ongoing desktop-zoom
animation, the mouse pointer location changes relative to the window, so
it's really complex to get right. I thought of this for a while, I don't
think the complexity that has to be implemented is worth the benefit,
because, what does highlighted really mean here? "window is under the
mouse" isn't a useful metric, as we don't know if the user is changing
desktops or rearranging windows, and "window under mouse" changes
depending on the zoom level, "window can be dragged or activated" also
isn't a useful metric, as I can do that with any window, anyway.

Test Plan: Tested with patch applied, desktopgrid windows don't jump around anymore.

Reviewers: graesslin

Reviewed By: graesslin

Subscribers: plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1209
2016-03-24 14:52:03 +01:00
Martin Gräßlin
e62dad48a6 Add a surface tree to DebugConsole
Summary:
While developing support for sub-surfaces it became obvious that there
is a need for visualizing the tree of sub-surfaces.

The surface-tree is a new mode added in the debug console. There are now
two buttons to switch between the default window tree and the surface
tree.

The surface tree is a little bit more basic than the windows tree. The
type of window (whether x11, wayland or internal) is ignored. All windows
build up the top level with the sub surfaces as children.

Each surface is represented by some basic information about it:
* Client (binary path and pid)
* internal surface id

If the surface has a shared memory buffer mapped a scaled down version
is used as the window decoration role.

The model gets reset whenever the tree changes in some way as it's
rather complex to track correctly and well, it's just a debug console.

Currently the tree is not really functional yet as KWin doesn't announce
support for sub-compositor protocol, which is also the reason for lack of
autotests for the model. Will be added once sub-compositor works
properly.

Reviewers: #plasma

Subscribers: plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1205
2016-03-23 15:07:12 +01:00
Marco Martin
a9fad7396e use a global static for animation ids
using stack adresses makes it possible (even tough not frequent)
for two animations (onle just killed, one just created) to have
the same id, causing scripts to be potentially really confused.
this replaces the id with a global counter, and the
"flying tooltips" bug is gone.

REVIEW:127276
BUG:360068
CCBUG:352254
2016-03-23 12:03:31 +01:00
Martin Gräßlin
6e18cae42a Drop xcb-shm usage from QPainterWindowPixmap
Summary:
Before we were able to render Xwayland windows through the Wayland buffer
we used a xcb-shm to map the window data in the QPainter compositor.

As we don't use that any more and QPainter is not available for X11
anyway we can just drop the code.

Reviewers: #plasma

Subscribers: plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1193
2016-03-21 17:13:47 +01:00
Martin Gräßlin
d49189276f Merge branch 'Plasma/5.6' 2016-03-21 16:55:39 +01:00
Martin Gräßlin
23c505d71e Ensure panel, desktop and onscreendisplay windows cannot be moved/resized
Summary:
A user shouldn't be able to manually move/resize a desktop window or
a panel. So far this wasn't ensured.

Reviewers: #plasma

Subscribers: plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1155
2016-03-21 16:44:46 +01:00
Sebastian Kügler
629cc70123 Split drm_backend.{h,cpp} into separate files
Summary:
This changes splits up the monster file containing different types used
in the DRM backend into separate files per class:

- drm_backend.{h,cpp}
- drm_buffer.{h,cpp}
- drm_inputeventfilter.{h,cpp}
- drm_output.{h,cpp}
- drm_pointer.h

No actual code changes other than build fixes.

Clean up headers in the split files.

Test Plan: Builds with GBM enabled

Reviewers: graesslin

Reviewed By: graesslin

Subscribers: plasma-devel

Projects: #plasma

Differential Revision: https://phabricator.kde.org/D1168
2016-03-21 15:11:26 +01:00
Kai Uwe Broulik
376a5a15f1 Merge branch 'Plasma/5.6'
Conflicts:
	CMakeLists.txt
2016-03-21 10:29:58 +01:00
Kai Uwe Broulik
f9da3fb0eb [Window Rules] Fix simple shortcut not being transfered to text field
The dialog only had a "Close" button but the text was only transfered in accepted()

Also fix the position of the QDialogButtonBox which is swapped and so the buttons appear at the top.

BUG: 360521
FIXED-IN: 5.6.1

Differential Revision: https://phabricator.kde.org/D1173
2016-03-21 10:28:44 +01:00
Jonathan Riddell
4a05cc2f54 Update version number for 5.6.0
GIT_SILENT
2016-03-17 09:31:06 +00:00
Martin Gräßlin
6a19f50cac Add a debugging console to KWin
Summary:
The idea behind the debugging console is to have a feature comparable
to xprop and xwininfo just for Wayland. We cannot have command line
utils as that violates the security restrictions, thus it needs to be
exposed directly in KWin.

The debugging console is invoked through DBus:
qdbus org.kde.KWin /KWin showDebugConsole

This opens a window with a tree view. The DebugConsoleModel which is
used by the tree view groups all windows into four categories:
* x11 clients (that is Workspace::clientList() and Workspace::desktopList())
* x11 unmanaged (Workspace::unmanagedList())
* wayland shell clients (WaylandServer::clients())
* wayland internal clients (KWin's own QWindows - WaylandServer::internalClients())

Each window is a child to one of the four categories. Each window itself
has all it's QProperties exposed as children.

This allows to properly inspect KWin's internal knowledge for windows and
should make it easier to investigate problems. E.g. what's a window's
geometry, what's it's window type and so on.

The debugging console is intended as a developer tool and not expected to
be used by users. That's why it's invokation is rather hidden. Due to
the fact that it's internal to KWin it results in:
* no window decoration
* stealing keyboard focus
* no way to resize, close, move from KWin side
* rendered above all other windows

There is a dedicated close button to get rid of it again. While the
console is shown it's hardly possible to interact with the system in
a normal way anymore. This is something which might be improved in
future.

At the moment the model is able to update when windows are added/removed,
but not yet when a property changes. Due to the lack of interaction with
the existing system, that's not a high priority at the moment, but can
be added in future.

Reviewers: #plasma

Differential Revision: https://phabricator.kde.org/D1146
2016-03-16 14:30:19 +01:00
Martin Gräßlin
0b32c127bd Merge branch 'Plasma/5.6' 2016-03-16 14:30:07 +01:00