sync_enabled not sticking with javascript mapped control

Bug #1537547 reported by JosepMa
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Mixxx
Fix Released
Medium
Unassigned

Bug Description

OS: Windows 10 64bit
Mixxx: 2.0 32 and 64bits
Controller: Hercules DJ Console 4-Mx (contributed mapping as relesed in 2.0).

New in 1.12/2.0, the "SYNC" button enables master sync for the deck if it is pressed and NOT released immediately. (Visually, it remains "on" after releasing).
This works from the UI, and also if mapped to a controller with XML, but not from when doing so from javascript (either with setValue or with setParameter).

I've been able to pinpoint the problem to an incorrect behaviour of the QTimer in this file:
https://github.com/mixxxdj/mixxx/blob/1.12/src/control/controlbehavior.cpp
Method void ControlPushButtonBehavior::setValueFromMidiParameter(
        MidiOpCode o, double dParam, ControlDoublePrivate* pControl)

When i press it from my controller, it enters the "pressed" block (LONGPRESSLATCHING), the action is executed, and the timer is started (it returns an id for the timer, so i assume that means that it started).
When i release the button, after several seconds, the "else" block is executed and enters inside the if that contains the "timer.isActive()". Said timer is expected to return false instead, because the time has elapsed, so i don't know what happens.

I've read in QT's documentation that: " In multithreaded applications, you can use QTimer in any thread that has an event loop. To start an event loop from a non-GUI thread, use QThread::exec(). "
Of course, we are in the midi thread, and is a non-GUI thread.

JosepMa (josepma)
summary: - sync_enabled not sticking with XML mapped control
+ sync_enabled not sticking with javascript mapped control
JosepMa (josepma)
description: updated
Revision history for this message
JosepMa (josepma) wrote :

Ok, I just realized that the setValue/setParameter do not use this specific functionality, only the XML and the keyboard mappings.

So, the question is: should we modify setValue/setParameter so that "POWERWINDOW" and "LONGPRESSLATCHING" constrols also have this behaviour? Or it has to be strictly a script thing (in which case, we should update the mixxxcontrols wiki page to indicate so).

Revision history for this message
Daniel Schürmann (daschuer) wrote :

I would prefer to expose ControlObject::setValueFromMidi, or wrap it into a more reasonable function for the script context.

Changed in mixxx:
status: New → Confirmed
importance: Undecided → Medium
Revision history for this message
Be (be.ing) wrote :

https://github.com/mixxxdj/mixxx/pull/1244
Components SyncButton object now takes care of this easily.

Changed in mixxx:
status: Confirmed → Fix Committed
jus (jus)
Changed in mixxx:
milestone: none → 2.1.0
status: Fix Committed → Fix Released
Revision history for this message
Swiftb0y (swiftb0y) wrote :

Mixxx now uses GitHub for bug tracking. This bug has been migrated to:
https://github.com/mixxxdj/mixxx/issues/8455

lock status: Metadata changes locked and limited to project staff
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.