diff options
Diffstat (limited to 'src')
8 files changed, 49 insertions, 38 deletions
diff --git a/src/3rdparty/iaccessible2/generated/x86/ia2_api_all.h b/src/3rdparty/iaccessible2/generated/x86/ia2_api_all.h index eb3b57b8bd..9e4be75bb9 100644 --- a/src/3rdparty/iaccessible2/generated/x86/ia2_api_all.h +++ b/src/3rdparty/iaccessible2/generated/x86/ia2_api_all.h @@ -16,7 +16,9 @@ */ /* @@MIDL_FILE_HEADING( ) */ -#pragma warning( disable: 4049 ) /* more than 64k source lines */ +#ifdef _MSC_VER +# pragma warning( disable: 4049 ) /* more than 64k source lines */ +#endif /* verify that the <rpcndr.h> version is high enough to compile this file*/ diff --git a/src/3rdparty/iaccessible2/generated/x86/ia2_api_all_i.c b/src/3rdparty/iaccessible2/generated/x86/ia2_api_all_i.c index c50b3e9a4f..61bb5ee5f7 100644 --- a/src/3rdparty/iaccessible2/generated/x86/ia2_api_all_i.c +++ b/src/3rdparty/iaccessible2/generated/x86/ia2_api_all_i.c @@ -18,7 +18,9 @@ */ /* @@MIDL_FILE_HEADING( ) */ -#pragma warning( disable: 4049 ) /* more than 64k source lines */ +#ifdef _MSC_VER +# pragma warning( disable: 4049 ) /* more than 64k source lines */ +#endif #ifdef __cplusplus @@ -65,7 +67,7 @@ typedef IID CLSID; #define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} -#endif !_MIDL_USE_GUIDDEF_ +#endif // !_MIDL_USE_GUIDDEF_ MIDL_DEFINE_GUID(IID, IID_IAccessibleRelation,0x7CDF86EE,0xC3DA,0x496a,0xBD,0xA4,0x28,0x1B,0x33,0x6E,0x1F,0xDC); diff --git a/src/plugins/platforms/windows/accessible/accessible.pri b/src/plugins/platforms/windows/accessible/accessible.pri index 0e3aacc558..557bdfe307 100644 --- a/src/plugins/platforms/windows/accessible/accessible.pri +++ b/src/plugins/platforms/windows/accessible/accessible.pri @@ -6,13 +6,14 @@ HEADERS += \ $$PWD/qwindowsaccessibility.h \ $$PWD/comutils.h -SOURCES += $$PWD/qwindowsmsaaaccessible.cpp -HEADERS += $$PWD/qwindowsmsaaaccessible.h +SOURCES += \ + $$PWD/qwindowsmsaaaccessible.cpp \ + $$PWD/iaccessible2.cpp + +HEADERS += \ + $$PWD/qwindowsmsaaaccessible.h \ + $$PWD/iaccessible2.h -!mingw: { - SOURCES += $$PWD/iaccessible2.cpp - HEADERS += $$PWD/iaccessible2.h - include(../../../../3rdparty/iaccessible2/iaccessible2.pri) -} +include(../../../../3rdparty/iaccessible2/iaccessible2.pri) mingw: LIBS *= -luuid diff --git a/src/plugins/platforms/windows/accessible/iaccessible2.h b/src/plugins/platforms/windows/accessible/iaccessible2.h index d5c67f8b51..1597c41160 100644 --- a/src/plugins/platforms/windows/accessible/iaccessible2.h +++ b/src/plugins/platforms/windows/accessible/iaccessible2.h @@ -52,6 +52,12 @@ QT_BEGIN_NAMESPACE +#ifdef Q_CC_MINGW +// MinGW's __uuidof operator does not work for the Accessible2 interfaces +template <> +IID qUuidOf<IAccessibleComponent>() { return IID_IAccessibleComponent; } +#endif // Q_CC_MINGW + class QWindowsIA2Accessible : public QWindowsMsaaAccessible, public IAccessibleAction, public IAccessibleComponent, @@ -258,6 +264,19 @@ private: /**************************************************************\ * AccessibleApplication * **************************************************************/ + +#ifdef Q_CC_MINGW +// MinGW's __uuidof operator does not work for the IAccessible2 interfaces +template <> +IID qUuidOf<IAccessibleApplication>() { return IID_IAccessibleApplication; } + +template <> +IID qUuidOf<IAccessible2>() { return IID_IAccessible2; } + +template <> +IID qUuidOf<IAccessibleRelation>() { return IID_IAccessibleRelation; } +#endif // Q_CC_MINGW + class AccessibleApplication : public QWindowsComBase<IAccessibleApplication> { public: @@ -277,6 +296,9 @@ public: /**************************************************************\ * AccessibleRelation * **************************************************************/ + + + class AccessibleRelation : public QWindowsComBase<IAccessibleRelation> { public: diff --git a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp index aed9c94003..e214d47137 100644 --- a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp +++ b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp @@ -56,11 +56,7 @@ #include <QtFontDatabaseSupport/private/qwindowsfontdatabase_p.h> // registry helper #include "qwindowsaccessibility.h" -#ifdef Q_CC_MINGW -# include "qwindowsmsaaaccessible.h" -#else -# include "iaccessible2.h" -#endif +#include "iaccessible2.h" #include "comutils.h" #include <oleacc.h> @@ -198,11 +194,7 @@ IAccessible *QWindowsAccessibility::wrap(QAccessibleInterface *acc) if (!QAccessible::uniqueId(acc)) QAccessible::registerAccessibleInterface(acc); -# ifdef Q_CC_MINGW - QWindowsMsaaAccessible *wacc = new QWindowsMsaaAccessible(acc); -# else QWindowsIA2Accessible *wacc = new QWindowsIA2Accessible(acc); -# endif IAccessible *iacc = 0; wacc->QueryInterface(IID_IAccessible, reinterpret_cast<void **>(&iacc)); return iacc; diff --git a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp index 308ff59c49..47b179250a 100644 --- a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp +++ b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp @@ -156,7 +156,7 @@ void accessibleDebugClientCalls_helper(const char* funcName, const QAccessibleIn HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::QueryInterface(REFIID id, LPVOID *iface) { *iface = nullptr; - const bool result = qWindowsComQueryUnknownInterfaceMulti<AccessibleBase>(this, id, iface) + const bool result = qWindowsComQueryUnknownInterfaceMulti<IAccessible2>(this, id, iface) || qWindowsComQueryInterface<IDispatch>(this, id, iface) || qWindowsComQueryInterface<IAccessible>(this, id, iface) || qWindowsComQueryInterface<IOleWindow>(this, id, iface); @@ -1172,7 +1172,6 @@ const char *QWindowsAccessibleGuid::iidToString(const GUID &id) result = "IID_IOleWindow"; else if (id == IID_IServiceProvider) result = "IID_IServiceProvider"; -#ifndef Q_CC_MINGW else if (id == IID_IAccessible2) result = "IID_IAccessible2"; else if (id == IID_IAccessibleAction) @@ -1201,7 +1200,6 @@ const char *QWindowsAccessibleGuid::iidToString(const GUID &id) result = "IID_IAccessibleText"; else if (id == IID_IAccessibleValue) result = "IID_IAccessibleValue"; -#endif // !Q_CC_MINGW return result; } diff --git a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.h b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.h index 07f10da99a..e654f262da 100644 --- a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.h +++ b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.h @@ -46,14 +46,8 @@ #include <QtCore/qt_windows.h> #include <QtCore/qsharedpointer.h> #include <QtGui/qaccessible.h> -#ifndef Q_CC_MINGW -# include <oleacc.h> -# include "ia2_api_all.h" // IAccessible2 inherits from IAccessible -#else - // MinGW -# include <basetyps.h> -# include <oleacc.h> -#endif +#include <oleacc.h> +#include "ia2_api_all.h" // IAccessible2 inherits from IAccessible QT_BEGIN_NAMESPACE @@ -88,13 +82,7 @@ QDebug operator<<(QDebug d, const QWindowsAccessibleGuid &aguid); * QWindowsAccessible * **************************************************************/ -#ifndef Q_CC_MINGW -typedef IAccessible2 AccessibleBase; -#else -typedef IAccessible AccessibleBase; -#endif - -class QWindowsMsaaAccessible : public AccessibleBase, public IOleWindow +class QWindowsMsaaAccessible : public IAccessible2, public IOleWindow { public: QWindowsMsaaAccessible(QAccessibleInterface *a) diff --git a/src/plugins/platforms/windows/qwindowscombase.h b/src/plugins/platforms/windows/qwindowscombase.h index f8afcc81cf..5e51b6b7b7 100644 --- a/src/plugins/platforms/windows/qwindowscombase.h +++ b/src/plugins/platforms/windows/qwindowscombase.h @@ -46,11 +46,17 @@ QT_BEGIN_NAMESPACE +// The __uuidof operator of MinGW does not work for all interfaces (for example, +// IAccessible2). Specializations of this function can be provides to work +// around this. +template <class DesiredInterface> +static IID qUuidOf() { return __uuidof(DesiredInterface); } + // Helper for implementing IUnknown::QueryInterface. template <class DesiredInterface, class Derived> bool qWindowsComQueryInterface(Derived *d, REFIID id, LPVOID *iface) { - if (id == __uuidof(DesiredInterface)) { + if (id == qUuidOf<DesiredInterface>()) { *iface = static_cast<DesiredInterface *>(d); d->AddRef(); return true; |