summaryrefslogtreecommitdiffstats
path: root/src/corelib
Commit message (Collapse)AuthorAgeFilesLines
* QAbstractProxyModel: fix canDropMimeData/dropMimeData implementationsDavid Faure2014-11-243-22/+34
| | | | | | | | | | | | | | | The code in 4696e9dbaa4 was incorrect. It is perfectly valid to call these methods with row=-1 column=1 parent=some_index, this is exactly what happens in QListView and QTableView. Child row/column is only for trees. Move the coordinate mapping from QSortFilterProxyModel into a new mapDropCoordinatesToSource internal method, used by QAbstractProxyModel. Task-number: QTBUG-39549 Change-Id: I3312210473d84b639cbe4c01f70ea36437db3e91 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> Reviewed-by: Stephen Kelly <steveire@gmail.com>
* Implement Download folder path retrieval on OS XSamuel Gaist2014-11-243-6/+13
| | | | | | | | | | | | The current implementation returns the DocumentLocation folder. Since now only cocoa is supported, we can use NSFileManager to get the correct path. [ChangeLog][QtCore][OS X] Now QStandardPaths returns the correct path for the DownloadLocation. Change-Id: Ic0ea3ebf8585a1e34a7b43c734df78fd3949d4d4 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Put parentheses around "min" to prevent expansion as macroThiago Macieira2014-11-211-1/+2
| | | | | | | | | | | | If you write xxxx::min(), min() might be expanded as a macro on silly environments that follow that poor practice (read: inclusion of <windows.h> without NOMINMAX). However, if you write (min)() or (xxx::min)(), it means the same but prevents the expansion as macro. Task-number: QTBUG-42767 Task-number: QTBUG-31469 Change-Id: If3c93aafd4d0bf63ca15f3d01c2297d58d00f6bc Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* Fix coding style in QtCoreThiago Macieira2014-11-211-2/+2
| | | | | | | | Never start a line with a comma. Change-Id: Idce1766f2661aa97fd163c02436ef315999985ec Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Merge remote-tracking branch 'origin/5.4.0' into 5.4Frederik Gladhorn2014-11-2123-97/+120
|\ | | | | | | Change-Id: I95f235a66ce2e9b1fa435c0f911c6f7e811755f0
| * Windows: Prevent registration of timers in shutdown phasev5.4.0-rc1Kai Koehne2014-11-202-2/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Do not register new timers after closingDown() has been called. They might call back into QEventDispatcherWin32 after the object has been destructed, leading to crashes on exit. registerSocketNotifier has a similar protection using QCoreApplication::closingDown(). This however does not work in all cases, because QEventDispatcher::closingDown() is called in ~QGuiApplication(), while QCoreApplication::is_app_closing is set in ~QCoreApplication(). In between qt_call_post_routines() is called, which might trigger new timers to be registered. Task-number: QTBUG-42772 Change-Id: I91325fb10e38c117c1cbedfee272d0ab6a5ca8fa Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
| * Doc: Corrected autolink errors corelibNico Vertriest2014-11-205-23/+21
| | | | | | | | | | | | Task-number: QTBUG-40362 Change-Id: I551c2af94bb61fcc2494792761dab92d537e5068 Reviewed-by: Martin Smith <martin.smith@digia.com>
| * Doc: corrected autolink issues itemmodelsNico Vertriest2014-11-202-5/+5
| | | | | | | | | | | | Task-number: QTBUG-40362 Change-Id: I8423643e47d27358dbbce58009cc9039aecb74cf Reviewed-by: Martin Smith <martin.smith@digia.com>
| * iOS: Make sure QStandardPaths::displayName() is definedTor Arne Vestbø2014-11-191-1/+1
| | | | | | | | | | | | | | | | | | | | The file qstandardpaths_ios.mm doesn't have an implementation for this function, only (the wrongly named) qstandardpaths_mac.cpp does. There's no Foundation API to get the directory name, so we fall back to the hard-coded strings like all other platforms. Change-Id: I6dcfeb6a0e5860dd0d4e9a0cd334b2c2181a0004 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
| * Doc: correct autolink issues corelib/mimetypeNico Vertriest2014-11-193-8/+9
| | | | | | | | | | | | Task-number: QTBUG-40362 Change-Id: I852151fdbbe0cbc7ba88066984fc7bf83547b215 Reviewed-by: Martin Smith <martin.smith@digia.com>
| * Doc: Added brief statement to group definitionNico Vertriest2014-11-192-0/+2
| | | | | | | | | | | | | | Groups: richtext and sharing. Task-number: QTBUG-42682 Change-Id: I46bd7e5bba0f665519ee4f3c033b971f0836e314 Reviewed-by: Martin Smith <martin.smith@digia.com>
| * Fix wrong qversionnumber header name in tools.priLaszlo Agocs2014-11-171-1/+1
| | | | | | | | | | | | Change-Id: Ie571ca0dc1720bcd04e492697e93f866b1877a5b Reviewed-by: Keith Gardner <kreios4004@gmail.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
| * Doc: Solved link and autolink errs qnamespace.qdocNico Vertriest2014-11-151-11/+12
| | | | | | | | | | | | Task-number: QTBUG-40362 Change-Id: I81166dc3a54427e2d2d81f640162f6c338947849 Reviewed-by: Martin Smith <martin.smith@digia.com>
| * Doc: Corrected brief statement for overview pageNico Vertriest2014-11-141-1/+2
| | | | | | | | | | | | Task-number: QTBUG-42682 Change-Id: I28afbb8b09d5568f3fae29fdfc5a3d15376b72de Reviewed-by: Martin Smith <martin.smith@digia.com>
| * Make QVersionNumber privateThiago Macieira2014-11-132-1/+2
| | | | | | | | | | | | | | | | | | | | We're not ready. [ChangeLog][EDITORIAL] Remove all mentions of QVersionNumber. Change-Id: I03ad95992982eb3177f982c1eeddb6a6bc29336c Reviewed-by: Keith Gardner <kreios4004@gmail.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
| * Doc: corrected autolink issue jsonNico Vertriest2014-11-131-1/+1
| | | | | | | | | | | | | | Task-number: QTBUG-40362 Change-Id: I851670eea6af80b0bb463f00b147d7a6ef289046 Reviewed-by: Martin Smith <martin.smith@digia.com> Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
| * QJsonArray::(const_)iterator: add the typedef for the pointer typeGiuseppe D'Angelo2014-11-131-0/+2
| | | | | | | | | | | | | | | | | | Mandatory as per the standard iterator requirements, was causing compilation errors in the STL algorithms. Task-number: QTBUG-41628 Change-Id: Iee12a3b822383f63c07e270244fd0e145a486b95 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
| * Merge remote-tracking branch 'origin/5.4' into 5.4.0Oswald Buddenhagen2014-11-1013-195/+221
| |\ | | | | | | | | | Change-Id: I85e3dfa62f217b76447276dd7cce6b9eac3a144e
| * \ Merge remote-tracking branch 'origin/5.3' into 5.4.0Oswald Buddenhagen2014-11-102-23/+12
| |\ \ | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/plugins/platforms/xcb/qxcbwindow.cpp Change-Id: Iad9ef6bf7d6111efba8232a7d9b46bb9974912f5
| | * | Fix QString::sprintf documentationKai Koehne2014-11-052-23/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QString::sprintf does actually support all length modifiers, including %lld. The format string is also parsed as UTF-8. What's worthwile to mention, though, is that %lc and %ls is at odds with the standard, since wchar_t isn't necessarily 16 bits wide. Change-Id: I30cd22ec5b42035824dd98e3cdcc79d7adcc953a Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
| * | | direct2d: Use simple event posting to avoid event queue lock upAndrew Knight2014-11-072-20/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In rare cases, the Windows event loop can be spinning inside the inner loop and the message hook is never called. This can be triggered on the Direct2D platform by opening 32+ window handles. The issue can be worked around by using the same approach Windows CE uses: don't rely on the message hook to inform the event loop that the post message has been delivered. Instead, uninstall the hook and let it be called directly by the event loop. Task-number: QTBUG-42428 Change-Id: I10280126dd50729bc260aa5f7029549e2e061c01 Reviewed-by: Louai Al-Khanji <louai.al-khanji@theqtcompany.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
* | | | Observe QLocale::RejectGroupSeparator in QInt/DoubleValidator.Friedemann Kleint2014-11-202-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Pass it as additional boolean parameter to QLocaleData::validateChars(). Task-number: QTBUG-42522 Change-Id: I4b2367f4e2fdcbd17e343d215edad57e6687697a Reviewed-by: Mitch Curtis <mitch.curtis@digia.com>
* | | | Pick up QT_LOGGING_RULES also for bootstrapped toolsKai Koehne2014-11-201-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Pick up logging rules set by QT_LOGGING_CONF, QT_LOGGING_RULES, and qtlogging.ini file also for bootstrapped tools. This helps e.g. in the case of winrtrunner, which uses categorized logging. Change-Id: I47d392137e17a59cb57b5c0226f282b0ccf29961 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: Maurice Kalinowski <maurice.kalinowski@theqtcompany.com>
* | | | Fix QString::section() behavior on negative and out-of-range indexesAlex Trotsenko2014-11-201-18/+39
| | | | | | | | | | | | | | | | | | | | Change-Id: I3bff6ba73b15ee810bb11b2902d11244c3205b2a Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | | | QSortFilterProxyModel: keep the sorting on unrelated changesGiuseppe D'Angelo2014-11-201-5/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Whenever the source model of a QSortFilterProxyModel changes, and the changes involve the sorted column, the implementation removes the changed rows from the mapping, sorts them, and inserts them back; in case of identical items, the rows are inserted at the end of the block of equal rows. The problem is that if the change doesn't actually happen on the roles that are used for sorting, then we shuffle the rows, terribly confusing the user. The typical case is a model with identical checkable rows: (un)checking one row will move it at the end. So, instead of trying to be smart with the removal/sort/insert sorted, simply resort everything under the changed parent index. Since the sorting used is stable, this keeps the items in the same positions. Task-number: QTBUG-1548 Change-Id: Id0e61bd49da53b0a3e8aefa6b6893ac41179dc6f Reviewed-by: David Faure <david.faure@kdab.com>
* | | | Doc: added NoGesture to GestureState enumNico Vertriest2014-11-191-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | Task-number: QTBUG-39988 Change-Id: I5481dfec75c90267a3a9be0d212df7384016e69d Reviewed-by: Martin Smith <martin.smith@digia.com>
* | | | Fix buildThiago Macieira2014-11-181-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Caused by qstringlist.h no longer including qdatastream.h. Change-Id: I4dee5565ebaa1c8593633a6ad27f142e4424c5c9 Reviewed-by: David Faure <david.faure@kdab.com>
* | | | Add Windows-specific notation for WebDAV to QUrl.Friedemann Kleint2014-11-171-6/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Convert a Windows-specific WebDAV specification "//host@SSL/path" into URL's with scheme set to "webdavs" and back to local file (Windows only). Task-number: QTBUG-42346 Change-Id: I12663243848ea7b2d3f208743e837e9de14a93eb Reviewed-by: David Faure <david.faure@kdab.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | | | Fix missing docs for QByteArrayListLaszlo Agocs2014-11-171-0/+1
| |_|/ |/| | | | | | | | | | | | | | | | | | | | The public is needed for qdoc which sees class, not struct. Task-number: QTBUG-42689 Change-Id: I28298b5fd13c6841838634a440bb2f726ddbe7be Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* | | Place the Qt plugin metadata in a PE-COFF section with MinGW tooThiago Macieira2014-11-081-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit ec360d7ad90945273c7d96c9a159131dcbcd67c3 made it work for ELF platforms, Apple platforms and for MSVC, but we apparently forgot it for MinGW. This patch corrects that mistake. We won't have the PE-COFF section parser until 5.5, but this will at least making Qt 5.4-built plugins work on the faster case. Change-Id: I51b06837dc321eaa4724c9598293cf85570f67fc Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | | Improve QElapsedTimer resolution on QNXMatt Fischer2014-11-071-2/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The standard POSIX clock functions are present on QNX, but only return timing information with millisecond accuracy. To get accuracy beyond that, platform-specific functions must be used. Change-Id: I54a0550f1865dbea3c60a86ecd8ad99df3fe42b4 Reviewed-by: Frank Osterfeld <frank.osterfeld@kdab.com> Reviewed-by: Bernd Weimer <bweimer@blackberry.com> Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
* | | Doc: updated documentation QString::toDoubleNico Vertriest2014-11-061-3/+2
| | | | | | | | | | | | | | | | | | Task-number: QTBUG-35543 Change-Id: I60d5cc253e6d6a24e9b031758e16a547a9a07443 Reviewed-by: Martin Smith <martin.smith@digia.com>
* | | Android: Fix for build issue on x86Christian Strømme2014-11-062-145/+151
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In the toolchain for x86 the va_list type is defined as char *, which in itself isn't strange, but it was somewhat unexpected as it differs from the arm toolchains. Either way we should not make assumption about the va_list type as there is no guarantee it won't cause conflicts when overloading. This fix simply renames the private overloads. Change-Id: I7808619d0fa3ca63b75796308cfdff6aa41a7fd0 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
* | | Fix incorrect documentation from QTranslator::loadAki Koskinen2014-11-051-3/+2
| | | | | | | | | | | | | | | | | | Task-number: QTBUG-27506 Change-Id: I1b2d4ed2242efd52258c7f587c2121f9dde18a0d Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* | | Define the Intel compiler and Microsoft C++ versions in the Q_CC_ macrosThiago Macieira2014-11-051-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | This is for completeness, since we've done the same for Q_CC_GNU and Q_CC_CLANG. We won't really use the macros like this because both __INTEL_COMPILER and _MSC_VER are readily usable. Change-Id: I669c60166fa4839d43f84f339e6896321d62817f Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* | | Store the GCC version number in Q_CC_GNUThiago Macieira2014-11-054-16/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The sequence of (__GNUC__ * 100 + __GNUC_MINOR__) was used in quite a few places. Simplify it to make the code more readable. This follows the change done for Clang, which was quite necessary since Apple's version of Clang has different build numbers. Change-Id: I886271a5a5f21ae59485ecf8d140527723345a46 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
* | | Define Q_CC_CLANG to be the version of upstream Clang that's in useTor Arne Vestbø2014-11-053-11/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We map the Apple Clang versions to upstream, so that we have one define to compare against. Fixes build break on iOS due to qbasicatomic.h not defining QT_BASIC_ATOMIC_HAS_CONSTRUCTORS on Apple Clang versions, which is needed after 1e9db9f5e18123f2e686c10b Change-Id: I17493c0187c20abc5d22e71944d62bfd16afbad2 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | | Use __aarch64__ instead of __arm64__ to detect AArch64Tor Arne Vestbø2014-11-041-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The latter name was used by Apple in their internal AArch64 LLVM backend, but has since been merged into LLVM upstream and renamed to AArch64. https://github.com/llvm-mirror/llvm/commit/29f94c72014eaa5d0d3b920686e68 Change-Id: I319f42f07c95dfbcd121134fbe6e554e2d36453d Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | | Don't delete QLibrarySettings configuration in ~QCoreApplicationKai Koehne2014-11-041-9/+1
|/ / | | | | | | | | | | | | | | | | | | | | | | Do not clear the QLibrarySettings configuration information already in ~QCoreApplication (via qAddPostRoutine). This fixes issues where multiple QCoreApplication objects are created over time (in plugins). Task-number: QTBUG-34290 Change-Id: Ib5c58f825619ede484492e057e08d73b2b4c6101 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | Fix a fatal Clang warning on LinuxGiuseppe D'Angelo2014-11-031-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Two fromstrerror_helper overloads are defined, to manage the fact that strerror_r returns an int or a char* depending on the system. The problem is that then only one overload used (again, depending on the actual stderror_r return type), leading to one of the two overload to be unused and thus triggering the unused function warning. kernel/qsystemerror.cpp:64:27: error: unused function 'fromstrerror_helper' [-Werror,-Wunused-function] static inline QString fromstrerror_helper(int, const QByteArray &buf) Change-Id: I6a1c8e1a4b7d14068b682db26002ff68ad36167c Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* | Android: Add runOnUiThread() functionChristian Strømme2014-11-032-0/+41
| | | | | | | | | | | | | | | | Enables QRunnables to be run on the UI thread. For now this function is only intended for internal consumption. Change-Id: I5e2abb06104219a9dd55b3308113056e4da5fa07 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
* | Doc: corrected autolink issue animationNico Vertriest2014-11-031-1/+1
| | | | | | | | | | | | Task-number: QTBUG-40362 Change-Id: If89a8ae6aeecd4060a34f987baaf55c12439e7ea Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
* | Enable C++11 atomics with ClangThiago Macieira2014-10-311-1/+3
| | | | | | | | | | | | | | | | I don't know why it was an #if 0. The __has_feature has been there for a while. But, just to be sure, we check the presence of the header too. Change-Id: I36e34c9e8fd4ce55c98966d2fad246b77eb16597 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* | Fix compilation of <atomic> with ICC and libc++Thiago Macieira2014-10-311-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | The libc++ header does this: #if !__has_feature(cxx_atomic) #error <atomic> is not implemented So we can't enable the feature until the compiler reports true for that test. Change-Id: I96f1c7eea8b93d93bd721fe5a85fa987339d091f Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* | Mark QMetaMethod and related constructor as constepxrOlivier Goffart2014-10-311-3/+3
| | | | | | | | | | | | | | | | | | qtdelcarative's qquickaccessibleattached.cpp contains now some static instance of QMetaMethod. Marking the constructor as constexpr, let GCC to remove call to the constructor at load time. Change-Id: Ic5ab7db0d06caa08f15d65d3bb5f22a34a111fee Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
* | Lower QVariant::userType call countJędrzej Nowacki2014-10-311-10/+16
| | | | | | | | | | | | | | | | We know that type id can't be changed, let pass this information to the compiler. Change-Id: I105b460417288b84250a954571c247608976f8f7 Reviewed-by: Stephen Kelly <steveire@gmail.com>
* | Handle mounts under /runAllan Sandfeld Jensen2014-10-311-4/+3
| | | | | | | | | | | | | | | | | | | | | | We shouldn't excluded all volumes under /run since some distos will mount filesystems there. Instead we should exclude all filesystems with the type "tmpfs" that /run has, and rpc_pipefs that is mounted below /run. Tmpfs" is excluded for all UNIX systems since the BSDs have a similarly named filesystem. Change-Id: I03fdac515c0bfb1b824b2e3eae1022dd699c0998 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | Fix warnings about size conversion in QListThiago Macieira2014-10-312-20/+23
| | | | | | | | | | | | | | | | | | | | | | Because difference_type is 64-bit on 64-bit systems, there's a downconversion warning from MSVC and possibly other compilers when it gets passed to functions taking simply int. Task-number: QTBUG-41092 Change-Id: I46a710810f4a57b8b84c4933f419a1f1fdf6bb5a Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | Report the system error on why chmod(2) failed in XDG_RUNTIME_DIRThiago Macieira2014-10-311-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | This is a very rare occurrence: if the user is the owner of the directory, the user can chmod(2), and we already checked that the user is the owner. However, chmod(2) can still fail on read-only fs and on hardened systems. Task-number: QTBUG-41735 Change-Id: I8f8bac763bf5a6e575ed59dac55bd265e5b66271 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: David Faure <david.faure@kdab.com>
* | Don't always chmod the XDG_RUNTIME_DIRThiago Macieira2014-10-311-1/+3
| | | | | | | | | | | | | | | | | | | | Since the current user is the owner of the dir, we'll get 0x7700 as permissions, not just 0x700. With the wrong check, we were always doing an unnecessary chmod. Task-number: QTBUG-41735 Change-Id: Ib1fc258fef4bf526baa9c71201f9b78d36f5454f Reviewed-by: David Faure <david.faure@kdab.com>