Commit Graph

13510 Commits (07414e88a5dca8abe00e555b9ea94189b429a5c6)

Author SHA1 Message Date
Martin Gräßlin 7e1e044948 [wayland] Break showing desktop from ShellClient::takeFocus
Logic similar to Client::takeFocus: if window is keep above or on
screen display do not break. Also if window belongs to the same
ClientConnection as a desktop window don't break.
2015-06-23 11:08:28 +02:00
l10n daemon script 4b8fabca40 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-06-22 10:30:10 +00:00
Martin Gräßlin 8b6fef457b [wayland] Export themed icon name to PlasmaWindow interface
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.
2015-06-20 02:48:48 +02:00
Martin Gräßlin 31e599a63d [wayland] Provide icon from ShellSurface's windowClass
We can use the window class to locate a desktop file and from this
we can load a themed icon.
2015-06-20 01:11:42 +02:00
Martin Gräßlin 2192bd69e0 [wayland] Add support for PanelBehavior in ShellClient
The PanelBehavior determines the stacking of panel surfaces and whether
they "have a strut".
2015-06-20 00:14:49 +02:00
Martin Gräßlin 1ccd608121 Move hasStrut from Client to AbstractClient
Base implementation returns false.
2015-06-20 00:14:15 +02:00
Martin Gräßlin 69d78fe8db Fix unused variable warning 2015-06-20 00:12:22 +02:00
Thomas Lübking 39c35f8f48 fix sendToScreen/checkWorkspaceGeometry
Prime target is to preserve the in-screen
condition of client AND window.i[1]
Atm. when the client is fully in sight
(but the window is not) - regardless of snapping
or screen change - a workspace update (screen change,
resolution change, adding/removing a strutting panel)
would allow the client to partiall escape screen bounds.

