5#include <QtGui/qtguiglobal.h>
6#if QT_CONFIG(accessibility)
8#include "qwindowsuiaprovidercache.h"
9#include "qwindowsuiautils.h"
10#include "qwindowscontext.h"
14using namespace QWindowsUiAutomation;
18QWindowsUiaProviderCache::QWindowsUiaProviderCache()
23QWindowsUiaProviderCache *QWindowsUiaProviderCache::instance()
25 static QWindowsUiaProviderCache providerCache;
26 return &providerCache;
30ComPtr<QWindowsUiaMainProvider> QWindowsUiaProviderCache::providerForId(QAccessible::Id id)
const
32 QMutexLocker guard{ &m_tableMutex };
35 ComPtr<QWindowsUiaMainProvider> provider = m_providerTable.value(id);
41void QWindowsUiaProviderCache::insert(QAccessible::Id id, QWindowsUiaMainProvider *provider)
43 QMutexLocker guard{ &m_tableMutex };
45 m_inverseTable.remove(m_providerTable.value(id));
46 m_providerTable.remove(id);
50 m_providerTable[id] = provider;
51 m_inverseTable[provider] = id;
54 QObject::connect(provider, &QObject::destroyed,
this, &QWindowsUiaProviderCache::remove, Qt::DirectConnection);
59void QWindowsUiaProviderCache::remove(QObject *obj)
64 QMutexLocker guard{ &m_tableMutex };
65 auto it = m_inverseTable.find(obj);
66 if (it != m_inverseTable.end()) {
67 m_providerTable.remove(*it);
68 m_inverseTable.remove(obj);