summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Add changes file for Qt 5.13.2v5.13.25.13.2Johan Klokkhammer Helsing2019-10-151-0/+67
| | | | | Change-Id: Icfb0c2bcbf6ae9705da93480c8113fe5baccf33a Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Bump versionFrederik Gladhorn2019-10-141-1/+1
| | | | Change-Id: I5c9a25629d55b97d839904f73b3bf5cf91ce337e
* Compositor: Remove unused local variableJohan Klokkhammer Helsing2019-10-041-1/+0
| | | | | | | | Was shadowed in 11f2e7df5 when fixing QTBUG-78969. Task-number: QTBUG-78969 Change-Id: I933373b5233ae8b45cdab7c3ffd14a1502486ae8 Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
* Compositor: Fix crash when trying to maximize an XdgToplevel with no outputJohan Klokkhammer Helsing2019-10-041-3/+12
| | | | | | Fixes: QTBUG-78969 Change-Id: I4ecde3725b5307251070e331c97d96df328a3772 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Client: Don't crash with long window titles using UTF-16 charactersJohan Klokkhammer Helsing2019-09-252-2/+15
| | | | | | | | | | | | | | Previously, we set the max length in QString character length, which means UTF-16 characters (of potentially three bytes) counts as one character. The max limit of libwayland, however, is in bytes (and the string itself is converted to UTF-8). Fix it by dividing the character limit by three because in the worst case each UTF-16 character will use three bytes when UTF-8 encoded. Fixes: QTBUG-78478 Change-Id: Idf4721894e0fe6f3cd92bdc6ada7b0ea4199ea63 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Mock client: Add missing include for QMapJohan Klokkhammer Helsing2019-09-211-0/+1
| | | | | | | Task-number: QTBUG-78177 Change-Id: I123e129f09ce8599e68be710147b07235ae9462a Reviewed-by: David Edmundson <davidedmundson@kde.org> Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
* Fix wrong target name for tst_client_fullscreenshellv1Johan Klokkhammer Helsing2019-09-201-1/+1
| | | | | | Task-number: QTBUG-78177 Change-Id: Id44794523511241b408e79383e438e52f769d62a Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
* Don't try to inject non-existent generated headers for xdg-shell v5Johan Klokkhammer Helsing2019-09-171-4/+0
| | | | | | | | | | We use a hand edited version for xdg-shell-v5, which is added through src/plugins/shellintegration/xdg-shell-v5/pregenerated/xdg-shell-v5.pri so we shouldn't need to add it through sync.profile. Fixes: QTBUG-78210 Change-Id: Ida60f98c950b74132bd526cf44a4bf667cdce730 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* sync.profile: remove two headersLiang Qi2019-09-171-2/+0
| | | | | | | | | Because they were checked in at 618d5093d5de082f9aaf32cca778c5eae6a8548d. Fixes: QTBUG-76439 Change-Id: I1809b1424262dfe39e6cc177eec487d9ca364337 (cherry picked from commit b90a57a66f0862d8953d0b858d4e11007172cc79) Reviewed-by: Liang Qi <liang.qi@qt.io>
* Fix detection of wayland-kms supportYuya Nishihara2019-09-151-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We get around the "private" symbol found in wayland-kms.h by substituting it with "priv", but doing that breaks the "private:" keyword in type_traits.h. So this patch forcibly includes math.h prior to s/private/priv/. main.cpp:3:17: error: ‘priv’ does not name a type #define private priv ^ In file included from /opt/poky-agl/5.0.3/sysroots/aarch64-agl-linux/usr/include/c++/6.3.0/cmath:43:0, from /opt/poky-agl/5.0.3/sysroots/aarch64-agl-linux/usr/include/c++/6.3.0/math.h:36, from /opt/poky-agl/5.0.3/sysroots/aarch64-agl-linux/usr/include/wayland-util.h:34, from /opt/poky-agl/5.0.3/sysroots/aarch64-agl-linux/usr/include/wayland-server-core.h:32, from /opt/poky-agl/5.0.3/sysroots/aarch64-agl-linux/usr/include/wayland-kms.h:38, from main.cpp:4: /opt/poky-agl/5.0.3/sysroots/aarch64-agl-linux/usr/include/c++/6.3.0/ext/type_traits.h:71:24: error: ‘__if_type’ has not been declared typedef typename __if_type::__type __type; ^~~~~~~~~ main.cpp:3:17: error: ‘priv’ does not name a type #define private priv ^ In file included from /opt/poky-agl/5.0.3/sysroots/aarch64-agl-linux/usr/include/c++/6.3.0/cmath:43:0, from /opt/poky-agl/5.0.3/sysroots/aarch64-agl-linux/usr/include/c++/6.3.0/math.h:36, from /opt/poky-agl/5.0.3/sysroots/aarch64-agl-linux/usr/include/wayland-util.h:34, from /opt/poky-agl/5.0.3/sysroots/aarch64-agl-linux/usr/include/wayland-server-core.h:32, from /opt/poky-agl/5.0.3/sysroots/aarch64-agl-linux/usr/include/wayland-kms.h:38, from main.cpp:4: /opt/poky-agl/5.0.3/sysroots/aarch64-agl-linux/usr/include/c++/6.3.0/ext/type_traits.h:114:24: error: ‘__if_type’ has not been declared typedef typename __if_type::__type __type; ^~~~~~~~~ Change-Id: I2b42f37d5565833adcc065725119ab4912da82b0 Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* If egl_x11 is not available then don't turn on xcomposite-eglAndy Shaw2019-09-131-1/+1
| | | | | | | | Since xcomposite-egl depends on the egl_x11 feature in qtbase, then this should be explicit. Change-Id: Ic1dce9526fb50f6f56e18abd58b69bcaed6d204e Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Add client test for floating point mouse pressJohan Klokkhammer Helsing2019-09-101-0/+25
| | | | | Change-Id: Ia7cfb1bc86945e08a2ff2c794afb405110e819f9 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Client: Fix touch rounding errorsJohan Klokkhammer Helsing2019-09-092-7/+13
| | | | | | | | | Touch now accounts for fractional input in the same way as for pointer input. Task-number: QTBUG-77457 Change-Id: I18e633bf7c7033187a641f757b8b24f52479971a Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Client: Add test for starting a drag operation without input focusJohan Klokkhammer Helsing2019-09-091-2/+19
| | | | | | | | This used to crash the client. Task-number: QTBUG-76368 Change-Id: I855f3bda15b4b2bccbdb2aa8239e26c0eecf7cb3 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Merge "Merge remote-tracking branch 'origin/5.12' into 5.13"Qt Forward Merge Bot2019-09-0824-101/+143
|\
| * Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-09-0824-101/+143
| |\ | | | | | | | | | Change-Id: I5d587b79b96d2b44f1975419a658c259c63fa30d
| | * Merge "Merge remote-tracking branch 'origin/5.12.5' into 5.12"Qt Forward Merge Bot2019-09-073-1/+48
| | |\
| | | * Merge remote-tracking branch 'origin/5.12.5' into 5.12Qt Forward Merge Bot2019-09-073-1/+48
| | | |\ | | |/ / | | | | | | | | Change-Id: Ic73262146f51a9e7f4ffab46511654ad70c4f514
| | | * Add changes file for Qt 5.12.5v5.12.55.12.5Paul Olav Tvete2019-08-231-0/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + e008c69e231169425e2ae602deabc0eb749376ab Fix compile error with -no-opengl + cde2fe3fba31b9b8d258f0663bc34009fd769efd Compositor: Map touch ids to contiguous ids + af9ec8a76d7e62444fadb518256fc58723fe5186 Client: Don't add all windows to activePopups + af00b80178138e55be7ea892a118e6357798e0f2 Don't crash if we start a drag without dragFocus + ec9057081f1094fbfeb11449bc533997731e4079 Client: Fix stuttering when the GUI thread is busy + a4e6f88f50d1a1dd56df77ce8b07b98aceb20ddc Client: Reset frame callback timer when hiding a window + acba020f1b6725e2d431636b1a2cfb075672ddcb Bump version + 5ca9f28f4b272d3265b97c16029071a0070195a6 Fix compilation with C++20 + 25a46893782979c74f57ab725b1ce55fbfc4fa2f Fix the build when libs didn't get built + 3d5cec736ce17c6b40c52bb8966f8fc40b742664 Fix expose event compression + 43d8a3091894ceb4ab934167b2f3eda27564eb6d Backport texture sharing for NVIDIA + 86b0d64b6c44fd8c3c3dd133bf52239f5520e524 Client: Add safer fromObject function to scanner + 2838c7f33a0b2f40b026d00b3e00139f94c358e7 Fix incorrect conversion to straight alpha pixel formats + 3e96fa1df8d2bc0ec8ab66abae1f20439b786b40 Client: Fix large clipboard pasting Change-Id: Ie61a19a3adb04e1280b2f70839778cf2c708a85b Reviewed-by: Johan Helsing <johan.helsing@qt.io>
| | | * Merge "Merge remote-tracking branch 'qt/5.12' into 5.12.5"Paul Olav Tvete2019-08-237-31/+39
| | | |\
| | | | * Merge remote-tracking branch 'qt/5.12' into 5.12.5Paul Olav Tvete2019-08-237-31/+39
| | | | |\ | | | |/ / | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/client/qwaylandwindow.cpp Change-Id: I89fefe5bfc247eeaad3981850efa0faaab3cb145
| | | * | Client: Make handleUpdate aware of exposure changesDavid Edmundson2019-08-212-1/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The wl_surface can be destroyed whilst a render is happening. Calling wl_surface::frame after the window is reset can crash as wl_surface is null. Fixes: QTBUG-77747 Change-Id: I139a9b234cb6acba81d6c1d5fa58629904a25053 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
| | * | | Compositor: Fix various input-related rounding errorsJohan Klokkhammer Helsing2019-09-064-15/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QPointF::toPoint (which is what the QPoint versions of the events use internally) uses qRound, which is not the right kind of rounding to use with the QRegion we use for the input region. This switches to use QPointF variants instead of QPoint wherever possible, and then the correct conversion (with qFloor) is done once in the new QPointF version of QWaylandSurface::inputRegionContains(). The compositor inputRegion test has now been updated to test the new API. [ChangeLog][Compositor] Fixed various rounding errors related to touch and mouse input. Fixes: QTBUG-77457 Change-Id: Ife2365abd56a239c34eee91310ab0e698a50d4ff Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> (cherry picked from commit 7f189ec10a9b3e9825dda30d3a8f86ee2e07b97f) Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
| | * | | Fix deadlock in QWaylandWindow::waitForFrameSyncPavel Tumakaev2019-09-041-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Calling the QOpenGLContext::swapBuffers from QGuiApplicationPrivate::processExposeEvent in some cases leads to recursive calls of QWaylandWindow::waitForFrameSync. Since the mWaitingForFrameCallback check in WaylandWindow::waitForFrameSync is performed after the mutex is locked, the QMutexLocker tries to lock the mFrameSyncMutex mutex in every recursive call, that leads to a deadlock. This patch moves the performing of the mWaitingForFrameCallback check before locking the mutex. Change-Id: Ia2d834b7dd03fcd91bbe29a3a897b4db2d155527 Reviewed-by: Johan Helsing <johan.helsing@qt.io>
| | * | | Client: Refactor touch handling and fix various bugsJohan Klokkhammer Helsing2019-08-292-60/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rename mTouchPoints to mPendingTouchPoints, to clarify that they're the accumulated state so far, which will be applied with the wl_touch.frame event. QWaylandInputDevice::Touch::mPrevTouchPoints is no longer needed and has been removed. Fixes the following issues with the old approach: - touchPointsReleased() only checked mTouchPoints, which was cleared on touch_frame and populated again on touch_motion and touch_down, which meant that it could return true even though there were still touch points left. Leading to the workaround for missing wl_touch.frame events on Weston being triggered to often. - Touch focus was cleared on any wl_touch.up event, not just the last one. - The order of the touch events was not stable and relied on the order of the events (QTBUG-77014). Fixes: QTBUG-77014 Change-Id: Ic3ecdc87e77b0e0276afefd127ad2b965142cbd4 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
| | * | | Client: Don't freeze in QDrag::exec if there was no drag focusJohan Klokkhammer Helsing2019-08-293-10/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | af00b801 fixed a crash when starting a drag without a valid focus, but there is still a problem, because QDrag::exec will never return because it's waiting indefinitely in an event loop. - QWaylandDataDevice::startDrag can now fail by returning false. - When starting a drag fails, we cancel the drag through QWaylandDrag::cancelDrag wrapped in invokeMethod. - Also, don't unnecessarily create a data_source if we cannot start a drag. [ChangeLog][QPA plugin] Fixed a freeze that happened when starting a drag-and-drop operation without a valid source surface. Change-Id: Iea19b0c92c196a44d1274a966bee4ff519632d34 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
| | * | | Make QT_WAYLAND_COMPOSITOR_QUICK a featureUlf Hermann2019-08-2916-28/+29
| | | |/ | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The define was only set when building Qt, not when including public headers in application code. Therefore, the sizes of objects did not match between the client code that calls new and the constructor inside Qt. Unfortunately, adding the additional members breaks binary compatibility. This has already happened between 5.11 and 5.12. It just wasn't apparent from the headers. If we removed the members again now, we would break binary compatibility again. Therefore, the best course of action seems to be acknowledging the break and adding the members also in the headers. [ChangeLog][Compositor][Important Behavior Changes] Between version 5.11 and 5.12 binary compatibility for the wayland compositor module was broken by adding an additional member to various classes. This was not apparent from user code as the member was behind an #ifdef which would only be set while compiling Qt. As several versions of Qt incompatible to 5.11 have already been released now, rolling back the incompatible change would introduce further incompatibility. Therefore, the change is made consistent by unconditionally adding the member to the headers. Fixes: QTBUG-75677 Change-Id: I3c1ee309ad8e0cd0b6389a76fd1d91e6e2be495c Reviewed-by: Johan Helsing <johan.helsing@qt.io> Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* | | | Client: Disable key repeating when rate is set to 0David Edmundson2019-09-081-1/+1
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | From the docs of repeat_info: "A rate of zero will disable any repeating (regardless of the value of delay)." Avoiding starting the initial timer effectively disables everything Change-Id: I7489f61b2bc0e000efddb4255f1968072eeff2b8 Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* | | Merge "Merge remote-tracking branch 'origin/5.13.1' into 5.13"Qt Forward Merge Bot2019-09-051-0/+35
|\ \ \
| * \ \ Merge remote-tracking branch 'origin/5.13.1' into 5.13Qt Forward Merge Bot2019-09-051-0/+35
| |\ \ \ |/ / / / | | | | | | | | Change-Id: I171c1cfd19ef5311917ab1fd1aac5172d25a7e00
| * | | Add changes file for Qt 5.13.1v5.13.15.13.1Antti Kokko2019-08-131-0/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + e008c69e231169425e2ae602deabc0eb749376ab Fix compile error with -no-opengl + cde2fe3fba31b9b8d258f0663bc34009fd769efd Compositor: Map touch ids to contiguous ids + 07ec3a37bd6bf28a96b8ff228eea86a09550db51 Bump version + 21a5038f8a2a6acc6dd1cc2f6bb0318d2c17f741 Avoid creating decoration whilst Xdg Decoration is pending configure + 06cccc30c09830fe75f5757d9eae74f326af03e9 Add changes file for Qt 5.12.4 + af9ec8a76d7e62444fadb518256fc58723fe5186 Client: Don't add all windows to activePopups + 2e4246ee71dd6689d3731e380f393185a1e3bd8e Client: Don't add all windows to activePopups + af00b80178138e55be7ea892a118e6357798e0f2 Don't crash if we start a drag without dragFocus + 640d60c4de4137aa9093093fc047dccd37d7eb13 Doc: Fix link errors + ec9057081f1094fbfeb11449bc533997731e4079 Client: Fix stuttering when the GUI thread is busy + a4e6f88f50d1a1dd56df77ce8b07b98aceb20ddc Client: Reset frame callback timer when hiding a window + a640a8d46afa6c096013c8656c3ebebe1701e551 Bump version + acba020f1b6725e2d431636b1a2cfb075672ddcb Bump version + 5ca9f28f4b272d3265b97c16029071a0070195a6 Fix compilation with C++20 + 05359c5bb6cd0e5adc23b2de3890df4af93bdf7c Fix compilation with C++20 + c12c6712305883eff72d8da3f5cab837c5997f70 Doc: Replace example file lists with links to code.qt.io + f4636b934f90b2a07b09f1925a86440cf1944d08 Fix use of private dependency Change-Id: Ifb2d513dea873c297b2246b6e7f7fc67453b3da8 Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* | | | Compositor: Fix various input-related rounding errorsJohan Klokkhammer Helsing2019-09-054-15/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QPointF::toPoint (which is what the QPoint versions of the events use internally) uses qRound, which is not the right kind of rounding to use with the QRegion we use for the input region. This switches to use QPointF variants instead of QPoint wherever possible, and then the correct conversion (with qFloor) is done once in the new QPointF version of QWaylandSurface::inputRegionContains(). The compositor inputRegion test has now been updated to test the new API. [ChangeLog][Compositor] Fixed various rounding errors related to touch and mouse input. Fixes: QTBUG-77457 Change-Id: Ife2365abd56a239c34eee91310ab0e698a50d4ff Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* | | | Client: Don't spam stderr about ignored window statesJohan Klokkhammer Helsing2019-09-032-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since it is not supported by the protocol, neither we, nor the application developer can do anything about it. Change it from warning to debug so it only shows up when enabled. Task-number: QTBUG-76061 Change-Id: I81420e0c72a9e9652f6592d65c70c7df1e5725b9 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
* | | | Client: Adjust for window border when setting text-input cursor rectJohan Klokkhammer Helsing2019-09-031-3/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set_cursor_rectangle takes wl_surface coordinates, but we sent window coordinates. Fixes: QTBUG-77987 Change-Id: Ia0bf98f9749723128bec27c3c607d1ccde2d5fd3 Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
* | | | Add client test for xdg-decoration-unstable-v1Johan Klokkhammer Helsing2019-09-033-0/+194
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | And verify that we don't create decorations prematurely. Change-Id: I621631f0c355529e5afb6a615f909f18c2a4b509 Reviewed-by: David Edmundson <davidedmundson@kde.org> Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* | | | Merge "Merge remote-tracking branch 'origin/5.12' into 5.13"Johan Klokkhammer Helsing2019-08-2913-65/+117
|\ \ \ \
| * \ \ \ Merge remote-tracking branch 'origin/5.12' into 5.13Johan Klokkhammer Helsing2019-08-2913-65/+117
| |\ \ \ \ | | | |/ / | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/client/qwaylandinputdevice.cpp src/client/qwaylandintegration.cpp src/client/qwaylandwindow_p.h src/shared/qwaylandxkb.cpp Change-Id: Ibac7998502351e93c71c9b786536298657afe3d0
| | * | | Client: Crash instead of exit when there's a wayland errorJohan Klokkhammer Helsing2019-08-222-17/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Qt applications should not call exit. Task-number: QTBUG-75779 Change-Id: I91190b10f8c8e111996cd73283061e6ceaa6b1f6 Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
| | * | | Handle Key_Return explicitly instead of depending on the textAndy Shaw2019-08-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When Key_Return is sent from Qt VirtualKeyboard it will send it as \n and not \r which means it will be interpreted as an unknown key. So since we know it will be able to map it in this case, we explicitly account for it so it can be mapped to the right key. Change-Id: Id5d8d9653e78975203f80790b7a3d332f0e011fa Reviewed-by: Johan Helsing <johan.helsing@qt.io>
| | * | | Fix race condition for client buffer integration initializationJohan Klokkhammer Helsing2019-08-202-11/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This race happened because QWaylandIntegration::clientBufferIntegration (which lazily initializes the integration) was called from numerous places including code that may run on different threads without any kind of syncrhonization. An example of this is Qt3D, which indirectly and simultaneously calls createPlatformWindow (from the GUI thread) and createPlatformOpenGLContext (from its render thread), both of which needs to use the client buffer integration. In this patch, we fix it by first checking if the integration is initialized. In that case, it's safe to use it. Otherwise we lock a mutex, re-check if initialization has happened on another thread in the meantime, and then finally we initialize it. This way we should avoid the expense of mutex locking after initialization is complete, while still staying race free during initialization. Fixes: QTBUG-76504 Change-Id: I327840ebf41e014882cb659bc3e4fafb7bdb7a98 Reviewed-by: David Edmundson <davidedmundson@kde.org> Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
| | * | | Client: Emit wl_surface lifetime signals on QWaylandWindowJohan Klokkhammer Helsing2019-08-192-1/+9
| | | |/ | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Recent changes in QtBase means QtWayland will have to follow the convention of the rest of the QPA plugins and have QPlatformSurfaceEvent::SurfaceCreated and SurfaceAboutToBeDestroyed follow the QPlatformWindow (QWaylandWindow) lifetime and not the lifetime of wl_surface. Some users were depending on those events to get notified about wl_surface changes and used QPlatformNativeInterface in order to get the window's underlying wl_surfaces in responses to the events. The good news is that QPlatformNativeInterface is private (QPA) API, so we can provide an alternative by exposing new private API, which is what this patch does. The QWaylandWindow::wlSurfaceDestroyed signal already exists in the dev branch (introduced in eb66211ea9), so this is a backport of that signal as well as an addition of a new QWaylandWindow::wlSurfaceCreated signal. Task-number: QTBUG-76324 Change-Id: Ibc5748474cd52f5b9461fd1ad6cef973491174b1 Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
| | * | Client: Fix large clipboard pastingDavid Edmundson2019-08-171-16/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With the non-blocking file opening, when no data was available in the pipe, read could return 0 even though we were not at the end of the file. This resulted in truncated data when pasting the clipboard. This patch uses select to block until a file is available, removing the polling sleep. This means the file can be safely opened in blocking mode whilst keeping the timeout feature allowing read to work as intended. Change-Id: I936aa85e9f25197e7abe6fb3fa729b618c00924d Reviewed-by: David Faure <david.faure@kdab.com> Reviewed-by: Johan Helsing <johan.helsing@qt.io>
| | * | Fix incorrect conversion to straight alpha pixel formatsJohan Klokkhammer Helsing2019-08-171-11/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, QWaylandSharedMemoryFormatHelper::fromWaylandShmFormat(WL_SHM_FORMAT_ARGB8888) would return Format_ARGB32, i.e. the non-premultiplied version, while, according to the wayland-devel mailing list (https://lists.freedesktop.org/archives/wayland-devel/2017-August/034791.html), all Wayland RGB-based pixel formats with alpha should have premultiplied alpha. This patch makes sure we return the premultiplied variants for ARGB8888, as well as for ABGR8888. Using a switch instead of the array also allows us more freedom to choose the preferred format in other cases where multiple QImage formats map to the same wl_shm format. While being wrapped and exported as QtWaylandClient::QWaylandShm::fromFormat (private API), this conversion function doesn't seem to be used anywhere, so this patch shouldn't cause any changes in behavior for projects that only use public API. Change-Id: Ie09f9a339b4540dd0383a72b3c951eb8c93e3ab4 Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
| | * | Client: Add safer fromObject function to scannerJohan Klokkhammer Helsing2019-08-155-6/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Makes the scanner produce generated static functions such as QtWaylandClient::wl_surface *wl_surface::fromObject(struct ::wl_surface *object); Which casts from the wayland-scanner generated types, such as struct ::wl_surface *, to types types generated by qtwaylandscanner, but performs a check to see if the listener is set to the wrapper class first (at least for interfaces with events). This lets us easily fix crashes in a couple of places where we receive events with wayland objects that we didn't create. Also adds nullptr checks whenever we use the fromWlSurface() and fromWlOutput() functions to handle failed conversions. Task-number: QTBUG-73801 Fixes: QTBUG-74085 Change-Id: I9f33c31c7d1a939ccb3ebbbcb0eb67af10037237 Reviewed-by: Jaroslaw Kubik <jarek@froglogic.com> Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> (cherry picked from commit 3eea45e31ef796ab6f1363f8fd2882c151becc20) Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
* | | | Client tests: Set XDG_CURRENT_DESKTOP to avoid platform themesJohan Klokkhammer Helsing2019-08-291-0/+1
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the client tests are run from within a desktop environment, the XDG_CURRENT_DESKTOP variable may be set, causing the client to try to load a platform theme for the user's desktop. The tests, however, are running against a mock Wayland compositor, so launching a platform theme that expects to connect to a certain compositor implementation is probably not a good idea. And furthermore, if the gtk3 platform theme is used, it will start binding to interfaces and create wayland objects, confusing our existing test code. Setting XDG_CURRENT_DESKTOP to qtwaylandtests will prevent detection of the (outer) desktop environment, making tests more predictable. Change-Id: I57fa76e51cecdd0cbe8be6bd075ce67e9d2892bc Reviewed-by: David Edmundson <davidedmundson@kde.org> Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* | | Merge "Merge remote-tracking branch 'qt/5.12' into 5.13"Paul Olav Tvete2019-08-1544-16/+3517
|\ \ \
| * \ \ Merge remote-tracking branch 'qt/5.12' into 5.13Paul Olav Tvete2019-08-1444-16/+3517
| |\ \ \ |/ / / / | | _ / | | / | | | | | | | | | | | | | | | Conflicts: src/compositor/configure.json sync.profile tests/auto/auto.pro Change-Id: Ia6d1512aa9ad49ac7f92ae88f23026dc0ee2ccc5
| * | Backport texture sharing for NVIDIAPaul Olav Tvete2019-08-1340-7/+3502
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit backports the Vulkan server buffer and texture sharing code from Qt 5.14 to Qt 5.12 as an opt-in feature. To enable, configure with "-feature-wayland-client-texture-sharing-experimental -feature-wayland-compositor-texture-sharing-experimental" Contains code from the following commits: Add server buffer integration based on Vulkan (commit df3a1761af2f20d59ae09a7adaa2f5b959047687) Compressed texture support for vulkan server buffers (commit f710489a341713c675cfd91d22ccd7bf8f29f4dd) Implement server-side toOpenGlTexture for Vulkan (commit 19361e7259f04b08925b1e8e99faf9460770ee7b) New texture sharing protocol and infrastructure (commit 80001cbf0451f4ba2a971fb20b80dc8e25ac604d) Change-Id: I6c36ef7fddcd4db39e80d03a822d89f15eae3434 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Johan Helsing <johan.helsing@qt.io>
| * | Fix expose event compressionPaul Olav Tvete2019-08-132-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For shells that do not send configure events when exposed: If setGeometry() was called before the window was initialized, Qt would not mark the window as mapped, and the window would never become visible. Change-Id: Ic933cbbff20702424129c11264215181330cc7d1 Reviewed-by: Johan Helsing <johan.helsing@qt.io>
| * | Fix the build when libs didn't get builtLiang Qi2019-08-122-4/+11
| | | | | | | | | | | | | | | Change-Id: I641a1a80edd0861049d079422eef28b095fc26b3 Reviewed-by: Tony Sarajärvi <tony.sarajarvi@qt.io>