Windows accessibility: Remove some cruft.

Change-Id: I5cb35bdd5441a8dd7a51193048b32a6feccba2b2
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
This commit is contained in:
Friedemann Kleint 2016-02-05 15:26:03 +01:00
parent 5cf6a8a50c
commit d145929fd7
3 changed files with 0 additions and 367 deletions

View File

@ -272,348 +272,6 @@ bool QVariant2VARIANT(const QVariant &var, VARIANT &arg, const QByteArray &typeN
}
}
break;
#if 0 // not a value with min/max semantics
case QVariant::Font:
if (out && arg.vt == (VT_DISPATCH|VT_BYREF)) {
if (*arg.ppdispVal)
(*arg.ppdispVal)->Release();
*arg.ppdispVal = QFontToIFont(qvariant_cast<QFont>(qvar));
} else {
arg.vt = VT_DISPATCH;
arg.pdispVal = QFontToIFont(qvariant_cast<QFont>(qvar));
if (out) {
arg.ppdispVal = new IDispatch*(arg.pdispVal);
arg.vt |= VT_BYREF;
}
}
break;
case QVariant::Pixmap:
if (out && arg.vt == (VT_DISPATCH|VT_BYREF)) {
if (*arg.ppdispVal)
(*arg.ppdispVal)->Release();
*arg.ppdispVal = QPixmapToIPicture(qvariant_cast<QPixmap>(qvar));
} else {
arg.vt = VT_DISPATCH;
arg.pdispVal = QPixmapToIPicture(qvariant_cast<QPixmap>(qvar));
if (out) {
arg.ppdispVal = new IDispatch*(arg.pdispVal);
arg.vt |= VT_BYREF;
}
}
break;
case QVariant::Cursor:
{
#ifndef QT_NO_CURSOR
int shape = qvariant_cast<QCursor>(qvar).shape();
if (out && (arg.vt & VT_BYREF)) {
switch (arg.vt & ~VT_BYREF) {
case VT_I4:
*arg.plVal = shape;
break;
case VT_I2:
*arg.piVal = shape;
break;
case VT_UI4:
*arg.pulVal = shape;
break;
case VT_UI2:
*arg.puiVal = shape;
break;
case VT_INT:
*arg.pintVal = shape;
break;
case VT_UINT:
*arg.puintVal = shape;
break;
}
} else {
arg.vt = VT_I4;
arg.lVal = shape;
if (out) {
arg.plVal = new long(arg.lVal);
arg.vt |= VT_BYREF;
}
}
#endif
}
break;
case QVariant::List:
{
const QList<QVariant> list = qvar.toList();
const int count = list.count();
VARTYPE vt = VT_VARIANT;
QVariant::Type listType = QVariant::LastType; // == QVariant
if (!typeName.isEmpty() && typeName.startsWith("QList<")) {
const QByteArray listTypeName = typeName.mid(6, typeName.length() - 7); // QList<int> -> int
listType = QVariant::nameToType(listTypeName);
}
VARIANT variant;
void *pElement = &variant;
switch (listType) {
case QVariant::Int:
vt = VT_I4;
pElement = &variant.lVal;
break;
case QVariant::Double:
vt = VT_R8;
pElement = &variant.dblVal;
break;
case QVariant::DateTime:
vt = VT_DATE;
pElement = &variant.date;
break;
case QVariant::Bool:
vt = VT_BOOL;
pElement = &variant.boolVal;
break;
case QVariant::LongLong:
#if !defined(Q_OS_WINCE) && defined(_MSC_VER) && _MSC_VER >= 1400
vt = VT_I8;
pElement = &variant.llVal;
#else
vt = VT_CY;
pElement = &variant.cyVal;
#endif
break;
default:
break;
}
SAFEARRAY *array = 0;
bool is2D = false;
// If the first element in the array is a list the whole list is
// treated as a 2D array. The column count is taken from the 1st element.
if (count) {
QVariantList col = list.at(0).toList();
int maxColumns = col.count();
if (maxColumns) {
is2D = true;
SAFEARRAYBOUND rgsabound[2] = { {0} };
rgsabound[0].cElements = count;
rgsabound[1].cElements = maxColumns;
array = SafeArrayCreate(VT_VARIANT, 2, rgsabound);
LONG rgIndices[2];
for (LONG i = 0; i < count; ++i) {
rgIndices[0] = i;
QVariantList columns = list.at(i).toList();
int columnCount = qMin(maxColumns, columns.count());
for (LONG j = 0; j < columnCount; ++j) {
QVariant elem = columns.at(j);
VariantInit(&variant);
QVariant2VARIANT(elem, variant, elem.typeName());
rgIndices[1] = j;
SafeArrayPutElement(array, rgIndices, pElement);
clearVARIANT(&variant);
}
}
}
}
if (!is2D) {
array = SafeArrayCreateVector(vt, 0, count);
for (LONG index = 0; index < count; ++index) {
QVariant elem = list.at(index);
if (listType != QVariant::LastType)
elem.convert(listType);
VariantInit(&variant);
QVariant2VARIANT(elem, variant, elem.typeName());
SafeArrayPutElement(array, &index, pElement);
clearVARIANT(&variant);
}
}
if (out && arg.vt == (VT_ARRAY|vt|VT_BYREF)) {
if (*arg.pparray)
SafeArrayDestroy(*arg.pparray);
*arg.pparray = array;
} else {
arg.vt = VT_ARRAY|vt;
arg.parray = array;
if (out) {
arg.pparray = new SAFEARRAY*(arg.parray);
arg.vt |= VT_BYREF;
}
}
}
break;
case QVariant::StringList:
{
const QStringList list = qvar.toStringList();
const int count = list.count();
SAFEARRAY *array = SafeArrayCreateVector(VT_BSTR, 0, count);
for (LONG index = 0; index < count; ++index) {
QString elem = list.at(index);
BSTR bstr = QStringToBSTR(elem);
SafeArrayPutElement(array, &index, bstr);
SysFreeString(bstr);
}
if (out && arg.vt == (VT_ARRAY|VT_BSTR|VT_BYREF)) {
if (*arg.pparray)
SafeArrayDestroy(*arg.pparray);
*arg.pparray = array;
} else {
arg.vt = VT_ARRAY|VT_BSTR;
arg.parray = array;
if (out) {
arg.pparray = new SAFEARRAY*(arg.parray);
arg.vt |= VT_BYREF;
}
}
}
break;
case QVariant::ByteArray:
{
const QByteArray bytes = qvar.toByteArray();
const uint count = bytes.count();
SAFEARRAY *array = SafeArrayCreateVector(VT_UI1, 0, count);
if (count) {
const char *data = bytes.constData();
char *dest;
SafeArrayAccessData(array, (void **)&dest);
memcpy(dest, data, count);
SafeArrayUnaccessData(array);
}
if (out && arg.vt == (VT_ARRAY|VT_UI1|VT_BYREF)) {
if (*arg.pparray)
SafeArrayDestroy(*arg.pparray);
*arg.pparray = array;
} else {
arg.vt = VT_ARRAY|VT_UI1;
arg.parray = array;
if (out) {
arg.pparray = new SAFEARRAY*(arg.parray);
arg.vt |= VT_BYREF;
}
}
}
break;
#ifdef QAX_SERVER
case QVariant::Rect:
case QVariant::Size:
case QVariant::Point:
{
typedef HRESULT(WINAPI* PGetRecordInfoFromTypeInfo)(ITypeInfo *, IRecordInfo **);
static PGetRecordInfoFromTypeInfo pGetRecordInfoFromTypeInfo = 0;
static bool resolved = false;
if (!resolved) {
QSystemLibrary oleaut32(QLatin1String("oleaut32"));
pGetRecordInfoFromTypeInfo = (PGetRecordInfoFromTypeInfo)oleaut32.resolve("GetRecordInfoFromTypeInfo");
resolved = true;
}
if (!pGetRecordInfoFromTypeInfo)
break;
ITypeInfo *typeInfo = 0;
IRecordInfo *recordInfo = 0;
CLSID clsid = qvar.type() == QVariant::Rect ? CLSID_QRect
:qvar.type() == QVariant::Size ? CLSID_QSize
:CLSID_QPoint;
qAxTypeLibrary->GetTypeInfoOfGuid(clsid, &typeInfo);
if (!typeInfo)
break;
pGetRecordInfoFromTypeInfo(typeInfo, &recordInfo);
typeInfo->Release();
if (!recordInfo)
break;
void *record = 0;
switch (qvar.type()) {
case QVariant::Rect:
{
QRect qrect(qvar.toRect());
recordInfo->RecordCreateCopy(&qrect, &record);
}
break;
case QVariant::Size:
{
QSize qsize(qvar.toSize());
recordInfo->RecordCreateCopy(&qsize, &record);
}
break;
case QVariant::Point:
{
QPoint qpoint(qvar.toPoint());
recordInfo->RecordCreateCopy(&qpoint, &record);
}
break;
}
arg.vt = VT_RECORD;
arg.pRecInfo = recordInfo,
arg.pvRecord = record;
if (out) {
qWarning("QVariant2VARIANT: out-parameter not supported for records");
return false;
}
}
break;
#endif // QAX_SERVER
case QVariant::UserType:
{
QByteArray subType = qvar.typeName();
#ifdef QAX_SERVER
if (subType.endsWith('*'))
subType.truncate(subType.length() - 1);
#endif
if (!qstrcmp(qvar.typeName(), "IDispatch*")) {
arg.vt = VT_DISPATCH;
arg.pdispVal = *(IDispatch**)qvar.data();
if (arg.pdispVal)
arg.pdispVal->AddRef();
if (out) {
qWarning("QVariant2VARIANT: out-parameter not supported for IDispatch");
return false;
}
} else if (!qstrcmp(qvar.typeName(), "IDispatch**")) {
arg.vt = VT_DISPATCH;
arg.ppdispVal = *(IDispatch***)qvar.data();
if (out)
arg.vt |= VT_BYREF;
} else if (!qstrcmp(qvar.typeName(), "IUnknown*")) {
arg.vt = VT_UNKNOWN;
arg.punkVal = *(IUnknown**)qvar.data();
if (arg.punkVal)
arg.punkVal->AddRef();
if (out) {
qWarning("QVariant2VARIANT: out-parameter not supported for IUnknown");
return false;
}
#ifdef QAX_SERVER
} else if (qAxFactory()->metaObject(QString::fromLatin1(subType.constData()))) {
arg.vt = VT_DISPATCH;
void *user = *(void**)qvar.constData();
// qVariantGet(qvar, user, qvar.typeName());
if (!user) {
arg.pdispVal = 0;
} else {
qAxFactory()->createObjectWrapper(static_cast<QObject*>(user), &arg.pdispVal);
}
if (out) {
qWarning("QVariant2VARIANT: out-parameter not supported for subtype");
return false;
}
#else
} else if (QMetaType::type(subType)) {
QAxObject *object = *(QAxObject**)qvar.constData();
// qVariantGet(qvar, object, subType);
arg.vt = VT_DISPATCH;
object->queryInterface(IID_IDispatch, (void**)&arg.pdispVal);
if (out) {
qWarning("QVariant2VARIANT: out-parameter not supported for subtype");
return false;
}
#endif
} else {
return false;
}
}
break;
#endif
case QVariant::Invalid: // default-parameters not set
if (out && arg.vt == (VT_ERROR|VT_BYREF)) {

View File

@ -219,24 +219,6 @@ IAccessible *QWindowsAccessibility::wrap(QAccessibleInterface *acc)
#endif // defined(Q_OS_WINCE)
}
/*
void QWindowsAccessibility::setRootObject(QObject *o)
{
}
void QWindowsAccessibility::initialize()
{
}
void QWindowsAccessibility::cleanup()
{
}
*/
bool QWindowsAccessibility::handleAccessibleObjectFromWindowRequest(HWND hwnd, WPARAM wParam, LPARAM lParam, LRESULT *lResult)
{
#if !defined(Q_OS_WINCE)
@ -245,12 +227,10 @@ bool QWindowsAccessibility::handleAccessibleObjectFromWindowRequest(HWND hwnd, W
} else if ((DWORD)lParam == DWORD(OBJID_CLIENT)) {
// Start handling accessibility internally
QGuiApplicationPrivate::platformIntegration()->accessibility()->setActive(true);
#if 1
// Ignoring all requests while starting up
// ### Maybe QPA takes care of this???
if (QCoreApplication::startingUp() || QCoreApplication::closingDown())
return false;
#endif
typedef LRESULT (WINAPI *PtrLresultFromObject)(REFIID, WPARAM, LPUNKNOWN);
static PtrLresultFromObject ptrLresultFromObject = 0;

View File

@ -48,11 +48,6 @@ public:
QWindowsAccessibility();
static bool handleAccessibleObjectFromWindowRequest(HWND hwnd, WPARAM wParam, LPARAM lParam, LRESULT *lResult);
virtual void notifyAccessibilityUpdate(QAccessibleEvent *event);
/*
virtual void setRootObject(QObject *o);
virtual void initialize();
virtual void cleanup();
*/
static IAccessible *wrap(QAccessibleInterface *acc);
static QWindow *windowHelper(const QAccessibleInterface *iface);
};