Commit graph

13265 commits

Author SHA1 Message Date
Martin Gräßlin
1420bb38a9 [wayland] Drop Qt version check from WaylandServer::fakeDummyQtWindowInput
No longer needed as we install keymaps which prevents the crash in
QtWayland this version check worked around.
2015-05-28 10:25:11 +02:00
Martin Gräßlin
3b4c508ee3 [wayland] Pass xkb keymap to Wayland server
When creating a new xkb keymap we need to pass it to the Wayland server's
seat. As the Wayland protocol expects the keymap as a file descriptor, a
temporary file is created, mmapped and the keymap written into it. As
the Wayland protocol doesn't restrict how long the file descriptor needs
to be valid we keep any created temporary file around till the
InputRedirection gets destroyed.
2015-05-28 10:17:41 +02:00
Martin Gräßlin
988ce28943 [wayland] Ensure size is updated before marking window as ready for painting
Fixes regression introduced with 90a6814: we may not queue a signal
taking a pointer to a ShellClient as the ShellClient might be destroyed
before the queued signal is delivered.

The idea for the queued signal was to ensure that the size is set when
windowShown is emitted - this can also be achieved by first updating the
size.
2015-05-28 08:27:34 +02:00
Martin Gräßlin
90a6814513 [wayland] Place ShellClients
When a ShellClient is added and it's not internal, it get placed just
like any other Client. This needs to happen after the initial size is
determined.

Please note: this breaks the positioning of popup windows (e.g. menus)
as they are placed like any other Client. This needs proper popup support
which right now does not yet exist and thus is not much difference to
before.
2015-05-27 14:20:12 +02:00
Martin Gräßlin
1a89fc55b5 Placement fully operates on AbstractClient
Remaining methods had to be adjusted in one go as they called back
into place method.
2015-05-27 14:20:12 +02:00
Martin Gräßlin
f16644ac2e Move maxSize and minSize to AbstractClient
With a default implementation returning either a INT_MAX size or 0.
2015-05-27 14:20:12 +02:00
Martin Gräßlin
ffd6f9ceba Placement::placeUnderMouse operates on AbstractClient 2015-05-27 14:20:12 +02:00
Martin Gräßlin
737ad0b664 Move keepInArea to AbstractClient 2015-05-27 14:20:12 +02:00
Martin Gräßlin
007e1253c6 Add resizeWithChecks to AbstractClient
The virtual method does not take the xcb_gravity_t - that's only added
in a variant in Client.
2015-05-27 14:20:11 +02:00
Martin Gräßlin
670787086b Placement::placeOnScreenDisplay operates on AbstractClient 2015-05-27 10:36:59 +02:00
Martin Gräßlin
aaca122902 Placement::placeAtRandom operates on AbstractClient 2015-05-27 10:34:15 +02:00
Martin Gräßlin
4d077c42b6 Placement::placeSmart operates on AbstractClient 2015-05-27 10:32:42 +02:00
Martin Gräßlin
a261b1c253 Placement::placeCentered operates on AbstractClient 2015-05-27 10:28:23 +02:00
Martin Gräßlin
b971749f1d Placement::placeZeroCornered operates on AbstractClient 2015-05-27 10:25:04 +02:00
Martin Gräßlin
78700e23fd Placement::checkArea operates on AbstractClient 2015-05-27 10:22:43 +02:00
Martin Gräßlin
da2731be51 Move Client::move to AbstractClient and add implementation in ShellClient 2015-05-27 10:16:46 +02:00
Martin Gräßlin
48272a0de8 Ensure Compositor can tear down without a Workspace
It's possible that the Workspace doesn't get created at all (e.g.
Xwayland failed to start). In that case we must ensure to not call into
Workspace calls during tear down.
2015-05-27 09:13:33 +02:00
Martin Gräßlin
604b6d05f5 [wayland] Ensure Compositor is destroyed early enough
If startup fails and there is no Workspace the Compositor was destroyed
as a child of Application with the result of being destroyed after the
Wayland server resulting in a crash.

