CInputFilter::EFilterStatus		
CInputFilter::CModifierAction::perform(
				CEvent&, void*, EActionMode actionMode)
{
	EActionState newState = switchMode(actionMode);

	if (newState == kStateOn) {
		setModifierMask(m_modifiers);
	}
	else if (newState == kStateOff) {
		setModifierMask(0);
	}
	else {
		return kNotHandled;
	}

	setState(newState);

	// FIXME. set proper key event, so updateModifiers will get called from
	// within sendEvent automatically

	return kUpdateModifiers;
}
int QKeyEventTransition::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = QEventTransition::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    
#ifndef QT_NO_PROPERTIES
     if (_c == QMetaObject::ReadProperty) {
        void *_v = _a[0];
        switch (_id) {
        case 0: *reinterpret_cast< int*>(_v) = key(); break;
        case 1: *reinterpret_cast< Qt::KeyboardModifiers*>(_v) = modifierMask(); break;
        }
        _id -= 2;
    } else if (_c == QMetaObject::WriteProperty) {
        void *_v = _a[0];
        switch (_id) {
        case 0: setKey(*reinterpret_cast< int*>(_v)); break;
        case 1: setModifierMask(*reinterpret_cast< Qt::KeyboardModifiers*>(_v)); break;
        }
        _id -= 2;
    } else if (_c == QMetaObject::ResetProperty) {
        _id -= 2;
    } else if (_c == QMetaObject::QueryPropertyDesignable) {
        _id -= 2;
    } else if (_c == QMetaObject::QueryPropertyScriptable) {
        _id -= 2;
    } else if (_c == QMetaObject::QueryPropertyStored) {
        _id -= 2;
    } else if (_c == QMetaObject::QueryPropertyEditable) {
        _id -= 2;
    } else if (_c == QMetaObject::QueryPropertyUser) {
        _id -= 2;
    }
#endif // QT_NO_PROPERTIES
    return _id;
}