Skip to content

Commit ba326dc

Browse files
committed
fix(LateNightQML): bridge legacy library search and shortcut safety
1 parent c24b480 commit ba326dc

6 files changed

Lines changed: 39 additions & 4 deletions

File tree

res/skins/LateNight/style_classic.qss

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2603,7 +2603,8 @@ WSearchLineEdit {
26032603
selection-color: #000;
26042604
selection-background-color: #ccc;
26052605
}
2606-
WSearchLineEdit:focus {
2606+
WSearchLineEdit:focus,
2607+
WSearchLineEdit[qmlBridgeFocused="true"] {
26072608
padding: 1px;
26082609
border: 2px solid #d08e00;
26092610
border-radius: 0px;

res/skins/LateNight/style_palemoon.qss

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3268,7 +3268,8 @@ WSearchLineEdit {
32683268
selection-color: #000;
32693269
selection-background-color: #ccc;
32703270
}
3271-
WSearchLineEdit:focus {
3271+
WSearchLineEdit:focus,
3272+
WSearchLineEdit[qmlBridgeFocused="true"] {
32723273
padding: 1px;
32733274
border: 2px solid #257b82;
32743275
border-radius: 0px;

res/skins/LateNightQML/Library.qml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,13 @@ import QtQuick
44
Item {
55
id: root
66

7+
function focusSearch() {
8+
legacyLibrary.focusSearch();
9+
}
10+
711
Mixxx.LegacyLibraryItem {
12+
id: legacyLibrary
13+
814
anchors.fill: parent
915
}
1016
}

src/controllers/keyboard/keyboardeventfilter.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <QLocale>
55
#include <QMultiHash>
66
#include <QObject>
7+
#include <QPointer>
78

89
#include "control/controlobject.h"
910
#include "preferences/configobject.h"
@@ -122,7 +123,7 @@ class KeyboardEventFilter : public QObject {
122123
// Widgets that have mappable connections, registered by LegacySkinParser
123124
// during skin construction.
124125
QList<WBaseWidget*> m_widgets;
125-
WSearchLineEdit* m_pSearchBar;
126+
QPointer<WSearchLineEdit> m_pSearchBar;
126127

127128
// Multi-hash of key sequence to
128129
QMultiHash<ConfigValueKbd, ConfigKey> m_keySequenceToControlHash;

src/qml/qmllegacylibraryitem.cpp

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434

3535
#include "control/controlproxy.h"
3636
#include "control/controlpushbutton.h"
37+
#include "controllers/keyboard/keyboardeventfilter.h"
3738
#include "library/library.h"
3839
#include "library/library_prefs.h"
3940
#include "mixer/playermanager.h"
@@ -88,6 +89,15 @@ SchemeStyle getActiveSchemeStyle() {
8889

8990
QmlLegacyLibraryItem::~QmlLegacyLibraryItem() = default;
9091

92+
void QmlLegacyLibraryItem::focusSearch() {
93+
VERIFY_OR_DEBUG_ASSERT(m_pSearchLineEdit) {
94+
return;
95+
}
96+
forceActiveFocus(Qt::ShortcutFocusReason);
97+
updateEmbeddedFocus(m_pSearchLineEdit, Qt::ShortcutFocusReason);
98+
requestRender();
99+
}
100+
91101
QmlLegacyLibraryItem::QmlLegacyLibraryItem(QQuickItem* pParent)
92102
: QQuickPaintedItem(pParent),
93103
m_pRootWidget(std::make_unique<QWidget>()) {
@@ -191,10 +201,15 @@ QmlLegacyLibraryItem::QmlLegacyLibraryItem(QQuickItem* pParent)
191201
VERIFY_OR_DEBUG_ASSERT(pLibrary) {
192202
return;
193203
}
204+
KeyboardEventFilter* pKeyboard = QmlLibraryProxy::getKeyboard();
205+
VERIFY_OR_DEBUG_ASSERT(pKeyboard) {
206+
return;
207+
}
194208

209+
pKeyboard->registerSearchBar(m_pSearchLineEdit);
195210
pLibrary->bindSearchboxWidget(m_pSearchLineEdit);
196211
pLibrary->bindSidebarWidget(m_pSidebar);
197-
pLibrary->bindLibraryWidget(m_pLibraryWidget, QmlLibraryProxy::getKeyboard());
212+
pLibrary->bindLibraryWidget(m_pLibraryWidget, pKeyboard);
198213

199214
// The legacy skin parser makes this connection in parseLibrary().
200215
// Without it the search signal never reaches WLibrary and the
@@ -1412,6 +1427,16 @@ void QmlLegacyLibraryItem::updateEmbeddedFocus(
14121427
pFocusTarget = pFocusTarget->parentWidget();
14131428
}
14141429

1430+
if (m_pSearchLineEdit) {
1431+
const bool searchFocused = pFocusTarget == m_pSearchLineEdit;
1432+
if (m_pSearchLineEdit->property("qmlBridgeFocused").toBool() != searchFocused) {
1433+
m_pSearchLineEdit->setProperty("qmlBridgeFocused", searchFocused);
1434+
m_pSearchLineEdit->style()->unpolish(m_pSearchLineEdit);
1435+
m_pSearchLineEdit->style()->polish(m_pSearchLineEdit);
1436+
m_pSearchLineEdit->update();
1437+
}
1438+
}
1439+
14151440
if (pFocusTarget == m_pFocusedWidget) {
14161441
return;
14171442
}

src/qml/qmllegacylibraryitem.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class QmlLegacyLibraryItem : public QQuickPaintedItem {
2929
~QmlLegacyLibraryItem() override;
3030

3131
void paint(QPainter* pPainter) override;
32+
Q_INVOKABLE void focusSearch();
3233

3334
protected:
3435
void mousePressEvent(QMouseEvent* pEvent) override;

0 commit comments

Comments
 (0)