summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* xkbcommon: replace deprecated APIsv5.13.0-beta3Gatis Paeglis2019-04-162-10/+8
| | | | | | | See xkbcommon/xkbcommon-compat.h Change-Id: I2a70e14481db227fc0be657fbcf4f6550d62e7e8 Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* compositor: rework xkb context/keymap/state handlingGatis Paeglis2019-04-165-52/+68
| | | | | | | | | | | | | - Use smart pointers from xkbcommon_support-private. - Avoid unnecessary strdup()/free() calls. - Don't recreate context. And move it into qwaylandcompositor so it can be shared between seats. It contains things like a logging level and include paths. Change-Id: Ibea29f2874cc147a8e08f15192831fa42ca58f48 Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* Merge remote-tracking branch 'origin/5.12' into 5.13Liang Qi2019-04-164-14/+25
|\ | | | | | | | | | | | | Conflicts: src/client/qwaylanddisplay_p.h Change-Id: Ie84862aa41623c11abd8f882f428054f30062c77
| * Fix incorrect path to wl-eglstream-controller.xmlJohan Klokkhammer Helsing2019-04-111-1/+1
| | | | | | | | | | Change-Id: I1d4bceeb87b7e95b7b4b9c9885e06052bd7536e9 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
| * Client: Don't be exposed if we want to create a sub or shell surfaceJohan Klokkhammer Helsing2019-04-083-13/+24
| | | | | | | | | | | | | | | | | | Because some shells don't allow attaching buffers before configure, we need to not be exposed until we know that we don't want a shell surface. Change-Id: Ida7101a99f953d02cf6401e4ea8d28cfabd6e102 Reviewed-by: Giulio Camuffo <giulio.camuffo@kdab.com> Reviewed-by: David Edmundson <davidedmundson@kde.org>
* | client: rework xkb context/keymap/state handlingGatis Paeglis2019-04-156-64/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | - Use smart pointers from xkbcommon_support-private. - Remove needless strdup() calls. - Don't recreate context. And move it into qwaylanddisplay so it can be shared in future between several keyboards. It contains things like a logging level and include paths. Change-Id: I5d1f667e710046e6b62aa2caf82fdb2decc24520 Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* | client: rework input method handlingGatis Paeglis2019-04-1514-105/+378
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The existing solution was parsing compose tables on startup, it is better to lazy initialize the compose table/state on a first key press, instead of doing it on an application startup. This logic is inside of the compose input plugin. The existing code did not utilize correctly how Qt handles complex text input. It used libxkbcommon-compose APIs to compose user input and then passed the same input again to QPlatformInputContext (from QWaylandInputDevice::Keyboard::sendKey), which was erroneous. This also means that code was forcing "xkb compose", and did not respect QT_IM_MODULE at client-side. From commit that added compose key handling (57c4af2b18c0fb1d266b245a107fa6cb876b9d9e): "We should expand on it in the future to handle things like resetting the compose state on text field switching". This is now handled by properly utilizing Qt IM framework. Converted QWaylandInputDevice::Keyboard::sendKey into a class member function to avoid adding one more arg (mXkbContext) to the already long argument list. That whole function should be simplified, but that is out-of-scope for this patch. The reworked code uses qxkbcommon support library to reduce code duplication between platforms and to unify behavior. Some users might mistakenly think that this patch introduces a regression with Qt on KDE, but it is actually a KWin/Wayland compositor bug: https://bugs.kde.org/show_bug.cgi?id=405388 The work around on KDE is to use QT_IM_MODULE at client-side to select input method, as KWin compositor over the wire supports only the qtvirtualkeyboard module. Setting this envvar is not someting out of the ordinary for users on Linux. Input method handling at compositor-side is new feature and clearly not very well supported yet. Task-number: QTBUG-65503 Change-Id: Ie511d950396fa2fb6cbe6672996cee9791f3ab11 Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* | Client tests: Fix tst_xdgShell::pongs when run as the only testJohan Klokkhammer Helsing2019-04-111-1/+8
| | | | | | | | | | | | | | | | | | | | The shell integration is initialized lazily, so it's not possible to send ping events to the client before the first window has been initialized. This adds a simple window to the pong test. Change-Id: I13b4a9cb802b7abe18bfc23cf8c75eb873ded3ca Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* | tst_xdgshell::showMinimized: Really make sure the window was createdJohan Klokkhammer Helsing2019-04-111-1/+1
| | | | | | | | | | | | | | | | The surface(), may be a leftover cursor surface from earlier tests. Check for an xdgSurface instead, as those are verified to be cleaned up between tests. Change-Id: I6a2b402130814e896d335787fcb90fd8d57cafb7 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* | Client: Avoid shadowing QPlatformWindow::windowGeometryDavid Edmundson2019-04-113-10/+10
| | | | | | | | | | | | | | | | | | | | | | | | windowGeometry is an existing method in QPlatformWindow with an entirely different meaning to the newly added QWaylandWindow::windowGeometry. This led to the existing call in resizeFromApplyConfigure calling the wrong method. Change-Id: Ib344cf09178e77e5b4d5427325d840346663ec9d Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* | [docs] Some edits to match the Wayland and Qt overview documentationv5.13.0-beta2Kavindra Palaraja2019-04-091-61/+49
| | | | | | | | | | | | | | | | | | * Updating this topic to only mention QtWayland. The general Wayland overview is now moved to "Wayland and Qt". Task-number: AUTOSUITE-679 Change-Id: Ica86edc3ffd162ea722fd97e2b47a18d702bb463 Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* | Compositor: Don't destroy wl_display from platform integrationJohan Klokkhammer Helsing2019-04-082-2/+8
| | | | | | | | | | | | | | | | | | If the platform integration provides the wl_display, it should be the platform integration's responsibility to destroy it as well. Task-number: QTBUG-74879 Change-Id: I18999a5bd8cdc2900cac86f156f2adaaebf86158 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
* | Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-04-067-10/+22
|\| | | | | | | Change-Id: I16bc2e214dda4c8d6c9fc3568af60068815fc558
| * compositor: fix QWaylandShell private objects inheritanceChristophe Chapuis2019-04-035-6/+10
| | | | | | | | | | | | | | | | | | | | If the public API has inheritance relationships, this should be reflected in the private classes too. Otherwise the d_func will cast to a wrong type, leading to crashes. Change-Id: Iad2dccad4b63326e6b108a44c708ab51f0784678 Reviewed-by: Johan Helsing <johan.helsing@qt.io> Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
| * Client xdg-shell v5: Fix crash when creating a popup without a valid parentJohan Klokkhammer Helsing2019-04-022-4/+12
| | | | | | | | | | | | Fixes: QTBUG-72696 Change-Id: I43f0a02a4447238aa93142981d22597c452790fd Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* | Use a dedicated EGLContext for the decorations blitterGiulio Camuffo2019-04-052-148/+59
| | | | | | | | | | | | | | | | | | This allows to drop all the StateGuard code, reduce OpenGL state changes when blitting and to also support windows that requested an OpenGL Core context. Change-Id: Ie507a14a04b3d26cdf31f68973057553fa8493bf Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* | Fix build - screen maintenance functions moved to QWSIJesus Fernandez2019-03-291-3/+4
| | | | | | | | | | | | | | | | | | This is an ammendment to 01e1df90a7debd333314720fdd5cf6cd9964d796 in qtbase. Task-number: QTBUG-74816 Change-Id: I493ff0f64f765683d2398c32626ada28d7f202b5 Reviewed-by: Liang Qi <liang.qi@qt.io>
* | Merge "Merge remote-tracking branch 'origin/5.12' into 5.13" into ↵Liang Qi2019-03-270-0/+0
|\ \ | | | | | | | | | refs/staging/5.13
| * | Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-03-270-0/+0
| |\| | | | | | | | | | | | | | | | | | | Conflicts: .qmake.conf Change-Id: Ic6c2ec0c4d0a0d4e0c94857020d3804ce9cf9ff6
| | * Bump versionKari Oikarinen2019-03-211-1/+1
| | | | | | | | | | | | Change-Id: I628b1d9c25ed6fb2fb62563a214040797df0758f
* | | docs: Fix qdoc warningsKavindra Palaraja2019-03-274-3/+103
|/ / | | | | | | | | | | | | * Added some missing documentation Change-Id: I214b108c084aeff501bed85845153aa80fa61e6d Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* | Fix compilation with QT_NO_WARNING_OUTPUTKai Koehne2019-03-222-14/+15
| | | | | | | | | | | | | | | | | | | | Use qCWarning instead of qWarning if logging into a category. This fixes compilation with QT_NO_WARNING_OUPUT, but in addition also avoids unnecessary string formatting if the category is disabled. Fixes: QTBUG-74359 Change-Id: I0e316a833f3f7d4a9122377a1154e739bcb080b1 Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* | BRCM: fix namespace confusionGeorg Leugner2019-03-222-2/+3
| | | | | | | | | | Change-Id: I146dd41d54889af694b829bf1e6d47e03e892b27 Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* | Fix documentation for bufferLocked propertySimon Hausmann2019-03-191-2/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | Commit 2824a71e5c28ec1843edc056f2c17c6274378f1d silenced the qdoc warning about the bufferLocked property, but it did not fix the underlying problem that the existing documentation would be shown. This patch reverts the change and fixes it by making the \property command match the name of the property, not the getter. Similarly, the \qmlproperty annotation was missing entirely. Change-Id: I66281ea4df0162b14ebfab15f1cc18162ea0e8ef Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* | [docs] Fix qdoc warningsKavindra Palaraja2019-03-194-9/+10
| | | | | | | | | | Change-Id: I57e89057a238064e1270d036b656d261b85e50e7 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* | [doc] Fix mismatch in function signature to address a qdoc warningKavindra Palaraja2019-03-191-1/+1
| | | | | | | | | | | | | | * In the header file, this was uint32_t Change-Id: I5c2e343a2f8ec04b71ef4db577062b5c76f64c72 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* | Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-03-164-5/+45
|\| | | | | | | Change-Id: I6d63f7390a3d26ce8c63c8e5de63b673d6831395
| * Merge remote-tracking branch 'origin/5.12.2' into 5.12Qt Forward Merge Bot2019-03-151-0/+24
| |\ | | | | | | | | | Change-Id: Ib5989d03612370116193266742e26094700be5c9
| | * Add changes file for Qt 5.12.2v5.12.2Antti Kokko2019-02-211-0/+24
| | | | | | | | | | | | | | | Change-Id: Iec24d90c7b6fb4c2eb88b440bbf104d6ef94a25b Reviewed-by: Johan Helsing <johan.helsing@qt.io>
| * | Client: Fix incorrect damage region for window decorationsJohan Klokkhammer Helsing2019-03-141-5/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The previous implementation had gaps in several places. [ChangeLog][QPA plugin] Fixed a bug where the window decoration's damaged area didn't cover the entire decoration. This meant some compositors would not redraw those areas. Change-Id: Ic72663dde301936635b2a1cfa90570a53227e8ea Fixes: QTBUG-74341 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
| * | Compositor: Call eglUnbindWaylandDisplayWL when destroying the compositorJohan Klokkhammer Helsing2019-03-142-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If unbind is not called, some drivers may try to do cleanup that depends on a valid wl_display in eglTerminate. Arguably, this could/should also have been fixed in the affected drivers. There is a display_destroy signal that the driver should listen to, to avoid using dangling wl_display and wl_global pointers. However, by using eglUnbindWaylandDisplayWL we can force the cleanup to happen before wl_display_destroy. Which is what this patch does. Change-Id: Id9062de896b723838bcecac3902031e6b172a6de Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
* | | Compositor: Fix incorrect texture size for client buffers when dpr > 1v5.13.0-beta1Johan Klokkhammer Helsing2019-03-111-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | The old implementation used QQuickItem::width and height, which changes with the devicePixelRatio. We now use the new property, QWaylandSurface::bufferSize, instead, which is the actual pixel size of the buffer. Change-Id: I430f46746ed2b8f0330e0d220718f58004b3bd2e Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* | | Update plugins.qmltypes for Qt 5.13Kai Koehne2019-03-072-6/+40
| | | | | | | | | | | | | | | | | | | | | | | | Task-number: QTBUG-73739 Task-number: QTBUG-74042 Change-Id: I2074321978f0c32aabeb0d3d4873c5d12d09946d Reviewed-by: Kai Koehne <kai.koehne@qt.io> Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* | | Compositor: Add missing WaylandSurface::bufferSize propertyJohan Klokkhammer Helsing2019-03-071-1/+2
| | | | | | | | | | | | | | | | | | | | | ...and also add revision info for the bufferSizeChanged signal. Change-Id: I2b8e9bea7cafc70c078e74b191c3c87b322ff216 Reviewed-by: Kai Koehne <kai.koehne@qt.io>
* | | Compositor: Add revision number for new APIJohan Klokkhammer Helsing2019-03-053-5/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Revisioning API in QML serves two purposes: - Making sure QML code developed against an older version of Qt doesn't change its behavior when run with newer versions. This can otherwise happen due to QML being interpreted, and QML's liberal scoping rules. - Allowing developers to target an older version of Qt, but developing a newer version by explicitly asking for an older import. Change-Id: I837cd449028c4b84c33afa97bcf6c1149801facd Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* | | Client xdg-shell: Add test for switching popupsJohan Klokkhammer Helsing2019-03-053-1/+94
| | | | | | | | | | | | | | | | | | Task-number: QTBUG-73524 Change-Id: Ie9a13aeae52a7576699147e5515e2ed32a3a4d1c Reviewed-by: Giulio Camuffo <giulio.camuffo@kdab.com>
* | | Client: Don't send illegal wl_pointer.set_cursor requestsJohan Klokkhammer Helsing2019-02-274-8/+65
| | | | | | | | | | | | | | | | | | | | | | | | | | | When the cursor focus' wl_surface is destroyed, or the pointer leaves a surface, we have to reset the enter serial to avoid sending illegal set_cursor requests. Change-Id: I0c886e4123acb4aebd325b07bf15b9d3fa8589da Reviewed-by: Giulio Camuffo <giulio.camuffo@kdab.com>
* | | Compositor: Add missing version information for new APIJohan Klokkhammer Helsing2019-02-272-0/+22
| | | | | | | | | | | | | | | Change-Id: Ieec4a97d901f236d2cec003d8b35e2f95b1b2aea Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* | | Client tests: Add convenience for getting cursor surfaceJohan Klokkhammer Helsing2019-02-272-31/+32
| | | | | | | | | | | | | | | | | | | | | Let's simplify all those pointer()->surfaceCursor() calls. Change-Id: I83c51f460fa2313a0b84c8c64509d48027156443 Reviewed-by: Giulio Camuffo <giulio.camuffo@kdab.com>
* | | Client: Decrease buffer_scale for small cursor themesJohan Klokkhammer Helsing2019-02-272-11/+103
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Not all setups or themes have cursors with a matching DPI. In such cases, wl_cursor_load_theme will then return a theme that is the closest resolution it can get. With the previous implementation, cursors themes without a high dpi version would become become really tiny on high DPI displays. This patch prevents it by setting a lower wl_surface.scale for those themes. This also implements proper tracking of the cursor surface's entered outputs (i.e. if the entered surface is destroyed, the scale is reset, and similarly the following sequence of events should also be handled: wl_surface.enter(wl_output@1) wl_surface.enter(wl_output@2) wl_surface.leave(wl_output@2) In the old implementation, we would be stuck with the scale from wl_output@2, but now we now should correctly get the scale of wl_output@1. [ChangeLog][QPA plugin] Cursors on high DPI screens are now scaled up if the cursor theme does not have an appropriate high resolution version. Change-Id: Ic87d00e35612b5afdf8c2e3a4463fcfef1f1f09d Reviewed-by: Giulio Camuffo <giulio.camuffo@kdab.com>
* | | Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-02-262-0/+2
|\| | | | | | | | | | | Change-Id: I4c99725971d7c15448ca3f01306ae869af9ef057
| * | Fix the build with -no-guiLiang Qi2019-02-252-0/+2
| |/ | | | | | | | | | | Change-Id: I9ff6ac4e33e89691e06965515a54e91a831b7a0a Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* | Client: Add test for wl_data_offer leaksJohan Klokkhammer Helsing2019-02-204-30/+153
| | | | | | | | | | | | | | | | | | | | | | Also refactors the mocking code for data device manager and implements its isClean method to verify there are no leaks after each test. MockCompositor::DataDevice now persists across get_data_device requests. Task-number: QTBUG-73825 Change-Id: Ib5866e0c54d021e12557f9a96f27950010f2611b Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* | Client: Don't leak wl_data_offersJohan Klokkhammer Helsing2019-02-205-50/+62
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [ChangeLog][QPA plugin] Fixed a leak of wl_data_offers. Data offers would previously leak when a surface with keyboard focus was destroyed... or if it was hidden... or if it changed type, and so on. Make keyboard focus follow a wl_surface instead of a QWaylandWindow. This also fixes a couple of other minor issues, such as the mRepeatTimer not stopping when a wl_surface was destroyed. Ideally, we would have a QWaylandSurface class separate from the QWaylandWindow, but that's out of scope for this fix. Fixes: QTBUG-73825 Change-Id: I56e502512c3959e3fcdb63744adc4a7698e3d53d Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* | Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-02-164-9/+19
|\| | | | | | | Change-Id: Ifb1c6c64abbb5c453092eeb1aff91572b57de410
| * Client xdg-shell: Fix crash when switching popupsJohan Klokkhammer Helsing2019-02-124-9/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The call to flushWindowSystemEvents() sometimes caused new popups to be shown in the middle of hiding another. I.e. if multiple events show and hide surfaces, they would be shown/hidden in opposite order of their corresponding events. QMenus sometimes suffered from this (can be seen with the qopenglwidget example from qtbase). When the flush was added 5 years ago in 50f43a0c5, it was to "reduce the chances of seeing a bad frame". I don't see any rendering artifacts, though, and I can't find any bug report on it. So let's hope it's safe to remove the hack. [ChangeLog][QPA plugin] Fixed a crash that sometimes happened when switching popups. Also adds more info to the workaround warning message that appears when a popup grab is attempted and there already is another grabbing popup that is not the parent. Fixes: QTBUG-73524 Change-Id: Ibfcbb48c4bbe295c2be1a30add2d7e05cad398c5 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* | Client: Refactor cursors and fix various bugsJohan Klokkhammer Helsing2019-02-1513-214/+433
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch is mostly a cleanup to prepare for implementations of xcursor-configuration, but also fixes a couple of issues. Most of the logic has now been moved out of QWaylandDisplay and QWaylandCursor and into QWaylandInputDevice and QWaylandInputDevice::Pointer. QWaylandDisplay now only contains mechanisms for avoiding loading the same theme multiple times. There is now only one setCursor method on QWaylandInputDevice, accepting a QCursor and storing its values so changing scale factor doesn't require calling setCursor again. QWaylandInputDevice::Pointer::updateCursor() is called instead. Cursor buffer scale is now set according to enter/leave events of the cursor surface itself instead of the current window, this fixes incorrect buffer scales for cursors on windows that span multiple outputs. The window buffer scale can still be passed into the seat as a fallback until the first enter event is received. This also fixes a bug where the QWaylandBuffer of a bitmap cursor could be deleted while it was being used as a cursor. [ChangeLog][QPA plugin] Fixed a bug where the DPI of bitmap cursors were not sent to the compositor, leading to the compositor incorrectly scaling the cursor up or down. [ChangeLog][QPA plugin] Fixed a bug where bitmap cursor hotspots were off when the screen scale factor was different from the bitmap cursor device pixel ratio. Task-number: QTBUG-68571 Change-Id: I747a47ffff01b7b5f6a0ede3552ab37884c4fa60 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* | Fix race condition in autotestsPaul Olav Tvete2019-02-122-10/+19
| | | | | | | | | | | | | | The QVector m_surface is modified in both threads. Change-Id: I1818a5e1307d191f1613513b86703eaa7bda3c6e Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* | Merge remote-tracking branch 'origin/5.12' into 5.13Qt Forward Merge Bot2019-02-091-2/+2
|\| | | | | | | Change-Id: I1b00775ff2d9ede97dbcd9f9deb9f2a947cf1ae5
| * Doc: Fix wrong link to isBufferLockedNico Vertriest2019-02-071-2/+2
| | | | | | | | | | | | Change-Id: I5024e50af6e403e9373181948b36548bc0862f9b Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Johan Helsing <johan.helsing@qt.io>