summaryrefslogtreecommitdiffstats
path: root/tests/manual
Commit message (Collapse)AuthorAgeFilesLines
* Add QRangeModelAdapter: C++-style access to the range while talking QAIMVolker Hilsheimer8 days1-23/+61
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a QRangeModel represents a C++ range, then the C++ range must no longer be modified directly, as clients of the model won't be notified about data or structural changes. Ignoring this (documented) warning might end up with views not presenting the data correctly, or even result in crashes as the model cannot update QPersistentModelIndex instances. Modifying the range through the QAbstractItemModel API is ok, but clumsy, as it requires dealing with QModelIndex and QVariant for basic operations. QRangeModelAdapter provides an easy, type safe, and data-structure aware API for reading and also modifying a range that a QRangeModel operates on. This includes an interator API for rows, and - unless the range is a list - columns. Dereferencing row iterators yields a row reference type from which a row can be accessed for reading, or that a new row can be assigned to. Dereferencing a const column iterator yields an item; dereferencing a mutable column iterator yields a reference type that a new item value can be assigned to. Since QRangeModel itself is not a template class (so we don't know the type of the range anymore once it has been created), we have to create the adapter from the range (and optional protocol), which then implicitly creates the model. Constructing the adapter implicitly constructs the model, which is owned by the adapter. QRangeModelAdapter is a value type, using std::shared_ptr for the model so that all copies of the adapter operate on the same model. To be able to set entire multi-role objects as items, introduce a new Qt::ItemDataRole enum value, Qt::RangeModelAdapterRole. This is very similar to Qt::RangeModelDataRole, but QML has specific requirements that QRangeModelAdapter doesn't have, and we want to pass items back and forth without modifying their value category - ie. an item that is a shared_ptr<Object> is not useful for QML (which needs an Object *), but a C++ user expects to get a shared_ptr<Object> from a call to at(), and also expects to be able to set such an item. The code has room for de-duplicating some logic in follow-up commits. [ChangeLog][Core] Added QRangeModelAdapter for C++-style access to a range used in a QRangeModel, while implementing QAbstractItemModel protocol. Change-Id: I3f2f94cb51b850100590fbe2c9a7c9dabbec59bd Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* wasm: Remove promise manual testEven Oscar Andersen2025-11-283-521/+0
| | | | | | | It will be replaced by an auto test Change-Id: Ie7bc9acba6080fd191e31e61ce378023003b599c Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* Add security scoped file engine for Apple operating systemsTor Arne Vestbø2025-11-265-0/+661
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On Apple operating systems where the app runs in a sandbox, the application can not access files outside of its sandbox without explicit user approval. This applies to iOS and friends, as well as optionally for macOS (when the sandbox is enabled, which is a requirement for publishing apps to the macOS App Store). When the user gives explicit access to a file or directory, we need to manage this access at runtime by starting and stopping the access via startAccessingSecurityScopedResource and stopAccessingSecurityScopedResource, and these functions must be balanced, to avoid leaking kernel resources. The access unfortunately doesn't persist automatically when the application terminates (unlike takePersistableUriPermission on Android), so we have to manually persist the access via security scoped bookmarks. We store these inside the app's own sandbox, in a way that limits the access to only that application, so persisting them on behalf of the user should be fine. The persisted bookmarks are loaded in the background on application start, ready for when the application wants to open earlier accessed file or directories. [ChangeLog][Apple] Sandboxed applications on Apple platforms, (including macOS if opted in to) can now access files outside of the application sandbox (so called security scoped resources) for both reading and writing. Files or folders chosen by the user via file dialogs or similar native mechanism are automatically and transparently handled, including persistent access across application and device restarts. Fixes: QTBUG-120528 Task-number: QTBUG-117832 Task-number: QTBUG-120528 Task-number: QTBUG-141414 Change-Id: I90d94066cbf7cd74750049d5d1b990917fd10cad Reviewed-by: Doris Verria <doris.verria@qt.io>
* wasm: Do not use emscripten::async() unless JSPI is in effectEven Oscar Andersen2025-11-251-1/+7
| | | | | Change-Id: I608ac46783ed9efb7841b6d0916fee035e338f42 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* QRangeModel: implement autoConnectPolicyVolker Hilsheimer2025-11-121-6/+75
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A model that operates on a range holding items of the same QObject subclass presents the values of the properties of those QObject instances as its data. The property names will be used as the role names. It is then very convenient if changes to the properties in those QObject instances makes the model emit dataChanged() for the respective index and role. This requires that we identify the changed-signals for each property that corresponds to a role name, and connect to each of those signals for each object instance. This is an expensive operation, in particular for trees where we have to recursively traverse the entire sturcture. But a range holding QObjects is already quite expensive and therefore only reasonable for small models with dozens rather than thousands of items. At that scale, the overhead is acceptable, and we can store the respective meta data in a baseclass of our storage type, specialized for when the range's item type is the same QObject subclass for all columns. We know this already, as the default implementation of roleNames() uses that as well. Each connection goes to a functor object that stores the index and the role, which is the information we need to emit dataChanged. By storing the index as a QPersistentModelIndex, objects changing position in the model will automatically update the functor object. The public API for this is a policy property, with two values (plus the "None" default value): a Full auto connect iterates the entire model and connects all relevant properties. This is expensive compared to only connecting some objects and properties, but gives full coverage, and has no overhead other than the connection itself. The alternative is OnRead, which connects lazily when data is read for the first time. This is cheaper if it's unlikely that all objects and/or all properties are displayed, but adds book-keeping overhead so that we know when an object and role are already connected. If everything gets connected lazily, then this is substantially more expensive than doing a full auto-connect in the first place. When new rows or columns got inserted, and if autoConnectionPolicy is set to Full, then we need to connect the new objects after QAIM emitted rows/columnsInserted(). This gives clients a chance to populate the new cells with objects. When rows or columns are removed and the policy is set to OnRead, then we have to remove those connections from our book- keeping set. When objects are removed from the model (which means rows or columns are removed), then we need to break the connection to the respective objects. As the QObjects will likely be destroyed anyway, which will then break the connections, we disconnect lazily: we disconnect if our functor gets called for an object that has been removed. In that case, the stored QPMI will have become invalid. To break the connection, we need to store the QMetaObject::Connection in the functor object. However, we only get that connection handle as a result of making the connection, at which point our functor object has already been moved into Qt's QCallableObject data structure. In order to store the connection handle, we implement the move constructor of the functor to store the address of the move-constructed functor object in the moved-from functor object. This makes a moved-from functor act as a reference to the moved-to functor and we can use that to store the connection handle in the functor instance that is stored in the QCallableObject. Since a functor instance holds either the property data, or the address of the moved-to instance, we can use a std::variant to avoid overhead. Using a plain union would be even cheaper, but at this point, benefit from the guard-rails we get from std::variant. The context object for all connections is then a dedicated QObject, which we can simply delete to break all connections. [ChangeLog][Core][QRangeModel] A range model operating on a range that holds identical QObject sublasses for all items can now automatically connect the changed signals of all properties mapped to item roles to the model's corresponding dataChanged signal. This allows user code to change properties of the item-object directly, and model clients (like item views) will get updated. Change-Id: I742b57f0c90f705d8b7eb949ff0d026b8b4a52f3 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* Remove AssetDownloaderJarek Kobus2025-11-047-77/+0
| | | | | | | It was moved to qtdoc module. Change-Id: I2c713f058da5a6bf8ea125bc5f3b599b906bb578 Reviewed-by: Kai Köhne <kai.koehne@qt.io>
* wasm: implement exclusive suspend modeMorten Sørvig2025-11-032-1/+46
| | | | | | | | | | | | | | | | This mode supports suspending the instance while waiting for a single event only. All other events are queued for later delivery. This is useful for async calls made behind synchronous API, where we don't want to run general event processing while the instance is waiting for the async call to complete. This is for example the case for file read() type calls. Change-Id: I8a8e8b15fea7a60a6bf069812294447505bdc717 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io> Reviewed-by: Even Oscar Andersen <even.oscar.andersen@qt.io>
* Compile fixJan Arve Sæther2025-10-282-0/+12
| | | | | Change-Id: Ifc4c780b994619ef9e0b9045ce5368a652fc3c8b Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* Use more theme icons in textedit manual test/exampleTor Arne Vestbø2025-10-111-4/+5
| | | | | Change-Id: Id621c41ea3b918581c9a985be5f509d8c5646872 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Tests: add simple manual test for drag-n-drop eventsTim Blechmann2025-10-073-0/+200
| | | | | | Task-number: QTBUG-120749 Change-Id: Idd3bee447a851d8f5be9f97e34bf9ab9943cccc3 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* QRM: don't return pointer-to-const from parentRowVolker Hilsheimer2025-10-051-1/+1
| | | | | | | | | | | | | | We want to be able to get the parent from one row and make it the parent of another row, and returning a `const row *` from parentRow makes that impossible without a hacky const-cast. Returning a pointer to const is not necessary. The inner state of the parent row has no impact on the observable state of the child from which it is returned. Pick-to: 6.10 Change-Id: I1487cf2a2ed5122dd0e3530af6e055ed56e34fb7 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* Move the manual test qgraphicsitemgroup to tests/squishFrédéric Lefebvre2025-10-0310-751/+0
| | | | | | | | | | | Relocate manual test qgraphicsitemgroup to be tested by Squish to their respective subdirectories under qtbase/tests/squish. Simplify the maintenance of the AUTs associated to previously created squish tests. Change-Id: I81dfd514b916afaa9878c8d769a419dd180539a5 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Move the manual test qlayout to tests/squishFrédéric Lefebvre2025-10-0313-317/+0
| | | | | | | | | | | Relocate manual test qlayout to be tested by Squish to their respective subdirectories under qtbase/tests/squish. Simplify the maintenance of the AUTs associated to previously created squish tests. Change-Id: I8c673ca54da43b7facf78a3408d107585ed8c0c7 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Move the manual test qconcatenateproxymodel to tests/squishFrédéric Lefebvre2025-10-015-91/+1
| | | | | | | | | | | Relocate manual test qconcatenateproxymodel to be tested by Squish to their respective subdirectories under qtbase/tests/squish. Simplify the maintenance of the AUTs associated to previously created squish tests. Change-Id: I18cb608e2eb41d0f2cf1bb316ebd8dbbce17602d Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Add missing include to nativetext manual testTor Arne Vestbø2025-10-011-2/+3
| | | | | | | And move away from deprecated APIs while we're at it. Change-Id: I6590925ed38a70a1caaa5c145e5e0b05ef10d929 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
* QRM: add customization point for item accessVolker Hilsheimer2025-10-011-0/+24
| | | | | | | | | | | | | | | | | | | While using gadgets and QObjects with property access through the meta type system is convenient, it's also somewhat slow and inflexible. The order of properties defines how they get mapped to Qt::UserRole values, and even with the cache for the mapping of role to QMetaProperty, the data access goes through a number of lookups. Add an ItemAccess nested template class that type authors can specialize for their own item type to implement optimized read and write access for the roles their item type supports. The benchmark shows that read access is twice as fast as going through the meta property system for an otherwise identical gadget type, and 30% faster for write access. Change-Id: I9b1b101cb477a7853d5fe0378c624f8459385da6 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* Move the manual test keypadnavigation to tests/squishFrédéric Lefebvre2025-09-266-1515/+0
| | | | | | | | | | | Relocate manual test keypadnavigation to be tested by Squish to their respective subdirectories under qtbase/tests/squish. Simplify the maintenance of the AUTs associated to previously created squish tests. Change-Id: If736b78951152b9e01319325e52708e438b17cf8 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
* Remove Qt::WindowType::Desktop in qwindowdump manual testAxel Spoerl2025-09-251-1/+0
| | | | | | | | | | Qt::WindowType::Desktop is no longer a valid window type in Qt6. Remove its occurence in qwindowdump manual test. Task-number: QTBUG-140514 Change-Id: I34ae9f8602f7d1a52a9dc6a8dbc2d4a90ea83ccb Reviewed-by: Wladimir Leuschner <wladimir.leuschner@qt.io> Reviewed-by: Frederic Lefebvre <frederic.lefebvre@qt.io>
* iconbrowser test: add theme loading supportVolker Hilsheimer2025-09-255-26/+194
| | | | | | | | | | | | Add the root path to the search paths, which makes an absolute path to a theme file load that theme. Move the UI into a main window and add a file menu to allow loading of such a theme at runtime. This shows that switching themes will reload the icons, at least in widget UIs. Add two such themes with a single icon for test purposes. Change-Id: I181fe4ac43a125b8f15fd38d302c4a4f7dc4dc6c Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* QRM manual test: make filter view case a bit more interestingVolker Hilsheimer2025-09-241-3/+5
| | | | | Change-Id: I8fe0ef2f0aea3951093f1f30e980881fbccd5718 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* iconbrowser: Show missing iconsTor Arne Vestbø2025-09-221-29/+44
| | | | | | | | | Instead of filtering out icons that the backend can't provide we now show them with a fallback magenta color, so that it's clear the backend is lacking something (potentially). Change-Id: I53805e2526b64d6958eb38e51e99a933f644527f Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* QRM: allocate UI on the heapVolker Hilsheimer2025-09-161-2/+2
| | | | | | | | | | | | | MainWindow has ModelFactory as a member, and that again has large arrays as members. The stack on Windows cannot handle that, and the test fails to start. Allocate the UI on the heap. Pick-to: 6.10 6.10.0 Change-Id: I8659fd7bc267f133e66e5620a430ba32b7abae2a Reviewed-by: Maycon Stamboroski <maycon.stamboroski@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* QRM manual test: give table cells more spaceVolker Hilsheimer2025-09-101-1/+4
| | | | | | | | | They are crammed on macOS to the point of being unusable. That might need a fix in the style. Pick-to: 6.10 6.10.0 Change-Id: I4c34b364d0ce4bcba38c1d51e0c3760b4b22f764 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* QRM manual test: make values editable in QML UI as wellVolker Hilsheimer2025-09-101-0/+3
| | | | | | Pick-to: 6.10 6.10.0 Change-Id: Iabf592dc259b5bb78bfc9895517be81ebfd59956 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* QRM: return the section number as header data for array rowsVolker Hilsheimer2025-09-051-0/+11
| | | | | | | | | | All items in an array have the same type, it's not useful to return the same type name for the header of each column. Instead, just return the section number. Pick-to: 6.10 Change-Id: Ia01e177e363cec55c44fcf3f92b1b3bfc502abe8 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* QRM: make size() work for ranges that don't have begin/end(const R&)Volker Hilsheimer2025-09-021-2/+1
| | | | | | | | | | | Use const_cast to call the mutable overload if we cannot call the const overload. This allows us to directly support e.g. std::views::filter. As a drive by, use using-statements to reduce code duplication. Use std::views::filter directly in the tests, now that it works. Change-Id: I47f06ee8fe921d5854f676a35a750e64f4356fc0 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* QRM: store ranges that don't provide begin/end on const as mutableVolker Hilsheimer2025-09-011-0/+10
| | | | | | | | | | | | | | | | | This makes it almost possible to use certain std::views, like filter or drop_while, with QRangeModel. Only do that for such ranges, as otherwise we'd detach from Qt's implicitly shared range types. Almost, because we still assume that we can call begin/end on a const range in our size() implementation. That needs a bit more work, and probably only makes sense when we have a fetchMore implementation for ranges that don't provide a constant-time size(). Nevertheless, add a filter-case to the auto and manual tests, but go through std::ranges::subrange for now. Change-Id: I07cd543d73746e6b47a03aceedee2365b6750321 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* Add a conditional to handle pragma message when MSVC is usedFrédéric Lefebvre2025-08-281-0/+2
| | | | | | | | | MSVC does not support the warning preprocessor directive. To ensure compatibility across compilers, add a conditional check to instead use pragma message with MSVC. Change-Id: If380ebf8b2a5bb771dbbb374158e619ce1090e65 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* QRM test: reference the view from the delegate correctlyVolker Hilsheimer2025-08-271-1/+1
| | | | | | | | | | | | | | | | A delegate that's getting recycled might not have a parent, resulting in debug output from the binding to "parent.width". The correct way for the delegate to reference the view it's bound to is to use e.g. "ListView.view". "list" would work as well if we'd set pragma ComponentBehavior: Bound but that's just cluttering the code here. Pick-to: 6.10 Change-Id: Ic6935a238029aad0d235a50fa078d44d62224e6a Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* QRM: fix build when a std::*map is used as the rangeVolker Hilsheimer2025-08-271-0/+20
| | | | | | | | | | | | | | While unorthodox, a std::map is sequentially iterable, and yields std::pair instances as rows. Those should then result in two columns. However, rows in a map cannot be rotated, because swap is explicitly deleted for the pair type (which uses a const key type). So test that we can swap the dereferenced iterators (testing for std::rotate still passes, so we can't test for that directly). Pick-to: 6.10 Change-Id: I12f7c06cca9363bdb3d0497ddbbf101d05bd9e9f Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* QRM: fix build of manual test without QuickVolker Hilsheimer2025-08-221-2/+4
| | | | | | Pick-to: 6.10 Change-Id: Iec70d068554e0c4e4eac2c24473b4ea2a722b26d Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* QRM: specialize row_traits for std::arrayVolker Hilsheimer2025-08-221-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | std::tuple_element is implemented for std::array, so we end up using the tuple specialization of row_traits for a QRangeModel(std::array<T, N>). This is semantically wrong, but it also breaks the build when using a large array. The tuple specialization uses a helper to test if all elements in the tuple have the same type. With large arrays, this hits the compiler's limit for fold-expressions, which defaults with clang to 256. Specialize row_traits for std::array as well as C arrays; we know that all elements are of the same type. To avoid ambiguity, don't consider a std::array as a tuple. Introduce a array_like detector that is true for std::array and C arrays of any type and overload for_element_at using that detector (we have to, as we need the array as a universal reference). For the same reason, avoid the fold expression in meta_type_at if the row type is an array. All types are the same anyway, so we can just pick the first. Pick-to: 6.10 Change-Id: Ic49e222d7b3390f9e4cc15ec531f8a97981ab0d5 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* QRM: improve UI of manual testVolker Hilsheimer2025-08-153-164/+148
| | | | | | | | | | | | | Use delegates from Qt Quick Controls, which look better and provide complete default behavior, while making easier to confirm that things work as they should (ie. correct roles are reported). Move the whole UI into a QMainWindow, using QQuickWidget for the Quick UI. Pick-to: 6.10 Change-Id: I2aa12ef4d6f024fa9ba1b57fd4f03f594ce50ab4 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
* Android: revamp the content URIs manual testAssam Boudjelthia2025-08-144-264/+508
| | | | | | | | | | | | | | | | Rework the content URIs manual test to accomodate more test cases and require less manual interaction. Before this the user needs to interact with many prompts and it could be error prone, and now it's very minimal interaction. This also fixes some test cases that were not supported before or cases that were using some awkward workaround to keep file permissions, and now it works better also with the Qt file APIs. Pick-to: 6.10 6.9 6.8 Task-number: QTBUG-124011 Change-Id: Id482a6a05ce4f4b6ba10c308dce494c1b2a69c7a Reviewed-by: Petri Virkkunen <petri.virkkunen@qt.io>
* QRM: add manual testVolker Hilsheimer2025-08-125-0/+718
| | | | | | Pick-to: 6.10 Change-Id: Id3fa877e7aa59713cd9a64bfb72d9871fe92bea8 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
* Remove QNetworkConnectionMonitorMate Barany2025-08-085-180/+0
| | | | | | | | | As it is not supported anymore on Apple, drop QNetworkConnectionMonitor for simplicity. Fixes: QTBUG-132137 Change-Id: If5e216e857b4449b9937323aa58630777cb4b82d Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
* Android: silence spurious warnings from AndroidContentFileEngineAssam Boudjelthia2025-07-261-13/+17
| | | | | | | | | | | | | | | | | | | | | | Move Java calls that might throw exceptions and handle them with a try/catch by printing the appropriate error messages where relevant and ignore the ones we don't necessarily need. For certain operations like query we should check if we have read permission for the URI first, and only then do the query, because otherwise it's guaranteed to fail if there's no read permission. Pick-to: 6.10 6.9 6.8 Fixes: QTBUG-138013 Fixes: QTBUG-126531 Fixes: QTBUG-123319 Fixes: QTBUG-134912 Fixes: QTBUG-110240 Fixes: QTBUG-132403 Fixes: QTBUG-129324 Change-Id: I8457b6bfd9381bf1a62077520cf9a222311ded7a Reviewed-by: Petri Virkkunen <petri.virkkunen@qt.io>
* Compile after API changeMorten Sørvig2025-07-161-1/+1
| | | | | | | | | | The API changed from using int to std::chrono::milliseconds, update test. Pick-to: 6.10 Change-Id: I4bd4079e5b262859bae293909008cacc824248ac Reviewed-by: Lorn Potter <lorn.potter@qt.io> Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* Add missing qquaternion.h includesMarc Mutz2025-06-302-0/+6
| | | | | | | | | | | | | | | | | | | The qquaternion.h include will vanish from qmatrix4x4.h soon, but some TUs depended on on the transitive include. This patch includes qquaternion.h into all TUs that use QQuaternion, but didn't include its header. I didn't check all the individual TU's history to make a detailed "amends", so I'll just pick this all the way back, knowing there may have been more users in older branches, or some TUs don't exist there, but it since we're not picking the removal of qquaternion.h from qmatrix4x4.h further than 6.10, I don't need to do detailed checking. CI will tell me when something's wrong. Pick-to: 6.10 6.9 6.8 6.5 Change-Id: Icf0db8ba4f12421fd46f9d1041f235bf4cc2c12b Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
* Reland: CMake: Annotate some qt_find_package calls with MODULEAlexandru Croitor2025-06-241-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A qt_find_package call first tries to find a Config package with the CONFIG mode option, and if not found, falls back to an arg-less mode which searches both Config and Find modules. For some packages, we know we want to find the Find module because there can't be a Config package, e.g our FindWrap modules or any of the other Find modules we carry in our cmake directory. So we should annotate these calls with MODULE. Aside from slightly faster configuration, there is another reason to do so. Future versions of CMake will automatically log find_package calls that have a state change (e.g. Not Found -> Found) into CMakeConfigureLog.yaml. Due to the Config-first logic in qt_find_package, we always unset the Foo_DIR variable if the Config package is not found. This means that there will be a constant build up of not-found messages in the log. Explicitly annotating the calls with MODULE will prevent this. Do that. This commit relands f1a59e974f013fcf8629d8cbacab58d895523100 This reverts commit 0ce82b78a35026cb56ff76d1c24b311008934a53. Pick-to: 6.10 Change-Id: I5d37579d2f4957215ce1475b5c0ec8509d77c83d Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Revert "CMake: Annotate some qt_find_package calls with MODULE"Alexandru Croitor2025-06-191-2/+2
| | | | | | | | | | | | | | | | | | | This breaks reconfiguring Qt in various ways, one of which is CMake Error at cmake/QtTargetHelpers.cmake:1557 (message): PkgConfig::ATSPI2 is not a valid target. This happens because pkg_check_modules sets ATSPI2_FOUND to 1, so qt_find_package thinks it shouldn't find the FindATSPI2.cmake module, which ends up not creating the ATSPI2 target. This reverts commit f1a59e974f013fcf8629d8cbacab58d895523100. Pick-to: 6.10 Fixes: QTBUG-137870 Change-Id: Ica74a236c6b1bb9d7ca9af29175cb2e84a93251b Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* iOS: implement file icon providerVolker Hilsheimer2025-06-181-4/+18
| | | | | | | | | | | | | | | | | | | | | | | | Move the existing QCocoaFileIconEngine into a separate file in the darwin platform code, from where we can use it from both the cocoa and the iOS theme. Refactor the implementation for macOS to create and retain the NSImage as a member of the engine, and cache the QPixmap when it's requested, reusing it as long as it has the correct size. The iOS implementation is similar, except we need to go through UIDocumentInteractionController to get the icons for the file's URL. Explicitly make sure that we maintain the aspect ratio of the image we get. Augment the iconbrowser manual test to generate temporary files with certain extensions, and include those in the UI, allowing us to test that the icons we get from QAbstractFileIconProvider match the file type. Fixes: QTBUG-134239 Change-Id: I8fb63b3c518a6eb200f5948a1c38fd485e3b1c6d Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* CMake: Annotate some qt_find_package calls with MODULEAlexandru Croitor2025-06-171-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | A qt_find_package call first tries to find a Config package with the CONFIG mode option, and if not found, falls back to an arg-less mode which searches both Config and Find modules. For some packages, we know we want to find the Find module because there can't be a Config package, e.g our FindWrap modules or any of the other Find modules we carry in our cmake directory. So we should annotate these calls with MODULE. Aside from slightly faster configuration, there is another reason to do so. Future versions of CMake will automatically log find_package calls that have a state change (e.g. Not Found -> Found) into CMakeConfigureLog.yaml. Due to the Config-first logic in qt_find_package, we always unset the Foo_DIR variable if the Config package is not found. This means that there will be a constant build up of not-found messages in the log. Explicitly annotating the calls with MODULE will prevent this. Do that. Pick-to: 6.10 Change-Id: I465b015ac18f8a09b9a5c86cec7b6312a0bfbdf1 Reviewed-by: Alexey Edelev <alexey.edelev@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* tst_qpermissions_app_with_usage_descriptions: Force sign if already signedTor Arne Vestbø2025-06-161-1/+1
| | | | | Change-Id: I319248354780a30811d11096699aaeee9b8ba109 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Fix build of RHI stereoscopic rendering manual test when missing VulkanTor Arne Vestbø2025-06-162-0/+6
| | | | | Change-Id: I450eee9084d20951efdde3ae24a25d5ebcc2d5a2 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
* rhi: Update the docs and manual test for geometry shadersLaszlo Agocs2025-06-117-30/+6
| | | | | | Task-number: QTBUG-137521 Change-Id: Ic9256eaaa55aef20c622429058fda9235c1f73c1 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
* Fix various compiler warningsAhmad Samir2025-05-242-2/+1
| | | | | | | | | | | tst_QDebug: variable is only used conditionally tst_QTimeZone: fix string literal format QRhiWidgetPrivate: unused local variable `q` Change-Id: I8f9d7f86df2ff781f8ab64bee44dbebbe67eb6f3 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* tests/manual/*: add missing includesAhmad Samir2025-05-242-0/+2
| | | | | Change-Id: Id3abd673d22bd6365bec4688c41c0b57d7aabc0b Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* wasm: Handle exceptions in promiseEven Oscar Andersen2025-05-191-0/+23
| | | | | | Fixes: QTBUG-136962 Change-Id: I2d33b0132a83945b476f0f47fa4697ddaa2374b3 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* Windows: Update layered state on creation instead of backingstore flushTor Arne Vestbø2025-05-181-2/+0
| | | | | | | | | | | | | | | | | | The WS_EX_LAYERED state of a window can be determined on creation, and the logic to do so should be centralized to QWindowsWindow::setWindowLayered, so that we don't have divergence. This fixes an issue where child windows would only support transparency if they had Qt::FramelessWindowHint set, as the QWindowBackingStore had a different idea about when to enable WS_EX_LAYERED than QWindowsWindow. Task-number: QTBUG-122590 Task-number: QTBUG-135859 Pick-to: 6.9 6.8 Change-Id: I453967a5a2ce8974cdd1dbf6e36327e97384c33d Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> Reviewed-by: Zhao Yuhang <2546789017@qq.com> Reviewed-by: Pavel Dubsky <pavel.dubsky@qt.io>