Commit graph

707 commits

Author SHA1 Message Date
David Edmundson
4bbc085e0e [xdgshell] Add positioner constraint adjustment flag operators
Test Plan: Used in kwin

Reviewers: #kwin, zzag

Reviewed By: #kwin, zzag

Subscribers: kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D16318
2018-10-20 16:38:03 +01:00
David Edmundson
6414100de3 Don't silently error if damage is sent before buffer
Summary:
Firefox sends

wl_surface@37.damage(0, 0, 808, 622)
wl_surface@37.attach(wl_buffer@34, 0, 0)

Which we silently treat as an error.

There's nothing in the spec to forbid this. The only thing that matters
is the state on commit. This moves a check there.

CCBUG: 397834

Test Plan:
Had a debug in there which was being activated
Gets firefox slightly further (but not complete)

Reviewers: #kwin

Subscribers: kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D15912
2018-10-08 09:15:59 +01:00
Roman Gilg
de6f5a74ff [server] Do not return early on fail in touchDown fall back code
Summary:
Returning early would mean that SeatInterface::Private::touchInterface.ids
does not contain the id. Then the assert would fail in touchUp at some
point later when called by the compositor.

Reviewers: #kwin, #frameworks, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D15468
2018-09-18 21:56:43 +02:00
Kevin Funk
29b8d0f258 Minor: Add a few nullptrs 2018-09-13 09:56:34 +02:00
Kevin Funk
32d4edff51 Minor: Include Qt dirs as SYSTEM includes 2018-09-13 09:38:09 +02:00
Kevin Funk
68625a500d Minor: Fix CMake AUTOMOC warning 2018-09-13 09:38:01 +02:00
Yuri Chornoivan
96df0ea6ae Fix minor EBN issues 2018-09-12 20:49:38 +03:00
Roman Gilg
88fde0b4ce [server] Fix remote access buffer handling when output not bound
Summary:
If a client has not bound a certain output do not directly return
but try to deliver the buffer to other clients.

If none of them has requested it, send bufferReleased signal
immediately to let compositor know that the buffer should
be cleaned up.

Test Plan: Manually. Autotest planned.

Reviewers: #kwin, #frameworks, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: jgrulich, davidedmundson, kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D15422
2018-09-11 17:40:02 +02:00
Vlad Zagorodniy
44f0d3ced0 [autotests] Compare booleans to booleans
Summary:
Compiler errors:

17:06:23 /usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld: CMakeFiles/testDataDevice.dir/test_datadevice.cpp.o: in function `TestDataDevice::testDrag()':
17:06:23 /home/jenkins/workspace/Frameworks kwayland kf5-qt5 SUSEQt5.9/autotests/client/test_datadevice.cpp:290: undefined reference to `bool QTest::qCompare<int, bool>(int const&, bool const&, char const*, char const*, char const*, int)'
17:06:23 /usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld: CMakeFiles/testDataDevice.dir/test_datadevice.cpp.o: in function `TestDataDevice::testDragInternally()':
17:06:23 /home/jenkins/workspace/Frameworks kwayland kf5-qt5 SUSEQt5.9/autotests/client/test_datadevice.cpp:369: undefined reference to `bool QTest::qCompare<int, bool>(int const&, bool const&, char const*, char const*, char const*, int)'

Test Plan: Ran testDataDevice, still passes.

Reviewers: #kwin, romangg, broulik

Reviewed By: broulik

Subscribers: kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D15330
2018-09-07 16:01:21 +03:00
Yuri Chornoivan
94b5140b53 Fix minor EBN issues 2018-09-06 22:24:21 +03:00
Roman Gilg
a160143d57 [server] Do not try to create data offers without source
Summary: An internal drag is without data source. Still we tried to create offers.

Test Plan: This change makes the updated autotest in D15072 pass without errors.

Reviewers: #kwin, hein

Reviewed By: hein

Subscribers: kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D15074
2018-09-06 15:56:15 +02:00
Roman Gilg
c9bac2d41d [server] Abort drag start on correct conditions and without posting error
Summary:
A drag start request should be dismissed when the client does not have an
implicit pointer grab or the currently focused pointer surface is not the
origin. The conditions for that were wrong in the past.

Also just ignore the request and not post directly an error, that potentially
kills the client since by concurrency the client might have send a valid
request, that got invalidated through grab or focus change at the same time
on the server side.

Test Plan: Manually and autotest.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: adridg, kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D15072
2018-09-06 15:53:26 +02:00
David Edmundson
a225438213 Sync set/send/update methods
Summary:
Currently whenever a single client binds we would incorrectly send an
EDID/uuid/enabled update to every client.

This syncs every property into following the same set/send/update
pattern everywhere.

Test Plan: Existing unit tests

Reviewers: #kwin, romangg

Reviewed By: #kwin, romangg

Subscribers: romangg, kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D14505
2018-08-08 18:37:09 +01:00
Daniel Vrátil
110f896acb Add serial number and EISA ID to OutputDevice interface
Reviewers: graesslin, sebas, #kwin, dvratil, romangg

Reviewed By: #kwin, romangg

Subscribers: romangg, kde-frameworks-devel, davidedmundson, plasma-devel

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D10040
2018-08-08 18:37:02 +01:00
David Edmundson
84a3330bfc Fix unit test
We now have one extra method so we get one more change event so count in
this test needs updating.

Ideally we should only update once; this test was written hardcoding the
values that currently happen rather than what should happen; but that's
a commit for another day.
2018-08-05 18:04:53 +02:00
Roman Gilg
17832e8adc Output device color curves correction
Summary:
Extends the output device and output configuration interfaces with the
ability
to query and set the RGB color intensity curves (gamma ramps) of the
associated output.

Test Plan: Manually. Auto tests will be added to this diff soon.

Reviewers: #frameworks, graesslin, romangg

Subscribers: kde-frameworks-devel, graesslin, davidedmundson, zzag,
cfeck

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D12388
2018-08-05 18:04:53 +02:00
David Edmundson
fa1b65bb5a Fix memory management in WaylandOutputManagement
Summary:
There was no destructor in the protocol, which meant the auto generated
_destroy function only deletes the wl_proxy object, but doesn't actually
send anything to the server.

Result was OutputConfiguration objects on
the server just linger forever and it's a broken state

Test Plan: Added unit test that objects have the lifespan they should do

Reviewers: #kwin, romangg

Reviewed By: #kwin, romangg

Subscribers: romangg, kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D13730
2018-08-05 18:04:53 +02:00
David Edmundson
ec7e16c8b7 Isolate every test within WaylandOutputManagement
Summary:
The current code used the same outputInterface between all tests, with
data and outdated connections slowly accumulating.

This meant most the code didn't work as it was intended, for
example testExampleConfig had the config applied from the connect in the
previous test. It just happened to pass.

This resets everything between each test.

Test Plan:
Can now add a test without going insane
Existing tests still pass

Reviewers: #kwin, romangg

Reviewed By: #kwin, romangg

Subscribers: romangg, kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D13729
2018-08-05 18:04:53 +02:00
David Edmundson
961bcbde08 OutputManagement fractional scaling
Summary:
In order to have fractional scaling in kwin, we need to communicate it with
kscreen, which means changing the data type in our config protocols.

This introduces a new method on outputdevice and outputconfiguration
to set/request scale as a float.

wl_output is and should remain unchanged as an int

No urgent rush for reviewing/merging this as it's useless without other changes.

Test Plan: Attached unit tests

Reviewers: #kwin, romangg

Subscribers: romangg, zzag, kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D13601
2018-08-05 18:04:53 +02:00
David Edmundson
2a3b34ae6a Cleanup RemoteAccess buffers on aboutToBeUnbound instead of object destruction
Summary:
The destructor or Resource::~Resource will delete the d-pointer used by
Resource before we reach QObject::~QObject() of the resource which emits
the destroyed signal. This means this lamba is accessing deleted
contents.

Based on
https://build.kde.org/view/Frameworks/job/Frameworks%20kwayland%20kf5-qt5%20SUSEQt5.10/71/testReport/

aboutToBeUnbound is emitted before object destruction.

Test Plan: Relevant unit test still passes and this lambda is still invoked.

Reviewers: #kwin, romangg

Reviewed By: #kwin, romangg

Subscribers: romangg, kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D14291
2018-07-24 13:36:55 +02:00
Roman Gilg
a2489a4110 Support cursor hints on locked pointer
Summary:
Implement support for locked pointer cursor hints. Cursor hints can be
retrieved by the compositor either continuously by connecting to the
cursorHintChanged signal or only when needed. In the later case the
compositor must connect to the aboutToUnbound signal of the locked pointer
interface in order to fetch the last hint before the interface is unbound.

Test Plan: Autotest added.

Reviewers: #plasma, davidedmundson

Reviewed By: #plasma, davidedmundson

Subscribers: davidedmundson, kde-frameworks-devel

Tags: #frameworks

Maniphest Tasks: T4692

Differential Revision: https://phabricator.kde.org/D14175
2018-07-23 10:54:54 +02:00
Roman Gilg
7809e83049 Reduce unnecessary long wait times on failing signal spies
Summary:
Several signal spies, which were supposed to fail, were waiting for the
default 5 seconds, which is most often unnecessary long.

This patch sets a time limit of 500ms in suitable cases. Reduces for me
the total test time by 40%.

Test Plan:
Before (with fixed seat and selection tests):
98% tests passed, 1 tests failed out of 45

Total Test time (real) = 173.31 sec

The following tests FAILED:
         19 - kwayland-testWindowmanagement (Failed)

After:
98% tests passed, 1 tests failed out of 45

Total Test time (real) = 102.12 sec

