code: public boolean doCommand(String strCommand, ScreenField sourceSField, int iCommandOptions)
      {
          boolean bFlag = false;
          if (strCommand.equalsIgnoreCase(ThinMenuConstants.UNDO))
          {   // Special - handle undo
              if (m_sfTarget != null)
                  if (m_sfTarget.getScreenFieldView().getControl() != null)
                  if (m_sfTarget.getScreenFieldView().hasFocus())
              {
                  if (m_objUndo == m_sfTarget)
                  {
                      m_sfTarget.fieldToControl();    // Restore original data
                  }
                  else
                  {
                      BaseField field = (BaseField)m_sfTarget.getConverter().getField();
                      if (field != null)
                          field.setData(m_objUndo);
                  }
                  bFlag = true; // Command handled
              }
          }
          //xif (bFlag == false) The AppletScreen doesn't processes any commands (child screens will)
          //x    bFlag = super.doCommand(strCommand, sourceSField, iUseSameWindow);  // This will send the command to my parent
          if (this.getScreenFieldView() != null)
              return this.getScreenFieldView().doCommand(strCommand);    // Instead I do this
          return bFlag;
      }
docs: Process the command.
  Step 1 - Process the command if possible and return true if processed.
  Step 2 - If I can't process, pass to all children (with me as the source).
  Step 3 - If children didn't process, pass to parent (with me as the source).
  Note: Never pass to a parent or child that matches the source (to avoid an endless loop).
  @param strCommand The command to process.
  @param sourceSField The source screen field (to avoid echos).
  @param iCommandOptions If this command creates a new screen, create in a new window?
  @param true if success.