$(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
)
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()
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);
#include "QrCodeScanWidget.h"
#include "ui_QrCodeScanWidget.h"
+#include <QPermission>
#include <QMediaDevices>
#include <QComboBox>
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();
}
}
+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;
void refreshCameraList();
QImage videoFrameToImage(const QVideoFrame &videoFrame);
void handleFrameCaptured(const QVideoFrame &videoFrame);
+ bool getPermission();
QScopedPointer<Ui::QrCodeScanWidget> ui;