Qt: Set attributes on popup menus

Fixes extra border appearing in popup menus in Darker Fusion theme.
This commit is contained in:
Stenzek
2025-11-15 16:53:07 +10:00
parent 2bf14f84e0
commit b14c17b718
15 changed files with 58 additions and 7 deletions

View File

@@ -227,6 +227,7 @@ AdvancedSettingsWidget::~AdvancedSettingsWidget() = default;
void AdvancedSettingsWidget::onLogChannelsButtonClicked()
{
QMenu menu;
QtUtils::StylePopupMenu(&menu);
LogWindow::populateFilterMenu(&menu);
menu.exec(QCursor::pos());
}

View File

@@ -262,7 +262,8 @@ void ControllerBindingWidget::onTypeChanged()
void ControllerBindingWidget::onAutomaticBindingClicked()
{
QMenu menu(this);
QMenu menu;
QtUtils::StylePopupMenu(&menu);
bool added = false;
for (const InputDeviceListModel::Device& dev : g_emu_thread->getInputDeviceListModel()->getDeviceList())

View File

@@ -210,6 +210,7 @@ void DebuggerWindow::onBreakpointListContextMenuRequested()
const CPU::BreakpointType type = static_cast<CPU::BreakpointType>(item->data(2, Qt::UserRole).toUInt());
QMenu menu(this);
QtUtils::StylePopupMenu(&menu);
connect(menu.addAction(tr("&Remove")), &QAction::triggered, this,
[this, address, type]() { removeBreakpoint(type, address); });
menu.exec(QCursor::pos());
@@ -295,6 +296,7 @@ void DebuggerWindow::onCodeViewContextMenuRequested(const QPoint& pt)
m_ui.codeView->setSelectedAddress(address);
QMenu menu;
QtUtils::StylePopupMenu(&menu);
menu.addAction(QStringLiteral("0x%1").arg(static_cast<uint>(address), 8, 16, QChar('0')))->setEnabled(false);
menu.addSeparator();

View File

@@ -345,6 +345,7 @@ void GameCheatSettingsWidget::onCheatListContextMenuRequested(const QPoint& pos)
const std::string selected_code = selected ? selected->name : std::string();
QMenu context_menu(m_ui.cheatList);
QtUtils::StylePopupMenu(&context_menu);
QAction* add = context_menu.addAction(QIcon::fromTheme(QStringLiteral("add-line")), tr("Add Cheat..."));
connect(add, &QAction::triggered, this, &GameCheatSettingsWidget::newCode);
@@ -557,7 +558,8 @@ void GameCheatSettingsWidget::expandAllItems()
void GameCheatSettingsWidget::onImportClicked()
{
QMenu menu(this);
QMenu menu;
QtUtils::StylePopupMenu(&menu);
connect(menu.addAction(tr("From File...")), &QAction::triggered, this,
&GameCheatSettingsWidget::onImportFromFileTriggered);
connect(menu.addAction(tr("From Text...")), &QAction::triggered, this,

View File

@@ -162,6 +162,7 @@ void GameListSettingsWidget::onDirectoryListContextMenuRequested(const QPoint& p
const int row = selection[0].row();
QMenu menu;
QtUtils::StylePopupMenu(&menu);
menu.addAction(QIcon::fromTheme("folder-reduce-line"), tr("Remove"), this,
&GameListSettingsWidget::onRemoveSearchDirectoryButtonClicked);
menu.addSeparator();

View File

@@ -32,7 +32,6 @@
#include <QtGui/QPixmap>
#include <QtGui/QWheelEvent>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QMenu>
#include <QtWidgets/QScrollBar>
#include <QtWidgets/QStyledItemDelegate>
#include <QtWidgets/QToolTip>
@@ -2486,6 +2485,7 @@ void GameListListView::setAndSaveColumnHidden(int column, bool hidden)
void GameListListView::onHeaderContextMenuRequested(const QPoint& point)
{
QMenu menu;
QtUtils::StylePopupMenu(&menu);
for (int column = 0; column < GameListModel::Column_Count; column++)
{

View File

@@ -155,6 +155,7 @@ void ISOBrowserWindow::onFileContextMenuRequested(const QPoint& pos)
return;
QMenu menu;
QtUtils::StylePopupMenu(&menu);
const bool is_directory = items.front()->data(0, Qt::UserRole + 1).toBool();
const QString path = items.front()->data(0, Qt::UserRole).toString();

View File

@@ -123,6 +123,7 @@ void LogWindow::createUi()
setMenuBar(menu);
QMenu* log_menu = menu->addMenu("&Log");
QtUtils::StylePopupMenu(log_menu);
action = log_menu->addAction(tr("&Clear"));
connect(action, &QAction::triggered, this, &LogWindow::onClearTriggered);
action = log_menu->addAction(tr("&Save..."));
@@ -131,9 +132,11 @@ void LogWindow::createUi()
log_menu->addSeparator();
action = log_menu->addAction(tr("Cl&ose"));
QtUtils::StylePopupMenu(log_menu);
connect(action, &QAction::triggered, this, &LogWindow::close);
QMenu* settings_menu = menu->addMenu(tr("&Settings"));
QtUtils::StylePopupMenu(settings_menu);
action = settings_menu->addAction(tr("Log To &System Console"));
action->setCheckable(true);
@@ -160,6 +163,7 @@ void LogWindow::createUi()
settings_menu->addSeparator();
m_level_menu = settings_menu->addMenu(tr("&Log Level"));
QtUtils::StylePopupMenu(m_level_menu);
for (u32 i = 0; i < static_cast<u32>(Log::Level::MaxCount); i++)
{
action = m_level_menu->addAction(QString::fromUtf8(Settings::GetLogLevelDisplayName(static_cast<Log::Level>(i))));
@@ -169,6 +173,7 @@ void LogWindow::createUi()
updateLogLevelUi();
QMenu* filters_menu = menu->addMenu(tr("&Channels"));
QtUtils::StylePopupMenu(filters_menu);
connect(filters_menu, &QMenu::aboutToShow, this, [filters_menu]() {
filters_menu->clear();
populateFilterMenu(filters_menu);

View File

@@ -1634,6 +1634,7 @@ void MainWindow::onGameListEntryActivated()
void MainWindow::onGameListEntryContextMenuRequested(const QPoint& point)
{
QMenu menu;
QtUtils::StylePopupMenu(&menu);
{
const auto lock = GameList::GetLock();
const GameList::Entry* entry = m_game_list_widget->getSelectedEntry();
@@ -1893,6 +1894,7 @@ void MainWindow::setupAdditionalUi()
m_status_vps_widget->hide();
m_settings_toolbar_menu = new QMenu(m_ui.toolBar);
QtUtils::StylePopupMenu(m_settings_toolbar_menu);
m_settings_toolbar_menu->addAction(m_ui.actionSettings);
m_settings_toolbar_menu->addAction(m_ui.actionViewGameProperties);
@@ -1963,6 +1965,8 @@ void MainWindow::setupAdditionalUi()
s_disable_window_rounded_corners = Host::GetBaseBoolSettingValue("Main", "DisableWindowRoundedCorners", false);
if (s_disable_window_rounded_corners)
PlatformMisc::SetWindowRoundedCornerState(reinterpret_cast<void*>(winId()), false);
QtUtils::StyleChildMenus(this);
}
void MainWindow::onGameListSortIndicatorOrderChanged(int column, Qt::SortOrder order)
@@ -2109,6 +2113,7 @@ void MainWindow::onToolbarContextMenuRequested(const QPoint& pos)
bool active_buttons_changed = false;
QMenu menu;
QtUtils::StylePopupMenu(&menu);
QAction* action = menu.addAction(tr("Lock Toolbar"));
action->setCheckable(true);
@@ -2132,6 +2137,7 @@ void MainWindow::onToolbarContextMenuRequested(const QPoint& pos)
connect(action, &QAction::toggled, this, &MainWindow::onViewToolbarLabelsBesideIconsActionToggled);
QMenu* position_menu = menu.addMenu(tr("Position"));
QtUtils::StylePopupMenu(position_menu);
for (const auto& [area, name] : s_toolbar_areas)
{
QAction* position_action = position_menu->addAction(tr(name));
@@ -2929,6 +2935,7 @@ void MainWindow::changeEvent(QEvent* event)
if (event->type() == QEvent::StyleChange)
{
QtHost::UpdateThemeOnStyleChange();
QtUtils::StyleChildMenus(this);
emit themeChanged(QtHost::IsDarkApplicationTheme());
}
@@ -3594,6 +3601,7 @@ void MainWindow::onRAIntegrationMenuChanged()
if (!m_raintegration_menu)
{
m_raintegration_menu = new QMenu(QStringLiteral("&RAIntegration"));
QtUtils::StylePopupMenu(m_raintegration_menu);
m_ui.menuBar->insertMenu(m_ui.menuDebug->menuAction(), m_raintegration_menu);
}

View File

@@ -810,7 +810,8 @@ void MemoryCardEditorWindow::onCardContextMenuRequested(const QPoint& pos)
if (!card)
return;
QMenu menu(table);
QMenu menu;
QtUtils::StylePopupMenu(&menu);
QAction* action = menu.addAction(tr("Delete File"));
action->setEnabled(fi && !fi->deleted);
connect(action, &QAction::triggered, this, &MemoryCardEditorWindow::doDeleteFile);

View File

@@ -25,7 +25,6 @@
#include <QtGui/QColor>
#include <QtWidgets/QFileDialog>
#include <QtWidgets/QInputDialog>
#include <QtWidgets/QMenu>
#include <QtWidgets/QTreeWidgetItemIterator>
#include <array>
#include <utility>

View File

@@ -67,7 +67,6 @@
#include <QtGui/QClipboard>
#include <QtGui/QKeyEvent>
#include <QtWidgets/QFileDialog>
#include <QtWidgets/QMenu>
#include <QtWidgets/QMessageBox>
#include <algorithm>
#include <cmath>

View File

@@ -23,6 +23,7 @@
#include <QtWidgets/QInputDialog>
#include <QtWidgets/QLabel>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenu>
#include <QtWidgets/QMessageBox>
#include <QtWidgets/QScrollBar>
#include <QtWidgets/QSlider>
@@ -287,6 +288,29 @@ QMessageBox* QtUtils::NewMessageBox(QMessageBox::Icon icon, const QString& title
return msgbox;
}
void QtUtils::StylePopupMenu(QMenu* menu)
{
if (QtHost::IsStyleSheetApplicationTheme())
{
menu->setWindowFlags(menu->windowFlags() | Qt::NoDropShadowWindowHint | Qt::FramelessWindowHint);
menu->setAttribute(Qt::WA_TranslucentBackground, true);
}
else
{
if (!(menu->windowFlags() & Qt::NoDropShadowWindowHint))
return;
menu->setWindowFlags(menu->windowFlags() & ~(Qt::NoDropShadowWindowHint | Qt::FramelessWindowHint));
menu->setAttribute(Qt::WA_TranslucentBackground, false);
}
}
void QtUtils::StyleChildMenus(QWidget* widget)
{
for (QMenu* menu : widget->findChildren<QMenu*>())
StylePopupMenu(menu);
}
QMessageBox::StandardButton QtUtils::MessageBoxInformation(QWidget* parent, const QString& title, const QString& text,
QMessageBox::StandardButtons buttons,
QMessageBox::StandardButton defaultButton)

View File

@@ -26,6 +26,7 @@ class QComboBox;
class QFrame;
class QKeyEvent;
class QLabel;
class QMenu;
class QSlider;
class QTableView;
class QTreeView;
@@ -128,6 +129,10 @@ QMessageBox* NewMessageBox(QMessageBox::Icon icon, const QString& title, const Q
QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton,
Qt::WindowModality modality, QWidget* parent);
/// Styles a popup menu for the current theme.
void StylePopupMenu(QMenu* menu);
void StyleChildMenus(QWidget* widget);
/// Returns icon for language.
QIcon GetIconForTranslationLanguage(std::string_view language_name);

View File

@@ -268,6 +268,7 @@ void SetupWizardDialog::onDirectoryListContextMenuRequested(const QPoint& point)
const int row = selection[0].row();
QMenu menu;
QtUtils::StylePopupMenu(&menu);
menu.addAction(tr("Remove"), [this]() { onRemoveSearchDirectoryButtonClicked(); });
menu.addSeparator();
menu.addAction(tr("Open Directory..."), [this, row]() {
@@ -436,7 +437,8 @@ QString SetupWizardDialog::findCurrentDeviceForPort(u32 port) const
void SetupWizardDialog::openAutomaticMappingMenu(u32 port, QLabel* update_label)
{
QMenu menu(this);
QMenu menu;
QtUtils::StylePopupMenu(&menu);
bool added = false;
for (const InputDeviceListModel::Device& dev : g_emu_thread->getInputDeviceListModel()->getDeviceList())