include/vcl/settings.hxx | 26 +- vcl/source/app/settings.cxx | 503 +++++++++++++------------------------------- 2 files changed, 167 insertions(+), 362 deletions(-)
New commits: commit eae43ee9112e59b8aabc2abad04d5413230e17a4 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Wed Dec 4 11:21:55 2024 +0500 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Wed Dec 4 09:56:54 2024 +0100 Use o3tl::cow_wrapper instead of std::shared_ptr Change-Id: I05ff47fe51cccce6a78745027ae8c2679783bd8a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177766 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/include/vcl/settings.hxx b/include/vcl/settings.hxx index d7cbcc174792..432419abc568 100644 --- a/include/vcl/settings.hxx +++ b/include/vcl/settings.hxx @@ -25,6 +25,7 @@ #include <vcl/dllapi.h> #include <tools/color.hxx> #include <tools/gen.hxx> +#include <o3tl/cow_wrapper.hxx> #include <o3tl/typed_flags_set.hxx> #include <memory> @@ -84,11 +85,13 @@ enum class MouseWheelBehaviour class VCL_DLLPUBLIC MouseSettings { private: - SAL_DLLPRIVATE void CopyData(); - std::shared_ptr<ImplMouseData> mxData; + o3tl::cow_wrapper<ImplMouseData> mxData; public: MouseSettings(); + MouseSettings(const MouseSettings&); + ~MouseSettings(); + MouseSettings& operator=(const MouseSettings&); void SetOptions( MouseSettingsOptions nOptions ); MouseSettingsOptions GetOptions() const; @@ -136,7 +139,6 @@ public: MouseWheelBehaviour GetWheelBehavior() const; bool operator ==( const MouseSettings& rSet ) const; - bool operator !=( const MouseSettings& rSet ) const; }; struct DialogStyle @@ -217,13 +219,14 @@ enum class ComboBoxTextSelectionMode class VCL_DLLPUBLIC StyleSettings { - SAL_DLLPRIVATE void CopyData(); - private: - std::shared_ptr<ImplStyleData> mxData; + o3tl::cow_wrapper<ImplStyleData> mxData; public: StyleSettings(); + StyleSettings(const StyleSettings&); + ~StyleSettings(); + StyleSettings& operator=(const StyleSettings&); SAL_DLLPRIVATE void Set3DColors( const Color& rColor ); @@ -646,7 +649,6 @@ public: void SetStandardStyles(); bool operator ==( const StyleSettings& rSet ) const; - bool operator !=( const StyleSettings& rSet ) const; // Batch setters used by various backends void BatchSetBackgrounds( const Color &aBackColor, @@ -716,12 +718,13 @@ namespace o3tl class VCL_DLLPUBLIC AllSettings { private: - SAL_DLLPRIVATE void CopyData(); - - std::shared_ptr<ImplAllSettingsData> mxData; + o3tl::cow_wrapper<ImplAllSettingsData> mxData; public: AllSettings(); + AllSettings(const AllSettings&); + ~AllSettings(); + AllSettings& operator=(const AllSettings&); void SetMouseSettings( const MouseSettings& rSet ); const MouseSettings& GetMouseSettings() const; @@ -758,9 +761,8 @@ public: SAL_DLLPRIVATE AllSettingsFlags GetChangeFlags( const AllSettings& rSettings ) const; SAL_DLLPRIVATE bool operator ==( const AllSettings& rSet ) const; - SAL_DLLPRIVATE bool operator !=( const AllSettings& rSet ) const; SAL_DLLPRIVATE static void LocaleSettingsChanged( ConfigurationHints nHint ); - SAL_DLLPRIVATE SvtSysLocale& GetSysLocale(); + SAL_DLLPRIVATE const SvtSysLocale& GetSysLocale() const; }; #endif // INCLUDED_VCL_SETTINGS_HXX diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx index cacb278077ae..b4b8907f89cf 100644 --- a/vcl/source/app/settings.cxx +++ b/vcl/source/app/settings.cxx @@ -70,6 +70,8 @@ struct ImplMouseData MouseFollowFlags mnFollow = MouseFollowFlags::Menu; MouseMiddleButtonAction mnMiddleButtonAction= MouseMiddleButtonAction::AutoScroll; MouseWheelBehaviour mnWheelBehavior = MouseWheelBehaviour::FocusOnly; + + bool operator==(const ImplMouseData& rSet) const = default; }; namespace @@ -206,7 +208,7 @@ struct ImplStyleData ToolbarIconSize mnToolbarIconSize = ToolbarIconSize::Unknown; StyleSettingsOptions mnOptions = StyleSettingsOptions::NONE; TriState meUseImagesInMenus = TRISTATE_INDET; - std::optional<vcl::IconThemeScanner> + std::optional<vcl::IconThemeScanner> mutable mIconThemeScanner; vcl::IconThemeSelector mIconThemeSelector; @@ -246,13 +248,15 @@ struct ImplStyleData ComboBoxTextSelectionMode meComboBoxTextSelectionMode = ComboBoxTextSelectionMode::SelectText; Size maListBoxPreviewDefaultLogicSize = getInitListBoxPreviewDefaultLogicSize(); // on-demand calculated in GetListBoxPreviewDefaultPixelSize() - Size maListBoxPreviewDefaultPixelSize; + Size mutable maListBoxPreviewDefaultPixelSize; + + OUString mutable maPersonaHeaderFooter; ///< Cache the settings to detect changes. - OUString maPersonaHeaderFooter; ///< Cache the settings to detect changes. + BitmapEx mutable maPersonaHeaderBitmap; ///< Cache the header bitmap. + BitmapEx mutable maPersonaFooterBitmap; ///< Cache the footer bitmap. + std::optional<Color> mutable maPersonaMenuBarTextColor; ///< Cache the menubar color. - BitmapEx maPersonaHeaderBitmap; ///< Cache the header bitmap. - BitmapEx maPersonaFooterBitmap; ///< Cache the footer bitmap. - std::optional<Color> maPersonaMenuBarTextColor; ///< Cache the menubar color. + bool operator==(const ImplStyleData& rSet) const; }; struct ImplMiscData @@ -277,20 +281,21 @@ struct ImplAllSettingsData StyleSettings maStyleSettings; MiscSettings maMiscSettings; HelpSettings maHelpSettings; + SvtSysLocale maSysLocale; LanguageTag maLocale; LanguageTag maUILocale; - std::unique_ptr<LocaleDataWrapper> mpLocaleDataWrapper; - std::unique_ptr<LocaleDataWrapper> mpUILocaleDataWrapper; - std::unique_ptr<LocaleDataWrapper> mpNeutralLocaleDataWrapper; - std::unique_ptr<vcl::I18nHelper> mpI18nHelper; - std::unique_ptr<vcl::I18nHelper> mpUII18nHelper; - SvtSysLocale maSysLocale; + mutable std::unique_ptr<LocaleDataWrapper> mpLocaleDataWrapper; + mutable std::unique_ptr<LocaleDataWrapper> mpUILocaleDataWrapper; + mutable std::unique_ptr<LocaleDataWrapper> mpNeutralLocaleDataWrapper; + mutable std::unique_ptr<vcl::I18nHelper> mpI18nHelper; + mutable std::unique_ptr<vcl::I18nHelper> mpUII18nHelper; + + bool operator==(const ImplAllSettingsData& rSet) const; }; void MouseSettings::SetOptions(MouseSettingsOptions nOptions) { - CopyData(); mxData->mnOptions = nOptions; } @@ -303,7 +308,6 @@ MouseSettings::GetOptions() const void MouseSettings::SetDoubleClickTime( sal_uInt64 nDoubleClkTime ) { - CopyData(); mxData->mnDoubleClkTime = nDoubleClkTime; } @@ -316,7 +320,6 @@ MouseSettings::GetDoubleClickTime() const void MouseSettings::SetDoubleClickWidth( sal_Int32 nDoubleClkWidth ) { - CopyData(); mxData->mnDoubleClkWidth = nDoubleClkWidth; } @@ -329,7 +332,6 @@ MouseSettings::GetDoubleClickWidth() const void MouseSettings::SetDoubleClickHeight( sal_Int32 nDoubleClkHeight ) { - CopyData(); mxData->mnDoubleClkHeight = nDoubleClkHeight; } @@ -342,7 +344,6 @@ MouseSettings::GetDoubleClickHeight() const void MouseSettings::SetStartDragWidth( sal_Int32 nDragWidth ) { - CopyData(); mxData->mnStartDragWidth = nDragWidth; } @@ -355,7 +356,6 @@ MouseSettings::GetStartDragWidth() const void MouseSettings::SetStartDragHeight( sal_Int32 nDragHeight ) { - CopyData(); mxData->mnStartDragHeight = nDragHeight; } @@ -398,7 +398,6 @@ MouseSettings::GetButtonStartRepeat() void MouseSettings::SetButtonRepeat( sal_Int32 nRepeat ) { - CopyData(); mxData->mnButtonRepeat = nRepeat; } @@ -417,7 +416,6 @@ MouseSettings::GetActionDelay() void MouseSettings::SetMenuDelay( sal_Int32 nDelay ) { - CopyData(); mxData->mnMenuDelay = nDelay; } @@ -430,7 +428,6 @@ MouseSettings::GetMenuDelay() const void MouseSettings::SetFollow( MouseFollowFlags nFollow ) { - CopyData(); mxData->mnFollow = nFollow; } @@ -443,7 +440,6 @@ MouseSettings::GetFollow() const void MouseSettings::SetMiddleButtonAction( MouseMiddleButtonAction nAction ) { - CopyData(); mxData->mnMiddleButtonAction = nAction; } @@ -456,7 +452,6 @@ MouseSettings::GetMiddleButtonAction() const void MouseSettings::SetWheelBehavior( MouseWheelBehaviour nBehavior ) { - CopyData(); mxData->mnWheelBehavior = nBehavior; } @@ -466,43 +461,15 @@ MouseSettings::GetWheelBehavior() const return mxData->mnWheelBehavior; } -bool -MouseSettings::operator !=( const MouseSettings& rSet ) const -{ - return !(*this == rSet); -} - -MouseSettings::MouseSettings() - : mxData(std::make_shared<ImplMouseData>()) -{ -} - -void MouseSettings::CopyData() -{ - // copy if other references exist - if (mxData.use_count() > 1) - { - mxData = std::make_shared<ImplMouseData>(*mxData); - } -} +MouseSettings::MouseSettings() = default; +MouseSettings::MouseSettings(const MouseSettings&) = default; +MouseSettings::~MouseSettings() = default; +MouseSettings& MouseSettings::operator=(const MouseSettings&) = default; +// Until Clang 14, P2085R0 is unsupported, and the operator can't be default outside of declaration bool MouseSettings::operator ==( const MouseSettings& rSet ) const { - if ( mxData == rSet.mxData ) - return true; - - return - (mxData->mnOptions == rSet.mxData->mnOptions) && - (mxData->mnDoubleClkTime == rSet.mxData->mnDoubleClkTime) && - (mxData->mnDoubleClkWidth == rSet.mxData->mnDoubleClkWidth) && - (mxData->mnDoubleClkHeight == rSet.mxData->mnDoubleClkHeight) && - (mxData->mnStartDragWidth == rSet.mxData->mnStartDragWidth) && - (mxData->mnStartDragHeight == rSet.mxData->mnStartDragHeight) && - (mxData->mnMiddleButtonAction == rSet.mxData->mnMiddleButtonAction) && - (mxData->mnButtonRepeat == rSet.mxData->mnButtonRepeat) && - (mxData->mnMenuDelay == rSet.mxData->mnMenuDelay) && - (mxData->mnFollow == rSet.mxData->mnFollow) && - (mxData->mnWheelBehavior == rSet.mxData->mnWheelBehavior ); + return mxData == rSet.mxData; } ImplStyleData::ImplStyleData() @@ -626,15 +593,14 @@ void ImplStyleData::SetStandardStyles() mbPrimaryButtonWarpsSlider = false; } -StyleSettings::StyleSettings() - : mxData(std::make_shared<ImplStyleData>()) -{ -} +StyleSettings::StyleSettings() = default; +StyleSettings::StyleSettings(const StyleSettings&) = default; +StyleSettings::~StyleSettings() = default; +StyleSettings& StyleSettings::operator=(const StyleSettings&) = default; void StyleSettings::SetFaceColor( const Color& rColor ) { - CopyData(); mxData->maColors.maFaceColor = rColor; } @@ -647,7 +613,6 @@ StyleSettings::GetFaceColor() const void StyleSettings::SetCheckedColor( const Color& rColor ) { - CopyData(); mxData->maColors.maCheckedColor = rColor; } @@ -660,7 +625,6 @@ StyleSettings::GetCheckedColor() const void StyleSettings::SetLightColor( const Color& rColor ) { - CopyData(); mxData->maColors.maLightColor = rColor; } @@ -673,7 +637,6 @@ StyleSettings::GetLightColor() const void StyleSettings::SetLightBorderColor( const Color& rColor ) { - CopyData(); mxData->maColors.maLightBorderColor = rColor; } @@ -686,7 +649,6 @@ StyleSettings::GetLightBorderColor() const void StyleSettings::SetWarningColor( const Color& rColor ) { - CopyData(); mxData->maColors.maWarningColor = rColor; } @@ -699,7 +661,6 @@ StyleSettings::GetWarningColor() const void StyleSettings::SetWarningTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maWarningTextColor = rColor; } @@ -712,7 +673,6 @@ StyleSettings::GetWarningTextColor() const void StyleSettings::SetErrorColor( const Color& rColor ) { - CopyData(); mxData->maColors.maErrorColor = rColor; } @@ -725,7 +685,6 @@ StyleSettings::GetErrorColor() const void StyleSettings::SetErrorTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maErrorTextColor = rColor; } @@ -738,7 +697,6 @@ StyleSettings::GetErrorTextColor() const void StyleSettings::SetShadowColor( const Color& rColor ) { - CopyData(); mxData->maColors.maShadowColor = rColor; } @@ -751,7 +709,6 @@ StyleSettings::GetShadowColor() const void StyleSettings::SetDarkShadowColor( const Color& rColor ) { - CopyData(); mxData->maColors.maDarkShadowColor = rColor; } @@ -764,7 +721,6 @@ StyleSettings::GetDarkShadowColor() const void StyleSettings::SetDefaultButtonTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maDefaultButtonTextColor = rColor; } @@ -777,7 +733,6 @@ StyleSettings::GetDefaultButtonTextColor() const void StyleSettings::SetButtonTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maButtonTextColor = rColor; } @@ -790,7 +745,6 @@ StyleSettings::GetButtonTextColor() const void StyleSettings::SetDefaultActionButtonTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maDefaultActionButtonTextColor = rColor; } @@ -803,7 +757,6 @@ StyleSettings::GetDefaultActionButtonTextColor() const void StyleSettings::SetActionButtonTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maActionButtonTextColor = rColor; } @@ -816,7 +769,6 @@ StyleSettings::GetActionButtonTextColor() const void StyleSettings::SetFlatButtonTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maFlatButtonTextColor = rColor; } @@ -829,7 +781,6 @@ StyleSettings::GetFlatButtonTextColor() const void StyleSettings::SetDefaultButtonRolloverTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maDefaultButtonRolloverTextColor = rColor; } @@ -842,7 +793,6 @@ StyleSettings::GetDefaultButtonRolloverTextColor() const void StyleSettings::SetButtonRolloverTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maButtonRolloverTextColor = rColor; } @@ -855,7 +805,6 @@ StyleSettings::GetButtonRolloverTextColor() const void StyleSettings::SetDefaultActionButtonRolloverTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maDefaultActionButtonRolloverTextColor = rColor; } @@ -868,7 +817,6 @@ StyleSettings::GetDefaultActionButtonRolloverTextColor() const void StyleSettings::SetActionButtonRolloverTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maActionButtonRolloverTextColor = rColor; } @@ -881,7 +829,6 @@ StyleSettings::GetActionButtonRolloverTextColor() const void StyleSettings::SetFlatButtonRolloverTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maFlatButtonRolloverTextColor = rColor; } @@ -894,7 +841,6 @@ StyleSettings::GetFlatButtonRolloverTextColor() const void StyleSettings::SetDefaultButtonPressedRolloverTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maDefaultButtonPressedRolloverTextColor = rColor; } @@ -907,7 +853,6 @@ StyleSettings::GetDefaultButtonPressedRolloverTextColor() const void StyleSettings::SetButtonPressedRolloverTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maButtonPressedRolloverTextColor = rColor; } @@ -920,7 +865,6 @@ StyleSettings::GetButtonPressedRolloverTextColor() const void StyleSettings::SetDefaultActionButtonPressedRolloverTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maDefaultActionButtonPressedRolloverTextColor = rColor; } @@ -933,7 +877,6 @@ StyleSettings::GetDefaultActionButtonPressedRolloverTextColor() const void StyleSettings::SetActionButtonPressedRolloverTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maActionButtonPressedRolloverTextColor = rColor; } @@ -946,7 +889,6 @@ StyleSettings::GetActionButtonPressedRolloverTextColor() const void StyleSettings::SetFlatButtonPressedRolloverTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maFlatButtonPressedRolloverTextColor = rColor; } @@ -959,7 +901,6 @@ StyleSettings::GetFlatButtonPressedRolloverTextColor() const void StyleSettings::SetRadioCheckTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maRadioCheckTextColor = rColor; } @@ -972,7 +913,6 @@ StyleSettings::GetRadioCheckTextColor() const void StyleSettings::SetGroupTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maGroupTextColor = rColor; } @@ -985,7 +925,6 @@ StyleSettings::GetGroupTextColor() const void StyleSettings::SetLabelTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maLabelTextColor = rColor; } @@ -998,7 +937,6 @@ StyleSettings::GetLabelTextColor() const void StyleSettings::SetWindowColor( const Color& rColor ) { - CopyData(); mxData->maColors.maWindowColor = rColor; } @@ -1011,7 +949,6 @@ StyleSettings::GetWindowColor() const void StyleSettings::SetWindowTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maWindowTextColor = rColor; } @@ -1024,7 +961,6 @@ StyleSettings::GetWindowTextColor() const void StyleSettings::SetDialogColor( const Color& rColor ) { - CopyData(); mxData->maColors.maDialogColor = rColor; } @@ -1037,7 +973,6 @@ StyleSettings::GetDialogColor() const void StyleSettings::SetDialogTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maDialogTextColor = rColor; } @@ -1050,7 +985,6 @@ StyleSettings::GetDialogTextColor() const void StyleSettings::SetWorkspaceColor( const Color& rColor ) { - CopyData(); mxData->maColors.maWorkspaceColor = rColor; } @@ -1063,7 +997,6 @@ StyleSettings::GetWorkspaceColor() const void StyleSettings::SetFieldColor( const Color& rColor ) { - CopyData(); mxData->maColors.maFieldColor = rColor; } @@ -1076,7 +1009,6 @@ StyleSettings::GetFieldColor() const void StyleSettings::SetFieldTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maFieldTextColor = rColor; } @@ -1089,7 +1021,6 @@ StyleSettings::GetFieldTextColor() const void StyleSettings::SetFieldRolloverTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maFieldRolloverTextColor = rColor; } @@ -1102,7 +1033,6 @@ StyleSettings::GetFieldRolloverTextColor() const void StyleSettings::SetActiveColor( const Color& rColor ) { - CopyData(); mxData->maColors.maActiveColor = rColor; } @@ -1115,7 +1045,6 @@ StyleSettings::GetActiveColor() const void StyleSettings::SetActiveTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maActiveTextColor = rColor; } @@ -1128,7 +1057,6 @@ StyleSettings::GetActiveTextColor() const void StyleSettings::SetActiveBorderColor( const Color& rColor ) { - CopyData(); mxData->maColors.maActiveBorderColor = rColor; } @@ -1141,7 +1069,6 @@ StyleSettings::GetActiveBorderColor() const void StyleSettings::SetDeactiveColor( const Color& rColor ) { - CopyData(); mxData->maColors.maDeactiveColor = rColor; } @@ -1154,7 +1081,6 @@ StyleSettings::GetDeactiveColor() const void StyleSettings::SetDeactiveTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maDeactiveTextColor = rColor; } @@ -1167,7 +1093,6 @@ StyleSettings::GetDeactiveTextColor() const void StyleSettings::SetDeactiveBorderColor( const Color& rColor ) { - CopyData(); mxData->maColors.maDeactiveBorderColor = rColor; } @@ -1180,7 +1105,6 @@ StyleSettings::GetDeactiveBorderColor() const void StyleSettings::SetAccentColor( const Color& rColor ) { - CopyData(); mxData->maColors.maAccentColor = rColor; } @@ -1193,7 +1117,6 @@ StyleSettings::GetAccentColor() const void StyleSettings::SetHighlightColor( const Color& rColor ) { - CopyData(); mxData->maColors.maHighlightColor = rColor; } @@ -1206,7 +1129,6 @@ StyleSettings::GetHighlightColor() const void StyleSettings::SetHighlightTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maHighlightTextColor = rColor; } @@ -1219,7 +1141,6 @@ StyleSettings::GetHighlightTextColor() const void StyleSettings::SetDisableColor( const Color& rColor ) { - CopyData(); mxData->maColors.maDisableColor = rColor; } @@ -1232,7 +1153,6 @@ StyleSettings::GetDisableColor() const void StyleSettings::SetHelpColor( const Color& rColor ) { - CopyData(); mxData->maColors.maHelpColor = rColor; } @@ -1245,7 +1165,6 @@ StyleSettings::GetHelpColor() const void StyleSettings::SetHelpTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maHelpTextColor = rColor; } @@ -1258,7 +1177,6 @@ StyleSettings::GetHelpTextColor() const void StyleSettings::SetMenuColor( const Color& rColor ) { - CopyData(); mxData->maColors.maMenuColor = rColor; } @@ -1271,7 +1189,6 @@ StyleSettings::GetMenuColor() const void StyleSettings::SetMenuBarColor( const Color& rColor ) { - CopyData(); mxData->maColors.maMenuBarColor = rColor; } @@ -1284,7 +1201,6 @@ StyleSettings::GetMenuBarColor() const void StyleSettings::SetMenuBarRolloverColor( const Color& rColor ) { - CopyData(); mxData->maColors.maMenuBarRolloverColor = rColor; } @@ -1297,7 +1213,6 @@ StyleSettings::GetMenuBarRolloverColor() const void StyleSettings::SetMenuBorderColor( const Color& rColor ) { - CopyData(); mxData->maColors.maMenuBorderColor = rColor; } @@ -1310,7 +1225,6 @@ StyleSettings::GetMenuBorderColor() const void StyleSettings::SetMenuTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maMenuTextColor = rColor; } @@ -1323,7 +1237,6 @@ StyleSettings::GetMenuTextColor() const void StyleSettings::SetMenuBarTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maMenuBarTextColor = rColor; } @@ -1336,7 +1249,6 @@ StyleSettings::GetMenuBarTextColor() const void StyleSettings::SetMenuBarRolloverTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maMenuBarRolloverTextColor = rColor; } @@ -1349,7 +1261,6 @@ StyleSettings::GetMenuBarRolloverTextColor() const void StyleSettings::SetMenuBarHighlightTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maMenuBarHighlightTextColor = rColor; } @@ -1362,7 +1273,6 @@ StyleSettings::GetMenuBarHighlightTextColor() const void StyleSettings::SetMenuHighlightColor( const Color& rColor ) { - CopyData(); mxData->maColors.maMenuHighlightColor = rColor; } @@ -1375,7 +1285,6 @@ StyleSettings::GetMenuHighlightColor() const void StyleSettings::SetMenuHighlightTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maMenuHighlightTextColor = rColor; } @@ -1388,7 +1297,6 @@ StyleSettings::GetMenuHighlightTextColor() const void StyleSettings::SetListBoxWindowBackgroundColor( const Color& rColor ) { - CopyData(); mxData->maColors.maListBoxWindowBackgroundColor = rColor; } @@ -1401,7 +1309,6 @@ StyleSettings::GetListBoxWindowBackgroundColor() const void StyleSettings::SetListBoxWindowTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maListBoxWindowTextColor = rColor; } @@ -1414,7 +1321,6 @@ StyleSettings::GetListBoxWindowTextColor() const void StyleSettings::SetListBoxWindowHighlightColor( const Color& rColor ) { - CopyData(); mxData->maColors.maListBoxWindowHighlightColor = rColor; } @@ -1427,7 +1333,6 @@ StyleSettings::GetListBoxWindowHighlightColor() const void StyleSettings::SetListBoxWindowHighlightTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maListBoxWindowHighlightTextColor = rColor; } @@ -1440,7 +1345,6 @@ StyleSettings::GetListBoxWindowHighlightTextColor() const void StyleSettings::SetTabTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maTabTextColor = rColor; } @@ -1453,7 +1357,6 @@ StyleSettings::GetTabTextColor() const void StyleSettings::SetTabRolloverTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maTabRolloverTextColor = rColor; } @@ -1466,7 +1369,6 @@ StyleSettings::GetTabRolloverTextColor() const void StyleSettings::SetTabHighlightTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maTabHighlightTextColor = rColor; } @@ -1479,7 +1381,6 @@ StyleSettings::GetTabHighlightTextColor() const void StyleSettings::SetLinkColor( const Color& rColor ) { - CopyData(); mxData->maColors.maLinkColor = rColor; } @@ -1492,7 +1393,6 @@ StyleSettings::GetLinkColor() const void StyleSettings::SetVisitedLinkColor( const Color& rColor ) { - CopyData(); mxData->maColors.maVisitedLinkColor = rColor; } @@ -1505,7 +1405,6 @@ StyleSettings::GetVisitedLinkColor() const void StyleSettings::SetToolTextColor( const Color& rColor ) { - CopyData(); mxData->maColors.maToolTextColor = rColor; } @@ -1518,7 +1417,6 @@ StyleSettings::GetToolTextColor() const void StyleSettings::SetMonoColor( const Color& rColor ) { - CopyData(); mxData->maColors.maMonoColor = rColor; } @@ -1531,7 +1429,6 @@ StyleSettings::GetMonoColor() const void StyleSettings::SetActiveTabColor( const Color& rColor ) { - CopyData(); mxData->maColors.maActiveTabColor = rColor; } @@ -1544,7 +1441,6 @@ StyleSettings::GetActiveTabColor() const void StyleSettings::SetInactiveTabColor( const Color& rColor ) { - CopyData(); mxData->maColors.maInactiveTabColor = rColor; } @@ -1556,7 +1452,6 @@ StyleSettings::GetInactiveTabColor() const void StyleSettings::SetAlternatingRowColor(const Color& rColor) { - CopyData(); mxData->maColors.maAlternatingRowColor = rColor; } @@ -1569,7 +1464,6 @@ StyleSettings::GetAlternatingRowColor() const void StyleSettings::SetUseSystemUIFonts( bool bUseSystemUIFonts ) { - CopyData(); mxData->mbUseSystemUIFonts = bUseSystemUIFonts; } @@ -1581,7 +1475,6 @@ StyleSettings::GetUseSystemUIFonts() const void StyleSettings::SetUseFontAAFromSystem(bool bUseFontAAFromSystem) { - CopyData(); mxData->mbUseFontAAFromSystem = bUseFontAAFromSystem; } @@ -1593,7 +1486,6 @@ bool StyleSettings::GetUseFontAAFromSystem() const void StyleSettings::SetUseFlatBorders( bool bUseFlatBorders ) { - CopyData(); mxData->mnUseFlatBorders = bUseFlatBorders; } @@ -1606,7 +1498,6 @@ StyleSettings::GetUseFlatBorders() const void StyleSettings::SetUseFlatMenus( bool bUseFlatMenus ) { - CopyData(); mxData->mnUseFlatMenus = bUseFlatMenus; } @@ -1619,14 +1510,12 @@ StyleSettings::GetUseFlatMenus() const void StyleSettings::SetUseImagesInMenus( TriState eUseImagesInMenus ) { - CopyData(); mxData->meUseImagesInMenus = eUseImagesInMenus; } void StyleSettings::SetPreferredUseImagesInMenus( bool bPreferredUseImagesInMenus ) { - CopyData(); mxData->mbPreferredUseImagesInMenus = bPreferredUseImagesInMenus; } @@ -1639,7 +1528,6 @@ StyleSettings::GetPreferredUseImagesInMenus() const void StyleSettings::SetSkipDisabledInMenus( bool bSkipDisabledInMenus ) { - CopyData(); mxData->mbSkipDisabledInMenus = bSkipDisabledInMenus; } @@ -1652,7 +1540,6 @@ StyleSettings::GetSkipDisabledInMenus() const void StyleSettings::SetHideDisabledMenuItems( bool bHideDisabledMenuItems ) { - CopyData(); mxData->mbHideDisabledMenuItems = bHideDisabledMenuItems; } @@ -1665,7 +1552,6 @@ StyleSettings::GetHideDisabledMenuItems() const void StyleSettings::SetContextMenuShortcuts( TriState eContextMenuShortcuts ) { - CopyData(); mxData->meContextMenuShortcuts = eContextMenuShortcuts; } @@ -1686,7 +1572,6 @@ StyleSettings::GetContextMenuShortcuts() const void StyleSettings::SetPreferredContextMenuShortcuts( bool bContextMenuShortcuts ) { - CopyData(); mxData->mbPreferredContextMenuShortcuts = bContextMenuShortcuts; } @@ -1699,7 +1584,6 @@ StyleSettings::GetPreferredContextMenuShortcuts() const void StyleSettings::SetPrimaryButtonWarpsSlider( bool bPrimaryButtonWarpsSlider ) { - CopyData(); mxData->mbPrimaryButtonWarpsSlider = bPrimaryButtonWarpsSlider; } @@ -1712,7 +1596,6 @@ StyleSettings::GetPrimaryButtonWarpsSlider() const void StyleSettings::SetAppFont( const vcl::Font& rFont ) { - CopyData(); mxData->maFonts.maAppFont = rFont; } @@ -1725,7 +1608,6 @@ StyleSettings::GetAppFont() const void StyleSettings::SetHelpFont( const vcl::Font& rFont ) { - CopyData(); mxData->maFonts.maHelpFont = rFont; } @@ -1738,7 +1620,6 @@ StyleSettings::GetHelpFont() const void StyleSettings::SetTitleFont( const vcl::Font& rFont ) { - CopyData(); mxData->maFonts.maTitleFont = rFont; } @@ -1751,7 +1632,6 @@ StyleSettings::GetTitleFont() const void StyleSettings::SetFloatTitleFont( const vcl::Font& rFont ) { - CopyData(); mxData->maFonts.maFloatTitleFont = rFont; } @@ -1764,7 +1644,6 @@ StyleSettings::GetFloatTitleFont() const void StyleSettings::SetMenuFont( const vcl::Font& rFont ) { - CopyData(); mxData->maFonts.maMenuFont = rFont; } @@ -1777,7 +1656,6 @@ StyleSettings::GetMenuFont() const void StyleSettings::SetToolFont( const vcl::Font& rFont ) { - CopyData(); mxData->maFonts.maToolFont = rFont; } @@ -1790,7 +1668,6 @@ StyleSettings::GetToolFont() const void StyleSettings::SetGroupFont( const vcl::Font& rFont ) { - CopyData(); mxData->maFonts.maGroupFont = rFont; } @@ -1803,7 +1680,6 @@ StyleSettings::GetGroupFont() const void StyleSettings::SetLabelFont( const vcl::Font& rFont ) { - CopyData(); mxData->maFonts.maLabelFont = rFont; } @@ -1816,7 +1692,6 @@ StyleSettings::GetLabelFont() const void StyleSettings::SetRadioCheckFont( const vcl::Font& rFont ) { - CopyData(); mxData->maFonts.maRadioCheckFont = rFont; } @@ -1829,7 +1704,6 @@ StyleSettings::GetRadioCheckFont() const void StyleSettings::SetPushButtonFont( const vcl::Font& rFont ) { - CopyData(); mxData->maFonts.maPushButtonFont = rFont; } @@ -1842,7 +1716,6 @@ StyleSettings::GetPushButtonFont() const void StyleSettings::SetFieldFont( const vcl::Font& rFont ) { - CopyData(); mxData->maFonts.maFieldFont = rFont; } @@ -1855,7 +1728,6 @@ StyleSettings::GetFieldFont() const void StyleSettings::SetIconFont( const vcl::Font& rFont ) { - CopyData(); mxData->maFonts.maIconFont = rFont; } @@ -1868,7 +1740,6 @@ StyleSettings::GetIconFont() const void StyleSettings::SetTabFont( const vcl::Font& rFont ) { - CopyData(); mxData->maFonts.maTabFont = rFont; } @@ -1887,7 +1758,6 @@ StyleSettings::GetBorderSize() void StyleSettings::SetTitleHeight( sal_Int32 nSize ) { - CopyData(); mxData->mnTitleHeight = nSize; } @@ -1900,7 +1770,6 @@ StyleSettings::GetTitleHeight() const void StyleSettings::SetFloatTitleHeight( sal_Int32 nSize ) { - CopyData(); mxData->mnFloatTitleHeight = nSize; } @@ -1913,7 +1782,6 @@ StyleSettings::GetFloatTitleHeight() const void StyleSettings::SetScrollBarSize( sal_Int32 nSize ) { - CopyData(); mxData->mnScrollBarSize = nSize; } @@ -1926,7 +1794,6 @@ StyleSettings::GetScrollBarSize() const void StyleSettings::SetMinThumbSize( sal_Int32 nSize ) { - CopyData(); mxData->mnMinThumbSize = nSize; } @@ -1939,7 +1806,6 @@ StyleSettings::GetMinThumbSize() const void StyleSettings::SetSpinSize( sal_Int32 nSize ) { - CopyData(); mxData->mnSpinSize = nSize; } @@ -1958,7 +1824,6 @@ StyleSettings::GetSplitSize() void StyleSettings::SetCursorSize( sal_Int32 nSize ) { - CopyData(); mxData->mnCursorSize = nSize; } @@ -1971,7 +1836,6 @@ StyleSettings::GetCursorSize() const void StyleSettings::SetCursorBlinkTime( sal_uInt64 nBlinkTime ) { - CopyData(); mxData->mnCursorBlinkTime = nBlinkTime; } @@ -1984,7 +1848,6 @@ StyleSettings::GetCursorBlinkTime() const void StyleSettings::SetDragFullOptions( DragFullOptions nOptions ) { - CopyData(); mxData->mnDragFullOptions = nOptions; } @@ -1997,7 +1860,6 @@ StyleSettings::GetDragFullOptions() const void StyleSettings::SetSelectionOptions( SelectionOptions nOptions ) { - CopyData(); mxData->mnSelectionOptions = nOptions; } @@ -2010,7 +1872,6 @@ StyleSettings::GetSelectionOptions() const void StyleSettings::SetDisplayOptions( DisplayOptions nOptions ) { - CopyData(); mxData->mnDisplayOptions = nOptions; } @@ -2023,7 +1884,6 @@ StyleSettings::GetDisplayOptions() const void StyleSettings::SetAntialiasingMinPixelHeight( sal_Int32 nMinPixel ) { - CopyData(); mxData->mnAntialiasedMin = nMinPixel; } @@ -2036,14 +1896,12 @@ StyleSettings::GetAntialiasingMinPixelHeight() const void StyleSettings::SetOptions( StyleSettingsOptions nOptions ) { - CopyData(); mxData->mnOptions = nOptions; } void StyleSettings::SetAutoMnemonic( bool bAutoMnemonic ) { - CopyData(); mxData->mbAutoMnemonic = bAutoMnemonic; } @@ -2063,7 +1921,6 @@ StyleSettings::GetDockingFloatsSupported() void StyleSettings::SetToolbarIconSize( ToolbarIconSize nSize ) { - CopyData(); mxData->mnToolbarIconSize = nSize; } @@ -2096,7 +1953,6 @@ StyleSettings::GetDialogStyle() const void StyleSettings::SetEdgeBlending(sal_uInt16 nCount) { - CopyData(); mxData->mnEdgeBlending = nCount; } @@ -2121,7 +1977,6 @@ StyleSettings::GetEdgeBlendingBottomRightColor() const void StyleSettings::SetListBoxMaximumLineCount(sal_uInt16 nCount) { - CopyData(); mxData->mnListBoxMaximumLineCount = nCount; } @@ -2134,7 +1989,6 @@ StyleSettings::GetListBoxMaximumLineCount() const void StyleSettings::SetColorValueSetColumnCount(sal_uInt16 nCount) { - CopyData(); mxData->mnColorValueSetColumnCount = nCount; } @@ -2164,7 +2018,6 @@ ComboBoxTextSelectionMode StyleSettings::GetComboBoxTextSelectionMode() const void StyleSettings::SetPreviewUsesCheckeredBackground(bool bNew) { - CopyData(); mxData->mbPreviewUsesCheckeredBackground = bNew; } @@ -2174,22 +2027,18 @@ StyleSettings::GetPreviewUsesCheckeredBackground() const return mxData->mbPreviewUsesCheckeredBackground; } -bool -StyleSettings::operator !=( const StyleSettings& rSet ) const -{ - return !(*this == rSet); -} - void StyleSettings::SetListBoxPreviewDefaultLogicSize(Size const& rSize) { - mxData->maListBoxPreviewDefaultLogicSize = rSize; + auto* myData = mxData.get(); + myData->maListBoxPreviewDefaultLogicSize = rSize; + mxData->maListBoxPreviewDefaultPixelSize = {}; // recalc } const Size& StyleSettings::GetListBoxPreviewDefaultPixelSize() const { if(0 == mxData->maListBoxPreviewDefaultPixelSize.Width() || 0 == mxData->maListBoxPreviewDefaultPixelSize.Height()) { - const_cast< StyleSettings* >(this)->mxData->maListBoxPreviewDefaultPixelSize = + mxData->maListBoxPreviewDefaultPixelSize = Application::GetDefaultDevice()->LogicToPixel(mxData->maListBoxPreviewDefaultLogicSize, MapMode(MapUnit::MapAppFont)); } @@ -2198,55 +2047,55 @@ const Size& StyleSettings::GetListBoxPreviewDefaultPixelSize() const void StyleSettings::Set3DColors( const Color& rColor ) { - CopyData(); - mxData->maColors.maFaceColor = rColor; - mxData->maColors.maLightBorderColor = rColor; - mxData->maColors.maMenuBorderColor = rColor; - mxData->maColors.maDarkShadowColor = COL_BLACK; + auto* myData = mxData.get(); + myData->maColors.maFaceColor = rColor; + myData->maColors.maLightBorderColor = rColor; + myData->maColors.maMenuBorderColor = rColor; + myData->maColors.maDarkShadowColor = COL_BLACK; if ( rColor != COL_LIGHTGRAY ) { - mxData->maColors.maLightColor = rColor; - mxData->maColors.maShadowColor = rColor; - mxData->maColors.maDarkShadowColor = rColor; + myData->maColors.maLightColor = rColor; + myData->maColors.maShadowColor = rColor; + myData->maColors.maDarkShadowColor = rColor; if (!rColor.IsDark()) { - mxData->maColors.maLightColor.IncreaseLuminance(64); - mxData->maColors.maShadowColor.DecreaseLuminance(64); - mxData->maColors.maDarkShadowColor.DecreaseLuminance(100); + myData->maColors.maLightColor.IncreaseLuminance(64); + myData->maColors.maShadowColor.DecreaseLuminance(64); + myData->maColors.maDarkShadowColor.DecreaseLuminance(100); } else { - mxData->maColors.maLightColor.DecreaseLuminance(64); - mxData->maColors.maShadowColor.IncreaseLuminance(64); - mxData->maColors.maDarkShadowColor.IncreaseLuminance(100); + myData->maColors.maLightColor.DecreaseLuminance(64); + myData->maColors.maShadowColor.IncreaseLuminance(64); + myData->maColors.maDarkShadowColor.IncreaseLuminance(100); } - sal_uInt8 nRed = (mxData->maColors.maLightColor.GetRed() + mxData->maColors.maShadowColor.GetRed()) / 2; - sal_uInt8 nGreen = (mxData->maColors.maLightColor.GetGreen() + mxData->maColors.maShadowColor.GetGreen()) / 2; - sal_uInt8 nBlue = (mxData->maColors.maLightColor.GetBlue() + mxData->maColors.maShadowColor.GetBlue()) / 2; - mxData->maColors.maCheckedColor = Color(nRed, nGreen, nBlue); + sal_uInt8 nRed = (myData->maColors.maLightColor.GetRed() + myData->maColors.maShadowColor.GetRed()) / 2; + sal_uInt8 nGreen = (myData->maColors.maLightColor.GetGreen() + myData->maColors.maShadowColor.GetGreen()) / 2; + sal_uInt8 nBlue = (myData->maColors.maLightColor.GetBlue() + myData->maColors.maShadowColor.GetBlue()) / 2; + myData->maColors.maCheckedColor = Color(nRed, nGreen, nBlue); } else { - mxData->maColors.maCheckedColor = Color( 0x99, 0x99, 0x99 ); - mxData->maColors.maLightColor = COL_WHITE; - mxData->maColors.maShadowColor = COL_GRAY; + myData->maColors.maCheckedColor = Color( 0x99, 0x99, 0x99 ); + myData->maColors.maLightColor = COL_WHITE; + myData->maColors.maShadowColor = COL_GRAY; } } void StyleSettings::SetCheckedColorSpecialCase( ) { - CopyData(); + auto* myData = mxData.get(); // Light gray checked color special case if ( GetFaceColor() == COL_LIGHTGRAY ) - mxData->maColors.maCheckedColor = Color(0xCC, 0xCC, 0xCC); + myData->maColors.maCheckedColor = Color(0xCC, 0xCC, 0xCC); else { - sal_uInt8 nRed = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxData->maColors.maFaceColor.GetRed()) + static_cast<sal_uInt16>(mxData->maColors.maLightColor.GetRed()))/2); - sal_uInt8 nGreen = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxData->maColors.maFaceColor.GetGreen()) + static_cast<sal_uInt16>(mxData->maColors.maLightColor.GetGreen()))/2); - sal_uInt8 nBlue = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxData->maColors.maFaceColor.GetBlue()) + static_cast<sal_uInt16>(mxData->maColors.maLightColor.GetBlue()))/2); - mxData->maColors.maCheckedColor = Color(nRed, nGreen, nBlue); + sal_uInt8 nRed = static_cast<sal_uInt8>((static_cast<sal_uInt16>(myData->maColors.maFaceColor.GetRed()) + static_cast<sal_uInt16>(myData->maColors.maLightColor.GetRed()))/2); + sal_uInt8 nGreen = static_cast<sal_uInt8>((static_cast<sal_uInt16>(myData->maColors.maFaceColor.GetGreen()) + static_cast<sal_uInt16>(myData->maColors.maLightColor.GetGreen()))/2); + sal_uInt8 nBlue = static_cast<sal_uInt8>((static_cast<sal_uInt16>(myData->maColors.maFaceColor.GetBlue()) + static_cast<sal_uInt16>(myData->maColors.maLightColor.GetBlue()))/2); + myData->maColors.maCheckedColor = Color(nRed, nGreen, nBlue); } } @@ -2379,7 +2228,6 @@ const std::optional<Color>& StyleSettings::GetPersonaMenuBarTextColor() const void StyleSettings::SetStandardStyles() { - CopyData(); mxData->SetStandardStyles(); } @@ -2405,63 +2253,56 @@ Color StyleSettings::GetSeparatorColor() const return Color::HSBtoRGB( h, s, b ); } -void StyleSettings::CopyData() +// Until Clang 14, P2085R0 is unsupported, and the operator can't be default outside of declaration +bool StyleSettings::operator ==( const StyleSettings& rSet ) const { - // copy if other references exist - if (mxData.use_count() > 1) - { - mxData = std::make_shared<ImplStyleData>(*mxData); - } + return mxData == rSet.mxData; } -bool StyleSettings::operator ==( const StyleSettings& rSet ) const +bool ImplStyleData::operator==(const ImplStyleData& rSet) const { - if ( mxData == rSet.mxData ) - return true; - - if (mxData->mIconTheme != rSet.mxData->mIconTheme) { + if (mIconTheme != rSet.mIconTheme) { return false; } - if (mxData->mIconThemeSelector != rSet.mxData->mIconThemeSelector) { + if (mIconThemeSelector != rSet.mIconThemeSelector) { return false; } - return (mxData->mnOptions == rSet.mxData->mnOptions) && - (mxData->mbAutoMnemonic == rSet.mxData->mbAutoMnemonic) && - (mxData->mnDragFullOptions == rSet.mxData->mnDragFullOptions) && - (mxData->mnSelectionOptions == rSet.mxData->mnSelectionOptions) && - (mxData->mnDisplayOptions == rSet.mxData->mnDisplayOptions) && - (mxData->mnCursorSize == rSet.mxData->mnCursorSize) && - (mxData->mnCursorBlinkTime == rSet.mxData->mnCursorBlinkTime) && - (mxData->mnTitleHeight == rSet.mxData->mnTitleHeight) && - (mxData->mnFloatTitleHeight == rSet.mxData->mnFloatTitleHeight) && - (mxData->mnScrollBarSize == rSet.mxData->mnScrollBarSize) && - (mxData->mnMinThumbSize == rSet.mxData->mnMinThumbSize) && - (mxData->mnSpinSize == rSet.mxData->mnSpinSize) && - (mxData->mnAntialiasedMin == rSet.mxData->mnAntialiasedMin) && - (mxData->mbHighContrast == rSet.mxData->mbHighContrast) && - (mxData->mbUseSystemUIFonts == rSet.mxData->mbUseSystemUIFonts) && - (mxData->mbUseFontAAFromSystem == rSet.mxData->mbUseFontAAFromSystem) && - (mxData->mnUseFlatBorders == rSet.mxData->mnUseFlatBorders) && - (mxData->mnUseFlatMenus == rSet.mxData->mnUseFlatMenus) && - (mxData->maColors == rSet.mxData->maColors) && - (mxData->maFonts == rSet.mxData->maFonts) && - (mxData->meUseImagesInMenus == rSet.mxData->meUseImagesInMenus) && - (mxData->mbPreferredUseImagesInMenus == rSet.mxData->mbPreferredUseImagesInMenus) && - (mxData->mbSkipDisabledInMenus == rSet.mxData->mbSkipDisabledInMenus) && - (mxData->mbHideDisabledMenuItems == rSet.mxData->mbHideDisabledMenuItems) && - (mxData->mbPreferredContextMenuShortcuts == rSet.mxData->mbPreferredContextMenuShortcuts)&& - (mxData->meContextMenuShortcuts == rSet.mxData->meContextMenuShortcuts) && - (mxData->mbPrimaryButtonWarpsSlider == rSet.mxData->mbPrimaryButtonWarpsSlider) && - (mxData->mnEdgeBlending == rSet.mxData->mnEdgeBlending) && - (mxData->maEdgeBlendingTopLeftColor == rSet.mxData->maEdgeBlendingTopLeftColor) && - (mxData->maEdgeBlendingBottomRightColor == rSet.mxData->maEdgeBlendingBottomRightColor) && - (mxData->mnListBoxMaximumLineCount == rSet.mxData->mnListBoxMaximumLineCount) && - (mxData->mnColorValueSetColumnCount == rSet.mxData->mnColorValueSetColumnCount) && - (mxData->maListBoxPreviewDefaultLogicSize == rSet.mxData->maListBoxPreviewDefaultLogicSize) && - (mxData->maListBoxPreviewDefaultPixelSize == rSet.mxData->maListBoxPreviewDefaultPixelSize) && - (mxData->mbPreviewUsesCheckeredBackground == rSet.mxData->mbPreviewUsesCheckeredBackground); + return (mnOptions == rSet.mnOptions) && + (mbAutoMnemonic == rSet.mbAutoMnemonic) && + (mnDragFullOptions == rSet.mnDragFullOptions) && + (mnSelectionOptions == rSet.mnSelectionOptions) && + (mnDisplayOptions == rSet.mnDisplayOptions) && + (mnCursorSize == rSet.mnCursorSize) && + (mnCursorBlinkTime == rSet.mnCursorBlinkTime) && + (mnTitleHeight == rSet.mnTitleHeight) && + (mnFloatTitleHeight == rSet.mnFloatTitleHeight) && + (mnScrollBarSize == rSet.mnScrollBarSize) && + (mnMinThumbSize == rSet.mnMinThumbSize) && + (mnSpinSize == rSet.mnSpinSize) && + (mnAntialiasedMin == rSet.mnAntialiasedMin) && + (mbHighContrast == rSet.mbHighContrast) && + (mbUseSystemUIFonts == rSet.mbUseSystemUIFonts) && + (mbUseFontAAFromSystem == rSet.mbUseFontAAFromSystem) && + (mnUseFlatBorders == rSet.mnUseFlatBorders) && + (mnUseFlatMenus == rSet.mnUseFlatMenus) && + (maColors == rSet.maColors) && + (maFonts == rSet.maFonts) && + (meUseImagesInMenus == rSet.meUseImagesInMenus) && + (mbPreferredUseImagesInMenus == rSet.mbPreferredUseImagesInMenus) && + (mbSkipDisabledInMenus == rSet.mbSkipDisabledInMenus) && + (mbHideDisabledMenuItems == rSet.mbHideDisabledMenuItems) && + (mbPreferredContextMenuShortcuts == rSet.mbPreferredContextMenuShortcuts) && + (meContextMenuShortcuts == rSet.meContextMenuShortcuts) && + (mbPrimaryButtonWarpsSlider == rSet.mbPrimaryButtonWarpsSlider) && + (mnEdgeBlending == rSet.mnEdgeBlending) && + (maEdgeBlendingTopLeftColor == rSet.maEdgeBlendingTopLeftColor) && + (maEdgeBlendingBottomRightColor == rSet.maEdgeBlendingBottomRightColor) && + (mnListBoxMaximumLineCount == rSet.mnListBoxMaximumLineCount) && + (mnColorValueSetColumnCount == rSet.mnColorValueSetColumnCount) && + (maListBoxPreviewDefaultLogicSize == rSet.maListBoxPreviewDefaultLogicSize) && + (mbPreviewUsesCheckeredBackground == rSet.mbPreviewUsesCheckeredBackground); } ImplMiscData::ImplMiscData() : @@ -2705,8 +2546,8 @@ HelpSettings::operator !=( const HelpSettings& rSet ) const ImplAllSettingsData::ImplAllSettingsData() : - maLocale( LANGUAGE_SYSTEM ), - maUILocale( LANGUAGE_SYSTEM ) + maLocale( maSysLocale.GetLanguageTag() ), + maUILocale( maSysLocale.GetUILanguageTag() ) { if (!comphelper::IsFuzzing()) maMiscSettings.SetEnableLocalizedDecimalSep( maSysLocale.GetOptions().IsDecimalSeparatorAsLocale() ); @@ -2732,31 +2573,20 @@ ImplAllSettingsData::~ImplAllSettingsData() mpUII18nHelper.reset(); } -AllSettings::AllSettings() - : mxData(std::make_shared<ImplAllSettingsData>()) -{ -} - -void AllSettings::CopyData() -{ - // copy if other references exist - if (mxData.use_count() > 1) - { - mxData = std::make_shared<ImplAllSettingsData>(*mxData); - } - -} +AllSettings::AllSettings() = default; +AllSettings::AllSettings(const AllSettings&) = default; +AllSettings::~AllSettings() = default; +AllSettings& AllSettings::operator=(const AllSettings&) = default; AllSettingsFlags AllSettings::Update( AllSettingsFlags nFlags, const AllSettings& rSet ) { - + const auto* constData = std::as_const(mxData).get(); AllSettingsFlags nChangeFlags = AllSettingsFlags::NONE; if ( nFlags & AllSettingsFlags::MOUSE ) { - if ( mxData->maMouseSettings != rSet.mxData->maMouseSettings ) + if (constData->maMouseSettings != rSet.mxData->maMouseSettings) { - CopyData(); mxData->maMouseSettings = rSet.mxData->maMouseSettings; nChangeFlags |= AllSettingsFlags::MOUSE; } @@ -2764,9 +2594,8 @@ AllSettingsFlags AllSettings::Update( AllSettingsFlags nFlags, const AllSettings if ( nFlags & AllSettingsFlags::STYLE ) { - if ( mxData->maStyleSettings != rSet.mxData->maStyleSettings ) + if (constData->maStyleSettings != rSet.mxData->maStyleSettings) { - CopyData(); mxData->maStyleSettings = rSet.mxData->maStyleSettings; nChangeFlags |= AllSettingsFlags::STYLE; } @@ -2774,9 +2603,8 @@ AllSettingsFlags AllSettings::Update( AllSettingsFlags nFlags, const AllSettings if ( nFlags & AllSettingsFlags::MISC ) { - if ( mxData->maMiscSettings != rSet.mxData->maMiscSettings ) + if (constData->maMiscSettings != rSet.mxData->maMiscSettings) { - CopyData(); mxData->maMiscSettings = rSet.mxData->maMiscSettings; nChangeFlags |= AllSettingsFlags::MISC; } @@ -2784,7 +2612,7 @@ AllSettingsFlags AllSettings::Update( AllSettingsFlags nFlags, const AllSettings if ( nFlags & AllSettingsFlags::LOCALE ) { - if ( mxData->maLocale != rSet.mxData->maLocale ) + if (constData->maLocale != rSet.mxData->maLocale) { SetLanguageTag( rSet.mxData->maLocale ); nChangeFlags |= AllSettingsFlags::LOCALE; @@ -2811,21 +2639,19 @@ AllSettingsFlags AllSettings::GetChangeFlags( const AllSettings& rSet ) const return nChangeFlags; } +// Until Clang 14, P2085R0 is unsupported, and the operator can't be default outside of declaration bool AllSettings::operator ==( const AllSettings& rSet ) const { - if ( mxData == rSet.mxData ) - return true; - - if ( (mxData->maMouseSettings == rSet.mxData->maMouseSettings) && - (mxData->maStyleSettings == rSet.mxData->maStyleSettings) && - (mxData->maMiscSettings == rSet.mxData->maMiscSettings) && - (mxData->maHelpSettings == rSet.mxData->maHelpSettings) && - (mxData->maLocale == rSet.mxData->maLocale) ) - { - return true; - } + return mxData == rSet.mxData; +} - return false; +bool ImplAllSettingsData::operator==(const ImplAllSettingsData& rSet) const +{ + return (maMouseSettings == rSet.maMouseSettings) && + (maStyleSettings == rSet.maStyleSettings) && + (maMiscSettings == rSet.maMiscSettings) && + (maHelpSettings == rSet.maHelpSettings) && + (maLocale == rSet.maLocale); } void AllSettings::SetLanguageTag(const OUString& rLanguage, bool bCanonicalize) @@ -2835,20 +2661,21 @@ void AllSettings::SetLanguageTag(const OUString& rLanguage, bool bCanonicalize) void AllSettings::SetLanguageTag( const LanguageTag& rLanguageTag ) { - if (mxData->maLocale == rLanguageTag) + if (std::as_const(mxData)->maLocale == rLanguageTag) return; - CopyData(); + auto* myData = mxData.get(); - mxData->maLocale = rLanguageTag; + myData->maLocale + = rLanguageTag.isSystemLocale() ? GetSysLocale().GetLanguageTag() : rLanguageTag; - if ( mxData->mpLocaleDataWrapper ) + if ( myData->mpLocaleDataWrapper ) { - mxData->mpLocaleDataWrapper.reset(); + myData->mpLocaleDataWrapper.reset(); } - if ( mxData->mpI18nHelper ) + if ( myData->mpI18nHelper ) { - mxData->mpI18nHelper.reset(); + myData->mpI18nHelper.reset(); } } @@ -2923,9 +2750,7 @@ const LanguageTag& AllSettings::GetLanguageTag() const if (comphelper::LibreOfficeKit::isActive()) return comphelper::LibreOfficeKit::getLanguageTag(); - // SYSTEM locale means: use settings from SvtSysLocale that is resolved - if ( mxData->maLocale.isSystemLocale() ) - mxData->maLocale = mxData->maSysLocale.GetLanguageTag(); + assert(!mxData->maLocale.isSystemLocale()); return mxData->maLocale; } @@ -2941,9 +2766,7 @@ const LanguageTag& AllSettings::GetUILanguageTag() const if (comphelper::LibreOfficeKit::isActive()) return comphelper::LibreOfficeKit::getLanguageTag(); - // the UILocale is never changed - if ( mxData->maUILocale.isSystemLocale() ) - mxData->maUILocale = mxData->maSysLocale.GetUILanguageTag(); + assert(!mxData->maUILocale.isSystemLocale()); return mxData->maUILocale; } @@ -2951,7 +2774,7 @@ const LanguageTag& AllSettings::GetUILanguageTag() const const LocaleDataWrapper& AllSettings::GetLocaleDataWrapper() const { if ( !mxData->mpLocaleDataWrapper ) - const_cast<AllSettings*>(this)->mxData->mpLocaleDataWrapper.reset( new LocaleDataWrapper( + mxData->mpLocaleDataWrapper.reset( new LocaleDataWrapper( comphelper::getProcessComponentContext(), GetLanguageTag() ) ); return *mxData->mpLocaleDataWrapper; } @@ -2959,7 +2782,7 @@ const LocaleDataWrapper& AllSettings::GetLocaleDataWrapper() const const LocaleDataWrapper& AllSettings::GetUILocaleDataWrapper() const { if ( !mxData->mpUILocaleDataWrapper ) - const_cast<AllSettings*>(this)->mxData->mpUILocaleDataWrapper.reset( new LocaleDataWrapper( + mxData->mpUILocaleDataWrapper.reset( new LocaleDataWrapper( comphelper::getProcessComponentContext(), GetUILanguageTag() ) ); return *mxData->mpUILocaleDataWrapper; } @@ -2967,7 +2790,7 @@ const LocaleDataWrapper& AllSettings::GetUILocaleDataWrapper() const const LocaleDataWrapper& AllSettings::GetNeutralLocaleDataWrapper() const { if ( !mxData->mpNeutralLocaleDataWrapper ) - const_cast<AllSettings*>(this)->mxData->mpNeutralLocaleDataWrapper.reset( new LocaleDataWrapper( + mxData->mpNeutralLocaleDataWrapper.reset( new LocaleDataWrapper( comphelper::getProcessComponentContext(), LanguageTag(u"en-US"_ustr) ) ); return *mxData->mpNeutralLocaleDataWrapper; } @@ -2975,7 +2798,7 @@ const LocaleDataWrapper& AllSettings::GetNeutralLocaleDataWrapper() const const vcl::I18nHelper& AllSettings::GetLocaleI18nHelper() const { if ( !mxData->mpI18nHelper ) { - const_cast<AllSettings*>(this)->mxData->mpI18nHelper.reset( new vcl::I18nHelper( + mxData->mpI18nHelper.reset( new vcl::I18nHelper( comphelper::getProcessComponentContext(), GetLanguageTag() ) ); } return *mxData->mpI18nHelper; @@ -2984,7 +2807,7 @@ const vcl::I18nHelper& AllSettings::GetLocaleI18nHelper() const const vcl::I18nHelper& AllSettings::GetUILocaleI18nHelper() const { if ( !mxData->mpUII18nHelper ) { - const_cast<AllSettings*>(this)->mxData->mpUII18nHelper.reset( new vcl::I18nHelper( + mxData->mpUII18nHelper.reset( new vcl::I18nHelper( comphelper::getProcessComponentContext(), GetUILanguageTag() ) ); } return *mxData->mpUII18nHelper; @@ -2996,7 +2819,7 @@ void AllSettings::LocaleSettingsChanged( ConfigurationHints nHint ) if ( nHint & ConfigurationHints::DecSep ) { MiscSettings aMiscSettings = aAllSettings.GetMiscSettings(); - bool bIsDecSepAsLocale = aAllSettings.mxData->maSysLocale.GetOptions().IsDecimalSeparatorAsLocale(); + bool bIsDecSepAsLocale = aAllSettings.GetSysLocale().GetOptions().IsDecimalSeparatorAsLocale(); if ( aMiscSettings.GetEnableLocalizedDecimalSep() != bIsDecSepAsLocale ) { aMiscSettings.SetEnableLocalizedDecimalSep( bIsDecSepAsLocale ); @@ -3005,7 +2828,7 @@ void AllSettings::LocaleSettingsChanged( ConfigurationHints nHint ) } if ( nHint & ConfigurationHints::Locale ) - aAllSettings.SetLanguageTag( aAllSettings.mxData->maSysLocale.GetOptions().GetLanguageTag() ); + aAllSettings.SetLanguageTag(aAllSettings.GetSysLocale().GetOptions().GetLanguageTag()); Application::SetSettings( aAllSettings ); } @@ -3026,29 +2849,22 @@ std::vector<vcl::IconThemeInfo> const & StyleSettings::GetInstalledIconThemes() const { if (!mxData->mIconThemeScanner) { - const_cast<StyleSettings*>(this)->mxData->mIconThemeScanner.emplace(vcl::IconThemeScanner::GetStandardIconThemePath()); + mxData->mIconThemeScanner.emplace(vcl::IconThemeScanner::GetStandardIconThemePath()); } return mxData->mIconThemeScanner->GetFoundIconThemes(); } -/*static*/ OUString +OUString StyleSettings::GetAutomaticallyChosenIconTheme() const { - OUString desktopEnvironment = Application::GetDesktopEnvironment(); - if (!mxData->mIconThemeScanner) { - const_cast<StyleSettings*>(this)->mxData->mIconThemeScanner.emplace(vcl::IconThemeScanner::GetStandardIconThemePath()); - } - OUString themeName = mxData->mIconThemeSelector.SelectIconThemeForDesktopEnvironment( - mxData->mIconThemeScanner->GetFoundIconThemes(), - desktopEnvironment - ); - return themeName; + return mxData->mIconThemeSelector.SelectIconThemeForDesktopEnvironment( + GetInstalledIconThemes(), + Application::GetDesktopEnvironment()); } void StyleSettings::SetIconTheme(const OUString& theme) { - CopyData(); mxData->mIconTheme = theme; } @@ -3070,25 +2886,21 @@ StyleSettings::DetermineIconTheme() const } } - if (!mxData->mIconThemeScanner) { - const_cast<StyleSettings*>(this)->mxData->mIconThemeScanner.emplace(vcl::IconThemeScanner::GetStandardIconThemePath()); - } - OUString r = mxData->mIconThemeSelector.SelectIconTheme( - mxData->mIconThemeScanner->GetFoundIconThemes(), + return mxData->mIconThemeSelector.SelectIconTheme( + GetInstalledIconThemes(), sTheme); - return r; } void StyleSettings::SetHighContrastMode(bool bHighContrast ) { - if (mxData->mbHighContrast == bHighContrast) { + if (std::as_const(mxData)->mbHighContrast == bHighContrast) { return; } - CopyData(); - mxData->mbHighContrast = bHighContrast; - mxData->mIconThemeSelector.SetUseHighContrastTheme(bHighContrast); + auto* myData = mxData.get(); + myData->mbHighContrast = bHighContrast; + myData->mIconThemeSelector.SetUseHighContrastTheme(bHighContrast); } bool @@ -3100,18 +2912,18 @@ StyleSettings::GetHighContrastMode() const void StyleSettings::SetPreferredIconTheme(const OUString& theme, bool bDarkIconTheme) { - const bool bChanged = mxData->mIconThemeSelector.SetPreferredIconTheme(theme, bDarkIconTheme); + auto* myData = mxData.get(); + const bool bChanged = myData->mIconThemeSelector.SetPreferredIconTheme(theme, bDarkIconTheme); if (bChanged) { // clear this so it is recalculated if it was selected as the automatic theme - mxData->mIconTheme.clear(); + myData->mIconTheme.clear(); } } void AllSettings::SetMouseSettings( const MouseSettings& rSet ) { - CopyData(); mxData->maMouseSettings = rSet; } @@ -3124,14 +2936,12 @@ AllSettings::GetMouseSettings() const void AllSettings::SetStyleSettings( const StyleSettings& rSet ) { - CopyData(); mxData->maStyleSettings = rSet; } void AllSettings::SetMiscSettings( const MiscSettings& rSet ) { - CopyData(); mxData->maMiscSettings = rSet; } @@ -3144,7 +2954,6 @@ AllSettings::GetMiscSettings() const void AllSettings::SetHelpSettings( const HelpSettings& rSet ) { - CopyData(); mxData->maHelpSettings = rSet; } @@ -3154,14 +2963,8 @@ AllSettings::GetHelpSettings() const return mxData->maHelpSettings; } -bool -AllSettings::operator !=( const AllSettings& rSet ) const -{ - return !(*this == rSet); -} - -SvtSysLocale& -AllSettings::GetSysLocale() +const SvtSysLocale& +AllSettings::GetSysLocale() const { return mxData->maSysLocale; }