summaryrefslogtreecommitdiff
path: root/src/plugins/shellintegration/ivi-shell
Commit message (Collapse)AuthorAgeFilesLines
* Revert "Update commercial license headers"v5.15.3-lts-lgplTarja Sundqvist2021-03-225-100/+100
| | | | | | | | | | | 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>
* Update commercial license headersTarja Sundqvist2021-01-275-100/+100
| | | | | | | | | | | | | | | 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>
* Port from QMutex::Recursive to QRecursiveMutexMarc Mutz2019-07-312-2/+4
| | | | | Change-Id: Id3d7c7e5a62b8f7a7844dab872e16bf2094a5c91 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Client: Make QWaylandWindow's wl_surface inheritance privateJohan Klokkhammer Helsing2019-03-141-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | QWaylandWindow inheriting wl_surface is a leftover from the old days, and today it is sometimes causing great problems. Especially on xdg_shell and other shells where the wl_surface needs to recreated with a different role if the QWindow::type changes. This is currently worked around by calling reset() on the surface, which will destroy the wl_surface, and emit some necessary events and signals. However, much of the rest of the code still assumes that a QWaylandWindow maps directly to a single wl_surface which won't change over the lifetime of the QWaylandWindow. Today, it would make sense to implement this with composition rather than inheritance. This is a major undertaking and so this is the first small step; hide the inheritance in QWaylandWindow's public API. This makes it much more visible when and where the rest of the QPA plugin is using it, so we can eventually move it into its own class later. Task-number: QTBUG-74373 Change-Id: I257729e33c3a5368cef4bb1e16148ba392e65bd2 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
* use new feature name xkbcommon_evdev -> xkbcommonGatis Paeglis2018-12-051-2/+2
| | | | | | | | | The xkbcommon configure logic was refactored in qtbase/c3a963da1f9e7b1d37e63eedded61da4fbdaaf9a. For more details see the relevant commit. Change-Id: Ic1aa26846ab8266c589f6e92dc8b81aba36df58a Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* Client: Get rid of QWaylandShellSurface::setTypeJohan Klokkhammer Helsing2018-06-192-8/+0
| | | | | | | | | | This shouldn't change any behavior, but lets the shell integrations choose if they want to use the extremely hacky QWaylandWindow::transientParent(). Hint: Not all shells need the hacks, and not all shells need them in all cases, and some shells may need even more hacks. Change-Id: Id105e4feb83cc9c14dcf07dcca55fcd5e63d4a2b Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Client: use new shell plugin pattern for ivi-shellPaul Olav Tvete2018-05-292-29/+15
| | | | | | | | | | Initialize should return false if the ivi-application global is not present. The previous code worked because ivi-shell was last in the priority list. This may not always be the case if we add more shells, or allow QT_WAYLAND_SHELL_INTEGRATION to be a list. Change-Id: Iec4409db039b3ebe163264187f901af5d845e54d Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* Client: Add acked configure support and implement it for xdg-shell v6Johan Klokkhammer Helsing2018-05-072-1/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The problem: The code in QWaylandWindow::setWindowStateInternal made many assumptions about how the shell surface responded to new window states, and when and if they were applied. Particularly: - The shell integrations support different subsets of Qt::WindowStates, so it doesn't make sense to map from states to setFullscreen, setNormal, etc. in QWaylandWindow because it really depends on the shell integration how it should be handled. - Some states are not supported/unknown on some shells and should immediately be rejected. - On some shells, particularly those where the current state is unknown, flags need to be resent even though they didn't change. - Should handleWindowStatesChanged be called immediately (client decides) or should it wait for a configure event (compositor decides)? I.e. the mState variable only makes sense for some shells. Furthermore, when state changes come from the compositors, some shell integrations require that a configure event is acked by the client and that the next committed buffer's size and content matches that configure event. Previously, we would just ack immediately and still send a buffer with the old size before a correct frame was drawn. i.e. sending incorrect acks, which would lead to protocol errors on some compositors. Additionally, QWaylandWindow::createDecoration() also assumed that windows should have decorations unless they are fullscreen. This is not always the case, particularly on ivi-application and probably on future shell integrations for embedded or tiling window managers etc. The Solution: The responsibility of mapping requested window states to Wayland requests have been moved to the QWaylandShellSurface implementation. QWaylandWindow now calls a new virtual, QWaylandShellSurface::requestWindowStates(Qt::WindowStates), instead of trying to be smart about it. The virtual getters and setters for window states have now been removed from the QWaylandShellSurface interface. It's now also the shell surface implementation's responsibility to call QWaylandWindow::handleWindowStatesChanged if and when it knows a new state is effective. QWaylandWindow::configure has been replaced with QWaylandWindow::applyConfigureWhenPossible(), which causes another new virtual, QWaylandShellSurface::applyConfigure(), to be called whenever we're free to resize and change the states of the next buffer (this is when states should be acked). This means that shells that use acked states need to store the pending states themselves, call applyConfigureWhenPossible(), wait for applyConfigure() to be called, call resizeFromApplyConfigure() and handleWindowStatesChanged(), and finally ack the applied state. Acked state for xdg-shell v5 and v6 has now been implemented, which also means we've now: [ChangeLog][QPA plugin] Implemented support for maximizing, minimizing, and setting fullscreen with xdg-shell unstable v6. [ChangeLog][QPA plugin] QWindow::isActive now follows configure events on xdg-shell unstable v6 (like v5). QWaylandWindow::createDecoration queries QWaylandShellSurface::wantsDecoration before creating window decorations, instead of using the previously unreliable QWaylandWindow::isFullscreen(). [ChangeLog][QPA plugin] Window decorations are now automatically disabled for ivi-application. The refactor also removes a couple of hacks: - QWindowSystemInterface::flushWindowSystemEvents() was called in QWaylandWindow::setWindowStates. Since this hack was introduced, the events now have oldState and newState members, and their values seem to make sense (ensured in the tests). - The hack for unminimizing on xdg-shell v5 in QWaylandWindow::createDecoration was not needed anymore. Finally, tests have been added for xdg-shell v6 to ensure that the right Wayland requests are sent, that we respond to configure events from the compositor, and that the Qt events and signals emitted on the client side make sense. Task-number: QTBUG-53702 Task-number: QTBUG-63417 Task-number: QTBUG-63748 Task-number: QTBUG-66928 Change-Id: Ib4c36b69105750f9dbdcc78adcf71e2e994cc70d Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Use override when applicableJohan Klokkhammer Helsing2018-02-283-5/+5
| | | | | | | | | | Applied automatic fixes using clang-tidy's modernize-use-override. This adds the "override" keyword where it's possible and also removes the "virtual" keyword when redundant. Change-Id: I899950e5cf8782785d30a245a9c69c1720905d50 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Use default member initialization for raw pointersJohan Klokkhammer Helsing2018-02-281-1/+1
| | | | | | | | Initialize to nullptr to prevent undefined behavior. Change-Id: I7753c0be77a886d62ecb1cd7b86fc8c98340b0b8 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* Init variables where they are declared when possible (clang-tidy)Johan Klokkhammer Helsing2018-02-274-15/+7
| | | | | | | | | | | | | | | | | | | | clang-tidy -p compile_commands.json $file \ -checks='-*,modernize-use-default-member-init,readability-redundant-member-init' \ -config='{CheckOptions: [{key: modernize-use-default-member-init.UseAssignment, value: "1"}]}' \ -header-filter='qtwayland' \ -fix Afterwards I ran search and replace on the diff to clean up some whitespace errors: - Replaced '(\n\+[^:\n]*)(:\s+\+\s+)' with '$1: ' - Replaced '(\n\+[^,\n]*)(,\s+\+\s+)' with '$1, ' - Replaced '\n\+\s*\n' with '\n' I also had to do some manual edits, because for some reason, this particular clang-tidy check doesn't trigger for some files. Change-Id: I3b3909bac4bf20108bbe8ad1e01bcc54236dae1b Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
* Replace Q_NULLPTR with nullptrKevin Funk2017-09-262-6/+6
| | | | | | | Change-Id: I9699a957430b8d3574ce29acb91b7ada9ea6209b Reviewed-by: Jan Arne Petersen <jan.petersen@kdab.com> Reviewed-by: Johan Helsing <johan.helsing@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Fix licensingv5.9.0-beta4Jani Heikkinen2017-05-045-66/+96
| | | | | | | | | | Currently tests are licensed under GPL-EXCEPT, examples under BSD and src under LGPL so replase old license headers with new & proper ones. Also remove old & unused license files Task-number: QTBUG-57147 Change-Id: Ia6a738798736c275dc309ccfa5b627dc2178d241 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Fix warning about inconsistent use of override keywordv5.9.0-beta2Thiago Macieira2017-04-041-1/+1
| | | | | | | | | qwaylandshmbackingstore_p.h:93:19: warning: 'paintDevice' overrides a member function but is not marked 'override' [-Winconsistent-missing- override Change-Id: I27b55fdf514247549455fffd14b1791d4dd6b6b3 Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* Fix ivi-shell surface id generation limitJens Georg2017-03-061-1/+1
| | | | | | | | | | | The code tries to calculate 2 to the power of 10, but actually calculated 2 XOR 10, limiting the actual number of surfaces possible to use within one application to 8 Change-Id: If16dccaee7aa575c6e0736fb514edb09b4dbee11 Task-number: QTBUG-58934 Reviewed-by: Jan Arne Petersen <jan.petersen@kdab.com> Reviewed-by: Giulio Camuffo <giulio.camuffo@kdab.com>
* Merge remote-tracking branch 'origin/5.8' into devLiang Qi2017-01-254-7/+8
|\ | | | | | | | | | | | | | | | | | | | | | | Conflicts: .qmake.conf examples/wayland/custom-extension/client-common/main.cpp src/client/qwaylandwlshellintegration_p.h src/client/qwaylandxdgshellintegration_p.h src/compositor/compositor_api/qwaylandquickoutput.h src/plugins/shellintegration/ivi-shell/qwaylandivisurface_p.h Change-Id: Ic78c610ddf102b0a185294f625bbfcb9238b0f3c
| * Replace all occurrences of Q_DECL_OVERRIDE with overrideJohan Klokkhammer Helsing2017-01-233-3/+3
| | | | | | | | | | Change-Id: I16b7b23efe944b49d1fcc9e7588cdb0a991cebd1 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
| * load(qt_plugin) at the endOswald Buddenhagen2017-01-201-4/+4
| | | | | | | | | | | | | | amends 5b3f207ed after the addition of the ivi-shell in f144f0f71. Change-Id: I35c3974ed5f257d83280e4dc3421e4a2a57303d6 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
| * Set PLUGIN_CLASS_NAME in .pro filesPaul Olav Tvete2017-01-021-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | This fixes static linking and cmake config file generation. In some cases, the class was renamed for disambiguation or just uniformity. Task-number: QTBUG-51248 Change-Id: Ibdce2e1b6a52312f84301c426632e94deeb567bd Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io> Reviewed-by: Samuli Piippo <samuli.piippo@qt.io>
* | Change QWindow::visible when surface visibility in ivi shell is changedTasuku Suzuki2016-11-242-0/+6
|/ | | | | | Change-Id: I2c2debe47fcb173f02aef5f4e60e52c35ad7b395 Reviewed-by: Yusuke Binsaki <yusuke.binsaki@itage.co.jp> Reviewed-by: Giulio Camuffo <giulio.camuffo@kdab.com>
* Use the feature system internallyLars Knoll2016-11-231-4/+1
| | | | | | | | | Get rid of almost all DEFINES += ... in the pro files, instead use the proper QT_CONFIG() macro to determine whether a feature is available. Change-Id: I867769be2085c6ba93b6815e223e2b89edcb245d Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Move qtwayland over to use the new configuration systemLars Knoll2016-11-231-13/+4
| | | | | | | | | | | | | Re-use configuration results from qtbase where possible and move all pkg-config handling over to be done at configuration time. Since waylandclient and waylandcompositor are two independent libs, this required some duplication of features and libraries used by both in the configure.json files. Change-Id: I1f3ec56c85cb780324cc7634a3ad7951125853a0 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io> Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Create and destroy the shell surface when showing and hidingGiulio Camuffo2016-11-172-0/+9
| | | | | | | | | | | | | | | | | | This changes the shell surface handling for windows, and instead of creating the shell surface at initialization time, and then attaching a null buffer to hide it, it creates the shell surface on setVisible(true), and destroys it on setVisible(false). This fixes hiding when using xdg_shell, as that interface defines that attaching a null buffer to an xdg_surface is an error. Also this should help with bugged EGL drivers which attach a buffer after eglSwapBuffers() returns, which used to cause a newly hidden window to get a new valid buffer after we attached a null one, showing it again. Task-number: QTBUG-47902 Change-Id: I8e0a0442319a98cc1361803ea7be1d079b36fc8c Reviewed-by: Johan Helsing <johan.helsing@qt.io> Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Remove QWaylandWindow::shellManagesActiveStateJohan Klokkhammer Helsing2016-11-101-0/+1
| | | | | | | | | | | | If m_shellSurface was deleted, there was no way for QWaylandDisplay to know whether the shell handled window deactivation or not. The shell integration now always handles the window active state. The default implementation of QWaylandShellIntegration will make a window active on keyboard focus. Change-Id: I80cfce9976b1d3c57094fdd8980c9110b873f239 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
* Implement initial IVI-shell support with shell integration.Yusuke Binsaki2016-02-128-0/+543
IVI-shell provides a shell interface for Weston, which maps the GENIVI API (http://www.genivi.org) for In-Vehicle Infotainment as Wayland-Ivi-Extension (http://wiki.projects.genivi.org/index.php/Wayland_IVI_Extension_Design). This patch is included in two protocol. The first is ivi-application protocol which provided by weston. Next is ivi-controller protocol which provided by Genivi's wayland-ivi-extension. In IVI use case, the client create and destroy surface with the unique ID by using ivi-application protocol. On the other hand, the controller such as HMI Controller control some properties, which are visibility, position, size, etc, with created the unique ID by using ivi-controller protocol. It means the unique ID is necessary to create and control the ivi-surface and the the ivi-layer. However Qt has no API to set the some surface or layer ID. In this ivi-shell plugin, the unique ID can be set via the environment parameter so that we can control the ivi-surface and ivi-layer. The name of environment parameter is QT_IVI_SURFACE_ID. QT_IVI_SURFACE_ID will be used as ivi-surface and ivi-layer. If application needs more than two surfaces, ivi-surface IDs will be incremented. When QT_IVI_SURFACE_ID isn't set, ivi-surface and ivi-layer ID will be generated internally. The ID consists of the process ID and the surface ID which is incremented in ivi-shell plugin. The process ID is used as lower 22 bit per 32bit. 23 to 32 bit is used as the surface IDs in a process. e.g. When the process ID is 0x765 and create two surfaces, ivi-layer ID is 0x765 and ivi-surface IDs are 0x765 and 0x00400765. +------------+---------------------------+ |31 23|22 0| +------------+---------------------------+ |0000 0000 00|00 0000 0000 0000 0000 0000| |<- ID ->|<- process ID ->| +------------+---------------------------+ We can set QT_WAYLAND_SHELL_INTEGRATION of the environment parameter to "ivi-shell" to use IVI-shell. Change-Id: Iddcfb3de89dc022530c0285524cf6bbf640147b6 Reviewed-by: Giulio Camuffo <giuliocamuffo@gmail.com>