The following tests FAILED:
         19 - kwayland-testWindowmanagement (Failed)

Reviewers: #plasma, davidedmundson

Reviewed By: #plasma, davidedmundson

Subscribers: kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D14184
2018-07-18 11:03:06 +02:00
Roman Gilg
d544837e91 Fix selection and seat auto tests
Summary:
The seat test is broken since 312298e2f6, because a frame event now
also follows a relative pointer motion.

The selection test is broken since d3f15a5388, because clearing a selection,
which never has been set, is a noop now.

Reviewers: #plasma, davidedmundson

Reviewed By: #plasma, davidedmundson

Subscribers: kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D14183
2018-07-18 11:01:22 +02:00
David Edmundson
350f572a83 Populate shell version documentation 2018-07-16 16:13:16 +02:00
David Edmundson
2f8be1089c Replace remaining V5 compat global includes 2018-07-16 14:21:30 +02:00
David Edmundson
8af1ec8885 Add XDG WM Base support to our XDGShell API
Summary:
This adds XDG WM Base (essentially XDG Shell v7/stable edition) into our
existing XDGShell classes which wrap v5, v6 and now this.

It's mostly copy and paste from V6 except for the enum types for gravity
and anchor edges on positioners.

There's been no attempt to share code with V6 as realistically that
won't get updates whereas XDGWMBase will; and at some point we will
want to drop V6 without things being too tangled.

Test Plan:
Same test suite as V6 has

Compiled GTK master and ran against suitably modified kwin
running WAYLAND_DEBUG=1 gtk-demo showed we were using this interface
Everything worked as well as V6 does.

Reviewers: #kwin, romangg

Reviewed By: #kwin, romangg

Subscribers: romangg, zzag, kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D13510
2018-07-16 13:50:51 +02:00
David Edmundson
7442b72b93 Make XDGShellV5 co-compilable with XDGWMBase
Summary:
When we add WMBase (the new name stable XdgShell)  we get a clash with
XDGShellV5. This clash consists of all functions in the generated C file
which clashes at linker time, as well as multiple xdg_blah_interface
structs which would get redefined.

XDGShellV5 in practice is used by literally no-one (Qt never defaulted
to it if wl-shell was available) and has been dropped from GTK when
they added v6. But it's used by some kwin unit tests so breaking
would cause issues for stable kwin release tests... so it's a pain.

We can't mod the XML as we need the strings sent down the wire to remain
the same and we need the same names for our forward declared structs
that the client code can cast to.

This patch copies the generated files and modifies them manually.
Hacky, but we know this code will never change again - and IMHO this
task isn't one worth investing too much time into.

Test Plan:
Finished my XDG WM Base patch (see next phab) and things compile \o/

Unit test still passes

Ran: QT_WAYLAND_SHELL_INTEGRATION=xdg-shell-v5 dolphin --platform wayland and verified it worked

Reviewers: #plasma, romangg

Reviewed By: #plasma, romangg

Subscribers: romangg, kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D13488
2018-07-16 13:50:51 +02:00
Bhushan Shah
cb5847e726 Fix some of cppcheck warnings
Summary:
- selfInitialization
- memleak

I could probably suppress the selfInitialization warning, but probably
is cleaner this way. Opinions welcome. This also fixes the memleak in
autotest.

Test Plan:
- arc lint --everything
- Fix issues
- build
- run tests

Reviewers: #frameworks, aacid

Reviewed By: aacid

Subscribers: apol, aacid, kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D13559
2018-07-04 15:54:26 +05:30
Roman Gilg
312298e2f6 [server] Send frame event instead of flush on relative pointer motion
Summary:
This solves for me not working relative pointer motion with grab/lock in
Xwayland applications.

Looking at the Xwayland code it is clear, that it expects a frame event on
wl_pointer versions 5 and above after relative motion events. wl_pointer
version 5 support was added to KWayland in c29035a6.

If the cursor is locked no absolute motion events are sent. In this case to
make sure relative motion events are processed by the client, send the frame
event after every relative motion.

BUG: 395815

Test Plan: Manually with Neverball in Xwayland mode.

Reviewers: #plasma, #kwin, #frameworks, davidedmundson

Reviewed By: #plasma, #kwin, davidedmundson

Subscribers: davidedmundson, kde-frameworks-devel

Tags: #frameworks

Maniphest Tasks: T8923

Differential Revision: https://phabricator.kde.org/D13257
2018-06-26 16:35:48 +02:00
David Edmundson
098fe1b4ca Fix XDGV6 popup test
Summary:
We had a data funciton...then didn't use it, effectively skpping half of
the point of the test.

Test Plan: Ran the test

Reviewers: #kwin, mart

Reviewed By: #kwin, mart

Subscribers: romangg, kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D13495
2018-06-22 11:49:52 +01:00
Michal Srb
d3f15a5388 Do not cancel old clipboard selection if it is same as the new one.
Summary:
GTK applications seem to call wl_data_device::set_selection multiple times with
the same wl_data_source object, replacing it with itself. If we cancel it, they
will destroy it and the selection will be gone.

With this patch it is again possible to copy from GTK applications.

BUG: 395366

Test Plan: Patch provided by the reporter, he reported success.

Reviewers: #plasma, #frameworks, romangg

Reviewed By: #plasma, romangg

Subscribers: michalsrb, romangg, graesslin, kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D13535
2018-06-21 16:42:39 +02:00
Bhushan Shah
b8381f3718 Fix some spelling issues suggested by new linter tool
Reviewed-by: romangg
2018-06-15 14:33:34 +05:30
Bhushan Shah
1710d3e02c Add the arclint file in kwayland
Summary:
- xml linter to make sure that we don't add broken protocols
- merge-conflict so that we don't commit merge-conflict markers
- spell check for documentation
- cppcheck to check the code

Test Plan: broke some files manually, and then ran arc lint

Reviewers: #frameworks, mart

Reviewed By: mart

Subscribers: kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D13533
2018-06-15 14:13:12 +05:30
Vlad Zagorodniy
c6a864f03e Fix 'unused parameter' warnings
Summary:
The warnings:

```
/home/vlad/KDE/src/frameworks/kwayland/src/server/xdgforeign_v2_interface.cpp: In static member function ‘static void
KWayland::Server::XdgExporterUnstableV2Interface::Private::destroyCallback(wl_client*, wl_resource*)’:
/home/vlad/KDE/src/frameworks/kwayland/src/server/xdgforeign_v2_interface.cpp:95:95: warning: unused parameter ‘resource’
[-Wunused-parameter]
 void XdgExporterUnstableV2Interface::Private::destroyCallback(wl_client *client, wl_resource *resource)
                                                                                  ~~~~~~~~~~~~~^~~~~~~~
/home/vlad/KDE/src/frameworks/kwayland/src/server/xdgforeign_v2_interface.cpp: In static member function ‘static void
KWayland::Server::XdgImporterUnstableV2Interface::Private::destroyCallback(wl_client*, wl_resource*)’:
/home/vlad/KDE/src/frameworks/kwayland/src/server/xdgforeign_v2_interface.cpp:237:95: warning: unused parameter ‘resource’
[-Wunused-parameter]
 void XdgImporterUnstableV2Interface::Private::destroyCallback(wl_client *client, wl_resource *resource)
                                                                                  ~~~~~~~~~~~~~^~~~~~~~
/home/vlad/KDE/src/frameworks/kwayland/src/server/xdgforeign_v2_interface.cpp: In static member function ‘static void
KWayland::Server::XdgImportedUnstableV2Interface::Private::setParentOfCallback(wl_client*, wl_resource*, wl_resource*)’:
/home/vlad/KDE/src/frameworks/kwayland/src/server/xdgforeign_v2_interface.cpp:439:78: warning: unused parameter ‘client’
[-Wunused-parameter]
 void XdgImportedUnstableV2Interface::Private::setParentOfCallback(wl_client *client, wl_resource *resource, wl_resource *
surface)
                                                                   ~~~~~~~~~~~^~~~~~

/home/vlad/KDE/src/frameworks/kwayland/src/server/xdgoutput_interface.cpp: In constructor
‘KWayland::Server::XdgOutputManagerInterface::XdgOutputManagerInterface(KWayland::Server::Display*, QObject*)’:
/home/vlad/KDE/src/frameworks/kwayland/src/server/xdgoutput_interface.cpp:88:81: warning: unused parameter ‘parent’
[-Wunused-parameter]
 XdgOutputManagerInterface::XdgOutputManagerInterface(Display *display, QObject *parent)
                                                                        ~~~~~~~~~^~~~~~
```

Test Plan: No more 'unused parameter' warnings.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D13501
2018-06-12 23:26:48 +03:00
David Edmundson
3f31115c3c Documentation fix 2018-06-12 12:42:51 +01:00
Roman Gilg
009017c8bd [server] Small code cleanup in SurfaceInterface
Summary:
Use lambda function to reduce code duplication and put
function definitions in the same order as in the header file.

Test Plan: All autotests succeed.

Reviewers: #plasma, davidedmundson

Reviewed By: #plasma, davidedmundson

Subscribers: davidedmundson, kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D13191
2018-06-10 18:04:21 +02:00
Fabian Vogt
f3d2ae59ff Fixup @since for skip switcher API
Summary: Not released yet.

Test Plan: No testing performed at all.

Reviewers: #plasma, stikonas

Reviewed By: stikonas

Subscribers: kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D13377
2018-06-06 09:15:45 +02:00
Roman Gilg
4cc008c9d2 [autotests] Fix surface destroy test
Summary:
Interfaces must be cleaned up correctly and client proxys
destroyed. Otherwise we get a memory corruption.

Reviewers: #plasma, davidedmundson

