Use QComObject with QWindowsUiaMainProvider
This change adds QComObject as base to QWindowsUiaMainProvider in order to reuse its implementation of IUnknown. Change-Id: I48808262364992f90f18fc881594f151eeb29a3f Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>bb10
parent
6324075a2d
commit
f9c9981524
|
|
@ -18,7 +18,6 @@
|
|||
#include "qwindowsuiagriditemprovider.h"
|
||||
#include "qwindowsuiawindowprovider.h"
|
||||
#include "qwindowsuiaexpandcollapseprovider.h"
|
||||
#include "qwindowscombase.h"
|
||||
#include "qwindowscontext.h"
|
||||
#include "qwindowsuiautils.h"
|
||||
#include "qwindowsuiaprovidercache.h"
|
||||
|
|
@ -62,9 +61,8 @@ QWindowsUiaMainProvider *QWindowsUiaMainProvider::providerForAccessible(QAccessi
|
|||
return provider;
|
||||
}
|
||||
|
||||
QWindowsUiaMainProvider::QWindowsUiaMainProvider(QAccessibleInterface *a, int initialRefCount)
|
||||
: QWindowsUiaBaseProvider(QAccessible::uniqueId(a)),
|
||||
m_ref(initialRefCount)
|
||||
QWindowsUiaMainProvider::QWindowsUiaMainProvider(QAccessibleInterface *a)
|
||||
: QWindowsUiaBaseProvider(QAccessible::uniqueId(a))
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -208,33 +206,26 @@ void QWindowsUiaMainProvider::notifyTextChange(QAccessibleEvent *event)
|
|||
|
||||
HRESULT STDMETHODCALLTYPE QWindowsUiaMainProvider::QueryInterface(REFIID iid, LPVOID *iface)
|
||||
{
|
||||
if (!iface)
|
||||
return E_INVALIDARG;
|
||||
*iface = nullptr;
|
||||
HRESULT result = QComObject::QueryInterface(iid, iface);
|
||||
|
||||
QAccessibleInterface *accessible = accessibleInterface();
|
||||
if (SUCCEEDED(result) && iid == __uuidof(IRawElementProviderFragmentRoot)) {
|
||||
QAccessibleInterface *accessible = accessibleInterface();
|
||||
if (accessible && hwndForAccessible(accessible)) {
|
||||
result = S_OK;
|
||||
} else {
|
||||
result = E_NOINTERFACE;
|
||||
iface = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
const bool result = qWindowsComQueryUnknownInterfaceMulti<IRawElementProviderSimple>(this, iid, iface)
|
||||
|| qWindowsComQueryInterface<IRawElementProviderSimple>(this, iid, iface)
|
||||
|| qWindowsComQueryInterface<IRawElementProviderFragment>(this, iid, iface)
|
||||
|| (accessible && hwndForAccessible(accessible) && qWindowsComQueryInterface<IRawElementProviderFragmentRoot>(this, iid, iface));
|
||||
return result ? S_OK : E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ULONG QWindowsUiaMainProvider::AddRef()
|
||||
{
|
||||
return ++m_ref;
|
||||
return result;
|
||||
}
|
||||
|
||||
ULONG STDMETHODCALLTYPE QWindowsUiaMainProvider::Release()
|
||||
{
|
||||
QMutexLocker locker(&m_mutex);
|
||||
|
||||
if (!--m_ref) {
|
||||
delete this;
|
||||
return 0;
|
||||
}
|
||||
return m_ref;
|
||||
return QComObject::Release();
|
||||
}
|
||||
|
||||
HRESULT QWindowsUiaMainProvider::get_ProviderOptions(ProviderOptions *pRetVal)
|
||||
|
|
|
|||
|
|
@ -20,15 +20,13 @@ QT_BEGIN_NAMESPACE
|
|||
// The main UI Automation class.
|
||||
class QWindowsUiaMainProvider :
|
||||
public QWindowsUiaBaseProvider,
|
||||
public IRawElementProviderSimple,
|
||||
public IRawElementProviderFragment,
|
||||
public IRawElementProviderFragmentRoot
|
||||
public QComObject<IRawElementProviderSimple, IRawElementProviderFragment, IRawElementProviderFragmentRoot>
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_DISABLE_COPY_MOVE(QWindowsUiaMainProvider)
|
||||
public:
|
||||
static QWindowsUiaMainProvider *providerForAccessible(QAccessibleInterface *accessible);
|
||||
explicit QWindowsUiaMainProvider(QAccessibleInterface *a, int initialRefCount = 1);
|
||||
explicit QWindowsUiaMainProvider(QAccessibleInterface *a);
|
||||
virtual ~QWindowsUiaMainProvider();
|
||||
static void notifyFocusChange(QAccessibleEvent *event);
|
||||
static void notifyStateChange(QAccessibleStateChangeEvent *event);
|
||||
|
|
@ -39,7 +37,6 @@ public:
|
|||
|
||||
// IUnknown
|
||||
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID id, LPVOID *iface) override;
|
||||
ULONG STDMETHODCALLTYPE AddRef() override;
|
||||
ULONG STDMETHODCALLTYPE Release() override;
|
||||
|
||||
// IRawElementProviderSimple methods
|
||||
|
|
@ -63,7 +60,6 @@ public:
|
|||
private:
|
||||
QString automationIdForAccessible(const QAccessibleInterface *accessible);
|
||||
static void fillVariantArrayForRelation(QAccessibleInterface *accessible, QAccessible::Relation relation, VARIANT *pRetVal);
|
||||
ULONG m_ref;
|
||||
static QMutex m_mutex;
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue