From 822db20f84e188de0adb49741c751548d3c000ea Mon Sep 17 00:00:00 2001 From: Mitch Curtis Date: Thu, 14 Mar 2024 11:36:06 +0800 Subject: Menu, MenuBar: remove requestNative and rely solely on app attributes It was decided that we'll have two attributes: - AA_DontUseNativeMenuBar - AA_DontUseNativeMenuWindows Setting AA_DontUseNativeMenuWindows only affects windows we create (context menus, combobox menus, menus of non-native menu bars). So, setting AA_DontUseNativeMenuWindows restores Qt to today's behavior. But we can't control the windows of native menu bars, so if you don't want those to be native, you have to set AA_DontUseNativeMenuBar just like today. By removing requestNative, we also effectively default to native menus and menu bars, as the attributes are not set by default. [ChangeLog][Controls][Important Behavior Changes] Menu and MenuBar now use native menus by default on platforms where they're supported. Task-number: QTBUG-69558 Change-Id: Ia917c2f820634def0cf815aa8ca8895ca79db75d Reviewed-by: Richard Moe Gustavsen --- tests/manual/quickcontrols/menus/cppsettings.cpp | 46 ++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 tests/manual/quickcontrols/menus/cppsettings.cpp (limited to 'tests/manual/quickcontrols/menus/cppsettings.cpp') diff --git a/tests/manual/quickcontrols/menus/cppsettings.cpp b/tests/manual/quickcontrols/menus/cppsettings.cpp new file mode 100644 index 0000000000..e06c59247f --- /dev/null +++ b/tests/manual/quickcontrols/menus/cppsettings.cpp @@ -0,0 +1,46 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include "cppsettings.h" + +#include + +CppSettings::CppSettings(QObject *parent) : + QObject(parent), + mSettings("QtProject", "menus") +{ + QCoreApplication::setAttribute(Qt::AA_DontUseNativeMenuWindows, dontUseNativeMenuWindows()); + QCoreApplication::setAttribute(Qt::AA_DontUseNativeMenuBar, dontUseNativeMenuBar()); +} + +bool CppSettings::dontUseNativeMenuWindows() const +{ + return mSettings.value("dontUseNativeMenuWindows").toBool(); +} + +void CppSettings::setDontUseNativeMenuWindows(bool dontUseNativeMenuWindows) +{ + const bool oldValue = this->dontUseNativeMenuWindows(); + if (dontUseNativeMenuWindows == oldValue) + return; + + QCoreApplication::setAttribute(Qt::AA_DontUseNativeMenuWindows, dontUseNativeMenuWindows); + mSettings.setValue("dontUseNativeMenuWindows", dontUseNativeMenuWindows); + emit dontUseNativeMenuWindowsChanged(); +} + +bool CppSettings::dontUseNativeMenuBar() const +{ + return mSettings.value("dontUseNativeMenuBar").toBool(); +} + +void CppSettings::setDontUseNativeMenuBar(bool dontUseNativeMenuBar) +{ + const bool oldValue = this->dontUseNativeMenuBar(); + if (dontUseNativeMenuBar == oldValue) + return; + + QCoreApplication::setAttribute(Qt::AA_DontUseNativeMenuBar, dontUseNativeMenuBar); + mSettings.setValue("dontUseNativeMenuBar", dontUseNativeMenuBar); + emit dontUseNativeMenuBarChanged(); +} -- cgit v1.2.3