Reviewed By: #plasma, davidedmundson

Subscribers: kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D13190
2018-05-29 13:51:32 +02:00
Scott Harvey
7d3deb7e68 Add "SkipSwitcher" to API
Summary:
Adding "SkipSwitcher" to API, as a result of discussion in
BUG 375921

Depends on / related to D11924 and D11926.

Reviewers: hein, graesslin

Reviewed By: graesslin

Subscribers: kde-frameworks-devel, lbeltrame, rikmills, davidedmundson, #plasma, graesslin

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D11925
2018-05-22 10:27:43 -05:00
David Edmundson
73cac6211b Set @since version number for XDGOutput 2018-05-17 22:15:55 +01:00
David Edmundson
b2f7c6ea02 Add XDG Output Protocol
Summary:
Done primarily for XWayland which for legacy reasons doesn't assume the
logical size of a display is pixelSize / outputScale. Meaning xwayland
windows that position themselves are wrong in a scaled environment.

It also allows the possibility for us to support fractional scaling
whilst keeping wl_output::scale as an integer.

The protocol is a bit odd as it operates via the FooManager + Foo
pattern rather than using globals like Output so I've wrapped it so it
behaves more like globals.

Test Plan: #plasma

Reviewers: romangg

Subscribers: #frameworks

Tags: #frameworks

Maniphest Tasks: T8501

Differential Revision: https://phabricator.kde.org/D12235
2018-05-15 12:44:54 +01:00
Oleg Chernovskiy
8da9a184ed Add Remote Access interface to KWayland
Summary:
This commit adds an interface bridge from KWin to KRfb. The purpose of
this protocol is to pass a GBM fd of currently displayed buffer from
KWin. The buffer is expected to be fully drawn once it is passed.

Related to D1230

Test Plan:
********* Start testing of RemoteAccessTest *********
Config: Using QtTest library 5.6.0, Qt 5.6.0 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 6.1.1 20160501)
PASS   : RemoteAccessTest::initTestCase()
QDEBUG : RemoteAccessTest::testSendReleaseSingle() kwayland-client: Connected to Wayland server at: "kwayland-test-remote-access-0"
QDEBUG : RemoteAccessTest::testSendReleaseSingle() kwayland-client: Wayland Interface:  wl_shm / 1 / 1
QDEBUG : RemoteAccessTest::testSendReleaseSingle() kwayland-client: Wayland Interface:  org_kde_kwin_remote_access_manager / 2 / 1
QDEBUG : RemoteAccessTest::testSendReleaseSingle() kwayland-server: Server buffer sent: fd 15
QDEBUG : RemoteAccessTest::testSendReleaseSingle() kwayland-client: Got buffer, server fd: 15
QDEBUG : RemoteAccessTest::testSendReleaseSingle() kwayland-server: Remote buffer returned, client 4 , id 0 , fd 15
QDEBUG : RemoteAccessTest::testSendReleaseSingle() kwayland-server: Buffer released, fd 15
QDEBUG : RemoteAccessTest::testSendReleaseSingle() kwayland-client: Buffer released
PASS   : RemoteAccessTest::testSendReleaseSingle()
QDEBUG : RemoteAccessTest::testSendReleaseMultiple() kwayland-client: Connected to Wayland server at: "kwayland-test-remote-access-0"
QDEBUG : RemoteAccessTest::testSendReleaseMultiple() kwayland-client: Wayland Interface:  wl_shm / 1 / 1
QDEBUG : RemoteAccessTest::testSendReleaseMultiple() kwayland-client: Wayland Interface:  org_kde_kwin_remote_access_manager / 2 / 1
QDEBUG : RemoteAccessTest::testSendReleaseMultiple() kwayland-server: Server buffer sent: fd 15
QDEBUG : RemoteAccessTest::testSendReleaseMultiple() kwayland-client: Got buffer, server fd: 15
QDEBUG : RemoteAccessTest::testSendReleaseMultiple() kwayland-client: Got buffer, server fd: 15
QDEBUG : RemoteAccessTest::testSendReleaseMultiple() kwayland-server: Remote buffer returned, client 4 , id 0 , fd 15
QDEBUG : RemoteAccessTest::testSendReleaseMultiple() kwayland-server: Remote buffer returned, client 5 , id 0 , fd 15
QDEBUG : RemoteAccessTest::testSendReleaseMultiple() kwayland-server: Buffer released, fd 15
QDEBUG : RemoteAccessTest::testSendReleaseMultiple() kwayland-client: Buffer released
QDEBUG : RemoteAccessTest::testSendReleaseMultiple() kwayland-client: Buffer released
PASS   : RemoteAccessTest::testSendReleaseMultiple()
QDEBUG : RemoteAccessTest::testSendClientGone() kwayland-client: Connected to Wayland server at: "kwayland-test-remote-access-0"
QDEBUG : RemoteAccessTest::testSendClientGone() kwayland-client: Wayland Interface:  wl_shm / 1 / 1
QDEBUG : RemoteAccessTest::testSendClientGone() kwayland-client: Wayland Interface:  org_kde_kwin_remote_access_manager / 2 / 1
QDEBUG : RemoteAccessTest::testSendClientGone() kwayland-server: Server buffer sent: fd 15
QDEBUG : RemoteAccessTest::testSendClientGone() kwayland-server: Buffer released, fd 15
PASS   : RemoteAccessTest::testSendClientGone()
QDEBUG : RemoteAccessTest::testSendReceiveClientGone() kwayland-client: Connected to Wayland server at: "kwayland-test-remote-access-0"
QDEBUG : RemoteAccessTest::testSendReceiveClientGone() kwayland-client: Wayland Interface:  wl_shm / 1 / 1
QDEBUG : RemoteAccessTest::testSendReceiveClientGone() kwayland-client: Wayland Interface:  org_kde_kwin_remote_access_manager / 2 / 1
QDEBUG : RemoteAccessTest::testSendReceiveClientGone() kwayland-server: Server buffer sent: fd 15
QDEBUG : RemoteAccessTest::testSendReceiveClientGone() kwayland-client: Got buffer, server fd: 15
QDEBUG : RemoteAccessTest::testSendReceiveClientGone() kwayland-client: Buffer released
QDEBUG : RemoteAccessTest::testSendReceiveClientGone() kwayland-server: Buffer released, fd 15
PASS   : RemoteAccessTest::testSendReceiveClientGone()
PASS   : RemoteAccessTest::cleanupTestCase()
Totals: 6 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of RemoteAccessTest *********

Reviewers: graesslin, davidedmundson, romangg

Reviewed By: davidedmundson, romangg

Subscribers: jtamate, jgrulich, romangg, ngraham, alexeymin, #frameworks, davidedmundson, plasma-devel

Tags: #plasma_on_wayland, #frameworks

Maniphest Tasks: T5653, T7785

Differential Revision: https://phabricator.kde.org/D1231
2018-03-25 20:17:25 +03:00
Martin Flöser
c29035a6f0 [server] Add support for the frame semantics of Pointer version 5
Summary:
This change implements the required changes for wl_seat version 5.
There seem to be applications which require version 5 and refuse to
start if the server doesn't provide it. Thus we need to provide it.

The main difference with version 5 is that pointer need to send a
frame event after each logical group of events. As we don't support the
new events from version 5 yet, we just emit the frame after each event
and implement the suggested semantics for the enter/leave behavior.

To really make use of this, we will have to implement additions in the
API and then in KWin to expose the new API elements. But to just support
the semantics we don't need it.

BUG: 389189
FIXED-IN: 5.45

Test Plan: Extended autotest

Reviewers: #kwin, #plasma, #frameworks

Subscribers: plasma-devel

Tags: #frameworks, #plasma

Differential Revision: https://phabricator.kde.org/D10235
2018-03-04 09:48:39 +01:00
Oleg Chernovskiy
300cd607f0 Implement releasing of client-freed output
Summary:
Previously KWin supported only version 2 of wl_output interface
In third version there was an important addition that allowed clients to
unbind outputs they may previously have bound.

Bumping versions in both client and server part of KWayland to support
this behaviour.

Reviewers: davidedmundson, graesslin

Reviewed By: graesslin

Subscribers: jgrulich, #frameworks

Tags: #frameworks

Maniphest Tasks: T7785

Differential Revision: https://phabricator.kde.org/D10929
2018-03-01 22:13:43 +03:00
Martin Flöser
43e71055d2 [server] Properly handle the situation when the DataSource for a drag gets destroyed
Summary:
This addresses the following situation:
1. Start drag on a QtWayland based window
2. Press escape
3. Release mouse

-> this results in a crash. The main reason for this is that QtWayland
destroys the DataSource in step 2 and KWayland did not expect this at
all. The drag and drop operation continued and results in step 3 in the
drag target to request data from the no longer existing DataSource.

This change addresses the root of the problem by cancelling the drag
operation when the DataSource gets destroyed.

BUG: 389221
FIXED-IN: 5.44

Test Plan:
New test case exposing the problem and manual testing with
kwin_wayland and dolphin (based on bug report)

Reviewers: #frameworks, #kwin, #plasma

Subscribers: plasma-devel

Tags: #frameworks, #plasma

Differential Revision: https://phabricator.kde.org/D10142
2018-02-25 14:14:58 +01:00
Martin Flöser
0d52ce8f9b [server] Don't crash when a subsurface gets commited whose parent surface got destroyed
Summary:
Qt seems to damage and commit child subsurfaces although their parent
got destroyed. This actually doesn't make any sense as without a parent
surface they cannot be shown. But nevertheless we should not crash in
such a situation.

This change guards the places in the commit handling code where the
parent gets accessed.

BUG: 389231