If the Workspace gets created the Compositor will be destroyed by the
Workspace, so there's no need to destroy it early.
2015-05-27 09:13:33 +02:00
l10n daemon script
d0e5e86a30 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"
2015-05-26 13:53:12 +00:00
Martin Gräßlin
c798977e55 [wayland] Ensure KWin::atoms are destroyed before doing xcb_disconnect
Destroying the Atoms might call into xcb as a request might have to be
discarded. If atoms are destroyed after disconnecting xcb, this'll crash.
2015-05-26 14:26:56 +02:00
Martin Gräßlin
f81655b7f5 [wayland] Ensure our own windows don't have flag Qt::X11BypassWindowManagerHint
The QtWayland QPA plugin does not create windows with
X11BypassWindowManagerHint which means that KWin's internal windows are
not shown at all. Even worse in QtQuick it can result in a freeze due to
blocking wait for a frame rendered which can just never happen.

As windows could be created by e.g. scripts or look and feel packages we
cannot ensure that the flag will never be set in source code.

Thus we use ApplicationWayland::notify to filter for Show events and
check whether the window to be shown is bypassing window manager hits.
If it is, we unset the flag, destroy the window and show a new one.
2015-05-26 13:53:23 +02:00
l10n daemon script
cdf5ef113a 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"
2015-05-23 11:09:17 +00:00
David Edmundson
df1499784f move isFullScreenable to AbstractClient
REVIEW: 123871
2015-05-21 16:40:21 +01:00
Martin Gräßlin
a9f1f3d85e [wayland] Properly handle case that EGL_WAYLAND_Y_INVERTED_WL is not supported
According to spec eglQueryWaylandBufferWL returns EGL_FALSE if
EGL_WAYLAND_Y_INVERTED_WL is not supported and in that case we should
treat it as af the value were set to EGL_TRUE.
2015-05-21 15:49:46 +02:00
Martin Gräßlin
64e01ac2ca [wayland] Use QProcess to start XWayland server
The code didn't use QProcess as in the early days of main_wayland.cpp
Xwayland had to be started before the QGuiApplication was constructed.
As this requirement doesn't exist any more we can use QProcess and
improve the interaction by e.g. provide useful error messages if
Xwayland couldn't be started.
2015-05-21 15:11:11 +02:00
Martin Gräßlin
9954f1167f [wayland] Call pixmapDiscarded when ShellClient's size changes 2015-05-21 13:34:26 +02:00
Martin Gräßlin
20286fa671 Reset not-valid WindowPixmap in pixmapDiscarded
Let's recreate it.
2015-05-21 13:34:26 +02:00
Martin Gräßlin
783afd17b7 [wayland] Delay WaylandServer::shellClientAdded till the Surface is ready for painting
This simplifies the interaction: we know that the Surface is useable if
it got announced to the Workspace.
2015-05-21 13:34:26 +02:00
Martin Gräßlin
aff93b1216 [wayland] ThumbnailItem supports ShellClients 2015-05-21 13:34:26 +02:00
Martin Gräßlin
45c1eddf4a Make Toplevel::window() virtual and implement in ShellClient
We need a shared window id in some way to e.g. properly support TabBox.
Though I do not like that the return value is xcb_window_t. This should
be either changed or a new "generic" windowId needs to be introduced.
2015-05-21 13:34:26 +02:00
Martin Gräßlin
eec356494a [wayland] Internal ShellClients don't take input
We handle input for own windows in an own way.
2015-05-21 13:34:26 +02:00
Martin Gräßlin
36fa88893e [wayland] Track the internal ShellClients in WaylandServer
Adds all internal ShellClients into a dedicated list. This ensures that
we don't perform "normal" window management on them.

