macOS: fix camera permissions

This commit is contained in:
tobtoht 2024-01-04 15:03:26 +01:00
parent 195fc00e6c
commit b83015b22c
No known key found for this signature in database
GPG key ID: E45B10DD027D2472
4 changed files with 39 additions and 41 deletions

View file

@ -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")

View file

@ -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()
@ -335,3 +335,18 @@ else()
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()
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)

View file

@ -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;

View file

@ -49,7 +49,6 @@ private:
void refreshCameraList();
QImage videoFrameToImage(const QVideoFrame &videoFrame);
void handleFrameCaptured(const QVideoFrame &videoFrame);
bool getPermission();
QScopedPointer<Ui::QrCodeScanWidget> ui;