From 1a5bc28478dcb561ff5d019bbafba7ceb0102fcf Mon Sep 17 00:00:00 2001 From: ronso0 Date: Thu, 11 Jul 2024 11:54:40 +0200 Subject: [PATCH 1/2] DEBUG 'LoadSelectedTrack' control, triggered via keyboard --- .../keyboard/keyboardeventfilter.cpp | 19 +++++++++++++++++++ src/library/librarycontrol.cpp | 4 ++++ src/mixer/basetrackplayer.cpp | 3 +++ src/preferences/configobject.cpp | 4 ++-- src/widget/wtracktableview.cpp | 16 +++++++++++++--- 5 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/controllers/keyboard/keyboardeventfilter.cpp b/src/controllers/keyboard/keyboardeventfilter.cpp index c11cdf4e3d61..2395f1c4b79d 100644 --- a/src/controllers/keyboard/keyboardeventfilter.cpp +++ b/src/controllers/keyboard/keyboardeventfilter.cpp @@ -41,7 +41,9 @@ bool KeyboardEventFilter::eventFilter(QObject*, QEvent* e) { } QKeySequence ks = getKeySeq(ke); + qWarning() << " > keySeq:" << ks.toString(); if (!ks.isEmpty()) { + qWarning() << " > lookup control"; ConfigValueKbd ksv(ks); // Check if a shortcut is defined bool result = false; @@ -49,9 +51,11 @@ bool KeyboardEventFilter::eventFilter(QObject*, QEvent* e) { for (auto it = m_keySequenceToControlHash.constFind(ksv); it != m_keySequenceToControlHash.constEnd() && it.key() == ksv; ++it) { const ConfigKey& configKey = it.value(); + qWarning() << " > found CfgKey:" << configKey.group << configKey.item; if (configKey.group != "[KeyboardShortcuts]") { ControlObject* control = ControlObject::getControl(configKey); if (control) { + qWarning() << " > found control, set to 1"; //qDebug() << configKey << "MidiOpCode::NoteOn" << 1; // Add key to active key list m_qActiveKeyList.append(KeyDownInformation( @@ -67,6 +71,9 @@ bool KeyboardEventFilter::eventFilter(QObject*, QEvent* e) { } } } + if (result == false) { + qWarning() << " ! no CfgKey found"; + } return result; } } else if (e->type() == QEvent::KeyRelease) { @@ -163,6 +170,18 @@ void KeyboardEventFilter::setKeyboardConfig(ConfigObject* pKbdCo // Mixxx. m_keySequenceToControlHash = pKbdConfigObject->transpose(); m_pKbdConfigObject = pKbdConfigObject; + + qWarning() << " m_keySequenceToControlHash:"; + QHashIterator it(m_keySequenceToControlHash); + while (it.hasNext()) { + it.next(); + const QKeySequence ks = it.key().value; + const QString kss = ks.toString(); + if (kss.startsWith("Shift")) { + qWarning().noquote() << " " << ks.toString() << " " + << it.value().group << it.value().item; + } + } } ConfigObject* KeyboardEventFilter::getKeyboardConfig() { diff --git a/src/library/librarycontrol.cpp b/src/library/librarycontrol.cpp index ac0da0e8152d..a199d2294b22 100644 --- a/src/library/librarycontrol.cpp +++ b/src/library/librarycontrol.cpp @@ -46,6 +46,7 @@ LoadToGroupController::LoadToGroupController(LibraryControl* pParent, const QStr LoadToGroupController::~LoadToGroupController() = default; void LoadToGroupController::slotLoadToGroup(double v) { + qWarning() << "LoadToGroupController::slotLoadToGroup" << m_group << "v:" << v; if (v > 0) { emit loadToGroup(m_group, false); } @@ -536,12 +537,15 @@ void LibraryControl::slotUpdateTrackMenuControl(bool visible) { } void LibraryControl::slotLoadSelectedTrackToGroup(const QString& group, bool play) { + qWarning() << "LibraryControl::slotLoadSelectedTrackToGroup:" << group << play; if (!m_pLibraryWidget) { + qWarning() << " ! no WLibrary widget"; return; } LibraryView* pActiveView = m_pLibraryWidget->getActiveView(); if (!pActiveView) { + qWarning() << " ! no active view"; return; } pActiveView->loadSelectedTrackToGroup(group, play); diff --git a/src/mixer/basetrackplayer.cpp b/src/mixer/basetrackplayer.cpp index d7c5ecc664b6..983a05ca370f 100644 --- a/src/mixer/basetrackplayer.cpp +++ b/src/mixer/basetrackplayer.cpp @@ -286,8 +286,10 @@ void BaseTrackPlayerImpl::loadTrack(TrackPointer pTrack) { m_pLoadedTrack = std::move(pTrack); if (!m_pLoadedTrack) { // nothing to + qWarning() << " ! no track to load"; return; } + qWarning() << " >> load track"; // Clear loop // It seems that the trick is to first clear the loop out point, and then @@ -489,6 +491,7 @@ void BaseTrackPlayerImpl::slotLoadTrack(TrackPointer pNewTrack, bool bPlay) { auto fileInfo = pNewTrack->getFileInfo(); if (!Sandbox::askForAccess(&fileInfo)) { // We don't have access. + qWarning() << " ! can't read" << fileInfo.location(); return; } } diff --git a/src/preferences/configobject.cpp b/src/preferences/configobject.cpp index 3689a714320c..30aca9ba4167 100644 --- a/src/preferences/configobject.cpp +++ b/src/preferences/configobject.cpp @@ -187,7 +187,7 @@ template bool ConfigObject::parse() { qDebug() << "ConfigObject: Could not read" << m_filename; return false; } else { - //qDebug() << "ConfigObject: Parse" << m_filename; + qDebug() << "ConfigObject: Parse" << m_filename; // Parse the file int group = 0; QString groupStr, line; @@ -210,7 +210,7 @@ template bool ConfigObject::parse() { QTextStream(&line) >> key; QString val = line.right(line.length() - key.length()); // finds the value string val = val.trimmed(); - //qDebug() << "control:" << key << "value:" << val; + qWarning().noquote() << "control:" << groupStr << key << " " << val; ConfigKey k(groupStr, key); ValueType m(val); set(k, m); diff --git a/src/widget/wtracktableview.cpp b/src/widget/wtracktableview.cpp index d036bb31cfa4..4bd7138f9234 100644 --- a/src/widget/wtracktableview.cpp +++ b/src/widget/wtracktableview.cpp @@ -1005,8 +1005,10 @@ void WTrackTableView::activateSelectedTrack() { } void WTrackTableView::loadSelectedTrackToGroup(const QString& group, bool play) { + qDebug() << "WTrackTableView::loadSelectedTrackToGroup:" << group << play; auto indices = selectionModel()->selectedRows(); if (indices.isEmpty()) { + qWarning() << " ! indices empty"; return; } bool allowLoadTrackIntoPlayingDeck = false; @@ -1032,15 +1034,23 @@ void WTrackTableView::loadSelectedTrackToGroup(const QString& group, bool play) // TODO(XXX): Check for other than just the first preview deck. if (group != "[PreviewDeck1]" && ControlObject::get(ConfigKey(group, "play")) > 0.0) { + qWarning() << " ! not allowed to load to this deck, might be playing"; return; } } auto index = indices.at(0); auto* trackModel = getTrackModel(); TrackPointer pTrack; - if (trackModel && - (pTrack = trackModel->getTrack(index))) { - emit loadTrackToPlayer(pTrack, group, play); + if (trackModel) { + pTrack = trackModel->getTrack(index); + if (pTrack) { + qWarning() << " > emit loadTrackToPlayer, deck:" << group; + emit loadTrackToPlayer(pTrack, group, play); + } else { + qWarning() << " ! track is nullptr"; + } + } else { + qWarning() << " ! no track model"; } } From 32a2dd19f1287f14c1b966666823f7dd60a57c0b Mon Sep 17 00:00:00 2001 From: ronso0 Date: Wed, 17 Jul 2024 10:40:25 +0200 Subject: [PATCH 2/2] (fix) avoid catching Num key modifier on macOS fixes #13305 --- .../keyboard/keyboardeventfilter.cpp | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/src/controllers/keyboard/keyboardeventfilter.cpp b/src/controllers/keyboard/keyboardeventfilter.cpp index 2395f1c4b79d..ae75e004e7d7 100644 --- a/src/controllers/keyboard/keyboardeventfilter.cpp +++ b/src/controllers/keyboard/keyboardeventfilter.cpp @@ -132,23 +132,29 @@ QKeySequence KeyboardEventFilter::getKeySeq(QKeyEvent* e) { return {}; } + // Note: test for individual modifiers, don't use e->modifiers() for composing + // the QKeySequence because on macOS e->modifiers() would for some reason + // include the Num modifier for arrow keys which results in a key sequence + // for which there would be no match in our keyseq/control hash. + // See https://github.com/mixxxdj/mixxx/issues/13305 + QString modseq; + if (e->modifiers() & Qt::ShiftModifier) { + modseq += "Shift+"; + } + if (e->modifiers() & Qt::ControlModifier) { + modseq += "Ctrl+"; + } + if (e->modifiers() & Qt::AltModifier) { + modseq += "Alt+"; + } + if (e->modifiers() & Qt::MetaModifier) { + modseq += "Meta+"; + } + + const QString keyseq = QKeySequence(e->key()).toString(); + const QKeySequence k = QKeySequence(modseq + keyseq); + if (CmdlineArgs::Instance().getDeveloper()) { - QString modseq; - QKeySequence k; - if (e->modifiers() & Qt::ShiftModifier) { - modseq += "Shift+"; - } - if (e->modifiers() & Qt::ControlModifier) { - modseq += "Ctrl+"; - } - if (e->modifiers() & Qt::AltModifier) { - modseq += "Alt+"; - } - if (e->modifiers() & Qt::MetaModifier) { - modseq += "Meta+"; - } - QString keyseq = QKeySequence(e->key()).toString(); - k = QKeySequence(modseq + keyseq); if (e->type() == QEvent::KeyPress) { qDebug() << "keyboard press: " << k.toString(); } else if (e->type() == QEvent::KeyRelease) { @@ -156,11 +162,7 @@ QKeySequence KeyboardEventFilter::getKeySeq(QKeyEvent* e) { } } -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - return QKeySequence(e->modifiers() | e->key()); -#else - return QKeySequence(e->modifiers() + e->key()); -#endif + return k; } void KeyboardEventFilter::setKeyboardConfig(ConfigObject* pKbdConfigObject) {