From eac67137c02452cfe9da0182be7a7a2e83432ea8 Mon Sep 17 00:00:00 2001 From: Patryk Osmaczko Date: Thu, 11 Aug 2022 11:20:13 +0200 Subject: [PATCH] feat: add qml debugging task: status-im/status-desktop#6973 --- vendor/DOtherSide/lib/CMakeLists.txt | 5 +++++ vendor/DOtherSide/lib/src/DOtherSide.cpp | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/vendor/DOtherSide/lib/CMakeLists.txt b/vendor/DOtherSide/lib/CMakeLists.txt index 7f59b4dc30..db2205b5d1 100644 --- a/vendor/DOtherSide/lib/CMakeLists.txt +++ b/vendor/DOtherSide/lib/CMakeLists.txt @@ -29,6 +29,11 @@ macro(add_target name type) target_link_libraries(${name} PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Qml Qt5::Quick Qt5::Network Qt5::Multimedia SortFilterProxyModel) + target_compile_definitions(${name} PRIVATE $<$:QT_QML_DEBUG>) + if(DEFINED QML_DEBUG_PORT) + target_compile_definitions(${name} PRIVATE QML_DEBUG_PORT=${QML_DEBUG_PORT}) + endif() + # for DOtherSide.pc set(PC_REQUIRES "Qt5Core, Qt5Gui, Qt5Widgets, Qt5Qml, Qt5Quick, Qt5Network, Qt5DBus, Qt5Multimedia SortFilterProxyModel") if (${Qt5QuickControls2_FOUND}) diff --git a/vendor/DOtherSide/lib/src/DOtherSide.cpp b/vendor/DOtherSide/lib/src/DOtherSide.cpp index 067ec88964..866bf35c21 100644 --- a/vendor/DOtherSide/lib/src/DOtherSide.cpp +++ b/vendor/DOtherSide/lib/src/DOtherSide.cpp @@ -174,8 +174,24 @@ void dos_qguiapplication_initialize_opengl() void dos_qguiapplication_create() { + // The parameters argc and argv and the strings pointed to by the argv array shall be modifiable by the program, + // and retain their last-stored values between program startup and program termination. + // In other words: argv strings can't be string literals! + const auto toCharPtr = [](const QString& str) { + auto bytes = str.toLocal8Bit(); + char *data = new char[bytes.size() + 1]; + strcpy(data, bytes.data()); + return data; // we don't care about memory leak here + }; + +#ifdef QML_DEBUG_PORT + static int argc = 2; + static char *argv[] = {toCharPtr(QStringLiteral("Status")), toCharPtr(QString("-qmljsdebugger=port:%1,block").arg(QML_DEBUG_PORT))}; +#else static int argc = 1; - static char *argv[] = {(char*)"Status"}; + static char *argv[] = {toCharPtr(QStringLiteral("Status"))}; +#endif + new QGuiApplication(argc, argv); register_meta_types(); }