mirror of
https://github.com/stenzek/duckstation.git
synced 2026-04-23 06:22:13 +00:00
Qt: Set attributes on popup menus
Fixes extra border appearing in popup menus in Darker Fusion theme.
This commit is contained in:
@@ -227,6 +227,7 @@ AdvancedSettingsWidget::~AdvancedSettingsWidget() = default;
|
||||
void AdvancedSettingsWidget::onLogChannelsButtonClicked()
|
||||
{
|
||||
QMenu menu;
|
||||
QtUtils::StylePopupMenu(&menu);
|
||||
LogWindow::populateFilterMenu(&menu);
|
||||
menu.exec(QCursor::pos());
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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++)
|
||||
{
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
#include <QtGui/QColor>
|
||||
#include <QtWidgets/QFileDialog>
|
||||
#include <QtWidgets/QInputDialog>
|
||||
#include <QtWidgets/QMenu>
|
||||
#include <QtWidgets/QTreeWidgetItemIterator>
|
||||
#include <array>
|
||||
#include <utility>
|
||||
|
||||
@@ -67,7 +67,6 @@
|
||||
#include <QtGui/QClipboard>
|
||||
#include <QtGui/QKeyEvent>
|
||||
#include <QtWidgets/QFileDialog>
|
||||
#include <QtWidgets/QMenu>
|
||||
#include <QtWidgets/QMessageBox>
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user