summaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Merge remote-tracking branch 'origin/tqtc/lts-5.15.8' into ↵v5.15.8-lts-lgplTarja Sundqvist2022-11-104-7/+11
|\ | | | | | | | | | | tqtc/lts-5.15-opensource Change-Id: Id97943831fbc85d703dc50369e0d975513208c43
| * Use a correct serial for xdg_surface.ack_configureInho Lee2021-12-072-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | Previous pendingConfigureSerial can be overwritten regardless of the current configuration. With this patch, the client surface can use correct serial for xdg_surface.ack_configure. Fixes: QTBUG-95962 Change-Id: I849d2daf4acc8ef6e7f8528af9c5a57f671f43e6 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> (cherry picked from commit 07ddfbfa43d08c2b76aabafaab38830e04a42690) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
| * Do not create decorations when the shellSurface is not readyInho Lee2021-11-121-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A cases reported that client windows try to make decorations when their shell surfaces are null. Since the surfaces' requests for decorations should be applied, those case will be failed to create decorations. This patch was modified by Paul Tvete's advice. (paul.tvete@qt.io) Task-number: QTBUG-97608 Change-Id: I2563dbd73b730f81cc411857af07da99ceb2d063 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> (cherry picked from commit 246f0c0bc01dd059bf8165e81f7b49efa36e4d95) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
| * Fix the logic for decoding modifiers map in Wayland text input protocolRodney Dawes2021-10-151-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Correctly check for the flags in the modifiers map when we get it from the compositor, instead of modifying the map in the for loop conditional. [ChangeLog][QWaylandInputContext] Fix modifiers map decoding logic when receiving the map from the compositor. Fixes: QTBUG-97094 Change-Id: Idad19f7b1f4560d40abbb5b31032360cfe915261 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> (cherry picked from commit baa7ef511bf40280448e5f0e721ddd6da3301f3b) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* | Merge remote-tracking branch 'origin/tqtc/lts-5.15.7' into ↵v5.15.7-lts-lgplTarja Sundqvist2022-09-124-14/+35
|\ \ | |/ | | | | | | | | tqtc/lts-5.15-opensource Change-Id: I42a0e780eea6d92f0463566e5ab9b23efc9f49b7
| * Wayland client: Fix crash when windows are shown/hidden during dragPaul Olav Tvete2021-09-241-1/+1
| | | | | | | | | | | | | | | | Fixes: QTBUG-87624 Change-Id: I1b9443df091878abcd4fbe9c55927cb819aebd59 Reviewed-by: David Edmundson <davidedmundson@kde.org> (cherry picked from commit c64c5d3849b40617e1de0295f8690f354cab2b3a) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
| * Keep reference to buffer until it has been replacedEskil Abrahamsen Blomfeldt2021-08-312-4/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For the code path which uses QWaylandBufferMaterial, the buffer could potentially be deleted before the material had been updated, which could cause issues if the render thread was currently using the textures. In the default code path this was handled by keeping a reference to the buffer in the texture provider, but in the alternative YUV format code path, we did not increase the reference count of the buffer, so it would be deleted immediately when it was replaced rather than wait for the sync with the render thread. Task-number: QTBUG-95715 Change-Id: Ic6038ea8281e2a2e292d12150d1fffedb5c3b76e Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> (cherry picked from commit 6b9a27d77e226a3d0ce9fa9b4974f70c9ef4a30e)
| * Implement wp_viewporter support for video buffer formatsEskil Abrahamsen Blomfeldt2021-08-241-1/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some EGL image formats (the YUV formats specifically) cannot be handled by the built-in node types in the Qt Quick scene graph and use a custom material and geometry setup. In this setup, the wp_viewporter source rectangle was ignored and the entire texture was always sampled. This caused problems e.g. for video frames supplied by GStreamer. [ChangeLog][Extensions] Support for wp_viewporter extended to cover less common buffer formats. Pick-to: 5.15 6.1 6.2 Task-number: QTBUG-95464 Change-Id: I2504c6cd7d82e17d28e930a59d9ec71b25779acb Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> (cherry picked from commit 060024e2fc9335d4fc999253c9d6ed560c7ffb0c)
| * Ignore viewporter buffer size when buffer is nullEskil Abrahamsen Blomfeldt2021-08-241-8/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The documentation for viewporter says: "if the source rectangle is partially or completely outside of the non-NULL wl_buffer, then the out_of_buffer protocol error is raised when the surface state is applied. A NULL wl_buffer does not raise the out_of_buffer error." The intention here is that the viewport can be initialized before the buffer is actually attached to the surface, and the parameters will be kept for later. We simply skip the error condition when there is no buffer. [ChangeLog][QtWaylandCompositor] Fixed an issue in the wp_viewporter extension, where it would emit a protocol error if the viewport was configured before attaching a buffer to the surface. Pick-to: 5.15 6.1 6.2 Fixes: QTBUG-95464 Change-Id: I71d09974dfe5e0f39ed79e7718e1e0d402547583 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> (cherry picked from commit 639bd92682f5f61f15f97f78ccd9791bec852b6c)
* | Merge remote-tracking branch 'origin/tqtc/lts-5.15.6' into ↵v5.15.6-lts-lgplTarja Sundqvist2022-08-166-75/+86
|\ \ | |/ | | | | | | | | tqtc/lts-5.15-opensource Change-Id: I9c249bfb8ad3764931b1c468f5cb927b784a2135
| * Cleanup up all subsurface QQuickItems correctlyDominik Holland2021-08-021-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When showing a surface with a subsurface in a QML based compositor, the subsurface QQuickitems are now destroyed when when main surface QQuickItem is destroyed and not just when the surface is destroyed. This prevents subsurface QQuickItems piling up when showing and hiding the client surfaces e.g. inside a StackView. Fixes: QTBUG-94602 Change-Id: I006a6a763d4daf560ba2a7b6f83e1de3e3c48906 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> (cherry picked from commit 5463a04097ee7824b2032fb058e289cf62bfd315) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
| * Do not update the mask if we do not have a surfaceAleix Pol2021-07-131-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | mMask serves as a cache to remember what we've sent, the source of truth for the value is window()->mask(). No need to store values that we are going to discard, because it will confuse the state of newly created windows. Change-Id: I6aa3da82c7f09c7ef90d0f7060f292fb042730f0 Reviewed-by: David Edmundson <davidedmundson@kde.org> (cherry picked from commit 962f87190c682562b369c5ebd93dc9ce0915ed7a) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
| * linux-dmabuf-unstable-v1: Fix importing dmabuf buffers with modifiersAlexandros Frantzis2021-06-291-68/+61
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Depending on the used modifiers, there are cases where dmabuf buffers may be transported as multiple dmabuf planes, although they are conceptually single plane buffers. An example of a modifier that works like this is I915_FORMAT_MOD_Y_TILED_CCS. In such cases we need to create a single EGLImage by merging all the dmabuf planes. Almost all of the currently supported DRM formats are conceptually single plane, so they require such merging of the dmabuf planes. The only formats that need to be mapped to multiple EGLImages are some YUV based ones, which we are already importing in a different way (see initYuvTexture). In addition, ensure that we don't pass to EGL a modifier value of DRM_FORMAT_MOD_INVALID, since this is not an acceptable value. To indicate a lack of modifiers skip the relevant EGL_DMA_BUF_*_MODIFIER_* attributes altogether. Sponsored-by: LG Electronics Inc. Change-Id: I32a717f3be20927f2f3f4aa0fc6c4f7a5250db33 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> (cherry picked from commit 8163327dcb3d37e9f3011bd9bec88848b2ce3b6c) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
| * Add BlankCursor for cursor names mapJiDe Zhang2021-06-111-0/+2
| | | | | | | | | | | | | | | | | | BlankCursor => "blank" Change-Id: I9337f0615f84bb82bc722d24416e97799309b3e5 Reviewed-by: Liang Qi <liang.qi@qt.io> (cherry picked from commit 94e68d506ab9b94ec11786553a220abe4b52503e) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
| * client: Gracefully handle shutdown and window hidingEskil Abrahamsen Blomfeldt2021-06-043-4/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a window is hidden or destroyed, the render thread may already be rendering. We need to properly read-lock the surface pointer when it is in use and exit when it becomes null. Note that there is also a potential crash in the Mesa GL driver where it keeps a proxy to the wl_surface, so if we delete this while we are still rendering, it can crash inside the driver. This is not addressed by this patch, and has not been reproduced on any other drivers so far. [ChangeLog][Client] Fixed a crash that could happen when hiding or closing windows while Qt Quick was actively rendering on a different thread. Fixes: QTBUG-91264 Fixes: QTBUG-90037 Task-number: QTBUG-92249 Change-Id: I029b123b83c58740321e8b90a463ced748d8bcf4 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io> Reviewed-by: David Edmundson <davidedmundson@kde.org> (cherry picked from commit b19b0fbaf775e8b8eda1e03c265a5393d618c6c0) Reviewed-by: Liang Qi <liang.qi@qt.io>
* | Merge remote-tracking branch 'origin/tqtc/lts-5.15.5' into ↵v5.15.5-lts-lgplTarja Sundqvist2022-05-1917-0/+26
|\ \ | |/ | | | | tqtc/lts-5.15-opensource
| * Docs: Add "instantiates" keywordsKai Uwe Broulik2021-05-1916-0/+20
| | | | | | | | | | | | | | | | | | | | Document what the corresponding C++ class for any given QML item is, like it's done in Qt Declarative. Change-Id: I015565f88cb457f1e73dd7c2c54edff3505db395 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> (cherry picked from commit a04decb6a85ef254ec48842e7551a2920de6a714) Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
| * Include locale.h for setlocale/LC_CTYPEAlbert Astals Cid2021-05-121-0/+4
| | | | | | | | | | | | | | Change-Id: Iced32a31a63cec71008549c1e0961d59ffc45a37 Reviewed-by: Aleix Pol Gonzalez <aleixpol@kde.org> (cherry picked from commit e9522eda46028f351d87311d898ab985856970b0) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
| * Add missing define guardsSamuli Piippo2021-04-221-0/+2
| | | | | | | | | | | | | | | | | | | | Ammend cca1b94190a094b5d1d7ce492b6533e2d330c5e8 to use m_composeState only if xcbcommon is available. Change-Id: I48332b15def3282c5bda3e1c7c393ea7e9849cbe Reviewed-by: Aleix Pol Gonzalez <aleixpol@kde.org> (cherry picked from commit 05658e127dedfff65789860415537c6920ec574d) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* | Merge remote-tracking branch 'origin/tqtc/lts-5.15.4' into ↵v5.15.4-lts-lgplTarja Sundqvist2022-04-0710-23/+153
|\ \ | |/ | | | | | | | | tqtc/lts-5.15-opensource Change-Id: I665a0f6579e52cd9f27f731c6363bb03188a07bf
| * Fix touch being ignored when down and up are in the same frameHyunkook Khang2021-04-141-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | The Wayland protocol gives no guarantees about which events are part of a frame, so handle the case where we receive wl_touch.down and wl_touch.up within the same frame. Fixes: QTBUG-89680 Change-Id: Ie0b9d2fb950fb0d9a6af8dd8ad2fa55a5efa71e6 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> (cherry picked from commit da31aa6544f38c063de93326f958e8cbb02004af) Reviewed-by: Hyunkook Khang <hyunkook.khang@qt.io>
| * client: Allow QWaylandInputContext to accept composed key combinationsAleix Pol2021-04-135-10/+119
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | At the moment, we are forcing user to choose to either compose or use the text-input channel. This patch brings some of the QComposeInputContext functionality in order to let applications understand dead key combinations like they are supposed to. Having it in QWaylandInputContext rather than in QWaylandInputDevice should solve the problems 3aedd01271dc4f4a13103d632df224971ab2b6df had with 57c4af2b18c0fb1d266b245a107fa6cb876b9d9e, because we are doing it in the input context rather than before. This way, if the user is overriding the input method (e.g. by setting QT_IM_MODULE), all the key strokes will still be properly forwarded to the module to use. This in turn allows us to solve https://bugs.kde.org/show_bug.cgi?id=411729 and https://bugs.kde.org/show_bug.cgi?id=405388 since we don't need to choose anymore between physical and virual keyboards anymore. Change-Id: I8601f5d7ae21edf4b3a1191fa75877286e505588 Reviewed-by: David Edmundson <davidedmundson@kde.org> (cherry picked from commit cca1b94190a094b5d1d7ce492b6533e2d330c5e8) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
| * Use qWarning and _exit() instead of qFatal for wayland errorWeng Xuetian2021-03-311-2/+3
| | | | | | | | | | | | | | | | | | | | | | This type of error is likely to happen upon system logout. qFatal would trigger sigabrt and leave unnecessary coredump on the system. Using qWarning here would make it consistent with xcb's io error. Change-Id: I571ba007bf2453486b81837cccdbefa5f181b63d Reviewed-by: David Edmundson <davidedmundson@kde.org> (cherry picked from commit 91625c591c9854c7b6934c12a83df6cbcfcbfbd4) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
| * Fix race condition when attaching client to text inputEskil Abrahamsen Blomfeldt2021-03-261-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Extensions are registered by initialize(), which is called as a polish event later. Therefore the following race can happen: 1. Application #1 requests a text-input object. The compositor sees that the seat has no such object and creates a new one. 2. Polish event is posted. 3. Application #2 requests a text-input object. Since the polish event is not yet processed, it also creates a new one. 4. Second polish event posted. 5. Both polish events processed. We end up with two competing text-input objects, one per client. This in turn leads to enter/leave events not being sent correctly, and the client may therefore end up not updating the keyboard hints. The result was arbitrary behavior: Sometimes the keyboard would not open at all, whereas other times it would open with the current input method hints, even if these do not match the hints of the editor. [ChangeLog][Input] Fixed a problem where a virtual keyboard would not be updated correctly if two clients were started at almost the same time. Fixes: QTBUG-91096 Change-Id: I262a5c15f87ba13d750425c259583919cd947ea4 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> (cherry picked from commit e08b25efe4a7bec1004696bd23d9f8959158bd60) Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
| * xdgshell: Tell the compositor the screen we're expecting to fillAleix Pol2021-03-261-3/+6
| | | | | | | | | | | | | | | | | | | | | | | | The xdgshell protocol allows us to tell the output to fill. This makes it possible to use fullscreen confidently on systems with multiple screens knowing that our windows won't be overlapping one another by calling setScreen accordingly before QWindow::showFullScreen. Change-Id: I757854c3698639472f3a25ef298ddcca031e1ed5 Reviewed-by: David Edmundson <davidedmundson@kde.org> (cherry picked from commit f915e53eaa596654ee1b9726a4767a1cba11336f) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
| * Get correct decoration margins regionJan Grulich2021-03-021-4/+4
| | | | | | | | | | | | | | | | | | | | | | Size we use to calculate margins region already contains size including margins. This resulted into bigger region and not properly damaging region we need to update. Change-Id: Id1b7f4cd2a7b894b82db09c5af2b2d1f1f43fa2a Reviewed-by: David Edmundson <davidedmundson@kde.org> (cherry picked from commit 1631315387faff3b4ae5c5ff1afb95e42f986e4c) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
| * Client: Send exposeEvent to parent on subsurface position changesDavid Edmundson2021-03-011-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a subsurface is moved, we need the parent window to commit to apply that move. Ideally we want this in sync with any potential rendering on the parent window. Currently the code calls requestUpdate() which acts more like a frame callback; it will only do something if the main QWindow considers itself dirty. We want to force a repaint, which is semantically more similar to an ExposeEvent. Fixes: QTBUG-86177 Change-Id: I30bdfa357beee860ce2b00a256eaea6d040dd55c Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> (cherry picked from commit b36a345d727eab37ee4ec4c2dc4674d5971c81d8) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
| * Translate opaque area with frame marginsJan Grulich2021-02-231-3/+5
| | | | | | | | | | | | | | | | | | | | The opaque area doesn't take window decorations into account, which may result into possible graphical artefacts. Change-Id: I1606e8256e7e204dad927931eb1221b576e227fd Reviewed-by: David Edmundson <davidedmundson@kde.org> (cherry picked from commit 3aed1fe7132c00cc7ce9b0fe8fc9e8ccdc771d38) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* | Revert "Update commercial license headers"v5.15.3-lts-lgplTarja Sundqvist2021-03-22413-6414/+6414
|/ | | | | | | | | | | This reverts commit 6bb05fed8fdb564f3ff0136bbdaf4efd6088797d. Revert of commercial license headers is required for Qt 5.15.3 opensource release. Task-number: QTBUG-91108 Change-Id: Ia867596ca140b1c37717baafe07cbcddd2a9b1fd Reviewed-by: Akseli Salovaara <akseli.salovaara@qt.io>
* Client: Send set_window_geometry only once configuredDavid Edmundson2021-02-151-1/+1
| | | | | | | | | | | | | | | | | | The geometry only makes sense when a buffer exists, our currently send value is somewhat meaningless, but till now harmless. A specification clarification implies that it is an error if the calculated effective window geometry is null, rather than just checking the sent value. This is the case if set_window_geometry is sent before a buffer is attached. On our first configure call we enter resizeFromApplyConfigure which will hit this path and send the initial state. Change-Id: Ib57ebe8b64210eae86e79dfdd6b5cb8a986b020b Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> (cherry picked from commit 2555663c9f59b93f5fcc5d3ead233bee280e36f8) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Update commercial license headersTarja Sundqvist2021-01-27413-6414/+6414
| | | | | | | | | | | | | | | Updated header.COMM to the files in tqtc-qtwayland. Examples, tests and documentation files are not updated. The commercial license header may contain some additional lines so that its line count equals with the earlier license header. Reason for this is that some autotests use hard coded line numbers and a change in the line count causes failures in tests. Task-number: QTQAINFRA-4214 Change-Id: Ib716dd7c17587d0155b6903f5cf62be3f99384bf Reviewed-by: Antti Kokko <antti.kokko@qt.io>
* Fix memory leak in QWaylandGLContextEskil Abrahamsen Blomfeldt2021-01-261-0/+2
| | | | | | | | | | | | | | We were leaking an EGL context with every GL context created, which lead to rapid OOM errors in stress tests. [ChangeLog][Qt Wayland Client] Fixed a memory leak when creating QOpenGLContexts on Wayland and using the wayland-egl backend. Fixes: QTBUG-85608 Change-Id: I8426b5df36ec7ab9e66ce15f9e02edad3aca60b9 Reviewed-by: David Edmundson <davidedmundson@kde.org> (cherry picked from commit bd1713ef820a3d56fc19df46059fde3372092f9b) Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* Fix leaked subsurface wayland itemsEskil Abrahamsen Blomfeldt2020-12-071-0/+1
| | | | | | | | | | | | | | | Whenever a subsurface was added we would create a QWaylandQuickItem, but this was never deleted. It is one-to-one with the surface, so it should be deleted at the same time. [ChangeLog][QtWaylandCompositor] Fixed a memory leak when creating subsurfaces. Task-number: QTBUG-88782 Change-Id: If4b3f15200ce3bd123ff73847d3593d174a39229 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> (cherry picked from commit 38fc568b30bf916165324c2cd2db127d2a9aa68c) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Ensure that grabbing is performed in correct contextAndreas Cord-Landwehr2020-12-041-1/+1
| | | | | | | | | | | | | For multi-display rendering on EGL, it is mandatory that the grabbing of the surface happens in the same EGL context as the surface belongs to. By adding the grabbing to the rendering stage of the image, this relation is forced. Task-number: QTBUG-87597 Change-Id: I50f40df1215aa771d714065e942c5a738ba6269f Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> (cherry picked from commit ab3a1a07f3d1e0d5a9e9d97b6b3b587180e2f4c8) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Make setting QT_SCALE_FACTOR work on WaylandMorten Johan Sørvig2020-11-185-7/+8
| | | | | | | | | | | | | | | | | | | | QWindow geometry accessors return geometry in device independent pixels. Normally this coordinate system is equivalent to the Wayland native coordinate system, but this is not the case when QT_SCALE_FACTOR is set. Replace QWindow geometry calls with the helpers from QPlatformWindow which return geometry in the native coordinate system: QWindow::geometry() -> QPlatformWindow::windowGeometry() QWindow::frameGeometry() -> QPlatformWindow::windowFrameGeometry() Task-number: QTBUG-87762 Fixes: QTBUG-88064 (cherry-picked from commit 8cb1b07aea12d50b4fecc45c903705dfd368022a) Change-Id: I6e2029bc6210f12441ae7c9d8b678271e9922dde Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
* Do not try to eglMakeCurrent for unintended caseJaehak Lee2020-11-182-0/+7
| | | | | | | | | | | | | | | | The QSGThreadedRenderLoop::hide can be called at twice, when the QWindowPrivate::setVisible(false) is called. The eglSurface is EGL_NO_SURFACE when the second QSGThreadedRenderLoop::hide is called. And if EGL_KHR_surfaceless_context is supported, the eglMakeCurrent don't return the false. But this case is not intended. So, add the defence code for above case. Fixes: QTBUG-88277 Change-Id: Ia9e5990303e98f0eedc48531e5af62ff9961f419 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
* Make setting QT_SCALE_FACTOR work on WaylandMorten Johan Sørvig2020-11-171-2/+4
| | | | | | | | | | | Follow-up to 8cb1b07aea12d50b4fecc45c903705dfd368022a, fixes one additional case (Use of minimum/maximum size). Fixes: QTBUG-87762 Change-Id: I73e0df2529b0cadf25ad50ea7459cdbb92caf424 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> (cherry picked from commit 6ed363e3665f17d935f8636d9c958154c898f5c5) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Scanner: Avoid accessing dangling pointers in destroy_func()Vlad Zahorodnii2020-11-131-1/+3
| | | | | | | | | | | | | Usually, the object associated with the resource gets destroyed in the destroy_resource() function. Therefore, we need to double-check that the object is still alive before trying to reset its m_resource. Change-Id: I26408228f58919db17eb29584a1cbd4a9427d25c Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> (cherry picked from commit 735164b5c2a2637a8d53a8803a2401e4ef477ff0) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Doc: List correct license information for the modulePaul Wicking2020-10-281-3/+7
| | | | | | | | | Fixes: QTBUG-87959 Change-Id: I1c5cd15e0dd6f81e87690e54cd4e526ce668a8aa Reviewed-by: Tino Pyssysalo <tino.pyssysalo@qt.io> Reviewed-by: Kai Koehne <kai.koehne@qt.io> (cherry picked from commit 7cadb86e5b151459bd06f46a90f28bd157078df7) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Replace remaining LGPLv3 headers in QtWaylandCompositor with GPLv3Kai Koehne2020-10-2719-323/+190
| | | | | | | | | | | | | Use same header as for the rest of the module. This was forgotten in commit bb1b46a4862e0a5 Change-Id: I7e61b43f0387a9affa9488566cb5aaca51b3bc0b Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io> (cherry picked from commit 2bf41c736719654d0d6b15eec280a4667ebc28c5) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Issue set_opaque_region on opaque surfacesAleix Pol2020-10-222-0/+29
| | | | | | | | | | | | The application will tell Qt whether the background is transparent through either Qt::WA_TranslucentBackground or QQuickWindow::setColor. These will set a QSurfaceFormat. This change checks the QSurfaceFormat and issues the opacity information so we can properly implement culling optimizations in the compositor. Change-Id: I4f7562467449eac7931f3011d4b835934212adad Reviewed-by: David Edmundson <davidedmundson@kde.org> (cherry picked from commit 0db685834f8377e41b147d3367b8ec514841eff5)
* Client: Advertise all supported mime typesDavid Edmundson2020-10-191-1/+1
| | | | | | | | | | | | | | | | | | | | Qt has some internal mime types that can be translated to known types. For example the mime type application/x-qt-image Qt can convert to any supported image format. The data_source_send method already converts (via QWaylandMimeHelper::getByteArray) However we previously only advertised the list of mimetypes explicitly set by the application. This brings us in line with the X11 QPA. Fixes: QTBUG-87657 Change-Id: Ia09c0cbc1f0997552bd253e79d6715ebcafee0a1 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> (cherry picked from commit 6c534941a3015ba529dd4a5c153cffa0e94af11a) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Fix race condition on frame callbackPaul Olav Tvete2020-10-164-26/+73
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the frame listener callback is moved to a different queue while the frame event is being processed, the event will not get delivered. (It will not even show up in the WAYLAND_DEBUG output.) This will cause waitForFrameSync() to hang until it times out. To avoid this, perform the move just after the callback has been created. This exposed an issue with single-threaded rendering, where a new update would be started from inside the callback, resetting mWaitingForFrameCallback before waitForFrameSync could react to it. This caused all rendering to freeze. To avoid that problem, do not deliver update requests directly from the frame callback. With the callback always on a separate queue, we then have to make sure that queue is also dispatched during the main event loop, otherwise the events may not be processed. To do this, we need a mutex lock. But it turns out that we no longer need a global mutex lock as long as the frame events are being dispatched on their own queues, but can manage with per-window locks instead. A final thing needed is to make sure the frame callback does not request additional updates while we are already waiting for the main thread to process the last one. This is to avoid flooding the main event loop with events, when the main thread is processing them at a slower pace than the frame rate. Fixes: QTBUG-83263 Done-with: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> Change-Id: I0db9da64fc8ced147177391c2a7999c4cc7a0d58 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> Reviewed-by: David Edmundson <davidedmundson@kde.org> Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> (cherry picked from commit 98aea22d839000a377d0fc646133f76e08b44f6e)
* Scanner: Generate code that destroys inert resourcesVlad Zahorodnii2020-10-121-5/+15
| | | | | | | | | | | | | | | | | | | In rare cases, the compositor may need to destroy its private data associated with a wl_resource object. For example, one such case may arise when an output has been disconnected and the corresponding QWaylandXdgOutputV1 object needs to be destroyed. Another case is where some resource has become inert. If the QWaylandXdgOutputV1 object has been destroyed and there are still wl_resource objects associated with it, the compositor will crash due to a segfault when somebody calls xdg_output::destroy(). With this change, qtwaylandscanner will generate code that handles destruction of inert resources behind the scenes. Change-Id: I0532f783ae53cc7861e0f08433dc2407aa9c7953 Reviewed-by: David Edmundson <davidedmundson@kde.org> (cherry picked from commit 4a4c35a856cf64f0e165cc3cfaeb1a3bbbf471f6)
* Scanner: Generate code that cleans up m_resourceVlad Zahorodnii2020-10-121-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | The object that owns the resource will not be necessarily destroyed in the destroy_resource() function. One such case may arise if the compositor wants to animate the disappearing of a window, in that case we want to keep client buffer data around even after the wl_buffer resource has been destroyed. If the compositor accidentally accesses the destroyed resource, it'll most likely crash because of SIGSEGV. Speaking from my experience, such crashes are far from being fun to debug. With this change, qtwaylandscanner will generate code that cleans up m_resource when the associated resource has been destroyed. It can be useful for the purpose of preventing accessing already destroyed data. Note that we want m_resource to be valid when the destroy_resource() func is called because the compositor may need it in order to properly perform cleanup, for example send a wl_pointer::leave() event, etc. Change-Id: I82dab3b7eae8c282fdbad689af49622350b6c867 Reviewed-by: David Edmundson <davidedmundson@kde.org> (cherry picked from commit c594b7622f52dea291d33757b74971b3902b5d37) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* fix libdrm related configure test failurePeter Seiderer2020-10-062-3/+6
| | | | | | | | | | | | | | | Fixes: Project ERROR: Test config.qtwayland_client.tests.dmabuf-server-buffer tries to use undeclared library 'drm' Project ERROR: Test config.qtwayland_compositor.tests.dmabuf-server-buffer tries to use undeclared library 'drm' Project ERROR: Test config.qtwayland_compositor.tests.dmabuf-client-buffer tries to use undeclared library 'drm' Task-number: QTBUG-83303 Change-Id: I3970f4e3855fcfa760493631a14adb6a16950aa9 Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io> Reviewed-by: Heikki Halmet <heikki.halmet@qt.io> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> (cherry picked from commit ca63fe81df8ac910f43539719566ed6745700c2b)
* Build with -no-openglEskil Abrahamsen Blomfeldt2020-10-055-16/+23
| | | | | | | | | | | | | | | | | | | | | | Fix build when Qt is built with -no-opengl: 1. Certain includes have to be conditional on QT_CONFIG(opengl), just like the code that uses them. 2. After 585f20dce37c398d8b2e6367008e3329dac79e24, the ClientBufferIntegration is used even with a software-raster compositor, so we need to include this class in the build. 3. The wayland-scanner-generated header files are unconditionally installed through sync.profile and there is no way to exclude it there based on Qt configuration, which causes errors when doing make install. The easy fix for this is to generate the headers even though they will not be used anywhere. Fixes: QTBUG-86291 Change-Id: I671b6345cbc7138309e20fe62e09513f191cd3fe Reviewed-by: Tony Sarajärvi <tony.sarajarvi@qt.io> (cherry picked from commit cab51443ed9246c14255dcb295764f4d15cffaa1) Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Fix brcm-egl wayland integrationAaron Dewes2020-09-074-4/+7
| | | | | | | | | | | This amends d58008c431 which changed the number of arguments QWindow takes. The brcm-egl integration was not updated for these changes. Fixes: QTBUG-86109 Change-Id: I14ad2e5d6a62f5f285d01a4fcd47a34bf9495cf9 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> (cherry picked from commit 7d1debe004cbf3e0a1561dd234fbedab9b2ab3f9) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
* Client: Fix scroll direction with touchpadsDavid Edmundson2020-08-281-0/+6
| | | | | | | | | | | | | | Wayland axis events and QWheelEvents are opposite way rounds. This was handled for the case of discrete events, but not continuous events. This leads to touchpads moving the wrong way round compared to other clients. Change-Id: Iee4f5c620940a491949d4039cb3ac70649d83a2b Task-number: QTBUG-85767 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> (cherry picked from commit e20e1d506d627a53d9d7bf7794b93bf9e8b9bedb) Reviewed-by: David Edmundson <davidedmundson@kde.org>
* Client: Initialize mScale on creation instead of on showDavid Edmundson2020-08-261-2/+2
| | | | | | | | | | | | | | | | | | | | | | At the time of creating a QPlatformWindow we will have a QScreen assigned. It may not be the right one until we get a screen_entered event, pointing instead to the primary screen. When we get the screen_entered event we get the correct scale and call handleWindowScreenChanged. However if it's the same screen as before QWindowPrivate::setTopLevelScreen will no-op because from it's POV the screen hasn't changed at all. This leaves the window having the scale change without any notification. This is notable with QQuickWidget which creates an FBO very early on before the window is shown. This would then use the devicePixelRatio of 1 as it is currently unset and then not get any change notification. Change-Id: Ia7e4072e0bd900abc558bf8930fef4e1e7d2c553 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> (cherry picked from commit 5ecf5215737ba3343a10310c0dff08763af737bc) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>