Enable access key underline of menu bar items when focused

* Fixes #7325

Qt 5.x defaults to always show mnemonic underlines in menus. Qt 6.x fixes this, but we can't port the fix since it relies on private theme namespaces. Anyway, to get around this, simply check if the widget is a menubar and focused. If so, we draw the underlines. Only applies when the user actually presses ALT so this is desired behavior.

NOTE: Underlines in menus will disappear once you focus on the menu, still working on this
This commit is contained in:
Jonathan White 2025-01-19 12:06:35 -05:00
parent 8d6d937b1b
commit b12b67be60
No known key found for this signature in database
GPG Key ID: 440FC65F2E0C6E01
3 changed files with 24 additions and 6 deletions

View File

@ -5561,10 +5561,6 @@ Are you sure you want to continue with this file?</source>
<source>&amp;Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>View</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Theme</source>
<translation type="unfinished"></translation>
@ -6230,6 +6226,10 @@ Expect some bugs and minor issues, this version is meant for testing purposes.</
<source>E&amp;xpire Entry</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;View</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ManageDatabase</name>

View File

@ -373,7 +373,7 @@
</widget>
<widget class="QMenu" name="menuView">
<property name="title">
<string>View</string>
<string>&amp;View</string>
</property>
<widget class="QMenu" name="menuTheme">
<property name="title">

View File

@ -29,6 +29,7 @@
#include <QFile>
#include <QHeaderView>
#include <QListView>
#include <QMenuBar>
#include <QPainter>
#include <QPainterPath>
#include <QPoint>
@ -4680,7 +4681,24 @@ int BaseStyle::styleHint(StyleHint hint,
case SH_WindowFrame_Mask:
return 0;
case SH_UnderlineShortcut: {
return false;
#if defined(Q_OS_WIN) or defined(Q_OS_LINUX)
// Only show underline shortcuts if the user focused with ALT (Win/Linux only)
auto menu = qobject_cast<const QMenu*>(widget);
if (menu) {
auto p = menu->parentWidget();
while (p) {
auto mb = qobject_cast<QMenuBar*>(p);
if (mb && mb->hasFocus()) {
return 1;
}
p = p->parentWidget();
}
}
auto mb = qobject_cast<const QMenuBar*>(widget);
return (mb && mb->hasFocus()) ? 1 : 0;
#else
return 0;
#endif
}
case SH_Widget_Animate:
return 1;