summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/windows/accessible
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2017-07-11 10:27:56 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2017-07-25 10:06:43 +0000
commit4f599c5ea180f5246adf2a95c158b50f027a8c21 (patch)
tree9755d632ef6d556dcb34399019a9c77cf0b89eea /src/plugins/platforms/windows/accessible
parenta06148e3414744cc4153f40a5610bad53ffebd62 (diff)
Enable IAccessible2 for MinGW
MinGW 5.3 is able to compile the IAccessible2 classes. All that is needed is some way to provide the missing IIDs, which is done via specialization of a function template (similar to the MinGW's __uuidof operator). [ChangeLog][Windows][Accessibility] MinGW builds now support IAccessible2. Change-Id: I218a4b89c81b54aa96f7c743544388631ca9a53e Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
Diffstat (limited to 'src/plugins/platforms/windows/accessible')
-rw-r--r--src/plugins/platforms/windows/accessible/accessible.pri15
-rw-r--r--src/plugins/platforms/windows/accessible/iaccessible2.h22
-rw-r--r--src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp10
-rw-r--r--src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp4
-rw-r--r--src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.h18
5 files changed, 35 insertions, 34 deletions
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)