From e3842cf23676e3a9739d8348f8cbffa143e903ef Mon Sep 17 00:00:00 2001 From: Henning Gruendl Date: Mon, 9 Sep 2024 17:11:53 +0200 Subject: [PATCH] QmlDesigner: Fix SpinBox showing group separator In Qt 6.7.3 the StudioControls SpinBoxes were showing group separators caused by the validator fixup function which takes the system locale to generated the presented string. We fix this with a design studio specific locale that is assigned to the controls that show numbers. Task-number: QDS-13536 Change-Id: I26682b08a8e29cd5dc09b3ff09212568bfa4fe52 Reviewed-by: Marco Bubke --- .../imports/StudioControls/RealSpinBox.qml | 3 ++ .../imports/StudioControls/SpinBox.qml | 3 ++ src/plugins/qmldesigner/qmldesignerplugin.cpp | 2 - src/plugins/qmldesignerbase/CMakeLists.txt | 1 + .../qmldesignerbase/qmldesignerbaseplugin.cpp | 5 +++ .../studio/studioquickutils.cpp | 31 +++++++++++++++ .../qmldesignerbase/studio/studioquickutils.h | 39 +++++++++++++++++++ .../qmldesignerbase/utils/windowmanager.cpp | 6 +-- .../qmldesignerbase/utils/windowmanager.h | 6 +-- 9 files changed, 86 insertions(+), 10 deletions(-) create mode 100644 src/plugins/qmldesignerbase/studio/studioquickutils.cpp create mode 100644 src/plugins/qmldesignerbase/studio/studioquickutils.h diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/RealSpinBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/RealSpinBox.qml index 9072a2de8ae..c83be5bd2b4 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/RealSpinBox.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/RealSpinBox.qml @@ -4,6 +4,7 @@ import QtQuick import QtQuick.Templates as T import StudioTheme 1.0 as StudioTheme +import StudioQuickUtils T.SpinBox { id: control @@ -71,6 +72,8 @@ T.SpinBox { signal dragging signal indicatorPressed + locale: Utils.locale + // Use custom wheel handling due to bugs property bool __wheelEnabled: false wheelEnabled: false diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/SpinBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/SpinBox.qml index ffde6e4ad16..8a07e4bc478 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/SpinBox.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/SpinBox.qml @@ -4,6 +4,7 @@ import QtQuick import QtQuick.Templates as T import StudioTheme 1.0 as StudioTheme +import StudioQuickUtils T.SpinBox { id: control @@ -54,6 +55,8 @@ T.SpinBox { signal dragEnded signal dragging + locale: Utils.locale + // Use custom wheel handling due to bugs property bool __wheelEnabled: false wheelEnabled: false diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index 68d3c7071f8..a158ba43098 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -27,7 +27,6 @@ #include #include #include -#include #ifndef QDS_USE_PROJECTSTORAGE # include #endif @@ -311,7 +310,6 @@ bool QmlDesignerPlugin::initialize(const QStringList & /*arguments*/, QString *e //TODO Move registering those types out of the property editor, since they are used also in the states editor Quick2PropertyEditorView::registerQmlTypes(); StudioQuickWidget::registerDeclarativeType(); - QmlDesignerBase::WindowManager::registerDeclarativeType(); Exception::setWarnAboutException(!QmlDesignerPlugin::instance() ->settings() diff --git a/src/plugins/qmldesignerbase/CMakeLists.txt b/src/plugins/qmldesignerbase/CMakeLists.txt index 2cee711a35c..4fe7d952f70 100644 --- a/src/plugins/qmldesignerbase/CMakeLists.txt +++ b/src/plugins/qmldesignerbase/CMakeLists.txt @@ -45,6 +45,7 @@ extend_qtc_plugin(QmlDesignerBase PUBLIC_INCLUDES studio SOURCES_PREFIX studio SOURCES + studioquickutils.cpp studioquickutils.h studiostyle.cpp studiostyle.h studiostyle_p.cpp studiostyle_p.h studioquickwidget.cpp studioquickwidget.h diff --git a/src/plugins/qmldesignerbase/qmldesignerbaseplugin.cpp b/src/plugins/qmldesignerbase/qmldesignerbaseplugin.cpp index ec3b47063a2..626fa9f17df 100644 --- a/src/plugins/qmldesignerbase/qmldesignerbaseplugin.cpp +++ b/src/plugins/qmldesignerbase/qmldesignerbaseplugin.cpp @@ -8,6 +8,8 @@ #include "studio/studiostyle.h" #include +#include +#include #include #include @@ -89,6 +91,9 @@ bool QmlDesignerBasePlugin::initialize(const QStringList &arguments, QString *) if (arguments.contains("-qml-lite-designer")) enbableLiteMode(); + WindowManager::registerDeclarativeType(); + StudioQuickUtils::registerDeclarativeType(); + d = std::make_unique(); if (Core::ICore::settings()->value("QML/Designer/StandAloneMode", false).toBool()) d->studioConfigSettingsPage = std::make_unique(); diff --git a/src/plugins/qmldesignerbase/studio/studioquickutils.cpp b/src/plugins/qmldesignerbase/studio/studioquickutils.cpp new file mode 100644 index 00000000000..11af253732d --- /dev/null +++ b/src/plugins/qmldesignerbase/studio/studioquickutils.cpp @@ -0,0 +1,31 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#include "studioquickutils.h" + +#include + +namespace QmlDesigner { + +StudioQuickUtils::StudioQuickUtils() +{ + m_locale = QLocale("DesignStudioLocale"); + m_locale.setNumberOptions(QLocale::OmitGroupSeparator); +} + +void StudioQuickUtils::registerDeclarativeType() +{ + qmlRegisterSingletonType( + "StudioQuickUtils", 1, 0, "Utils", [](QQmlEngine *, QJSEngine *) { + return new StudioQuickUtils(); + }); +} + +const QLocale &StudioQuickUtils::locale() const +{ + return m_locale; +} + +StudioQuickUtils::~StudioQuickUtils() {} + +} // namespace QmlDesigner diff --git a/src/plugins/qmldesignerbase/studio/studioquickutils.h b/src/plugins/qmldesignerbase/studio/studioquickutils.h new file mode 100644 index 00000000000..b7f298cebf1 --- /dev/null +++ b/src/plugins/qmldesignerbase/studio/studioquickutils.h @@ -0,0 +1,39 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#pragma once + +#include "../qmldesignerbase_global.h" + +#include + +#include + +namespace QmlDesigner { + +class QMLDESIGNERBASE_EXPORT StudioQuickUtils : public QObject +{ + Q_OBJECT + + Q_PROPERTY(QLocale locale READ locale NOTIFY localeChanged) + +public: + ~StudioQuickUtils(); + + StudioQuickUtils(const StudioQuickUtils &) = delete; + void operator=(const StudioQuickUtils &) = delete; + + static void registerDeclarativeType(); + + const QLocale &locale() const; + +signals: + void localeChanged(); + +private: + StudioQuickUtils(); + + QLocale m_locale; +}; + +} // namespace QmlDesigner diff --git a/src/plugins/qmldesignerbase/utils/windowmanager.cpp b/src/plugins/qmldesignerbase/utils/windowmanager.cpp index aa0b0772f9e..e00a19fb6d9 100644 --- a/src/plugins/qmldesignerbase/utils/windowmanager.cpp +++ b/src/plugins/qmldesignerbase/utils/windowmanager.cpp @@ -11,9 +11,7 @@ #include #include -namespace QmlDesignerBase { - -QPointer WindowManager::m_instance = nullptr; +namespace QmlDesigner { WindowManager::WindowManager() { @@ -56,4 +54,4 @@ QRect WindowManager::getScreenGeometry(QPoint point) return screen->geometry(); } -} // namespace QmlDesignerBase +} // namespace QmlDesigner diff --git a/src/plugins/qmldesignerbase/utils/windowmanager.h b/src/plugins/qmldesignerbase/utils/windowmanager.h index 87a0b701463..01444ce43dc 100644 --- a/src/plugins/qmldesignerbase/utils/windowmanager.h +++ b/src/plugins/qmldesignerbase/utils/windowmanager.h @@ -10,7 +10,7 @@ QT_FORWARD_DECLARE_CLASS(QWindow) -namespace QmlDesignerBase { +namespace QmlDesigner { class QMLDESIGNERBASE_EXPORT WindowManager : public QObject { @@ -34,8 +34,6 @@ signals: private: WindowManager(); - - static QPointer m_instance; }; -} // namespace QmlDesignerBase +} // namespace QmlDesigner