4#include <QtGui/qtguiglobal.h>
5#if QT_CONFIG(accessibility)
7#include "qwindowsuiaprovidercache.h"
8#include "qwindowsuiautils.h"
9#include "qwindowscontext.h"
13using namespace QWindowsUiAutomation;
17QWindowsUiaProviderCache::QWindowsUiaProviderCache()
22QWindowsUiaProviderCache *QWindowsUiaProviderCache::instance()
24 static QWindowsUiaProviderCache providerCache;
25 return &providerCache;
29ComPtr<QWindowsUiaMainProvider> QWindowsUiaProviderCache::providerForId(QAccessible::Id id)
const
31 QMutexLocker guard{ &m_tableMutex };
34 ComPtr<QWindowsUiaMainProvider> provider = m_providerTable.value(id);
40void QWindowsUiaProviderCache::insert(QAccessible::Id id, QWindowsUiaMainProvider *provider)
42 QMutexLocker guard{ &m_tableMutex };
44 m_inverseTable.remove(m_providerTable.value(id));
45 m_providerTable.remove(id);
49 m_providerTable[id] = provider;
50 m_inverseTable[provider] = id;
53 QObject::connect(provider, &QObject::destroyed,
this, &QWindowsUiaProviderCache::remove, Qt::DirectConnection);
58void QWindowsUiaProviderCache::remove(QObject *obj)
63 QMutexLocker guard{ &m_tableMutex };
64 auto it = m_inverseTable.find(obj);
65 if (it != m_inverseTable.end()) {
66 m_providerTable.remove(*it);
67 m_inverseTable.remove(obj);