In addition we add them to the top of the stacking order. This restores
behavior as it is on X11: internal windows are using BypassWindowManagerHint
and thus on top of everything.
2015-05-21 13:34:26 +02:00
Martin Gräßlin
23b19b4efe [wayland] Add a bool ShellClient::isInternal
Helper method to identify whether a ShellClient is for one of KWin's
internal connections (e.g. a QWindow).
2015-05-21 13:34:26 +02:00
Martin Gräßlin
4ed4d4dab4 [wayland] Create a windowId for ShellSurface
The internal used window Id consists of two parts identifiying the
Client and one identifying the Surface. That is the first 16 bits
are set to the ClientConnection, the last 16 bits are taken from
the Surface id. As the Surface id is 32 bits, but we only use 16 bits
there is a chance of overlap. So this might need some improvement.
2015-05-21 13:34:26 +02:00
Martin Gräßlin
c63605da06 ThumbnailItem operates on AbstractClient 2015-05-21 13:34:26 +02:00
Martin Gräßlin
0258748eb5 Merge branch 'Plasma/5.3' 2015-05-21 13:33:53 +02:00
Thomas Lübking
ae31aaaa13 fix presentwindows crash on disabling closebuttons
m_closeWindow "dangles" and protects m_closeView access
in postPaintScreen

REVIEW: 123865
2015-05-21 09:42:57 +02:00
Thomas Lübking
12358f839a no VBO upload for zero vertex count
causes out of bounds segfault

BUG: 347900
REVIEW: 123865
FIXED-IN: 5.3.1
2015-05-21 09:42:29 +02:00
Martin Gräßlin
efdd9c762b Merge branch 'Plasma/5.3' 2015-05-20 15:17:17 +02:00
Martin Gräßlin
00dd1ad0fa [effects] Fix loading of trackmouse effect textures
Logic error preventing the textures from loading.

REVIEW: 123862
2015-05-20 14:47:23 +02:00
Martin Gräßlin
e97576aab7 [wayland] Implement caption in ShellClient
Just delegates to the title of the ShellSurfaceInterface.
2015-05-20 14:40:32 +02:00
Martin Gräßlin
846fd58d14 Move caption property and captionChanged signal to AbstractClient 2015-05-20 14:39:40 +02:00
Martin Gräßlin
f885ce3796 [wayland] Implement notify in ApplicationWayland
If we get an Expose event for any QWindow we need to ensure that all
wayland events on both client (Qt) and server (KWin) side are dispatched.
Otherwise it could happen that Qt starts rendering although the last
frame callback has not yet been emitted, causing the main gui thread to
be blocked.
2015-05-20 13:11:17 +02:00
l10n daemon script
7724edac14 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"
2015-05-20 09:47:00 +00:00
Martin Gräßlin
f2bcccedf4 [wayland] Fix typo in 2ff903e 2015-05-20 08:57:51 +02:00
Martin Gräßlin
2ff903e8b3 [wayland] Sync ShellClient's geometry with internal QWindow's geometry
Update geometry when the referenced internal QWindow changes position.
This makes the close button in PresentWindows work.
2015-05-20 08:27:48 +02:00
Thomas Lübking
75bd798ad9 Merge branch 'Plasma/5.3' 2015-05-19 22:52:52 +02:00
Thomas Lübking
eb789e43e3 Show Desktop: activateNextClient prefers desktop
othrwise closing a keepabove or desktop group
window would activate some random window and break
the state as a side-effect

REVIEW: 123783
CCBUG: 346837
CCBUG: 346933
CCBUG: 347212
2015-05-19 22:09:26 +02:00
Thomas Lübking
43e3b7db28 Show Desktop: break state with activation (only)
... not them becoming visible.
Latter doesn't work for most cases (unminimizing)
for obvious reasons (they're not minimized) and
when a new window is mapped, the focus stealing
prevention seems a good filter
(if it's not good enough to gain the focus,
it's not good enough to break the state either)

REVIEW: 123783
CCBUG: 346837
CCBUG: 346933
CCBUG: 347212
2015-05-19 22:07:58 +02:00
Thomas Lübking
a16a489a43 Show Desktop: keep desktop group visible
Windows that "belong" to the desktop are
kept visible and do no break the state on
activation/mapping

REVIEW: 123783
CCBUG: 346837
CCBUG: 346933
CCBUG: 347212
2015-05-19 22:06:48 +02:00