Summary:
TabGroup is nowadays in AbstractClient so the cast to Client is
incorrect.
Reviewers: #kwin
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17898
Summary:
The default implementations just return false/nullptr. The advantage of
having this in AbstractClient is that we can reduce the needed casts
from AbstractClient to Client in core as can be seen in this change.
There are more cases which can be improved thanks to this refactoring
which will follow in dedicated commits.
Test Plan: ctest passes
Reviewers: #kwin
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17890
Summary:
Given that QList<T> will allocate items on the heap when sizeof(T) is
bigger than sizeof(void *), which is the case for Phase2Data, use
QVector instead.
Reviewers: #kwin, davidedmundson
Reviewed By: #kwin, davidedmundson
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D18198
Summary:
Phase2Data already includes the scene window, so we don't have to store
it again in QPair.
Reviewers: #kwin, davidedmundson
Reviewed By: #kwin, davidedmundson
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D18188
Summary: This matches the behaviour of workspace.cpp on initial load.
Test Plan: Test now passes
Reviewers: #kwin, zzag
Reviewed By: #kwin, zzag
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D18183
Summary:
Currently, our implementation of zwp_idle_inhibitor_v1 is not fully
spec-compliant. If the associated surface is not visible, we still
honor the idle inhibitor object.
This change addresses those spec-compliance issues. If a surface is
minimized or it's not on the current virtual desktop, then the
associated inhibitor object won't be honored by KWin.
Reviewers: #kwin, davidedmundson
Reviewed By: #kwin, davidedmundson
Subscribers: graesslin, kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17343
Summary:
virtual desktops can be destroyed, active clients update, but deleted
keeps a cache.
Someone needs to do cleanup to avoid dangly pointers.
Test Plan:
I couldn't find a case of someone calling desktops mid way through an
animation, so it's only a hypothetical bug.
Reviewers: #kwin, zzag
Reviewed By: #kwin, zzag
Subscribers: graesslin, zzag, kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17247
Summary:
If a user saves a decoration that has a plugin but no theme we currently
delete the entry saving just the plugin/library.
This is an issue as on load we call:
const QString plugin = config.readEntry("library", s_defaultPlugin);
const QString theme = config.readEntry("theme", s_defaultTheme);
That would give us a non-default library with the default theme name,
which would be invalid.
If compiled with Breeze s_defaultTheme is blank so this ends up being
effectively the same thing. In the normal case it will neither break
nor fix anything.
Test Plan:
None.
Just happened to see it when doing a code review.
Reviewers: #kwin, vpilo
Reviewed By: vpilo
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D18146
Summary:
KWin::Script::loadScriptFromFile ran in it's own thread and accessed
member variables of KWin::Script without any guards.
Potentially script could be destroyed whilst the file is loading.
Rather than adding mutexes everywhere, this patch scopes the QFile
object to be local to the threaded function making it independent.
BUG: 403038
Test Plan: Ran a script from a file
Reviewers: #kwin, graesslin
Reviewed By: #kwin, graesslin
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D18126
Summary:
We no longer need to include xcb/xfixes.h in cursor.cpp because
X11Cursor moved to its own file.
Reviewers: #kwin, davidedmundson
Reviewed By: #kwin, davidedmundson
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D18133
Summary:
* save changes to the config files when the layout is saved
* :name() works even if netrootinfo isn't there
* as soon a rootinfo is set, connect all the desktops with name changes
Test Plan:
* tested with the kcm to add, remove and rename desktops, all of that works
* setting the number of rows still only partly works: kwin notices it but
the pager doesn't notice, a plasma restart is needed
Reviewers: #plasma, #kwin, hein, davidedmundson, graesslin
Reviewed By: #plasma, #kwin, hein, davidedmundson, graesslin
Subscribers: zzag, graesslin, davidedmundson, ngraham, kwin
Tags: #kwin
Maniphest Tasks: T4457
Differential Revision: https://phabricator.kde.org/D17265
Summary: This change reformats the documentation so it's more easier to read it.
Test Plan:
Generated Doxygen documentation, started Python's Simple HTTP server, navigated
to AnimationEffect's documention, haven't noticed any serious issues.
Reviewers: #kwin, davidedmundson
Reviewed By: #kwin, davidedmundson
Subscribers: graesslin, davidedmundson, kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17832
Summary:
Even though the buffer is passed through a side channel some properties
we might use are double-buffered on the surface commit.
Test Plan: Used by unit test InternalWindowTest::testScale in linked commit
Reviewers: #kwin, graesslin
Reviewed By: #kwin, graesslin
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D18085
Summary: For unit test purposes
Test Plan: Used by unit test InternalWindowTest::testScale in linked commit
Reviewers: #kwin, graesslin
Reviewed By: #kwin, graesslin
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D18086
Summary:
BUG: 346222
BUG: 399992
BUG: 356076
FIXED-IN: 5.15
The QML changes make the tab look and feel less awful:
* make the fake window borders stand out less
* add margins to drop area to make it easier to drop buttons on the title bar (fixing 346222)
* change cursor to a non-pointing one [1]
[1] Drag&drop: When dropping, we receive the position of the button being dropped,
not of the cursor. The two can be far (when starting drag by moving the cursor fast):
which makes the whole experience very confusing, as the user means to drop at cursor location.
Test Plan: Tested drag/drop: same (messy) behavior as before, but can now drop more loosely around titlebar items
Reviewers: #vdg, #kwin, ngraham
Reviewed By: #vdg, ngraham
Subscribers: davidedmundson, ngraham, kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17982
Summary:
The "new" animation option no longer uses hard coded effects, which
means one could install a third party virtual desktop switching animation,
for example from store.kde.org, and it will be displayed in the KCM.
Test Plan: {F6503565}
Reviewers: #kwin, #vdg, ngraham, davidedmundson
Reviewed By: #kwin, #vdg, ngraham, davidedmundson
Subscribers: davidedmundson, hein, ngraham, kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17766
Summary:
The main motivation for moving it into a shared library is to share the
model between Desktop Effects and Virtual Desktops KCM.
The extracted model is quite the same as the one in Desktop Effects KCM,
except some minor changes, e.g. rename loadEffect and syncConfig to more
convenient names, add comments, some whitespace changes, fix coding
style in some parts, etc.
Test Plan: effectModelTest passes, Desktop Effects KCM works.
Reviewers: #kwin, davidedmundson
Reviewed By: #kwin, davidedmundson
Subscribers: hein, kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17765
Summary:
The new test is similar to testToplevelOpenCloseAnimation. The
main purpose of this test is to verify that the Fading Popups effect
animates all sorts of popups, e.g. popup menus, tooltips, etc.
testAnimateUserActionsPopup is skipped for now because stuff
that animates unmapped clients is broken.
Reviewers: #kwin, davidedmundson
Reviewed By: #kwin, davidedmundson
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17992
Summary:
7834bec52a missed to port minimize and
unminimize to dynamic dispatch. In addition to that, we don't benefit
from QMetaObject::invokeMethod so port addRepaint and addLayerRepaint
to dynamic dispatch as well.
Reviewers: #kwin, davidedmundson
Reviewed By: #kwin, davidedmundson
Subscribers: davidedmundson, kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D18049
Summary: Be nice and destroy all created windows in testDontAnimatePopups.
Test Plan: The test still passes.
Reviewers: #kwin, davidedmundson
Reviewed By: #kwin, davidedmundson
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D18037
Summary:
This patch ports the Effects KCM to QQC2, which yields the following benefits:
1. General performance enhancements of only using QQC2 rather than a mix of 1 and 2
2. Some code simplification is possible
3. Improves the appearance of the checkable menu items in the dropdown menu, fixing https://bugs.kde.org/show_bug.cgi?id=402701
4. Improves the appearance when using a fractional scale factor, fixing https://bugs.kde.org/show_bug.cgi?id=396725
5. Fixes the incorrect size when opened from `kcmshell5`
Along the way, two visual changes are introduced as a by-product of porting:
1. The scrollbar is inline, so it overlaps some of the buttons in the content. This is somewhat undesirable, but adopting a Kirigami scrollview would fix this.
2. The button that displays a dropdown menu no longer has a downward-pointing arrow to indicate as such. This is not my preference, but there's a benefit to being consistent, and eventually we could can change this in one place to impeove the appearance of buttons that display dropdown menus everywhere in one fell swoop.
BUG: 396725
BUG: 402701
BUG: 396076
FIXED-IN: 5.15.0
Test Plan:
All functionality still works
In System Settings, showing improved checkable menu item appearance:
{F6523385}
In `kcmshell` at 1x scale:
{F6523386}
In `kcmshell` at 1.5x scale:
{F6523387}
Reviewers: #kwin, #plasma, davidedmundson
Reviewed By: #kwin, #plasma, davidedmundson
Subscribers: davidedmundson, kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17928
Summary:
Just accessing Qt::Popup WindowFlag.
BUG: 402852
Test Plan: Not tested for the described problematic case
Reviewers: #kwin
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17981
Summary:
Thus we don't require vgem any more which fails with latest mesa.
Kepping the vgem variant as fallback for older systems. See T10245
Test Plan:
SceneOpenGL Test passes without init vgem, not tested with
latest mesa
Reviewers: #kwin
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17980
Summary:
This ensures that KWin gets the same keyboard layout config as is
configured in the session and not a default config.
BUG: 402764
FIXED-IN: 5.14.5
Test Plan:
Xephyr to verify the config is applied, otherwise completely
untested. I don't have an X session.
Reviewers: #kwin
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17967
This reverts commit 16e904592a.
The commit has logical errors, corrupting DND on Wayland. Also the solution
with static_cast to solve the compiler warnings is not a sensible one, it just
hides the root problem.
And next time such a change has to go through review!
Summary:
Not only does the function windowsShareDesktop become a lot more complex
with the new desktop cardinality comparing if they share any desktop
isn't actually what we want.
If I have 2 windows on desktop 1 and the lower stacked window is also on
desktop 2, when I switch desktops the focus will change, but we don't
want to animate anything here as on this dekstop it has nothing to slide
in front of.
Instead this patch simply checks both windows are on the current
desktop.
Test Plan:
Loaded a few windows. Some on one, some on more.
Before if a window was on desktop 1&2 it wouldn't animate on 2.
Windows now seem to animate when they should and not when they shouldn't.
Reviewers: #kwin, zzag
Reviewed By: #kwin, zzag
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17943
Summary:
If a window is not on the current virtual desktop, then it won't be
painted/slided. Thus, we can replace EffectWindow::desktop by
EffectsHandler::currentDesktop.
Test Plan: The effect still works correctly on both X11 and Wayland.
Reviewers: #kwin, davidedmundson
Reviewed By: #kwin, davidedmundson
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17944
Summary:
Fixes the preselected decoration style on module load.
Also:
* Prevent the module state to be set to modified on resize.
* Fix QML errors in logs.
Reviewers: davidedmundson
Reviewed By: davidedmundson
Subscribers: davidedmundson, kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17775
Summary:
Does something similar to our existing ServerDecoration, but based
around XDG Shell patterns and with a few subtle differneces.
We'll probably still need both in kwin for the forseeable future as GTK3
won't ever change from using the KDE Server Decoration.
Test Plan:
Relevant unit test. It's a bit simpler as spec states
toolkits must follow what the compositor configures if they
bind the interface.
Modified plasma-integration to remove ServerIntegration
(as Qt5.12 has native support) all my windows look and act the same.
Reviewers: #kwin, zzag
Reviewed By: #kwin, zzag
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17756
Summary:
Currently, when resizing a window the cursor doesn't match the resize
direction. The reason for that is the move-resize cursor is hardcoded.
To fix that, CursorImage::updateMoveResize has to use AbstractClient::cursor.
Also, because the move-resize cursor is updated after calling startMoveResize,
we have to connect to AbstractClient::moveResizeCursorChanged.
BUG: 370339
FIXED-IN: 5.15
Reviewers: #kwin, davidedmundson, broulik, romangg, graesslin
Reviewed By: #kwin, graesslin
Subscribers: davidedmundson, romangg, graesslin, kwin
Tags: #kwin
Maniphest Tasks: T5714
Differential Revision: https://phabricator.kde.org/D3202
Summary:
So far transients were placed anywhere on the screen. This behavior was
inspired from X11 where context menus were able to overlap any other
window and use the complete screen area. On X11 context menus and
similar windows are override redirect and thus above all windows managed
by KWin.
On Wayland, though, context menus and similar and windows just like any
other window and thus follow stacking constraints like the parent
window. A context menu is stacked just above it's parent and is
(normally) below any panels. This resulted in problems that context menu
are stacked behind the panel with unreachable options.
This change changes the placement for transients to use the
PlacementArea instead of a screen geometry. Thus the transient does not
render behind the panel. Only in case of a fullscreen the struts are
ignored.
BUG: 389222
FIXED-IN: 5.15
Test Plan: New test case
Reviewers: #kwin
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17826
Summary:
The dialog invoked through user actions menu takes the internal uuid as
command line argument which allows to query the required information
from KWin instead of using X11.
This allows to enable the system for Wayland windows.
In order to replace the usage of ClientMachine in the rules dialog the
dbus interface is extended by a value whether the window is on the
localhost. This is exposed through a virtual method on toplevel which is
overridden in ShellClient and there always returning true.
Test Plan: Run a nested Wayland and opened the dialog on a wayland window
Reviewers: #kwin
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17750
Summary:
When looking at the test results on build.kde.org we see this is the
test which fails most often and it's always at the same line of code.
So I just had a look with the thought: "what's special about this code,
why could it fail?"
Looking at it we start an external process which is supposed to connect
to KWin. We wait for the process to start and then wait for the shell
client added. This assumes that at the time we handle the wait for
started the connection of the window has not happened yet.
Waiting for the process in a blocking way, might make the process fail
to connect to the Wayland session, so this is changed to not block and
instead use a signal.
Reviewers: #kwin
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17748
Summary:
This change inits XInput extension, listens for touch events and
forwards them to our platform API. Thus touch events are forwarded on a
nested wayland session on X11.
Please note that I only tested this change on Xwayland.
Test Plan: Run nested kwin_wayland with two outputs and looked into debug console
Reviewers: #kwin
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17369
Summary:
In the old version of the KCM, one could change value of the spinbox
only if "Desktop Switch On-Screen Display" is checked.
Test Plan:
Before:
{F6503161}
After:
{F6503163}
Reviewers: #kwin, #vdg, graesslin
Reviewed By: #kwin, graesslin
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17754
Summary: VirtualDesktopManager already had a loading check. We don't need two.
Reviewers: #kwin
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17724
Summary:
The old readme was targetted at application developers having
conceptional questions about window management. While we all know that
this is very often needed, I doubt that any application developer is
looking at KWin's README to figure out why their window doesn't get
focus.
The new README is focussing more on potential new contributors by
describing what KWin is and how to reach our team. E.g as a nice small
document readable on git project hosting sides.
The information in the readme is mostly taken from
https://community.kde.org/KWin/Mission_Statement
Reviewers: #kwin
Subscribers: kwin
Tags: #kwin
Differential Revision: https://phabricator.kde.org/D17722