Test Plan: New test case which exposes the problem

Reviewers: #frameworks, #kwin, #plasma

Subscribers: plasma-devel

Tags: #plasma, #frameworks

Differential Revision: https://phabricator.kde.org/D10300
2018-02-07 19:41:58 +01:00
Roman Gilg
6d3e7691b5 Fix typo
Summary: Fix a typo

Reviewers: #plasma, davidedmundson

Reviewed By: #plasma, davidedmundson

Subscribers: plasma-devel, #frameworks

Tags: #frameworks, #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D10053
2018-01-23 17:26:13 +01:00
Laurent Montel
c829817117 Remove obsolete reviewboardrc file 2018-01-05 13:24:48 +01:00
David Edmundson
54e1eb103f Resolve some merge issues 2018-01-03 11:07:32 +00:00
David Edmundson
9ba84e0886 Unit test for Server Decoration Palette 2018-01-03 10:44:15 +00:00
David Edmundson
eb52e81eed Create interface for passing server decoration palettes
Summary:
It's kept separate in case we ever merge the server decoration manager
interface upstream, and this is too kwin specific to have in a
potentially shared spec.

Code is a copy+paste of existing boilerplate.

Replaces use of the deprecated qt extended surface.

I'd like to target 5.42 as otherwise we'll have a regression when we
release Plasma 5.12 as Qt's XDGv6 doesn't have a working qt extended
surface.

Test Plan: Attached unit test

Reviewers: #plasma, graesslin

Reviewed By: #plasma, graesslin

Subscribers: plasma-devel, #frameworks

Tags: #frameworks, #plasma

Differential Revision: https://phabricator.kde.org/D9599
2018-01-03 10:34:06 +00:00
David Edmundson
231dc9cba5 Explicitly include std::bind functions
Should fix compile
2018-01-02 10:18:38 +00:00
Martin Flöser
1a5762b9d7 [server] Add a method IdleInterface::simulateUserActivity
Summary:
So far only the client was able to simulate user activity. This new
method allows the server to also simulate user activity on all created
idle timeouts. This is required by KWin to prevent idle timeouts when
the user interacts through KDE Connect's virtual touchpad. In that
situation the mouse pointer is used without updating the input time
stamp as it doesn't come from "real" input devices and thus the idle
timeout prevention is not activated.

Reviewers: #frameworks, #plasma, #kwin

Subscribers: plasma-devel

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D9510
2017-12-29 17:41:42 +01:00
Martin Flöser
e087a3666b Fix regression caused by backward compatibility support in data source
We should only enforce the check whether a data source has set the
actions for drag on drop on a selection if it's at least version 3. For
backward compatibility we used to set a default action which would
ensure that a version <3 and >3 client can interact with each other. But
due to that the action was set to a default value which breaks any
selection. Sorry about that.

This change ensures the backward compatibility behavior does not break
selection.

As the regression causes all clients to quit it is a severe regression
which requires fast action. Due to that I'm doing a maintainer push
without review. I encourage everyone to do a post commit review.

Sorry for not noticing the regression before. The backward compatibility
was the last thing I added in that patch set and apparently I did not
run all tests again.
2017-12-26 21:55:11 +01:00
Martin Flöser
072ad10b4b Fix @since version tags 2017-12-26 20:46:38 +01:00
Martin Flöser
42432a14fc Add support for version 3 of data device manager interface
Summary:
The main difference compared to version 2 is additional drag and drop
actions. The source and destination can negotiate whether the data
should be copied or moved or the user should be asked for either or.
This seems to be important for GTK, but is not yet implemented in Qt.

The main motivation for adding support is that it is required by SDL to
launch on Wayland.

BUG: 386993

Test Plan: Extended test case, sdl apps now start

Reviewers: #frameworks, #plasma, #kwin

Subscribers: plasma-devel

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D9136
2017-12-26 20:41:43 +01:00
David Edmundson
e5631f0e7b Scope exported/imported objects to the test
Summary:
m_imported was parented to the TestForeign class, which lasts for all
the tests. This caused an error on teardown.

Test Plan: Ran with ASAN. Finally everything passes!

Reviewers: #plasma, graesslin

Reviewed By: #plasma, graesslin

Subscribers: plasma-devel, #frameworks

Tags: #frameworks, #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D9407
2017-12-19 15:56:10 +00:00
David Edmundson
d67ce1e86c Fix ASAN warning on TestXdgForeign
Summary:
Internally XdgForeign has some delete laters

If we clean up the connection immediately we delete them after we kill
the connection resulting in an error.

Kwin isn't going to tear down the connection in response to a resource
unbinding so we can just fix the test.

Test Plan:
Compiled with ASAN
Got further

Reviewers: #plasma, graesslin

Reviewed By: #plasma, graesslin

Subscribers: plasma-devel, #frameworks

Tags: #frameworks, #plasma

Differential Revision: https://phabricator.kde.org/D9406
2017-12-19 15:56:06 +00:00
David Edmundson
9251e894e4 Replace QCOMPARE(nullptr) with QVERIFY
QCOMPARE(T*, nullptr) apparently isn't valid on Qt5.7
2017-12-19 08:10:09 +00:00
David Edmundson
53a8a8e6be Fix error in WaylandSurface::testDisconnect
Summary:
This test deletes the client wayland connection.

We then finish the test and call test cleanup which
releases m_idleInhititManager.
Calling release after the connection is destroyed is an error.

Hence the explicit destroy.

Test Plan:
Built tests with ASAN
No more crash

Reviewers: #plasma, graesslin

Reviewed By: #plasma, graesslin

Subscribers: plasma-devel, #frameworks

Tags: #frameworks, #plasma

Differential Revision: https://phabricator.kde.org/D9402
2017-12-19 07:28:54 +00:00
David Edmundson
19ade014bc Explicit QCOMPARE(QString,QString)
Hopefully fix CI
2017-12-19 07:28:20 +00:00
David Edmundson
6a14023c36 Add explicit AppMenu protocol
Summary:
A protocol that attaches to a surface and contains two strings which can
change.

The intended use is for clients to link a DBus Appmenu object with a
surface.

This is in preparation for the Qt Extended Surface deprecation which
currently handles this in Kwin.

Test Plan: Attached unit test

Reviewers: #plasma, graesslin

Reviewed By: #plasma, graesslin

Subscribers: broulik, graesslin, plasma-devel, #frameworks

Tags: #frameworks, #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D8919
2017-12-18 22:08:31 +00:00
David Edmundson
20c53ee098 Fix ASAN warnings in XDGForeignV2Interface
Summary:
The current code captures a char* from a wayland event in a lambda.
By creating the QString first when we capture that by value we'll
implicitly shallow copy it.

The other issue was
someHash.erase(it);
*it->foo();

Even though where the iterator points to is still valid, the iterator
itself is an object that gets modified in erase which ASAN didn't like.

Test Plan:
Ran test.
Those particular errors went away
Tests passed

Subscribers: plasma-devel, #frameworks

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D9319
2017-12-14 07:31:14 +00:00
Montel Laurent
b18f2b2d7a Fix exlude generated file from automoc feature 2017-12-14 07:49:03 +01:00
Christophe Giboudeaux
d4d32870e6 Fix testWaylandFullscreenShell.
Summary: This test needs the weston executable. Skip the test if the program wasn't found.

Reviewers: graesslin

Reviewed By: graesslin

Subscribers: plasma-devel, #frameworks

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D8858
2017-11-27 17:23:58 +01:00
David Edmundson
ec75361d1f Expose wl_display_set_global_filter as a virtual method
Summary:
This allows a server to filter which globals are visible and bindable by
clients.

Design rationale:
Could be it's own class with Display as an arg, but we need the lifespan
to exactly match Display, and the cardinality to match Display and it
needs to be set after we're started but before clients connect.

Better to enfore rules with code than with documentation.

I'm filtering by interface name as there isn't any other good
identifier of what a wl_global refers to, even if you could assume
you can cast the userdata to a Server::Global.

Test Plan: Attached unit test

Reviewers: #plasma, graesslin, bcooksley

Reviewed By: #plasma, graesslin

Subscribers: bcooksley, graesslin, plasma-devel, #frameworks

Tags: #frameworks, #plasma

Differential Revision: https://phabricator.kde.org/D8050
2017-11-17 08:35:17 +00:00
Christophe Giboudeaux
6cf6a4c72c Fix kwayland-testXdgShellV6. 2017-11-16 23:27:52 +01:00
Martin Flöser
665c0535fe Add support for zwp_idle_inhibit_manager_v1
Summary:
This protocol allows to indicate that a wl_surface should inhibit idle
actions such as DPMS, screen locking if the surface is visible.

The protocol is quite simple: it just creates an IdleInhibitor for a
Surface. If such an IdleInhibitor exists the Surface is considered to
inhibit idle.

On the server side it is also exposed like that through the API. The
IdleInhibitorInterface is private to the library and only
SurfaceInterface is extended to expose whether it currently inhibits
idle.

CCBUG: 385956

Test Plan: New test case added

Reviewers: #frameworks, #kwin, #plasma_on_wayland

Subscribers: plasma-devel

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D8396
2017-11-16 20:22:44 +01:00
Martin Flöser
f5cfe92b8a [server] Support inhibiting the IdleInterface
Summary:
This is a preparation step to support idle_inhibit_unstable_v1 protocol.
As in Plasma powermanagement, screen locking, dpms, etc. is not
controlled by the wayland compositor but by external components through
the IdleTimeout interface the compositor needs a way to inhibit the idle
timeouts. So once idle_inhibit_unstable_v1 is implemented the compositor
can hook this up to the inhibit API in IdleInterface and thus inhibit
powermanagement, etc. as requested by the idle_inhibit_unstable_v1
protocol.

