]> Nutra Git (v2) - gamesguru/feather.git/commitdiff
macos: warn if no permission to start camera
authortobtoht <tob@featherwallet.org>
Tue, 2 Jan 2024 20:21:34 +0000 (21:21 +0100)
committertobtoht <tob@featherwallet.org>
Tue, 2 Jan 2024 20:21:34 +0000 (21:21 +0100)
contrib/depends/packages/qt.mk
src/CMakeLists.txt
src/main.cpp
src/qrcode/scanner/QrCodeScanWidget.cpp
src/qrcode/scanner/QrCodeScanWidget.h

index 9dfbe470331f2ecf841666f8ab7cd5d8d327b0c0..7de62cab655f35cac250b6e33347fa34d9e13127 100644 (file)
@@ -68,6 +68,7 @@ $(package)_config_opts += -DINPUT_libudev=no
 $(package)_config_opts += -DINPUT_mtdev=no
 $(package)_config_opts += -DINPUT_openssl=linked
 $(package)_config_opts += -DINPUT_openvg=no
+$(package)_config_opts += -DINPUT_permissions=yes
 $(package)_config_opts += -DINPUT_reduce_relocations=no
 $(package)_config_opts += -DINPUT_schannel=no
 $(package)_config_opts += -DINPUT_sctp=no
index ca1646022bde96962a27776bc6c3ed7e28e5d832..2d2b3f131ccff0a6ae51dd3b87dbea5b33f1fe6a 100644 (file)
@@ -299,6 +299,10 @@ if (WITH_SCANNER)
     )
 endif()
 
+if(STATIC AND APPLE)
+    target_link_libraries(feather Qt6::QDarwinCameraPermissionPlugin)
+endif()
+
 if(STATIC AND UNIX AND NOT APPLE)
     target_link_libraries(feather Qt6::QComposePlatformInputContextPlugin)
 endif()
index d0a1a38ea9ee52350c2d4d27b89de331b2784dae..5f45f40812dca959f4e3986a20ae757b6cfe8249 100644 (file)
@@ -34,6 +34,10 @@ Q_IMPORT_PLUGIN(QXcbIntegrationPlugin)
 Q_IMPORT_PLUGIN(QComposePlatformInputContextPlugin) // Needed for dead keys on Linux
 #endif
 
+#if defined(Q_OS_MAC) && defined(STATIC)
+Q_IMPORT_PLUGIN(QDarwinCameraPermissionPlugin)
+#endif
+
 #if defined(Q_OS_LINUX) && defined(STACK_TRACE)
 void signal_handler(int signum) {
     ::signal(signum, SIG_DFL);
index 802944d65bc59b97e4c6e0c08df1dd7fb35200e0..b1dfc357d8918fd7cdf2ee8370a453829a01d7b8 100644 (file)
@@ -4,6 +4,7 @@
 #include "QrCodeScanWidget.h"
 #include "ui_QrCodeScanWidget.h"
 
+#include <QPermission>
 #include <QMediaDevices>
 #include <QComboBox>
 
@@ -68,7 +69,13 @@ void QrCodeScanWidget::startCapture(bool scan_ur) {
     m_scan_ur = 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;
+    }
+
     if (ui->combo_camera->count() < 1) {
         ui->frame_error->setText("No cameras found. Attach a camera and press 'Refresh'.");
         ui->frame_error->show();
@@ -82,6 +89,20 @@ 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;
index 700c31678c6293c1ad7d7dabb74941c014f8e9d4..8cefd08bbd511c877c9c480a8f14f0996584782d 100644 (file)
@@ -49,6 +49,7 @@ private:
     void refreshCameraList();
     QImage videoFrameToImage(const QVideoFrame &videoFrame);
     void handleFrameCaptured(const QVideoFrame &videoFrame);
+    bool getPermission();
 
     QScopedPointer<Ui::QrCodeScanWidget> ui;