From b83015b22c3fd08cee62b70e19c409d9643d68f1 Mon Sep 17 00:00:00 2001 From: tobtoht Date: Thu, 4 Jan 2024 15:03:26 +0100 Subject: [PATCH] macOS: fix camera permissions --- CMakeLists.txt | 13 ---------- src/CMakeLists.txt | 33 ++++++++++++++++++------- src/qrcode/scanner/QrCodeScanWidget.cpp | 33 +++++++++++-------------- src/qrcode/scanner/QrCodeScanWidget.h | 1 - 4 files changed, 39 insertions(+), 41 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e4c131..c62b3d2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -302,19 +302,6 @@ add_subdirectory(src) configure_file("${CMAKE_SOURCE_DIR}/contrib/installers/windows/setup.nsi.in" "${CMAKE_SOURCE_DIR}/contrib/installers/windows/setup.nsi" @ONLY) -if(APPLE) - configure_file(${CMAKE_SOURCE_DIR}/contrib/macdeploy/Info.plist.in ${CMAKE_SOURCE_DIR}/contrib/macdeploy/Info.plist @ONLY) - - set_target_properties(feather PROPERTIES - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" - MACOSX_BUNDLE TRUE - MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/contrib/macdeploy/Info.plist" - LINK_FLAGS_RELEASE -s - ) - - file(COPY "${CMAKE_SOURCE_DIR}/src/assets/images/appicons/appicon.icns" DESTINATION "${CMAKE_SOURCE_DIR}/installed/feather.app/Contents/Resources/" ) -endif() - #### Summary #### message("\n") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2d2b3f1..22a9bb1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -251,7 +251,7 @@ if (DEPENDS) target_link_directories(feather PRIVATE "${LIB_DIR}") endif() -target_link_libraries(feather +target_link_libraries(feather PRIVATE wallet_merged ${LMDB_LIBRARY} epee @@ -280,19 +280,19 @@ target_link_libraries(feather ) if(CHECK_UPDATES) - target_link_libraries(feather openpgp) + target_link_libraries(feather PRIVATE openpgp) endif() if(DEPENDS) - target_link_libraries(feather ${ICONV_LIBRARIES}) + target_link_libraries(feather PRIVATE ${ICONV_LIBRARIES}) endif() if(DEVICE_TREZOR_READY) - target_link_libraries(feather ${TREZOR_DEP_LIBS}) + target_link_libraries(feather PRIVATE ${TREZOR_DEP_LIBS}) endif() if (WITH_SCANNER) - target_link_libraries(feather + target_link_libraries(feather PRIVATE Qt::Multimedia Qt::MultimediaWidgets ${ZXING_LIBRARIES} @@ -300,16 +300,16 @@ if (WITH_SCANNER) endif() if(STATIC AND APPLE) - target_link_libraries(feather Qt6::QDarwinCameraPermissionPlugin) + target_link_libraries(feather PRIVATE Qt6::QDarwinCameraPermissionPlugin) endif() if(STATIC AND UNIX AND NOT APPLE) - target_link_libraries(feather Qt6::QComposePlatformInputContextPlugin) + target_link_libraries(feather PRIVATE Qt6::QComposePlatformInputContextPlugin) endif() if(DEPENDS AND APPLE) # TODO: Needed for ___isOSVersionAtLeast - target_link_libraries(feather + target_link_libraries(feather PRIVATE ${CMAKE_OSX_SYSROOT}/lib/darwin/libclang_rt.osx.a) endif() @@ -334,4 +334,19 @@ else() install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/feather.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/images/appicons/256x256.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/256x256/apps RENAME "feather.png") endif() -endif() \ No newline at end of file +endif() + +if(APPLE) + configure_file(${CMAKE_SOURCE_DIR}/contrib/macdeploy/Info.plist.in ${CMAKE_SOURCE_DIR}/contrib/macdeploy/Info.plist @ONLY) + + set_target_properties(feather PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" + MACOSX_BUNDLE TRUE + MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/contrib/macdeploy/Info.plist" + LINK_FLAGS_RELEASE -s + ) + + file(COPY "${CMAKE_SOURCE_DIR}/src/assets/images/appicons/appicon.icns" DESTINATION "${CMAKE_SOURCE_DIR}/installed/feather.app/Contents/Resources/" ) +endif() + +qt_finalize_executable(feather) \ No newline at end of file diff --git a/src/qrcode/scanner/QrCodeScanWidget.cpp b/src/qrcode/scanner/QrCodeScanWidget.cpp index b1dfc35..e1d9418 100644 --- a/src/qrcode/scanner/QrCodeScanWidget.cpp +++ b/src/qrcode/scanner/QrCodeScanWidget.cpp @@ -70,10 +70,21 @@ void QrCodeScanWidget::startCapture(bool scan_ur) { ui->progressBar_UR->setVisible(m_scan_ur); ui->progressBar_UR->setFormat("Progress: %v%"); - if (!getPermission()) { - ui->frame_error->setText("No permission to start camera."); - ui->frame_error->show(); - return; + QCameraPermission cameraPermission; + switch (qApp->checkPermission(cameraPermission)) { + case Qt::PermissionStatus::Undetermined: + qDebug() << "Camera permission undetermined"; + qApp->requestPermission(cameraPermission, [this] { + startCapture(m_scan_ur); + }); + return; + case Qt::PermissionStatus::Denied: + ui->frame_error->setText("No permission to start camera."); + ui->frame_error->show(); + return; + case Qt::PermissionStatus::Granted: + qDebug() << "Camera permission granted"; + break; } if (ui->combo_camera->count() < 1) { @@ -89,20 +100,6 @@ void QrCodeScanWidget::startCapture(bool scan_ur) { } } -bool QrCodeScanWidget::getPermission() { - QCameraPermission cameraPermission; - switch (qApp->checkPermission(cameraPermission)) { - case Qt::PermissionStatus::Undetermined: - qApp->requestPermission(cameraPermission, this, - &QrCodeScanWidget::getPermission); - return false; - case Qt::PermissionStatus::Denied: - return false; - case Qt::PermissionStatus::Granted: - return true; - } -} - void QrCodeScanWidget::reset() { this->decodedString = ""; m_done = false; diff --git a/src/qrcode/scanner/QrCodeScanWidget.h b/src/qrcode/scanner/QrCodeScanWidget.h index 8cefd08..700c316 100644 --- a/src/qrcode/scanner/QrCodeScanWidget.h +++ b/src/qrcode/scanner/QrCodeScanWidget.h @@ -49,7 +49,6 @@ private: void refreshCameraList(); QImage videoFrameToImage(const QVideoFrame &videoFrame); void handleFrameCaptured(const QVideoFrame &videoFrame); - bool getPermission(); QScopedPointer ui;