The added API is straight forward:
 * inhibit: inhibits idle timeouts
 * uninhibit: uninhibits again
 * inhibit and uninhibit must be called in pairs, so twice inhibit,
means uninhibit must be called twice
 * isInhibited: whether it's inhibited
 * and a signal that it changed

The signal is mostly used internally to stop the timers.

Test Plan: Test case extended

Reviewers: #frameworks, #kwin, #plasma_on_wayland

Subscribers: plasma-devel

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D8383
2017-11-14 17:44:14 +01:00
Marco Martin
7d53e7998c don't qcompare with nullptr
use QVERIFY(!pointer) instead, clang likes it more apparently
2017-10-13 12:08:47 +02:00
Marco Martin
9feb359676 Wayland foreign protocol
Summary:
Implement the "foreign" wayland protocol.
A client can export a surface with an unique string as handle,
then another client can refer to that surface and set an own surface as
child of that surface.
Potential use cases are out-of-process dialogs, such as file dialogs,
meant to be used by sandboxed processes that may not have the access
it needs to implement such dialogs.
The handle needs to be shared between the processes with other means,
such as dbus or command line paramenters.

The public api of the server side only tracks parent/child relationships as this is the only data kwin would need it for, the rest of the api is not exported so should be safer from eventual protocol changes

Test Plan:
the autotest works, but has a lot of random crashes when deleting surfaces,
unfortunately backtraces don't tell much and the crashes never occur when running into valgrind
behavior may still be wrong, depending on how the protocol is supposed
to work if more clients try to set the same exported surface as parent

Reviewers: #plasma, #kwin, davidedmundson, graesslin

Reviewed By: #plasma, #kwin, graesslin

Subscribers: davidedmundson, graesslin, plasma-devel, #frameworks

Tags: #frameworks, #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D7369
2017-10-13 11:30:13 +02:00
David Edmundson
4abf4183e0 Revert "Expose wl_display_set_global_filter as a virtual method"
This reverts commit 62b9960399.

We need to bump versions on CI first
2017-10-10 18:30:56 +02:00
David Edmundson
62b9960399 Expose wl_display_set_global_filter as a virtual method
Summary:
This allows a server to filter which globals are visible and bindable by
clients.

Design rationale:
Could be it's own class with Display as an arg, but we need the lifespan
to exactly match Display, and the cardinality to match Display and it
needs to be set after we're started but before clients connect.

Better to enfore rules with code than with documentation.

I'm filtering by interface name as there isn't any other good
identifier of what a wl_global refers to, even if you could assume
you can cast the userdata to a Server::Global.

Test Plan: Attached unit test

Reviewers: #plasma, graesslin

Reviewed By: #plasma, graesslin

Subscribers: graesslin, plasma-devel, #frameworks

Tags: #frameworks, #plasma

Differential Revision: https://phabricator.kde.org/D8050
2017-10-10 15:00:21 +02:00
David Edmundson
6b460f9a7f Only send OutputConfig sendApplied / sendFailed to the right resource
Summary:
I don't understand the original logic.
s_allResources contains /every/ resource, not just outputconfigurations.

Sending org_kde_kwin_outputconfiguration_send_applied to a wl_surface (for example),
results in an error.

The reason kwin doesn't currently crash is because we don't actually send
applied/failed after setting outputs. (which is another bug)

Test Plan: The existing unit test still passes.

Reviewers: #plasma, sebas

Reviewed By: #plasma, sebas

Subscribers: sebas, plasma-devel, #frameworks

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D7898
2017-09-21 14:11:30 +01:00
David Edmundson
a1cfc8a5f3 Add missing command macro
Seems it was added whilst xdgv6 was in a branch
2017-09-21 12:52:21 +01:00
David Edmundson
01cace30dd Don't crash if a client (legally) uses deleted global contrast manager
Summary:
There is a race condition in the following situation:

    - Server creates a global
    - Client binds to that global (making a new resource for that
global)
    Simultaneously:
    - The client uses this resource
    - The server deletes the global

This was fixed for Blur, but as mention in that commit can also happen here.
Code is effectively a copy and paste from e8850b014c

Test Plan: Unit test. Booted normal session

Reviewers: #plasma

Subscribers: plasma-devel, #frameworks

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D7885
2017-09-20 14:17:46 +01:00
David Edmundson
e8850b014c Don't crash if a client (legally) uses a deleted global
Summary:
There is a race condition in the following situation:

- Server creates a global
- Client binds to that global (making a new resource for that global)
Simultaneously:
- The client uses this resource
- The server deletes the global

We then process an event for a resource linked to a deleted global.

This is noted in the specification, the client documentation says:
"The object remains valid and requests to the object will be
ignored until the client destroys it, to avoid races between the global
going away and a client sending a request to it. "

KWayland does not handle this at all.

The global's user data refer to our C++ wrapper
The resource's user data refer to *the same* C++ wrapper

When the global is deleted the resource user data now refers to garbage.

To fix the issue, instead of setting the resource userdata to the
global, we set it to a smartpointer to the global stored on the heap.

We can then validate if our global is still valid.

Theoretically this applies to every global

