bool SchemeComponent::HandleKeyEvent(const KeyEvent & e) { bool componentResult = Component::HandleKeyEvent(e); stringstream ss; ss << "(scheme-component-handle-key-event " << this->GetComponentNum() << " "; switch (e.GetType()) { case KeyEvent::keyPress: ss << "'key-press"; break; case KeyEvent::keyRelease: ss << "'key-release"; break; default: LOG_ERROR << "Error: Unknown KeyEvent type: " << e.GetType(); return componentResult; } ss << " #\\" << e.GetChar(); ss << ")"; scheme* sc = NULL; pointer result; int error; bool schemeResult = false; error = scheme_interpreter_evaluate_string(ss.str().c_str(), &sc, &result); if (error) { LOG_ERROR << "Error evaluating string: " << ss.str(); } else { if (sc != NULL) { schemeResult = result == sc->T; } else { LOG_ERROR << "Error: No pointer Scheme interpreter returned;"; } } return componentResult || schemeResult; }