This is changed so that if the client is fully in sight,
it's kept fully in sight (but not the decoration)
If the entire window was fully in sight, it's also kept
(as is right now)
The code handles inner screen edges (if the client was in sight,
the entire window will be if we'd bleed to the other screen)

[1] I'd say that handling the client is more relevant,
but foresee more complaints if the window wasn't handled anymore ;-)

During that, i stumbled across some other issues.
- when a window centered on one screen is moved to a screen smaller
  than the window, the window is shrinked to the dimensions of that
  screen and now randomly touches eg. left AND right edge. When
  moved back, the right and bottom edge were preferred
  (to the window was "moved" into the lower right corner).
  It's now kept centered.
- geom_restore was saved before keeping the window in the new
  screen area (causing accidental drops on screen changes)

BUG: 330968
REVIEW: 122517
FIXED-IN: 5.4

Prime target is to preserve the in-screen condition
of client AND window.[1]
Atm. when the client is fully in sight (but the window is not) -
regardless of snapping or screen change - a workspace update
(screen change, resolution change, adding/removing a strutting
panel) would allow the client to partiall escape screen bounds.

This is changed so that if the client is fully in sight,
it's kept fully in sight (but not the decoration)
If the entire window was fully in sight, it's also kept
(as is right now)
The code handles inner screen edges (if the client was in sight,
the entire window will be if we'd bleed to the other screen)

[1] I'd say that handling the client is more relevant,
but foresee more complaints if the window wasn't handled anymore ;-)

During that, i stumbled across some other issues.
- when a window centered on one screen is moved to a screen
smaller than the window, the window is shrinked to the dimensions
of that screen and now randomly touches eg. left AND right edge.
When moved back, the right and bottom edge were preferred
(to the window was "moved" into the lower right corner).
It's now kept centered.
- geom_restore was saved before keeping the window in the new
screen area (causing accidental drops on screen changes)

BUG: 330968
REVIEW: 116029
FIXED-IN: 5.3
2015-06-19 19:48:39 +02:00
Thomas Lübking d053c31571 don't offer to set window shortcut if rule forced
since the rule would trump the configured shortcut

BUG: 332184
FIXED-IN: 5.4
REVIEW: 124125
2015-06-19 19:47:51 +02:00
Martin Gräßlin ccd8f50b63 [wayland] Connect state change requests from PlasmaWindowInterface
This should be enough for libtaskmanager to manage the windows.
2015-06-19 17:10:51 +02:00
Martin Gräßlin 3c2c1d31c9 [wayland] Add support for closeWindow request in PlasmaWindowInterface 2015-06-19 01:50:25 +02:00
Martin Gräßlin 97588faea2 [wayland] Add support for input shape
Toplevel provides the input shape forwarded from SurfaceInterface. The
shape is evaluated in InputRedirection when finding the Toplevel at a
given position.
2015-06-18 23:19:13 +02:00
Thomas Lübking 7b842ccc81 checkOffscreenPosition on restored session geoms
BUG: 336193
FIXED-IN: 5.4
REVIEW: 124122
2015-06-18 22:41:26 +02:00
Thomas Lübking acb8016e65 make checkOffscreenPosition multiscreen aware
on a multiscreen setup, the window can be off in multiple directions

CCBUG: 336193
REVIEW: 124122
2015-06-18 22:41:26 +02:00
Martin Gräßlin 171bbd662a [wayland] Export more states to PlasmaWindowInterface 2015-06-18 21:15:20 +02:00
Martin Gräßlin f5724b9a55 [wayland] Unmap PlasmaWindowInterface instead of destroying it
The unmap triggers a destroy on client side and also triggers the
automatic cleanup of the PlasmaWindowInterface instance.
2015-06-18 00:22:48 +02:00
Martin Gräßlin 183479fe67 [wayland] Only create PlasmaWindowInterface if AbstractClient has a surface
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.
2015-06-18 00:22:48 +02:00
Thomas Lübking 3442664609 port session management to KF5
REVIEW: 123580
BUG: 341930
2015-06-18 00:18:53 +02:00
David Edmundson 268eb70016 [hwcomposer] Only update the attached screen 2015-06-17 15:08:49 -07:00
Martin Gräßlin 0b00af25dc [wayland] Announce AbstractClient to PlasmaWindowManagement interface
Creates a PlasmaWindowInterface for each AbstractClient and so far
passes caption and virtual desktop through.
2015-06-16 06:50:22 +02:00
Martin Gräßlin 6e58d50efa [wayland] Drop EGL_PLATFORM env variable from QProcessEnvironment passed to launched processes
Can result in interesting crashes of the launched processes, if KWin uses
e.g EGL_PLATFORM=hwcomposer.
2015-06-13 21:29:56 +02:00
Boudewijn Rempt d457a8d92b This line wasn't intended to go in. 2015-06-13 19:10:33 +02:00
Martin Gräßlin 859a3bb598 [wayland] Add support for PlasmaWindowManagement interface
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.
2015-06-13 18:23:54 +02:00
Martin Gräßlin 01ac0abfd7 [wayland] Change keyboard focus window when active window changes
We used to change it only on keypresses. This resulted in the strange
situation that e.g. the input method virtual keyboard doesn't show up
until one presses a real key, because e.g. maliit only activates the
keyboard if there is an active focus object in the Qt application.
2015-06-13 17:54:08 +02:00
Boudewijn Rempt 98bcdbe70a [wayland] Add a command-line option to start an input method server
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.
2015-06-13 04:06:12 +02:00
Boudewijn Rempt 1d78430acc A shell client's layer is OSD if it's OSD 2015-06-13 04:05:15 +02:00
Boudewijn Rempt 63e877a0e3 Fix typo 2015-06-12 23:10:31 +02:00
Boudewijn Rempt e8f7ab14b5 warnings--: unused parameter 2015-06-12 18:19:39 +02:00
Boudewijn Rempt e946e5e0db warnings--: helper needs to be created, but appears to be unused 2015-06-12 18:19:34 +02:00
Boudewijn Rempt 955b0bb8e8 warnings--: unused parameter 2015-06-12 17:51:02 +02:00
Boudewijn Rempt 9c2b53dd04 Warnings--: remove set-but-unused variable
Maybe something left over from debugging?
2015-06-12 17:51:02 +02:00
Boudewijn Rempt 1a18eb97ad Remove icon size calculation
The resulting variable wasn't used anywhere, and there weren't any
side-effects from getting the icon size.
2015-06-12 17:50:53 +02:00
Boudewijn Rempt 6ddf294b55 Warnings--: unused parameters 2015-06-12 17:17:21 +02:00
Martin Gräßlin 02cebe93a6 [wayland] Unreference the buffer when destroying the WindowPixmap
When we don't use the buffer anymore, we should discard it. Otherwise
we start to leak buffers and that can result in clients dead locking
while waiting for more free buffers.
2015-06-12 16:22:41 +02:00
Marco Martin 9744625253 don't close desktop windows and docks
reviewed-by:Martin Gräßlin <mgraesslin@kde.org
2015-06-11 16:21:44 -07:00
Martin Gräßlin 65665b052b [wayland] Let's try to activate a ShellClient after it's created
This might cause breakage on kwin_wayland, let's see how it works.
2015-06-11 03:22:50 +02:00
Martin Gräßlin ad80e31e6a [wayland] Reset ShellClient::m_unmapped before calling setReadyForPainting
m_unmapped determines whether the ShellClient wantsInput. This is used by
the ScriptingModel to check whether a ShellClient should be included. It
gets triggered by windowShonw signal called from setReadyFromPainting. If
m_unmapped is still true at that point the ScriptingModel doesn't include
it.
2015-06-10 20:31:41 +02:00
Martin Gräßlin 93c88aa446 [wayland] While a ShellClient is not shown, it won't take input 2015-06-10 17:46:55 +02:00
Martin Gräßlin 11e0e75fb3 Add a signal Toplevel::windowHidden
Signal is connected in ScriptingModel together with windowShown.
2015-06-10 17:45:59 +02:00
Thomas Lübking ff2590ac52 fix compilation on older gcc (at least 4.8.3)
thanks to Hrvoje Senjan for bringing this up
REVIEW: 123936
2015-06-10 08:50:17 +02:00
Thomas Lübking cc9a95df5d evenly distribute windows into all corners
If the user has only maximized windows or all
windows crammed into one region of the screen
the effect would not resemble an aperture at all

this ensures a maximum amount of corners is used
while seeking to still use shortest paths

BUG: 348709
FIXED-IN: 5.4
2015-06-10 08:50:17 +02:00
Thomas Lübking e830f08def update geom_restore when silently breaking QT mode
the next checkWorkspacePosition (now triggered by
deco border update) would falsely restore the
pre-tiling geometry

BUG: 348640
REVIEW: 123882
2015-06-10 08:50:17 +02:00
Thomas Lübking 42f53eccbd update geom_restore on unshading
REVIEW: 123882
BUG: 348064
2015-06-10 08:50:17 +02:00
Thomas Lübking 1eae9f4baf improve geometry handling on bordersChanged
a) calculateGravitation on the same borders forth and back is idempotent
b) do not checkWorkspacePosition for shaded windows
   may falsely constrain the unshaded geometry into screen bounds

