summaryrefslogtreecommitdiffstats
path: root/examples/applicationmanager
Commit message (Collapse)AuthorAgeFilesLines
* YAML: Add support for version 1.2 document parsingRobert Griebl8 days7-13/+13
| | | | | | | | | | | | | | | | | | | | | YAML 1.2 was specified in 2009 and 1.1 is considered legacy nowadays. The default for parsing and emitting unversioned documents is still 1.1, but you will see warnings for unversioned documents that use features that are not compatible with 1.2. Starting with AppMan 6.12, the default will switch over to 1.2 for unversioned documents. In addition all tags from the core schema are now correctly applied to both 1.1 and 1.2 documents. Version 1.1 will still be supported in the future for explicitly versioned documents. Change-Id: I6c9920784c8f7650d7e63f2273773d7fa462fe9a Pick-to: 6.11 Reviewed-by: Bernd Weimer <bernd.weimer@qt.io>
* Re-organize the appman libraries into more manageable chunksRobert Griebl8 days27-43/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is part 2 of this patch series. Part 1 was about converting the libs from static to shared. This patch now consolidates the library zoo into more manageable and logical chunks. Plus this will also help with keeping the hit to the startup performance (incurred by part 1) in check. The new setup closely follows the QML module nomenclature, but needs to account for the tool builds as well. The new libs are: - Common no changes - Package a combination of Package, Application and Crypto - Shared renamed from SharedMain and combined with Monitor and IntentClient - SystemUI renamed from Main and combined with Manager, DBus, IntentServer and Window - Application renamed from ApplicationMain Because the CrashHandler is using a "constructor" function, it had to be moved from the Common to the Shared lib to avoid having the custom crash handler also in the tools, as they need to install their own CTRL+C handler at times. In addition the 3 QML import modules are now built as official QML plugins and they are installed into $QTDIR/qml as any other import library. NB! There is a problem we still have to solve: custom appman binaries (system-ui's) are currently built by linking against Qt::AppManMain, but this no longer exists. It would be ideal if we could add an alias here. The other renamed modules are not that problematic, as they shouldn't be used outside of the appman project itself. If an alias is not possible, a dummy library which depends on the new "SystemUI" one should also do the trick. Change-Id: Id07e05a523c48e773c295c5be2f27804229155e0 Pick-to: 6.11 Reviewed-by: Bernd Weimer <bernd.weimer@qt.io>
* Fix all cmake warnings in the examples and testsRobert Griebl14 days19-164/+79
| | | | | | | | | | | | All the warnings in the examples came from qt_internal_add_example in qtbase changing and nobody applying the necessary fixes to the appman examples. The bubblewrap example on the other hand just had a package name that conflicted with QML module conventions. Change-Id: Id63ccb9b02c16ae581a1796c09d1308f61a85511 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Examples: fix the package-installation for cross-buildsRobert Griebl2025-11-243-3/+21
| | | | | | | | | | | | | | | 1) Do not compile in absolute paths from the build environment when cross compiling. Yocto does not like that, plus it just is useless anyway. 2) Tell the user that he needs to start the appman-package-server on his desktop machine for the example to work. 3) Switch the appman-package-server from being an 'app' to being a 'tool', as it is only meant to be used on a development machine. Change-Id: I5f159fafb38aac17f04f73f27405b6ddb8fd6698 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Examples: enable development modeRobert Griebl2025-11-1911-1/+25
| | | | | Change-Id: I050cee2f770ee7dd86ca1e52c0c956244ac60853 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Fix the package installation exampleRobert Griebl2025-11-191-1/+1
| | | | | | | | That got broken with 3a051f87e50f7c5b9da0c2a0258336c4421edf37 Change-Id: I3d9d49e8dc453cd0d5dccbdba10cae87ae9abfbc Pick-to: 6.10 6.8 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Security: remove suid-root supportRobert Griebl2025-08-251-2/+5
| | | | | | | | | | | | All suid-root binaries are dangerous if not setup correctly. This here is a better way to avoid these inherent problems, while still being able to use the appman's built-in sudo-helper with minimal changes. Pick-to: 6.10 Change-Id: If13507e226a57b16659c89599497735f2df128ad Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Examples: Move to 'Embedded' categoryKai Köhne2025-06-2412-0/+12
| | | | | | | | | This makes sure the example are shown under 'Embedded' in Qt Creator's welcome screen, and not under 'Other'. Pick-to: 6.9 6.10 Change-Id: Ib4f39f9ddc65b70d5f6b3cd7ea36ecdf7157b99f Reviewed-by: Robert Griebl <robert.griebl@qt.io>
* Improve nested compositor exampleBernd Weimer2025-06-053-26/+45
| | | | | | | | | | | | - Fixed the wayland output's window (Window attched property is only available on Items) - Prevented warning and crash at exit, by removing all client surfaces before termination - Made text wrap again properly in window Change-Id: Iad9adcaa800dae599f1420e4c91ab02f9a77d66f Pick-to: 6.10 6.9 6.8 Reviewed-by: Robert Griebl <robert.griebl@qt.io>
* Remove the long obsolete SoftwareContainers exampleRobert Griebl2025-06-057-865/+0
| | | | | | Change-Id: I4ec8eba083503f4318cc896f8e3f571f6234a2a3 Pick-to: 6.10 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Add configure option for bubblewrap containerSamuli Piippo2025-06-031-0/+2
| | | | | | | | | | Bubblewrap container has runtime dependency for bwrap, adding separate config for the feature lets us disable it if bwrap is not available. Task-number: QTBUG-136961 Pick-to: 6.10 6.9 6.8 Change-Id: I03c3ce4e351699bbeb6d08a002b36d774c1fa9b5 Reviewed-by: Robert Griebl <robert.griebl@qt.io>
* Add the missing CLASS_NAME to the qt_add_plugin callsAlexey Edelev2025-04-252-0/+2
| | | | | | | | | | | | | | The plugin names that are no compliant with C++ indentifiers are not allowed. Add the explicit CLASS_NAME definitions, that avoid using the prohibited symbols. Also fix documentation, that it doesn't ecourage the use of dashes in the plugin target names. Pick-to: 6.8 6.9 Task-number: QTBUG-135860 Change-Id: I9b80818756d6685d5c19ad50f82dad99fdd66aa7 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Convert bwrap configuration from an unordered into an ordered mapRobert Griebl2025-02-121-6/+6
| | | | | | | | | | | | | This is necessary, because some bwrap command line options are position dependent in relation to other options. Old, unordered configurations are still accepted, but a warning is printed that a conversion is needed. Change-Id: Id24a1836c7568422767c0f9ed54e65101abd0b64 Pick-to: 6.9 6.8 Fixes: QTBUG-133605 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Dump deferred log messages on error exitRobert Griebl2024-12-092-2/+2
| | | | | | | | | | | | | | Before you would not see any output, if an error occurred before the complete config parsing finished successfully ... unless you knew that there is the obscure --log-instant command line option. I have no idea if there was a legitimate reason why Main inherited SharedMain as "protected" instead of "public", but this was most likely just an oversight when refactoring. Change-Id: Ib9e7827819122a8fa53f1732b606e7ace9422428 Pick-to: 6.8 6.9 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Add a new monitoring component to detect unneccesary renderingRobert Griebl2024-12-012-5/+23
| | | | | | | | FrameContentTracker helps with detecting non-visible animations or Wayland clients that are rendering off-screen only. Change-Id: I827179f76df75e96b7c5dd6742fc2240cd79fd71 Reviewed-by: Bernd Weimer <bernd.weimer@qt.io>
* Examples: Fix application-features on WindowsRobert Griebl2024-11-1913-28/+50
| | | | | | | | | | | | | | | | | | | | | | | | Our cmake setup on Windows creates all DLLs in the top-level build directory, but we explicitly need the app modules in the respective app directories. Also, the Widgets app does not make sense (and cannot work) in single-process mode, so there's no point in building it. The Glitches app in addition was not able to import the additional module, because it was named the same as the app module. Instead of renaming the second module, the functionality was folded into the app module in order reduce confusion: the Crash app already shows how to have another private module inside the app. With no Wayland available, the Compositor app doesn't make sense, so the actual implementation got moved into a component and the app now just shows an error message if that component cannot be loaded. Change-Id: I3812d4e1205264c73f36a74e573477f70ed3be7b Pick-to: 6.8 6.8.1 Fixes: QTBUG-130388 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Fix frame-timer example and MonitorModelRobert Griebl2024-11-131-9/+17
| | | | | | | | | | | | | | | | | * The fps bar graph should have been aligned at the bottom, but ListView delegate x/y positioning changed in Qt 6. * The combination of QAIM::beginMoveRows and QML's ListView results in a steady ~7 fps render load (with spikes into the 60s), even with no move animations enabled. Switching to manually calling layoutChanged gets us back to 1 fps. * The dataChanged signal for a new datapoint was emitted for the wrong model index. Change-Id: I1969b08f36ebfebb4f51cc32cc6d7745ef96e78e Pick-to: 6.5 6.8 6.8.1 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Prevent atexit() handlers from running when an exception occursRobert Griebl2024-11-132-4/+4
| | | | | | | | | | | | This ensures (a) a clean immediate exit in case of startup failures and (b) it also suppresses the new "unexpected exit" message. (Also fixed an unwanted line-break that messes up the quoting in the documentation) Change-Id: Ic931070aba2ee6c2f155507007a1482a95387a49 Pick-to: 6.8 6.8.1 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Drop useless include from the Glitches exampleZoltan Gera2024-10-091-1/+0
| | | | | | | | | | | It seems that a Unix-only include was not used in this example while not being excluded from Windows builds. Remove the useless include to solve the problem. Fixes: QTBUG-129814 Pick-to: 6.8 Change-Id: I810d5ed1e1138ce7f21f6bff4e9de7bce4072869 Reviewed-by: Robert Griebl <robert.griebl@qt.io>
* examples: Avoid target name clashUlf Hermann2024-09-251-1/+1
| | | | | | | | In a toplevel build there is another target called "Widgets", unsurprisingly. Change-Id: Ic0fa056e1a8fb49b0a23bb60357c8dd98fff209b Reviewed-by: Robert Griebl <robert.griebl@qt.io>
* CMake: Use versionless commands everywhereDominik Holland2024-09-0421-42/+42
| | | | | | Change-Id: I3bd2bde0ffc04e57ae852c92828626f97e04a0f6 Pick-to: 6.8 Reviewed-by: Robert Griebl <robert.griebl@qt.io>
* Add missing install destinations to all examplesDominik Holland2024-08-1911-0/+22
| | | | | | | | | | Install destinations for BUNDLE and LIBRARY are needed for android and ios deployment. Change-Id: I8370e3155534f9d0c99c9ea1ca6ecbe2e1543884 Pick-to: 6.8 Fixes: QTBUG-127933 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Remove the now defunct qmake pro files for the examplesRobert Griebl2024-07-3028-521/+0
| | | | | | | | Also fixed some docs that still reference qmake functionality. Pick-to: 6.8 Change-Id: I9244248b3a6252ef10cbd44c6e51de01ca22b2d6 Reviewed-by: Bernd Weimer <bernd.weimer@qt.io>
* Add glitches app to application-features exampleBernd Weimer2024-07-2916-3/+338
| | | | | | | | | This app allows to experiment with the newly added watchdog functionality. Change-Id: Ia1c6a66a95317b9d92b967e481708d8c59c0efba Pick-to: 6.8 Reviewed-by: Robert Griebl <robert.griebl@qt.io>
* Watchdog: simplify the render thread timeout configurationRobert Griebl2024-07-262-0/+18
| | | | | | | | | | | We still track the different states the render thread might get stuck in, but there is now only one timeout value that is used for all states. This makes it easier to configure and also brings the config more in line with the other watchdogs. Change-Id: Icc641d22db1cf216a8c4a7e93e08db5584d8de3d Reviewed-by: Bernd Weimer <bernd.weimer@qt.io>
* Fix build of application-features examplesBernd Weimer2024-07-262-3/+4
| | | | | | | | Qt::AppManApplicationMainPrivate wasn't found when built separately. Change-Id: I6b047247d9fde6a944c90ad5e5ff884f58355d17 Pick-to: 6.8 Reviewed-by: Robert Griebl <robert.griebl@qt.io>
* Switch all examples to the modern am-package manifest formatRobert Griebl2024-07-2622-86/+133
| | | | | | Change-Id: Ia4cf62be2e793ccab269b64d7188c9202b160360 Pick-to: 6.8 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Add missing QTP0004 to examplesRobert Griebl2024-07-251-0/+3
| | | | | | Change-Id: I9ce57210aba5ff110c3a8c35f4235ba005ac5465 Pick-to: 6.8 Reviewed-by: Bernd Weimer <bernd.weimer@qt.io>
* Extend the package-installation exampleDominik Holland2024-07-195-3/+62
| | | | | | | | | | The new installable.pink package contains QML code compiled into library and shows how this can be packaged using the CMake API. Pick-to: 6.8 Change-Id: Icf7b1f7e92d070c1fe623ef0dc1ddc476722c41a Reviewed-by: Robert Griebl <robert.griebl@qt.io>
* Rewrite all examples using modern Qt APIsDominik Holland2024-07-1960-374/+878
| | | | | | | | | | | | * Use new CMake API * Add a main.cpp to every example * Compile the system-ui and am-config.yaml into the every binary * Compile all apps in the application-feature example into binaries * Use the new package CMake API in all examples Pick-to: 6.8 Change-Id: I97112bde1631c142a65824f30233835076f6cab6 Reviewed-by: Robert Griebl <robert.griebl@qt.io>
* CMake: Improve the create_*_package APIDominik Holland2024-07-191-7/+19
| | | | | | | | | | | | | | | The improved API takes care of copying and installing the files into the correct directories and adds support for DEPENDENCIES. For installable packages the function now takes care of copying the files into the package directory and now also supports packaging binaries. Pick-to: 6.8 Fixes: AUTOSUITE-1336 Change-Id: Ie3665df7e0e860c0f7a449d3f22d0b55e6709b9c Reviewed-by: Robert Griebl <robert.griebl@qt.io>
* Extend the QT_AM_MAIN macro to make it more flexibleRobert Griebl2024-07-191-0/+1
| | | | | | | | | Any argument given to the macro will be forwarded to the contained QtAM::Configuration constructor. Change-Id: I52bfa65461ef0b8b6af0408fc966f1921f80dc7a Pick-to: 6.8 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* ASAN, qmllint and compiler warning fixesRobert Griebl2024-05-311-0/+3
| | | | | Change-Id: I6ee4c7d92adb19de26d7076eeb52d134650188ab Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* A better watchdog for Wayland, main thread and scene graphRobert Griebl2024-05-311-1/+0
| | | | | | | | | | | | | | | | | | | | | | | This replaces the existing Wayland ping/pong watchdog with a new setup that monitors: - Wayland XDG clients (on a per-client basis, not per-surface as before) - The main event loop - All scene-graph render threads, split up into the states: syncing, rendering and swapping. Each of those sub-watchdogs has a configurable check interval, a warn timeout and a kill timeout. In addition, this watchdog can also handle watchdog request coming from systemd, if the AM is started via a systemd unit with the relevant options enabled. The documentation will come in a follow-up commit. Fixes: QTBUG-125986 Change-Id: I3d50a0d33625c180965eed98b24c80dc7cf9dece Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Refactor the representation of the YAML configurationRobert Griebl2024-05-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a bit of a kitchen sink commit for a lot of things touching the YAML parsing code. Splitting it up would have been a nightmare though and touched a lot of code lines multiple times. - Adding a new field to the YAML confguration was quite involved: 1) add it to the parser in loadFromSource() 2) add it to loadFromCache() 3) add it to saveToCache() (same order as in step 2) 4) add it to merge() 5) bump dataStreamVersion() 6) add one or more public getter function(s) to Configuration, depending on the complexity of the data-type. In order to get around this problem, a lot of fields just used an un-typed QVariantMap. This patch eliminates step 3) and 6) loadFromCache() and saveToCache() now use a common serialize() function and some template magic to do both tasks. - The YAML file is now mostly resembled by a publicly accessible nested struct of structs: this makes the code (a) more readable (as the C++ code matches the YAML structure) and (b) does away with the gazillions of getters. - This was also the perfect time to finally use a real data structure for the OpenGL config, replacing the QVariantMap hack. - While at it, the actual field parsing was made a lot more readble: - got rid of the unnecessary YamlParse* lambda arguments - added helper parseFoo() functions to make code more concise - used the same parseFields(<temp list>) syntax everywhere - added specialized parsing for time duration values Change-Id: Ia811056f7220bf7509af146f69f99c6f7e4b09ea Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* bwrap: Fix missing /usr/lib64 preventing start on Debian/aarch64Robert Griebl2024-05-171-1/+1
| | | | | | Change-Id: I025c9d9c0086aedfaab96ee771eac5f3422201c6 Pick-to: 6.7 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Remove all literal uses of /tmpRobert Griebl2024-05-153-4/+4
| | | | | | | | | | | | | - In am-configs, use QStandardPaths to avoid creating a mess in the filesystem on Windows. - In the C++ code, we really should be using $XDG_RUNTIME_DIR on Linux nowadays. While at it, the /tmp (and /run) subdirectories used by the appman have been harmonized and made less cryptic. Change-Id: Iab71aff81333653fb12bcecd3e94767b64f2c818 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Code cleanupRobert Griebl2024-04-291-1/+0
| | | | | | Change-Id: I2f47a7b41fd67574161f573586df3acc7e869cf4 Pick-to: 6.7 Reviewed-by: Bernd Weimer <bernd.weimer@qt.io>
* Replace all signals/slots keywords with Q_SIGNALS/Q_SLOTSRobert Griebl2024-04-223-3/+3
| | | | | Change-Id: I92238b01155a2e43b8877576faf603957dcb95ba Reviewed-by: Bernd Weimer <bernd.weimer@qt.io>
* CMake: Use qt_internal_add_example for examplesAlexandru Croitor2024-03-071-14/+14
| | | | | | | | | | | | | All examples should be added via qt_internal_add_example instead of add_subdirectory, to support building examples as ExternalProjects as well as support example sources installation. Pick-to: 6.6 6.7 Task-number: QTBUG-90820 Task-number: QTBUG-123096 Change-Id: Ia307f57beeaf9e7b15605f3b53f39e7983afa144 Reviewed-by: Alexey Edelev <alexey.edelev@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* doc: Document the problem with missing libwayland-dev packagesRobert Griebl2024-03-0713-0/+26
| | | | | | | Change-Id: If225fd8e4aaff922375f96c573a7996e8ed21f74 Pick-to: 6.7 6.6 6.5 Fixes: QTBUG-123088 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Fix exception handling after Q*Application::exec()Robert Griebl2024-03-072-10/+13
| | | | | | | | | | | | | | | | Uncaught exceptions thrown after we call exec() are originating from user code and we should not be catching those in our top-level catch handler. This will just print "ERROR: <what()>" without any context and make it look like the error is coming from the AM itself. Instead we need to run the event loop without a try/catch handler, so stray exception from user code go directly to our set_terminate handler in the CrashHandler class, which preserves as much context as possible and prints out a lot more useful meta data for debugging. Change-Id: Icc0432d5a6c5db85de439cafab89d05aa88b5891 Pick-to: 6.7 6.6 6.5 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Replace all #pragma once with old-style #ifdef include guardsRobert Griebl2024-03-054-4/+16
| | | | | | | | Change-Id: I1805fbccf4d9398fddfe8f4ab977236afc49ca45 Fixes: QTBUG-122951 Pick-to: 6.7 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* doc: fix file quoting in bwrap exampleRobert Griebl2024-02-181-3/+2
| | | | | | Change-Id: Iec21d4b347d7d5353206fda84737571510678640 Pick-to: 6.7 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Examples: check if the server command is valid in package-installationRobert Griebl2024-02-071-3/+7
| | | | | | | | | This is only the case, if the example is started via the generated .bat/.sh wrapper. Change-Id: I9f9ea0c54547c5be2a37ad3683755399e053ea1f Pick-to: 6.7 Reviewed-by: Bernd Weimer <bernd.weimer@qt.io>
* Examples: make the package-installation cope with external acknowledgeRobert Griebl2024-02-071-2/+16
| | | | | | | | | | In case of an installation via the Creator integration, installations get automatically acknowledged and we can close the acknowledge dialog in this situation. Change-Id: I6478fdb820a3d675862d971999d4840638f9d1b7 Pick-to: 6.7 Reviewed-by: Bernd Weimer <bernd.weimer@qt.io>
* cmake: fix quoting in qt6_am_add_systemui_wrapperRobert Griebl2024-02-071-2/+2
| | | | | | Change-Id: If8164dbb08bcc7cf7fe56d7e93dd37f32603a03a Pick-to: 6.7 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* doc: package-installation exampleRobert Griebl2024-02-014-4/+102
| | | | | | Change-Id: I0f80790ae654c35ec85f4bd0e62da06c17223298 Pick-to: 6.7 Reviewed-by: Bernd Weimer <bernd.weimer@qt.io>
* cmake: move the qt_am_create_package command from examples to main-libRobert Griebl2024-02-011-39/+0
| | | | | | | | | This will be in TP for 6.7 until we gain more experience with the new QtCreator integration. Change-Id: I9a9efac81a9f6d4994be6e47fee3090fe75d181a Pick-to: 6.7 Reviewed-by: Dominik Holland <dominik.holland@qt.io>
* Document how to write and use QML modulesBernd Weimer2024-01-125-15/+67
| | | | | | | | | | The application-features example has been enhanced with QML modules. This adds the missing documentation. Change-Id: I8e04f66f63ab057b904f3a0436d0a84eba261620 Pick-to: 6.7 Reviewed-by: Nicholas Bennett <nicholas.bennett@qt.io> Reviewed-by: Robert Griebl <robert.griebl@qt.io>