Commit Graph

54 Commits (07414e88a5dca8abe00e555b9ea94189b429a5c6)

Author SHA1 Message Date
Martin Gräßlin a0adf3507a Move Q_PROPERTY wantsInput from Client to AbstractClient
This fixes the EffectWindow::acceptsFocus property which failed to
properly delegate to wantsInput for ShellClients.
2015-07-22 08:42:48 +02:00
Martin Gräßlin c3b7ed907b Move logic to handle mouse buttons on windows to AbstractClient
Part of the logic is split out in a generic way so that the code
can be shared with activating of Wayland clients.
2015-07-09 16:34:19 +02:00
Martin Gräßlin 8d407157c4 Provide a base implementation for performMouseCommand in AbstractClient
Most commands can be operated directly in AbstractClient already which
means less code duplication to make the commands work for wayland
clients.
2015-07-09 16:34:19 +02:00
Martin Gräßlin 72635101f0 [wayland] Improve creation of KWayland::Server::PlasmaWindowInterface
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).
2015-07-09 09:10:33 +02:00
Martin Gräßlin 1ccd608121 Move hasStrut from Client to AbstractClient
Base implementation returns false.
2015-06-20 00:14:15 +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 41be18e317 Robust modal activation; ensure showing activated
...window

REVIEW: 123875
BUG: 348083
2015-06-10 08:50:16 +02:00
Martin Gräßlin 034276af36 Move clientMaximizedStateChanged signal from Client to AbstractClient 2015-06-07 03:17:34 +02:00
Martin Gräßlin 1d9769af1f Move skipTaskbar from Client to AbstractClient
At the same time the functionality for the "original_skip_taskbar" is
splitted out. This removes the weird API with two boolean arguments to
the set method. Instead there is a dedicated method for the orignal
skip taskbar state which delegates to regular skipTaksbar.
2015-06-06 22:11:10 +02:00
Martin Gräßlin 11a3eac070 Move skipPager from Client to AbstractClient 2015-06-06 22:11:10 +02:00
Martin Gräßlin 4ca3734d12 [wayland] Support move/resize mode in pointer move handling 2015-06-06 17:43: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 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 da2731be51 Move Client::move to AbstractClient and add implementation in ShellClient 2015-05-27 10:16:46 +02:00
David Edmundson df1499784f move isFullScreenable to AbstractClient
REVIEW: 123871
2015-05-21 16:40:21 +01:00
Martin Gräßlin 846fd58d14 Move caption property and captionChanged signal to AbstractClient 2015-05-20 14:39:40 +02:00
Martin Gräßlin 23862e512d Move implementation of ::palette to AbstractClient
Includes moving of the colorscheme and DecorationPalette related
functionality.
2015-05-08 12:43:47 +02:00
Martin Gräßlin 38b418887a Move minimize implementation to AbstractClient 2015-05-08 12:43:47 +02:00
Martin Gräßlin d2884484bc Move ::titlebarPosition to AbstractClient 2015-05-08 12:43:47 +02:00
Martin Gräßlin a4d16debfc Partly move shade implementation to AbstractClient
* properties defined in AbstractClient
* implementation of isShade moved to AbstractClient
* implementation of setShade(bool) moved to AbstractClient
* default implementation for isShadeable added to AbstractClient
* default implementation for shadeMode returning ShadeNone
* default implementation fo setShade which does nothing
2015-05-08 12:43:47 +02:00
Martin Gräßlin 254887155c Implement virtual desktop handling in AbstractClient 2015-05-08 12:43:47 +02:00
Martin Gräßlin 1bfba1765c Signal desktopPresenceChanged carries AbstractClient as argument 2015-05-08 12:43:47 +02:00
Martin Gräßlin e672a53721 Move implementation of demanding attention to AbstractClient 2015-05-08 12:43:47 +02:00
Martin Gräßlin 986308f938 Move implementation of isSpecialWindow to AbstractClient 2015-05-08 12:43:46 +02:00
Martin Gräßlin 4b27abd76b Move implementation of wantsTabFocus to AbstractClient 2015-05-08 12:43:46 +02:00
Martin Gräßlin 1fcd1120d9 Move auto-raise handling to AbstractClient
Adds QTimer to AbstractClient and introduces new protected method to
start the timer.
2015-05-08 12:43:46 +02:00
Martin Gräßlin 25e3af5988 Implement keepAbove and keepBelow in AbstractClient
Moves the properties and the base implementation into AbstractClient.
Methods invoke a new protected virtual method which is implemented in
Client to update the TabGroup.
2015-05-08 12:43:46 +02:00
Martin Gräßlin b84118a51b Workspace::updateClientLayer operates on AbstractClient
Requires a virtual updateLayer in AbstractClient. Default implementation
does nothing.
2015-05-08 12:43:46 +02:00
Martin Gräßlin 7d51838efc Implement AbstractClient::isActive and ::setActive
Moves the implmentation to AbstractClient. Methods are no longer virtual,
setActive calls a virtual protected method which is implemented in Client
for Client specific activation code.
2015-05-08 12:43:46 +02:00
Martin Gräßlin 3527f1d4b8 Implement AbstractClient::icon
Moves implementation, adds a protected setter and provides the property.
2015-05-08 12:43:46 +02:00
Martin Gräßlin 2f59f3e8b4 Move property closeable to AbstractClient 2015-05-08 12:43:46 +02:00
Martin Gräßlin 4d466f9ab3 Implement AbstractClient::skipSwitcher
Moves implementation from Client to AbstractClient.
2015-05-08 12:43:46 +02:00
Martin Gräßlin 3182c8f3e5 Implement AbstractClient::isFirstInTabBox
Moves implementation from Client to AbstractClient. Setter is protected,
getter is no longer virtual.
2015-05-08 12:43:46 +02:00
Martin Gräßlin 4ac4a97c20 Implement AbstractClient::tabBoxClient
Moves the implementation from Client to AbstractClient.
2015-05-08 12:43:46 +02:00
Martin Gräßlin 69f198e923 Move ::demandAttention to AbstractClient 2015-05-08 12:43:46 +02:00
Martin Gräßlin dde1947461 Move ::userTime to AbstractClient
Default implementation returns 0.
2015-05-08 12:43:46 +02:00
Martin Gräßlin 1a7e8aeaf2 Move enum QuickTileFlag and ::setQuickTileMode to AbstractClient 2015-05-08 12:43:46 +02:00
Martin Gräßlin 5b53d2401e Move ::packTo to AbstractClient
Base implementation which does nothing
2015-05-08 12:43:46 +02:00
Martin Gräßlin 7ffc742a69 Move ::isCurrentTab to AbstractClient
Default implementation returns true.
2015-05-08 12:43:46 +02:00
Martin Gräßlin 6feb1c6604 Move ::titlebarPosition and enum Position to AbstractClient 2015-05-08 12:43:46 +02:00
Martin Gräßlin e5734f9e6c Move (grow|shrink)(Horizontal|Vertical) to AbstractClient
A virtual base implementation is provided which does nothing. Needed
in AbstractClient to get Workspace::slotWindowGrow* to work with
active_client becoming an AbstractCliet.
2015-05-08 12:43:46 +02:00
Martin Gräßlin 138c1b2ff0 Workspace::sendClientToDesktop operates on AbstractClient
Unfortunately transient handling is still on Client, thus it's
still in a cast-if block.
2015-05-08 12:43:45 +02:00
Martin Gräßlin 1d4701d67e Workspace::takeActivity operates on AbstractClient 2015-05-08 12:43:45 +02:00
Martin Gräßlin 484f9b6e65 Workspace::activateClient and ::requestFocus changed to AbstractClient
requestFocus delegates to takeActivity which is not yet adjusted but
performs a nullptr check, thus we pass a casted Client.
2015-05-08 12:43:45 +02:00
Martin Gräßlin 4b41c33268 Workspace::movingClient changed to AbstractClient
In events.cpp it's casted to Client as it's X11 specific.
In InputRedirections it's kind of broken, but window movement is
anyway broken.
2015-05-08 12:43:45 +02:00
Martin Gräßlin d2cdd3de1d UserActionsMenu operates on AbstractClient
There are still a few areas where it's dynamic casting to Client,
e.g.:
* sendToDesktop
* window tabbing related
* activities related
2015-05-08 12:43:45 +02:00
Martin Gräßlin 519006ffa4 Workspace::performWindowOperation operates on AbstractClient
Only exception is the call to ::takeActivity which still expects a
Client.
2015-05-08 12:43:45 +02:00
Martin Gräßlin 942b49e2c4 Workspace::setupWindowShortcut operates on AbstractClient 2015-05-08 12:43:45 +02:00
Martin Gräßlin 7c187359a7 Workspace::sendClientToScreen operates on AbstractClient 2015-05-08 12:43:44 +02:00