- 25 Aug, 2015 3 commits
-
-
Martin Flöser authored
Of course only works with internal clients.
-
Martin Flöser authored
-
Martin Flöser authored
Allows to interact with the Registry for the internal connection in other parts of KWin and makes it possible to create more than just the ShmPool for this Registry.
-
- 15 Jul, 2015 1 commit
-
-
Martin Flöser authored
For Wayland clients we now are able to get shadows. Internally this reuses large parts of the X11 implementation. This could be improved to make the Scene's better aware of the Wayland shadow, so that less memory is needed.
-
- 09 Jul, 2015 2 commits
-
-
Martin Flöser authored
-
Martin Flöser authored
The creation of PlasmaWindowInterface is moved from WaylandServer into AbstractClient. This allows the sub classes to better control when to create/destroy the Client. For creation it's bound to becoming visible - that is Windows which are only created but never shown are not announced at all. For Client it's destroyed with the normal tear-down of a Client, for ShellClient it's destroyed on unmapped (which also means a new one will be created again in case of another mapping of the surface). As a side effect, this works around the problem that ShellClients do not yet get destroyed for QtWayland's menus (needs further investigation).
-
- 29 Jun, 2015 1 commit
-
-
Martin Flöser authored
Ensures that the PlasmaWindow gets destroyed together with the window. Note: when a ShellClient gets unmapped the PlasmaWindow does not yet get destroyed. It should probably get destroyed and recreated on next mapping.
-
- 20 Jun, 2015 1 commit
-
-
Martin Flöser authored
If the icon doesn't have a name, we pass the generic xorg icon. Most likely our xwayland clients won't have a theme name, so giving them the xorg icon seems a good enough work around. If we would want to pass the real icon for xwayland clients we would need a way to serialize them which seems like quite some needless overhead for legacy applications. Can be considered for the future nevertheless.
-
- 19 Jun, 2015 2 commits
-
-
Martin Flöser authored
-
Martin Flöser authored
This should be enough for libtaskmanager to manage the windows.
-
- 18 Jun, 2015 2 commits
-
-
Martin Flöser authored
-
Martin Flöser authored
-
- 17 Jun, 2015 2 commits
-
-
Martin Flöser authored
The unmap triggers a destroy on client side and also triggers the automatic cleanup of the PlasmaWindowInterface instance.
-
Martin Flöser authored
With Xwayland clients it can happen that the window gets destroyed before it ever got a surface (Qt 5's file open dialog being an example). This change delays such clients till it got the surface, removing not needed roundtrips and possible problems.
-
- 16 Jun, 2015 1 commit
-
-
Martin Flöser authored
Creates a PlasmaWindowInterface for each AbstractClient and so far passes caption and virtual desktop through.
-
- 13 Jun, 2015 2 commits
-
-
Martin Flöser authored
So far this only allows to trigger show desktop functionality and exports the state. In future this should be restricted to just one dedicated desktop shell process.
-
Halla Rempt authored
Input-method servers, like maliit, need to be known to KWin since KWin needs to know about virtual keyboards. Virtual keyboards should be shown as OSD layers, and they are one of the types of windows that actually should be showable when the lock screen is active. kwin_wayland --inputmethod /path/to/your/input-server tries to start the input server. The input-server's window never gets keyboard focus and is shown on top of all windows except for KWin's internal clients.
-
- 09 Jun, 2015 2 commits
-
-
Martin Flöser authored
If the ShellClient has a QtExtendedSurface it's closeable.
-
Martin Flöser authored
The PlasmaShell interface allows to create a PlasmaShellSurface for a given Surface. Through this interface the Surface can request: * a specific position * a window type So far only the window types Normal, Panel and Desktop are supported which is a sufficient subset for getting plasmashell to work. In future there should be security checks so that only the dedicated desktop shell can bind these interfaces.
-
- 28 May, 2015 2 commits
-
-
Martin Flöser authored
No longer needed as we install keymaps which prevents the crash in QtWayland this version check worked around.
-
Martin Flöser authored
Fixes regression introduced with 90a68145: 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.
-
- 27 May, 2015 1 commit
-
-
Martin Flöser authored
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.
-
- 21 May, 2015 3 commits
-
-
Martin Flöser authored
This simplifies the interaction: we know that the Surface is useable if it got announced to the Workspace.
-
Martin Flöser authored
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.
-
Martin Flöser authored
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.
-
- 18 May, 2015 4 commits
-
-
Martin Flöser authored
If the ShellClient got created for a Qt internal window, we try to find the QWindow and if we get one, we use the geometry directly as it got set by KWin in the first place. Also a windowId() is added to ShellClient which can be used by the effect system to find an EffectWindow. If it's an internal QWindow we just use that window id. For other clients we still need some smart solution.
-
Martin Flöser authored
QtWayland and mesa might dead lock KWin if we start rendering a QWindow before Qt/Mesa got the last frame callback. They perform blocking wayland event reading on the main gui thread which makes it impossible for KWin to do the compositing and send the callback. To workaround this problem we fake a frameRendered directly after each damage event for a Qt internal window. Unfortunately this is not yet completely sufficient, thus we also need to ensure that the wayland events are processed before any events are processed which would cause a repaint and block. Thus we first flush QtWayland's wl_display and then our Server connection. If there were any damage events we can be sure that the frameRendered is sent before Qt attempts to render.
-
Martin Flöser authored
QtWayland only creates popup windows if they have a parent QWindow or if there is any window which had input. It's not enough to fake an enter, it needs to be either a pointer button press or key press. As KWin's useraction menu doesn't have a parent and we most likely never send a pointer press to any QWindow it doesn't get shown. To circumvent this we create a dummy window and fake a button press/release on the window. After that Qt is tricked into believing there's a parent window and shows the popup. Faking the input is only done with at least Qt 5.5 as QtWayland crashes on pointer event without a keymap being installed. As KWin does not yet send keymaps we better disable the dangerous code path. With Qt 5.5 the crash condition is fixed.
-
Martin Flöser authored
Similar to Surface: we ignore till we are all ready to go.
-
- 08 May, 2015 3 commits
-
-
Martin Flöser authored
For other clients we are only interested in the shell surfaces.
-
Martin Flöser authored
Makes QtWayland way more happy.
-
Martin Flöser authored
The ShellClient is a Toplevel subclass for a KWayland::Server::ShellSurfaceInterface. It gets created when a new ShellSurfaceInterface is created and destoryed when it gets unmapped. So far the usage is still rather limited. The ShellClient is opened at position (0/0). While it's possible to pass pointer events to it, it's not yet possible to activate it, so no keyboard focus.
-
- 24 Apr, 2015 1 commit
-
-
Martin Flöser authored
This gives the backend more control without needing to provide all information in Screens.
-
- 21 Apr, 2015 1 commit
-
-
Martin Flöser authored
If Xwayland goes down it's better to abort than staying alive. If Xwayland goes down the next roundtrip to X (most likely during call to xStackingOrder) will just freeze completely, which is kind of the worst as one cannot VT-switch anymore. So a clean abort is a bad but better solution.
-
- 02 Apr, 2015 2 commits
-
-
Martin Flöser authored
Not perfect but better than a hardcoded physical size.
-
Martin Flöser authored
Getting the cursor image from the cursor theme is unfortunately not straight forward. We have three different libraries and all have drawbacks: * XCursor - we just kicked it out * xcb-util/cursor - only provides xcb_cursor_t, so a dependency on X * wayland-cursor - only a client side API The picked solution is using wayland-cursor. It provides the cursor in a wl_buffer. Unfortunately the client side API does not easily allow to a) read it back b) init without a wl_shm_pool Thus we need to work this around: * create an internal connection * get a ShmPool on it * init WaylandCursorTheme with this ShmPool * get the cursor wl_buffer from the theme * trigger a roundtrip * get the corresponding BufferInterface for the buffer * set the content as the software cursor
-
- 20 Mar, 2015 1 commit
-
-
Martin Flöser authored
The AbstractBackend registers itself in the WaylandServer allowing external users to easily get to the backend and not needing to test manually which backend is used.
-
- 17 Mar, 2015 3 commits
-
-
Martin Flöser authored
WaylandServer allows to create a ClientConnection which is intended for QtWayland. This allows us to easily identify our "own" surfaces. The created file descriptor is set as env variable WAYLAND_SOCKET prior to creating the Application. Wayland will unset it after connecting, so we don't need to unset it. This removes the hack of setting and resetting the WAYLAND_DISPLAY environment variable.
-
Martin Flöser authored
Creates a socketpair in WaylandServer and creates a ClientConnection for Xwayland. The created file descriptor is passed to Xwayland through the WAYLAND_SOCKET env variable.
-
Martin Flöser authored
If not using libinput we get the seat information from the lower level Wayland server: let's forward the information to our own SeatInterface.
-