Practically there are only 3 globals that don't have the lifespan of the
server. Output (which is read only and doesn't matter), Blur and
BackgroundContrast.

Blur resets it's global when a screen geometry changes.

Unfotunately this exactly at the same time that Plasmashell is
doing a lot of processing and creating some blurs.

Test Plan: See unit test

Reviewers: #plasma, graesslin

Reviewed By: #plasma, graesslin

Subscribers: graesslin, anthonyfieroni, plasma-devel, #frameworks

Tags: #frameworks, #plasma

Differential Revision: https://phabricator.kde.org/D7870
2017-09-19 13:50:16 +01:00
David Edmundson
9faa26330c Update @since docs 2017-09-08 12:31:37 +01:00
David Edmundson
f8198b50c8 Missing licenses 2017-09-04 17:21:15 +01:00
David Edmundson
3c67cc1399 Support XDG v6
Summary:

The main clever part that's not just boring boiler plate is how we
handle the structure change
A surface now has an XDGSurface which then has a an Xdg TopLevel or a
Xdg Popup

We need to fit this into the public API which assumes a surface has a
Surface or a Popup.
The old Surface is similar to the new TopLevel.

The shoehorning works by relying on the fact that a surface without a
role is pretty useless.

Clients create the surface implicitly with the toplevel or implicitly
with the popup.
The server only announced it has a new "XdgSurface" when it gets a new
zxdg_surface_get_toplevel.

----

Popup decisions:
- On popup creation the server should copy the current info from the
positioner and then it gets deleted. Given kwaylands job is to keep
state, we expose all these parameter via popup.

- Due to this positioner is not exposed as a resource anywhere.

- Server API is 100% backwards compatiable.
i.e new code will work identically with v5 clients.

- Client API is not.  Grabs are called separately from the constructor,
and the parent surface changed to an xdgsurface, not a raw surface.
V5 code still works as-is, just not with the new constructors.

It seemed better to match the v6 (and what will be the stable v7) than
to try and do hacks and lose functionality.
Given the client needs to change the code to opt into V6 anyway. I don't
think this is a huge problem.

Test Plan: Current test still passes.

Reviewers: #plasma, graesslin

Reviewed By: #plasma, graesslin

Subscribers: graesslin, mart, plasma-devel, #frameworks

Tags: #frameworks, #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D6047
2017-09-04 16:56:24 +01:00
David Edmundson
f1491e009e Treat input RGB buffers as premultiplied
Summary:
Currently the server treats incoming buffers as not premultiplied.

KWayland::Client sends data that is ARGB32 and ARGB32_Premultiplied as
the same
WL_SHM_FORMAT_ARGB8888.

According to a post on wayland-devel by Fredrik Höglund, all RGB data
should be treated as premultiplied, which matches what Qt is doing.

Client now performs a conversion rather than sending
mismatched data,

Note: This commit will still breaks a bunch of tests in
kwin as it compares the server output to a fixed
QImage with a format.

Test Plan:
Existing tests pass

Modified surface test to check the pixel data relative to the output
QImage format
not the input format (i.e both input from ARGB32 and
ARGB32_Premultiplied) should
both end up in a QImage with format Premultiplied with premultiplied
values.

The existing test was confirming that data was corrupted, checking that
even though
the output format was not pre-multiplied, the data was.

Reviewers: #plasma, graesslin

Reviewed By: #plasma, graesslin

Subscribers: plasma-devel, #frameworks

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D7460
2017-08-30 09:58:36 +01:00
David Edmundson
9b564c4069 Update SurfaceInterface outputs when an output global gets destroyed
Summary:
As per existing TODO.

A new signal is added on Global to emit so we can process the result
whist we still have a valid object. The name is overly explicit to try
and logically separate it from QObject::destroyed().

Test Plan: Updated existing unit test.

Reviewers: #plasma, graesslin

Reviewed By: #plasma, graesslin

Subscribers: graesslin, anthonyfieroni, plasma-devel, #frameworks

Tags: #frameworks, #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D7531
2017-08-26 11:54:10 +01:00
David Edmundson
ec8887ad27 KWayland::Client::Surface track output destruction
Summary:
A compositor should send left events before deleting an output; however
if it doesn't, we don't want dangly pointers in our list of outputs on
the client surface.

Test Plan: Unit test

Reviewers: #plasma, graesslin

Reviewed By: #plasma, graesslin

Subscribers: plasma-devel, #frameworks

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D7379
2017-08-18 15:14:36 +01:00
David Edmundson
eac4973697 Avoid sending data offers from an invalid source.
Summary:
A DataDevice will have a source when offers are available, but it can
also be legitimately cleared.

When calling DataDeviceInterface::sendSelection(DataDeviceInterface
*other) if the other data device has no source, we should be setting
that we also have no source.

In addition this also guards against Seat tracking a DataDeviceInterface
with no source when trying to sync x clipboards.

BUG: 383054

Reviewers: #plasma

Subscribers: graesslin, plasma-devel, #frameworks

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D7316
2017-08-16 00:17:32 +01:00
David Faure
cac7d766b1 Make unittest independent from the location of the executable.
Summary:
This fixes the check in the unittest when doing
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
which I intend to do globally at some point.

Turns out it's comparing with its own executable location, so we
can use QCoreApplication to get it generically.

Test Plan: Verified to work with ctest and with "./testWaylandServerDisplay"

Reviewers: graesslin, mart

Reviewed By: graesslin, mart

Subscribers: plasma-devel, #frameworks

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D6974
2017-07-30 01:05:45 +02:00
David Faure
0c42a1bfeb autotests: prepare for CMAKE_RUNTIME_OUTPUT_DIRECTORY being set
Scripted with
perl -pi -e 's/add_test\(([^ ]*) (.*?)\)/add_test(NAME $1 COMMAND $2)/' CMakeLists.txt
2017-07-29 08:27:59 +02:00
David Edmundson
e8ef0ea68f Destroy all kwayland objects created by registry when it is destroyed
Summary:
Currently one has to connect every object manually to connectionDied,
which is something we can do for them.

If the user also has a connection, the second will just no-op.

This fixes objects that linger longer than the QApp.

Reviewers: graesslin

Reviewed By: graesslin

Subscribers: graesslin, plasma-devel, #frameworks

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D6727
2017-07-28 09:51:46 +01:00
Martin Flöser
c6b085f5eb [client] Track all created ConnectionThreads and add API to access them
Summary:
This is change needed by KWin. KWin has the problem that it destroys its
internal Wayland connection (KWin as client for KWin as server) before
shutting down the application. Other external libraries loaded into KWin
(e.g. breeze window decoration) are unloaded later on, then try to clean
up their Wayland resources and crash KWin due to accessing a no longer
valid Wayland connection.

With the help of this new API KWin can access all connections during
the clean up and destroy them before shutting down the Wayland server and
thus exit cleanly.

Reviewers: #frameworks, #plasma, #kwin

Subscribers: plasma-devel

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D6569
2017-07-21 07:14:22 +02:00
Martin Flöser
dd873cb980 [server] Send text input leave if focused surface gets unbound
Summary: As 9266a94400 just for text input.

Test Plan: Adjusted test passes, fails without adjustment

Reviewers: #plasma, #frameworks

Subscribers: plasma-devel

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D6786
2017-07-19 20:17:56 +02:00
Martin Flöser
1b989a0464 [server] Send pointer leave if focused surface gets unbound
Summary: As 9266a94400 just for pointer.

Reviewers: #plasma, #frameworks

Subscribers: plasma-devel

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D6754
2017-07-19 07:13:18 +02:00
Martin Flöser
3db6bd64fe Drop unused variable 2017-07-17 17:03:40 +02:00
Martin Flöser
63102e1215 [client] Properly track enteredSurface in Keyboard
Summary:
ASAN found a heap-use-after-free when deleting the focused keyboard
surface in the client library. Keyboard did not track the lifetime of
the focused surface and thus one can access already freed memory.

Test Plan: Adjusted auto test to verify the variable gets cleared

Reviewers: #frameworks, #plasma

Subscribers: plasma-devel

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D6741
2017-07-16 20:25:12 +02:00
Martin Flöser
9266a94400 [server] Send keyboard leave when client destroys the focused surface
Summary:
This is a change inspired by https://bugreports.qt.io/browse/QTBUG-61930.
When Qt closes a window due to a key press event it starts to repeat the
event as KWayland does not send a keyboard leave event. Weston on the
other hand does send out the keyboard leave. In my opinion it doesn't
make much sense to send out the keyboard leave in this situation and in
my opinion that is a client bug, but if it makes clients happy we can
send them the keyboard leave. Similar this should be done for pointer,
touch, etc.

BUG: 382280

Test Plan: Run the example added to the Qt bug and it worked fine

Reviewers: #frameworks, #plasma

Subscribers: plasma-devel

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D6683
2017-07-16 16:25:25 +02:00
Martin Gräßlin
464ba18321 [autotests/server] Check whether test is run as root
If the test is run as root we cannot compare the user id to not be 0.
Thus let's check for that and expect fail.
2017-07-01 17:01:18 +02:00
Friedrich W. H. Kossebau
ac1a3b8b90 [FEATURE] Option to build & install QCH file with the public API dox
Using the new extra-cmake-modules module ECMAddQch (since 5.36.0)
this adds the option to automatically build and install a file
in QCH format with the docs about the public API, which then can be
used e.g. in Qt Assistant, Qt Creator or KDevelop.

Additionally the installed cmake config files will be extended
with a target KF5Wayland_QCH containing information about how to "link"
into the generated QCH file, which then can be used in the cmake build
system of other libraries building on this library, by
simply listing this target in "LINK_QCHS" of their ecm_add_qch() usage.
And a respective doxygen tag file with all the metadata about the
generated QCH file and used for the "linking" will be created and
installed.

Pass -DBUILD_QCH=ON to cmake to enable this.
2017-06-05 03:03:25 +02:00
Friedrich W. H. Kossebau
c010a9fae0 Autotests: solve warning for QProcess::ProcessState metatype registration 2017-06-03 01:16:11 +02:00
Friedrich W. H. Kossebau
2da0a9428d Fix for TestQtSurfaceExtension in path with spaces
Use the QProcess::start() variant with explicit (empty, in these cases)
arguments, so the program strings are not parsed as shell commands,
thus preserving paths with spaces as such.
2017-06-03 00:16:59 +02:00
Friedrich W. H. Kossebau
43aca8a949 API dox: add some minimal docs to more class to have them covered by doxygen 2017-05-26 18:33:25 +02:00
Friedrich W. H. Kossebau
36fdc9c811 API dox: add some minimal docs to class to have them covered by doxygen 2017-05-26 03:35:03 +02:00
Friedrich W. H. Kossebau
70d23d068a API dox: Use doxygen notation to have comments used 2017-05-26 03:34:55 +02:00
Friedrich W. H. Kossebau
c4ba4bd593 API dox: fix @link usage
@link either needs a matching @endlink tag,
or being used in javadoc style, {@link target [label]}
2017-05-26 02:57:20 +02:00
Marco Martin
7d10af91b1 add requestToggleKeepAbove/below
Summary: client requests to toggle those states, to be used by libtaskmanager

Test Plan: setting keep above from the taskbar works

Reviewers: #plasma, hein, graesslin, #plasma_on_wayland

Reviewed By: #plasma, hein

Subscribers: graesslin, hein, plasma-devel, #frameworks

Tags: #frameworks, #plasma

Differential Revision: https://phabricator.kde.org/D5757
2017-05-24 18:02:22 +02:00
David Edmundson
e182a2cc24 Remove pid changedSignal in Client::PlasmaWindow
Summary: Verified it it send before the initial_state and adjust tests and docs accordingly

Test Plan: All unit tests pass

Reviewers: #plasma, graesslin

Reviewed By: #plasma, graesslin

Subscribers: graesslin, plasma-devel, #frameworks

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D5887
2017-05-16 15:54:08 +01:00
Sebastian Kügler
1154b2a6fd add pid to plasma window management protocol
Summary:
This patch adds a pid event to the plasma window management protocol. It
allows the compositor to tell allow a mapping between windows and processes.

Bumps the version number of the interface to 8 to indicate this.

Test Plan: autotest added, passed

Reviewers: #plasma, hein, graesslin

Reviewed By: #plasma, hein, graesslin

Subscribers: apol, davidedmundson, plasma-devel, #frameworks

Tags: #frameworks, #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D5747
2017-05-13 17:09:12 +02:00
David Edmundson
67521b975b Validate surface is valid when sending TextInput leave event
Summary:
It's possible for the surface to be unbound when we send the leave
event; we've called Resource::unbind() of Surface, so the Surface has,
deleteLater called, but it's still a valid object, and the first check
passes.

We get in this situation because when a surface is destroyed, we're
handling text input from the same source event.

Sending a nullpointer is a protocol error, and wayland kindly closes the
connection.

This fixes my constant:
"Did the Wayland server die" error messages when running clients.

Test Plan:
Got errors after setting up qt virtual keyboard.
Had reproducible case.
Restarted kwin after this patch, now doesn't crash.

Reviewers: #plasma, graesslin

Subscribers: apol, graesslin, plasma-devel, #frameworks

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D5712
2017-05-05 18:51:34 +02:00
Adriaan de Groot
6df5c8733e Fix autotests on the FreeBSD CI.
Summary: Include <errno.h> explicitly, for EPROTO.

Reviewers: bcooksley, graesslin, davidedmundson

Reviewed By: davidedmundson

Subscribers: plasma-devel, #frameworks

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D5717
2017-05-05 17:27:24 +02:00
Martin Gräßlin
bccb1f4cba Add support for wl_shell_surface::set_popup and popup_done
Summary:
This extends the client side API to support creating popup ShellSurface
windows and the server side API to send out the popup_done request.

This is needed to properly support popup windows (e.g. context menus)
in KWin.

Reviewers: #plasma_on_wayland, #frameworks, #kwin

Subscribers: plasma-devel

Tags: #plasma_on_wayland, #frameworks

Differential Revision: https://phabricator.kde.org/D5174
2017-03-25 17:43:47 +01:00
Kevin Funk
a1c8ea01d7 Prefer nullptr over Q_NULLPTR 2017-01-16 18:17:33 +01:00
Kevin Funk
218631efce Use nullptr everywhere
Differential Revision: https://phabricator.kde.org/D3987
2017-01-16 09:44:16 +01:00
Sven Brauch
1c6b81f9ce GIT_SILENT add missing include(CMakeFindDependencyMacro) 2017-01-04 00:57:30 +01:00
Martin Gräßlin
49d57b342c [client] Fix nullptr dereference in ConfinedPointer and LockedPointer
The setRegion call allows a null region. This means nullptr is an
allowed value which can be passed to ConfinedPointer::setRegion and
LockedPointer::setRegion.

In that case we crash if we try to convert the Region into a wl_region.
Thus add proper nullptr check, just like in
PointerConstraints::lockPointer and ::confinePointer.

Auto test adjusted to cover the condition.
2016-11-25 13:14:14 +01:00
Martin Gräßlin
a1990e9cc5 [server] Fix regression in SeatInterface::end/cancelPointerPinchGesture
Regression with c72510c932 which removed a
needed source code line.

Thanks build.kde.org!
2016-11-24 09:36:18 +01:00
Martin Gräßlin
b44a8fb556 Implementation of PointerConstraints protcol
Summary:
The pointer constraints protocol is an unstable protocol and thus
the implementation follows the semantics of unstable protocols.

The protocol allows to create a constraint on the pointer - either a
lock or a confinement on a surface. Those are not activated at once, but
when the compositor actively grants it.

During lock no further pointer motion is emitted, during confinement the
pointer is kept in a certain area.

This implements T4451.

Reviewers: #plasma_on_wayland

Subscribers: plasma-devel

Tags: #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D3466
2016-11-24 09:19:36 +01:00
Martin Gräßlin
c72510c932 [server] Reduce overhead of pointersForSurface
Summary:
In SeatInterface we need to get all PointerInterfaces related to a given
Surface (Client) and call a method on it. The implementation we had so
far went through all Pointers and put all PointerInterfaces into a new
temporary QVector. In most cases all we did then was iterating over the
returned vector.

Which means we created a temporary vector for nothing.

This change implements a kind of std::for_each with the constraints of
the previously used pointersForSurface which does the check that Surface
is not null and that the client matches. If a PointerInterface is found
for that, the passed in method is invoked on it.

Reviewers: #plasma_on_wayland

Subscribers: plasma-devel

Tags: #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D3295
2016-11-24 09:19:12 +01:00
David Edmundson
8b3ecf8436 Return SurfaceInterface::size in global compositor space
REVIEW: 129358
2016-11-16 14:50:50 +00:00
Martin Gräßlin
bfbc8b9c54 [tools/generator] Generate enum FooInterfaceVersion on server side
With this change the generator is able to detect whether an interface
follows the unstable semantics. In that case the header file on server
side looks different. An enum needs to be generated containing the
interface version. Each of the generated classes has a new method
interfaceVersion returning that enum. The ctor of the class is protected
instead of private.

So far only the header side is adjusted. The implementation currently
generates not matching code.
2016-11-10 08:25:45 +01:00
Martin Gräßlin
40ae294abd [tools/generate] Wrap wl_fixed request args in wl_fixed_from_double
We pass a qreal to the wl_fixed and for that need to wrap it in
wl_fixed_from_double.
2016-11-08 12:29:32 +01:00
Martin Gräßlin
ccdcb43680 [tools/generate] Generate implementation of client side requests
Like in the factored method case, just for generic requests.
2016-11-08 10:58:45 +01:00
Martin Gräßlin
8cbf16b737 [tools/generator] Generate client side resource factories
The code needed in a client global to create a client resource is pretty
much the same in all interfaces. Thus we can generate it.
2016-11-08 10:17:43 +01:00
Martin Gräßlin
64f0117b43 [tools/generator] Generate callbacks and listener on client side
* static void fooCallback definitions added to Private class
* static const foo_listener s_lister added to Private class
* Private::setup generates the foo_add_listner call
* implementation of s_listener added
* base implementation with a TODO marker added for the callbacks
2016-11-08 09:45:28 +01:00
Martin Gräßlin
1bc3818e54 [tools/generator] Pass this as q pointer to Client::Resource::Private
Experience showed that in most cases we need the q pointer in the
resource private class on the client side.
2016-11-08 08:25:33 +01:00
Martin Gräßlin
dba0d77318 [tools/generator] Generate Private::setup(wl_foo *arg) on client side
Experience showed that most generated classes need a dedicated setup
method in the Private in order to add a listener.
2016-11-08 08:00:40 +01:00
Martin Gräßlin
58a6740e48 Fix build - KWayland_SOURCE_DIR instead of KWAYLAND_SOURCE_DIR
Change was prepared prior to project name change. Sorry about breaking.
2016-11-07 13:34:08 +01:00
Martin Gräßlin
a3a7356995 Implementation of PointerGestures protocol
Summary:
Pointer gestures are created for a pointer and there are two types of
gestures: swipe and pinch.

At a given time there can only be one active gesture. The implementation
in SeatInterface ensures that there can only be one active gesture.

Each gesture consists of a start event, 0 to multiple update events and
an end event. The end can also be a cancel. To better support this the
implementation doesn't follow the protocol and splits end and cancel
into dedicated methods in the server side and into dedicated signals in
the client side.

Reviewers: #plasma_on_wayland

Subscribers: plasma-devel

Tags: #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D3169
2016-11-07 13:28:44 +01:00
Friedrich W. H. Kossebau
4513dad684 Unbreak build: adapt cmake var names to KWAYLAND->KWayland change
project() sets more variables than I remembered

Fix-up for f90f647227508943ec8f919285fd16f0440261b9
2016-11-03 16:46:37 +01:00
Harald Sitter
99bcb89c3b Remove /KF5 include directory injection
This is ancient code that is outright wrong most of the time and at best
just incredibly unnecessary.
It is also not present in the great majority of frameworks due to this.

Its wrongness comes from the fact that it hardcodes the installation path,
which breaks relocatability of the KF5 tree as it will always attempt to
find the include dir $PREFIX/KF5 (e.g. /usr/include/KF5), which may or may
not exist given that the tree was relocated.
Worse yet, in a cross-building scenario we maybe for example
build on ARM and install to /usr but for cross building take the entire ARM
tree and shift it into /arm/usr/. If we then crossbuild on that tree the
bogus include list in this framework will make sure that we always search
in /usr/include/KF5 and thus potentially load a !ARM header simply because
the relevant ARM header was not installed etc.. Similarly of course a
build in $HOME can pick up /usr/include/KF5 headers because the home ones
are missing, causing unexpected results.
This happens whenever the KDE_INSTALL_INCLUDEDIR_KF5 var is absolute, which
it usually is.

On top of all that the premise of the code in question is flawed. It seeks
to add $PREFIX/$KF5INCLUDES to the search paths (e.g. /usr/include/KF5).
This is unnecessary because the target itself is properly installed via
cmake's install(TARGETS ... EXPORT ...) function [1]. This function has
smart functionality built in which will add the passed INCLUDES destination
to the INTERFACE_INCLUDE_DIRECTORIES property of the targets (i.e. what
the useless code wants to do) [2].
So what happens is that we install the target to the
KF5 locations, which has "include/KF5" as INCLUDES location,
thus causing the correct path to be added to the includes list of the
Targets.cmake file.
In particular thanks to more internal magic in cmake it will do so with
automatically resolved root paths such that the installed tree is
relocatable and able to relatively find the other KF5/* headers. So it
does what the code in question wants to do, just correctly.

Since cmake automatically takes care of injecting $prefix/include/KF5 we
can simply get rid of the wrong custom inejection code. This makes the
generated cmake file find the correct include/KF5/ directory and stops it
from always expecting a /usr/include/KF5/ directory to be present.

[1] https://cmake.org/cmake/help/v3.0/command/install.html
[2] https://cmake.org/cmake/help/v3.0/command/install.html
> The INCLUDES DESTINATION specifies a list of directories which will be
> added to the INTERFACE_INCLUDE_DIRECTORIES target property of the
> <targets> when exported by the install(EXPORT) command.

REVIEW: 129273
CHANGELOG: Improved relocatability of CMake export
2016-10-28 14:08:44 +02:00
Martin Gräßlin
de59c3d9b2 [autotests] Fix TestWaylandConnectionThread::testConnectFdNoSocketName
Same as 611df30ecc for the next test
method.
2016-10-28 09:15:24 +02:00
Martin Gräßlin
611df30ecc [autotest] fix WaylandConnectionThread::testConnectFd
The test destroyed the connection prior to destroying registry and event
queue. Thus causing problems. Hopefully this change fixes the segfault
on build.kde.org.
2016-10-28 08:57:22 +02:00
Martin Gräßlin
3f0c879713 [autotests] Try fixing TestWaylandOutputManagement
The test has KWayland::Client objects like Registry as member variables
of the test object. This causes the objects to be destroyed with the
dtor after cleanupTestCase is run which destroys the connection and
Wayland server. At least on the CI system this seems to cause problem.

In general our tests do not keep any state around, especially not
KWayland::Client objects. The normal way is to have a new dedicated
client connection for every test method. This test doesn't follow this
approach at all.

In case that this change does not fix the test and still crashes on
build.kde.org the only option is to drop the test and replace it by a
new variant which follows the approach of other tests.
2016-10-28 08:39:28 +02:00
Martin Gräßlin
37d17b2929 [autotests] Improve TestWaylandOutputManagement::cleanupTestCase
Reorder the cleanup code. It doesn't make sense to delete the client
side objects after deleting the server side objects. This might be a
reason for the failing tests on build.kde.org.
2016-10-28 07:39:15 +02:00
Martin Gräßlin
945b5f086f [tools] Fix generation of wayland_pointer_p.h
It was missing the _p suffix.
2016-10-26 08:44:42 +02:00
Martin Gräßlin
971694c28f [tools] Generate eventQueue methods only for global classes
The event queue gets set by the factory method for resource classes.
2016-10-25 14:29:19 +02:00
Martin Gräßlin
568ab11239 [tools] Generate #include "wayland_pointer.h"
In the client cpp file this include should be generated.
2016-10-25 14:28:39 +02:00
Martin Gräßlin
80d45c4c21 [server] Fix crash on updating focused keyboard surface
Summary:
In case the current selection does not have a DataSourceInterface
updating the focused keyboard surface resulted in a crash. The current
selection is sent to the DataDeviceInterface of the newly focused
client and thus a DataOfferInterface would be created for a null
DataSourceInterface.

This is a similar fix as D3148 and D3149.

Test Plan: Test case added which used to crash before

Reviewers: #plasma_on_wayland

Subscribers: plasma-devel

Tags: #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D3150
2016-10-24 11:20:13 +02:00
Martin Gräßlin
be04b54827 [server] Fix possible crash on creation of DataDevice
Summary:
This is a similar condition as D3148. If a DataDeviceInterface is
created for the currently focused keyboard Surface the current selection
is sent to the new DataDeviceInterface. If the current selection does
not have a DataSourceInterface a DataOfferInterface for a null
DataSourceInterface would be created and result in a crash.

This change verifies that there is a DataSourcInterface on the current
selection prior to sending out the selection.

Test Plan:
A test case is added which simulates the condition by
using two clients.

Reviewers: #plasma_on_wayland

Subscribers: plasma-devel

Tags: #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D3149
2016-10-24 11:08:07 +02:00
Martin Gräßlin
988a239637 [server] Ensure we have a DataSource on the DataDevice in setSelection
Summary:
SeatInterface provides a way to set the current selection. This method
did not verify whether the new DataDeviceInterface actually has a
DataSourceInterface. If there is no DataSourceInterface on that
DataDeviceInterface the selection should not be sent to the current
selection owner. This results in a crash as DataOfferInterface
(correctly) doesn't expect the passed in DataSourceInterface to be null.

To ensure we don't hit this again the DataOfferInterface ctor gained an
Q_ASSERT to validate the DataSourceInterface.

Reviewers: #plasma_on_wayland

Subscribers: plasma-devel

Tags: #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D3148
2016-10-24 10:08:59 +02:00
Martin Gräßlin
a037a0cb4f [tools/generator] Improve resource destruction on server side
The generator misdetected the destructor Requests by looking at the
arguments instead of the type of the request.

In addition the destructor handling changed in KWayland::Server since
the generator got created. There is now a shared implementation for the
Resource destruction. The generator is adjusted to generate the code for
that and implements the destruction for the Global resource destruction.
2016-10-20 14:53:43 +02:00
Martin Gräßlin
41d07de410 Add request to have focus in a PlasmaShellSurface of Role Panel
Summary:
By default a panel does not take focus. But there are panels which
should get keyboard focus. Examples in a Plasma session are the widget
explorer.

This change adds a new request to PlasmaShell interface to specify
whether a panel should get focus. The compositor can use this request to
decide whether to pass focus to a panel.

Reviewers: #plasma_on_wayland

Subscribers: plasma-devel

Tags: #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D3035
2016-10-18 07:47:10 +02:00
Martin Gräßlin
c291752819 Add auto-hiding panel support to PlasmaShellSurface interface
Summary:
This change adds support for auto-hiding panels. A PlasmaShellSurface
with Role Panel and PanelBehavior AutoHide can request to get
auto-hidden at a screen edge. The compositor will then not show the
surface although it is still mapped and will show it again once the
screen edge gets triggered.

The interface is extended by one new request to allow the client to
request the hiding of the surface. In addition two events are added to
inform the client when the surface got hidden and when it got shown
again.

Reviewers: #plasma_on_wayland

Subscribers: plasma-devel

Tags: #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D3007
2016-10-17 09:04:16 +02:00
Martin Gräßlin
721ebe1875 Fix build (try 1)
Sorry, it compiled on my system. Trying to fix.
2016-10-17 07:45:35 +02:00
Martin Gräßlin
d92592a291 Support passing generic QIcon through PlasmaWindow interface
Summary:
Especially for Xwayland windows the compositor might not have a themed
icon name. Resulting in a task manager not having dedicated icons for
Xwayland windows.

This change deprecates the way how a compositor is supposed to set the
window icon. Instead of passing the themed icon name, it is now supposed to
pass the QIcon. In case it's a themed icon the existing way to pass to
the client is used.

Otherwise a new event is used to inform the client that there is an icon
- no data is transmitted at this point. The client can then create a
file descriptor and pass it to the compositor. The compositor serializes
the icon into the file descriptor and the client can read from it. This
all happens transparently on client side there is no api change at all.

The writing and reading of the icon is done in a thread. Due to that
Qt5::Concurrent is now a required dependency instead of an optional
dependency.

Reviewers: #plasma_on_wayland, hein

Subscribers: plasma-devel

Tags: #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D3049
2016-10-17 07:35:21 +02:00
Martin Gräßlin
bd34a6d828 [server] Implement the generic window property in QtSurfaceExtension
Summary:
Qt supports setting generic data on a QWindow. This change implements
the callback properly and forwards the property to the surface extension
instance. This allows the compositor to e.g. listen to
DynamicPropertyChangeEvents and get access to all additional set
properties.

Reviewers: #plasma_on_wayland

Subscribers: plasma-devel

Tags: #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D3045
2016-10-17 07:34:12 +02:00
Martin Gräßlin
336ff134da [client] Add methods to get ShellSurface from a QWindow
Summary:
This is similar to what already exists for Surface. With this methods
it's possible to get a ShellSurface from an existing QWindow and to
perform low level native calls directly for the ShellSurface.

Similar calls will also be needed for XdgShellSurface, though the
xdg_shell_surface is not yet available through the native interface.

Test Plan: Used in breeze to trigger window moving

Reviewers: #plasma_on_wayland

Subscribers: plasma-devel

Tags: #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D3018
2016-10-17 07:33:06 +02:00
Martin Gräßlin
97afd2658d [server] Send pointer events to all wl_pointer resources of a client
Summary:
This is what Weston does. With this change clients can create
multiple wl_pointer instances and thus get events reported to all of them.
This will be needed to e.g. support drag on empty area in Breeze on Wayland.

A similar change was done for wl_keyboard already in 25dbc84d.

Test Plan: Seat auto test still passes

Reviewers: #plasma_on_wayland

Subscribers: plasma-devel

Tags: #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D3016
2016-10-17 07:32:12 +02:00
Martin Gräßlin
9e5177cb36 [server] Don't call wl_data_source_send_send if DataSource is unbound
This could result in a crash as the added test case shows.

Reviewed-By: bshah
2016-10-12 08:08:28 +02:00
Martin Gräßlin
39fc8a4b4f Fix heap-use-after-free in TestWaylandSeat::testDisconnect 2016-10-11 08:37:55 +02:00
Martin Gräßlin
2b8900daf5 Fix heap-use-after-free in TestWaylandShell::testClientDisconnecting 2016-10-11 08:34:27 +02:00
Martin Gräßlin
bbbfb48f48 Fix build
Add missing include of QVector. Sorry built on my system without it.
2016-10-11 08:05:15 +02:00
Martin Gräßlin
0649c8e51e [server] Use deleteLater when a ClientConnection gets destroyed
Summary:
In the situation that a wl_client gets destroyed while still
wl_resources are around it can happen that one of them calls into the
ClientConnection during the cleanup handling which gets triggered at the
same time. This can then trigger a crash.

This change uses deleteLater for the ClientConnection and sets the hold
wl_client pointer to null instead of deleting directly. So the
ClientConnection is still around while the Resources gets cleaned up.
This is similar to the cleanup of Resource where on unbind the
wl_resource pointer is set to null and the Resource gets delete later.

BUG: 370232
FIXED-IN: 5.28

Reviewers: #plasma, bshah

Subscribers: plasma-devel

Tags: #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D3004
2016-10-11 07:41:17 +02:00
Martin Gräßlin
a96776ac0e Implement support for the relative pointer protocol
Summary:
This change implements the zwp_relative_pointer_v1 protocol which allows
to send relative motion events.

The (unstable) protocol consists of a RelativePointerManager which
creates RelativePointers for a given Pointer. This interface currently
only has one event to report the relative motion. It carries the delta,
the non-accelerated-delta and a timestamp in microsends granularity.

On the server side the implementation is mostly internal. Once a
RelativePointerManagerInterface is created one can send relative motion
events through the SeatInterface. The SeatInterface takes care of
sending it to the responding RelativePointerInterface. The protocol does
not restrict the sending of "normal" and relative motion events. Thus it
can be combined in any way one wants. This allows to have a rather
simple implementation. A user of the SeatInterface can just start to
feed the relative motion events (if the information is available) to the
SeatInterface together with the pointer events.

On client side a new RelativePointerManager and RelativePointer class
are added. The RelativePointerManager creates the RelativePointer for a
given Pointer. The event sent to RelativePointer is transformed in a
normal signal.

Reviewers: #plasma

Subscribers: plasma-devel

Tags: #plasma_on_wayland

Differential Revision: https://phabricator.kde.org/D2978
2016-10-11 07:40:54 +02:00