// Returns: // -1 = action does not belong to this extension, or does not toggle // 0 = action belongs to this extension and is currently set to "off" // 1 = action belongs to this extension and is currently set to "on" int toggleActionHook(int iCmd) { static WDL_PtrList<const char> sReentrantCmds; if (COMMAND_T* cmd = SWSGetCommandByID(iCmd)) { if (cmd->accel.accel.cmd==iCmd && cmd->getEnabled && cmd->doCommand!=SWS_NOOP) { if (sReentrantCmds.Find(cmd->id) == -1) { sReentrantCmds.Add(cmd->id); int state = cmd->getEnabled(cmd); sReentrantCmds.Delete(sReentrantCmds.Find(cmd->id)); return state; } #ifdef ACTION_DEBUG else { OutputDebugString("toggleActionHook - recursive action: "); OutputDebugString(cmd->id); OutputDebugString("\n"); } #endif } } return -1; }
bool hookCommandProc(int iCmd, int flag) { static WDL_PtrList<const char> sReentrantCmds; // for Xen extensions g_KeyUpUndoHandler=0; // "Hack" to make actions will #s less than 1000 work with SendMessage (AHK) // no recursion check here: handled by REAPER if (iCmd < 1000) return KBD_OnMainActionEx(iCmd, 0, 0, 0, g_hwndParent, NULL) ? true : false; // C4800 // Special case for checking recording if (iCmd == 1013 && !RecordInputCheck()) return true; // Ignore commands that don't have anything to do with us from this point forward if (COMMAND_T* cmd = SWSGetCommandByID(iCmd)) { if (cmd->accel.accel.cmd==iCmd && cmd->doCommand && cmd->doCommand!=SWS_NOOP) { if (sReentrantCmds.Find(cmd->id) == -1) { sReentrantCmds.Add(cmd->id); cmd->fakeToggle = !cmd->fakeToggle; #ifndef DEBUG_PERFORMANCE_TIME cmd->doCommand(cmd); #else CommandTimer(cmd); #endif sReentrantCmds.Delete(sReentrantCmds.Find(cmd->id)); return true; } #ifdef ACTION_DEBUG else { OutputDebugString("hookCommandProc - recursive action: "); OutputDebugString(cmd->id); OutputDebugString("\n"); } #endif } } return false; }
void ContinuousActionStopAll () { if (g_actionInProgress && g_actionInProgress->DoUndo && g_actionInProgress->DoUndo()) Undo_OnStateChangeEx2(NULL, SWS_CMD_SHORTNAME(SWSGetCommandByID(g_actionInProgress->cmd)), UNDO_STATE_ALL, -1); ContinuousActionInit(false, 0, NULL); }