// EventController isn't derived from a QObject, this function
  // is called by Scene2D, not the Qt stack.
  void EventController::keyPressEvent(QKeyEvent* event){
    if(event->key() == Qt::Key_Escape){
      if(d_->getScene()->main_view()->link_creator()->active()){
        d_->getScene()->main_view()->link_creator()->clear();
        return;
      }
      d_->app->quit();
      return;
    }

    key_queue_ += event->text().toStdString();

    if(recording_keys_)
      return;

    // Is the user framed on a node?
    // if d_->chat_controller()->reframing()
    if(d_->chat_controller()->last_selected()){
      key_queue_.clear();
      key_queue_ += event->text().toStdString();

      Tete* framed_node = d_->chat_controller()->last_selected();
      GridsID node_id = framed_node->id();
      GridsID chat_id = framed_node->chat_id();

      recording_keys_ = true;

      GridsID new_node_id = Tete::requestCreate(d_, node_id, chat_id,
                                                "", Vec3D() );
      Link::requestCreate(d_, new_node_id, node_id);

    } // We are not framed on a node and not in a chat
    else {
      // rock my world
      key_queue_.clear();
      key_queue_ += event->text().toStdString();

      GridsID chat_id = d_->chat_controller()->default_chat_id();
      GridsID parent_id;

      Chat* chat = d_->chat_controller()->getChatFromID(chat_id);
      if(chat != NULL){
        if(!chat->tetes().empty()){
          parent_id = chat->tetes().back()->id();
        }
      }

      recording_keys_ = true;

      GridsID new_node_id = Tete::requestCreate(d_, parent_id, chat_id,
                                                "", Vec3D() );
    }

	}