diff --git a/share/qtcreator/qmldesigner/edit3dQmlSource/CameraSpeedConfigurationDialog.qml b/share/qtcreator/qmldesigner/edit3dQmlSource/CameraSpeedConfigurationDialog.qml index b51369ffa3f..a1fb4f9fe74 100644 --- a/share/qtcreator/qmldesigner/edit3dQmlSource/CameraSpeedConfigurationDialog.qml +++ b/share/qtcreator/qmldesigner/edit3dQmlSource/CameraSpeedConfigurationDialog.qml @@ -12,9 +12,10 @@ Rectangle { id: root property int toolTipDelay: 1000 + property bool qdsTrusted: isQDSTrusted() width: 260 - height: 150 + height: root.qdsTrusted ? 150 : 210 color: StudioTheme.Values.themePanelBackground border.color: StudioTheme.Values.themeControlOutline border.width: StudioTheme.Values.border @@ -151,6 +152,43 @@ Rectangle { onClicked: resetDefaults() } } + + Rectangle { + visible: !root.qdsTrusted + color: "transparent" + border.color: StudioTheme.Values.themeWarning + Layout.fillWidth: true + Layout.fillHeight: true + + RowLayout { + anchors.fill: parent + + HelperWidgets.IconLabel { + icon: StudioTheme.Constants.warning_medium + pixelSize: StudioTheme.Values.mediumIconFontSize + Layout.leftMargin: 10 + } + + Text { + text: qsTr('

You only have partial control in fly mode. For full control, please + enable the Accessibility settings

') + + color: StudioTheme.Values.themeTextColor + wrapMode: Text.WordWrap + Layout.fillWidth: true + Layout.margins: 6 + textFormat: Text.RichText + + MouseArea { + anchors.fill: parent + onClicked: { + Qt.openUrlExternally("x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility") + accessibilityOpened() + } + } + } + } + } } } } diff --git a/src/plugins/qmldesigner/components/edit3d/cameraspeedconfiguration.cpp b/src/plugins/qmldesigner/components/edit3d/cameraspeedconfiguration.cpp index f5a74ee8645..fd6feaecadd 100644 --- a/src/plugins/qmldesigner/components/edit3d/cameraspeedconfiguration.cpp +++ b/src/plugins/qmldesigner/components/edit3d/cameraspeedconfiguration.cpp @@ -2,13 +2,9 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 #include "cameraspeedconfiguration.h" - -#include "designersettings.h" #include "edit3dview.h" -#include "edit3dviewconfig.h" #include - #include #include @@ -193,4 +189,9 @@ bool CameraSpeedConfiguration::eventFilter(QObject *obj, QEvent *event) return QObject::eventFilter(obj, event); } +bool CameraSpeedConfiguration::isQDSTrusted() const +{ + return Edit3DView::isQDSTrusted(); +} + } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/edit3d/cameraspeedconfiguration.h b/src/plugins/qmldesigner/components/edit3d/cameraspeedconfiguration.h index fef06efc499..34f391c78b5 100644 --- a/src/plugins/qmldesigner/components/edit3d/cameraspeedconfiguration.h +++ b/src/plugins/qmldesigner/components/edit3d/cameraspeedconfiguration.h @@ -39,6 +39,7 @@ public: Q_INVOKABLE void restoreCursor(); Q_INVOKABLE void holdCursorInPlace(); Q_INVOKABLE int devicePixelRatio(); + Q_INVOKABLE bool isQDSTrusted() const; void cancel(); void apply(); @@ -58,6 +59,7 @@ signals: void speedChanged(); void multiplierChanged(); void totalSpeedChanged(); + void accessibilityOpened(); protected: bool eventFilter(QObject *obj, QEvent *event) override; diff --git a/src/plugins/qmldesigner/components/edit3d/edit3dcanvas.cpp b/src/plugins/qmldesigner/components/edit3d/edit3dcanvas.cpp index 63d5e958b19..553d8cb7b3d 100644 --- a/src/plugins/qmldesigner/components/edit3d/edit3dcanvas.cpp +++ b/src/plugins/qmldesigner/components/edit3d/edit3dcanvas.cpp @@ -81,21 +81,13 @@ QWidget *Edit3DCanvas::busyIndicator() const return m_busyIndicator; } -#ifdef Q_OS_MACOS -extern "C" bool AXIsProcessTrusted(); -#endif - void Edit3DCanvas::setFlyMode(bool enabled, const QPoint &pos) { if (m_flyMode == enabled) return; -#ifdef Q_OS_MACOS - if (!AXIsProcessTrusted()) - m_isTrusted = false; -#endif - m_flyMode = enabled; + m_isQDSTrusted = Edit3DView::isQDSTrusted(); if (enabled) { m_flyModeStartTime = QDateTime::currentMSecsSinceEpoch(); @@ -199,7 +191,7 @@ void Edit3DCanvas::mouseMoveEvent(QMouseEvent *e) // We notify explicit camera rotation need for puppet rather than rely in mouse events, // as mouse isn't grabbed on puppet side and can't handle fast movements that go out of // edit camera mouse area. This also simplifies split view handling. - QPointF diff = m_isTrusted ? (m_hiddenCursorPos - e->globalPos()) : (m_lastCursorPos - e->globalPos()); + QPointF diff = m_isQDSTrusted ? (m_hiddenCursorPos - e->globalPos()) : (m_lastCursorPos - e->globalPos()); if (e->buttons() == (Qt::LeftButton | Qt::RightButton)) { m_parent->view()->emitView3DAction(View3DActionType::EditCameraMove, @@ -212,7 +204,7 @@ void Edit3DCanvas::mouseMoveEvent(QMouseEvent *e) m_flyModeFirstUpdate = false; } - if (m_isTrusted) + if (m_isQDSTrusted) QCursor::setPos(m_hiddenCursorPos); else m_lastCursorPos = e->globalPos(); diff --git a/src/plugins/qmldesigner/components/edit3d/edit3dcanvas.h b/src/plugins/qmldesigner/components/edit3d/edit3dcanvas.h index 16c1063dd61..66846061ac6 100644 --- a/src/plugins/qmldesigner/components/edit3d/edit3dcanvas.h +++ b/src/plugins/qmldesigner/components/edit3d/edit3dcanvas.h @@ -53,7 +53,7 @@ private: qint32 m_activeScene = -1; QElapsedTimer m_usageTimer; qreal m_opacity = 1.0; - bool m_isTrusted = true; + bool m_isQDSTrusted = true; QWidget *m_busyIndicator = nullptr; bool m_flyMode = false; QPoint m_flyModeStartCursorPos; diff --git a/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp b/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp index 810265a6c0f..23133d764d4 100644 --- a/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp +++ b/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp @@ -42,7 +42,6 @@ #include #include #include - #include namespace QmlDesigner { @@ -57,19 +56,6 @@ inline static QIcon toolbarIcon(const DesignerIcons::IconId &iconId) return DesignerActionManager::instance().toolbarIcon(iconId); }; -#ifdef Q_OS_MACOS -extern "C" bool AXIsProcessTrusted(); -#endif - -static bool isAXITrusted() -{ -#ifdef Q_OS_MACOS - return AXIsProcessTrusted(); -#else - return true; -#endif -} - Edit3DView::Edit3DView(ExternalDependenciesInterface &externalDependencies) : AbstractView{externalDependencies} { @@ -1323,7 +1309,11 @@ void Edit3DView::createEdit3DActions() this, [this] { setCameraSpeedAuxData(m_cameraSpeedConfiguration->speed(), m_cameraSpeedConfiguration->multiplier()); - }); + }); + connect(m_cameraSpeedConfiguration.data(), &CameraSpeedConfiguration::accessibilityOpened, + this, [this] { + m_cameraSpeedConfigAction->setIndicator(false); + }); } m_cameraSpeedConfiguration->showConfigDialog(resolveToolbarPopupPos(m_cameraSpeedConfigAction.get())); }; @@ -1337,7 +1327,7 @@ void Edit3DView::createEdit3DActions() cameraSpeedConfigTrigger, this); - m_cameraSpeedConfigAction->setIndicator(!isAXITrusted()); + m_cameraSpeedConfigAction->setIndicator(!isQDSTrusted()); m_leftActions << m_selectionModeAction.get(); m_leftActions << nullptr; // Null indicates separator diff --git a/src/plugins/qmldesigner/components/edit3d/edit3dview.h b/src/plugins/qmldesigner/components/edit3d/edit3dview.h index 25d620551a3..9e9bce13587 100644 --- a/src/plugins/qmldesigner/components/edit3d/edit3dview.h +++ b/src/plugins/qmldesigner/components/edit3d/edit3dview.h @@ -18,6 +18,10 @@ #include #include +#ifdef Q_OS_MACOS +extern "C" bool AXIsProcessTrusted(); +#endif + QT_BEGIN_NAMESPACE class QAction; class QInputEvent; @@ -41,6 +45,15 @@ public: bool showWireframe = false; }; + static bool isQDSTrusted() + { +#ifdef Q_OS_MACOS + return AXIsProcessTrusted(); +#else + return true; +#endif + } + Edit3DView(ExternalDependenciesInterface &externalDependencies); WidgetInfo widgetInfo() override;