REVIEW: 123882
BUG: 348064
2015-06-10 08:50:17 +02:00
Thomas Lübking 0b9cfffe1a checkWorkspacePosition: Don't adjust to shaded sz
since the client is currently empty, we'll resort
to client hints, ie. effectively resize windows
when shading them (setGeometry and plainResize have
extra checks on whether this geometry is only the decoration
height to not smear client_size)

REVIEW: 123882
BUG: 348064
2015-06-10 08:50:17 +02:00
Thomas Lübking 7f71c89111 don't nuke both dims if undecorated frame isEmpty
isEmpty hits if one dimension is <= 0 - the other one
can be absolutely valid, so preserve it.

REVIEW: 123882
2015-06-10 08:50:17 +02:00
Thomas Lübking 41be18e317 Robust modal activation; ensure showing activated
...window

REVIEW: 123875
BUG: 348083
2015-06-10 08:50:16 +02:00
Martin Gräßlin f696b578cc [wayland] Add support for QtSurfaceExtension for closing ShellClients
If the ShellClient has a QtExtendedSurface it's closeable.
2015-06-10 00:59:53 +02:00
Martin Gräßlin 6bdf120b3f Workspace::setShowingDesktop operates on AbstractClient 2015-06-09 23:28:48 +02:00
Martin Gräßlin 124bd8aaed [wayland] Add support for the PlasmaShell interface
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.
2015-06-09 19:10:56 +02:00