4#include <QtGui/qtguiglobal.h>
5#if QT_CONFIG(accessibility)
7#include "qwindowsuiawindowprovider.h"
8#include "qwindowsuiautils.h"
9#include "qwindowscontext.h"
11#include <QtGui/qaccessible.h>
12#include <QtGui/private/qwindow_p.h>
13#include <QtCore/qloggingcategory.h>
14#include <QtCore/qstring.h>
18using namespace QWindowsUiAutomation;
21QWindowsUiaWindowProvider::QWindowsUiaWindowProvider(QAccessible::Id id) :
22 QWindowsUiaBaseProvider(id)
26QWindowsUiaWindowProvider::~QWindowsUiaWindowProvider()
30HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::SetVisualState(WindowVisualState state) {
31 qCDebug(lcQpaUiAutomation) <<
__FUNCTION__;
32 QAccessibleInterface *accessible = accessibleInterface();
33 if (!accessible || !accessible->window())
34 return UIA_E_ELEMENTNOTAVAILABLE;
35 auto window = accessible->window();
37 case WindowVisualState_Normal:
40 case WindowVisualState_Maximized:
41 window->showMaximized();
43 case WindowVisualState_Minimized:
44 window->showMinimized();
50HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::Close() {
51 qCDebug(lcQpaUiAutomation) <<
__FUNCTION__;
52 QAccessibleInterface *accessible = accessibleInterface();
53 if (!accessible || !accessible->window())
54 return UIA_E_ELEMENTNOTAVAILABLE;
55 accessible->window()->close();
59HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::WaitForInputIdle(
int milliseconds, __RPC__out BOOL *pRetVal) {
60 Q_UNUSED(milliseconds);
62 return UIA_E_NOTSUPPORTED;
65HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::get_CanMaximize(__RPC__out BOOL *pRetVal) {
66 qCDebug(lcQpaUiAutomation) <<
__FUNCTION__;
67 QAccessibleInterface *accessible = accessibleInterface();
68 if (!accessible || !accessible->window())
69 return UIA_E_ELEMENTNOTAVAILABLE;
71 auto window = accessible->window();
72 auto flags = window->flags();
74 *pRetVal = (!(flags & Qt::MSWindowsFixedSizeDialogHint)
75 && (flags & Qt::WindowMaximizeButtonHint)
76 && ((flags & Qt::CustomizeWindowHint)
77 || window->maximumSize() == QSize(QWINDOWSIZE_MAX, QWINDOWSIZE_MAX)));
81HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::get_CanMinimize(__RPC__out BOOL *pRetVal) {
82 qCDebug(lcQpaUiAutomation) <<
__FUNCTION__;
83 QAccessibleInterface *accessible = accessibleInterface();
84 if (!accessible || !accessible->window())
85 return UIA_E_ELEMENTNOTAVAILABLE;
86 *pRetVal = accessible->window()->flags() & Qt::WindowMinimizeButtonHint;
90HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::get_IsModal(__RPC__out BOOL *pRetVal) {
91 qCDebug(lcQpaUiAutomation) <<
__FUNCTION__;
92 QAccessibleInterface *accessible = accessibleInterface();
93 if (!accessible || !accessible->window())
94 return UIA_E_ELEMENTNOTAVAILABLE;
95 *pRetVal = accessible->window()->isModal();
99HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::get_WindowVisualState(__RPC__out
enum WindowVisualState *pRetVal) {
100 qCDebug(lcQpaUiAutomation) <<
__FUNCTION__;
101 QAccessibleInterface *accessible = accessibleInterface();
102 if (!accessible || !accessible->window())
103 return UIA_E_ELEMENTNOTAVAILABLE;
104 auto visibility = accessible->window()->visibility();
105 switch (visibility) {
106 case QWindow::FullScreen:
107 case QWindow::Maximized:
108 *pRetVal = WindowVisualState_Maximized;
110 case QWindow::Minimized:
111 *pRetVal = WindowVisualState_Minimized;
114 *pRetVal = WindowVisualState_Normal;
120HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::get_WindowInteractionState(__RPC__out
enum WindowInteractionState *pRetVal) {
122 return UIA_E_NOTSUPPORTED;
125HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::get_IsTopmost(__RPC__out BOOL *pRetVal) {
127 return UIA_E_NOTSUPPORTED;