5#include <QtGui/qtguiglobal.h>
6#if QT_CONFIG(accessibility)
8#include "qwindowsuiawindowprovider.h"
9#include "qwindowsuiautils.h"
10#include "qwindowscontext.h"
12#include <QtGui/qaccessible.h>
13#include <QtGui/private/qwindow_p.h>
14#include <QtCore/qloggingcategory.h>
15#include <QtCore/qstring.h>
19using namespace QWindowsUiAutomation;
22QWindowsUiaWindowProvider::QWindowsUiaWindowProvider(QAccessible::Id id) :
23 QWindowsUiaBaseProvider(id)
27QWindowsUiaWindowProvider::~QWindowsUiaWindowProvider()
31HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::SetVisualState(WindowVisualState state) {
32 qCDebug(lcQpaUiAutomation) <<
__FUNCTION__;
33 QAccessibleInterface *accessible = accessibleInterface();
34 if (!accessible || !accessible->window())
35 return UIA_E_ELEMENTNOTAVAILABLE;
36 auto window = accessible->window();
38 case WindowVisualState_Normal:
41 case WindowVisualState_Maximized:
42 window->showMaximized();
44 case WindowVisualState_Minimized:
45 window->showMinimized();
51HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::Close() {
52 qCDebug(lcQpaUiAutomation) <<
__FUNCTION__;
53 QAccessibleInterface *accessible = accessibleInterface();
54 if (!accessible || !accessible->window())
55 return UIA_E_ELEMENTNOTAVAILABLE;
56 accessible->window()->close();
60HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::WaitForInputIdle(
int milliseconds, __RPC__out BOOL *pRetVal) {
61 Q_UNUSED(milliseconds);
63 return UIA_E_NOTSUPPORTED;
66HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::get_CanMaximize(__RPC__out BOOL *pRetVal) {
67 qCDebug(lcQpaUiAutomation) <<
__FUNCTION__;
68 QAccessibleInterface *accessible = accessibleInterface();
69 if (!accessible || !accessible->window())
70 return UIA_E_ELEMENTNOTAVAILABLE;
72 auto window = accessible->window();
73 auto flags = window->flags();
75 *pRetVal = (!(flags & Qt::MSWindowsFixedSizeDialogHint)
76 && (flags & Qt::WindowMaximizeButtonHint)
77 && ((flags & Qt::CustomizeWindowHint)
78 || window->maximumSize() == QSize(QWINDOWSIZE_MAX, QWINDOWSIZE_MAX)));
82HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::get_CanMinimize(__RPC__out BOOL *pRetVal) {
83 qCDebug(lcQpaUiAutomation) <<
__FUNCTION__;
84 QAccessibleInterface *accessible = accessibleInterface();
85 if (!accessible || !accessible->window())
86 return UIA_E_ELEMENTNOTAVAILABLE;
87 *pRetVal = accessible->window()->flags() & Qt::WindowMinimizeButtonHint;
91HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::get_IsModal(__RPC__out BOOL *pRetVal) {
92 qCDebug(lcQpaUiAutomation) <<
__FUNCTION__;
93 QAccessibleInterface *accessible = accessibleInterface();
94 if (!accessible || !accessible->window())
95 return UIA_E_ELEMENTNOTAVAILABLE;
96 *pRetVal = accessible->window()->isModal();
100HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::get_WindowVisualState(__RPC__out
enum WindowVisualState *pRetVal) {
101 qCDebug(lcQpaUiAutomation) <<
__FUNCTION__;
102 QAccessibleInterface *accessible = accessibleInterface();
103 if (!accessible || !accessible->window())
104 return UIA_E_ELEMENTNOTAVAILABLE;
105 auto visibility = accessible->window()->visibility();
106 switch (visibility) {
107 case QWindow::FullScreen:
108 case QWindow::Maximized:
109 *pRetVal = WindowVisualState_Maximized;
111 case QWindow::Minimized:
112 *pRetVal = WindowVisualState_Minimized;
115 *pRetVal = WindowVisualState_Normal;
121HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::get_WindowInteractionState(__RPC__out
enum WindowInteractionState *pRetVal) {
123 return UIA_E_NOTSUPPORTED;
126HRESULT STDMETHODCALLTYPE QWindowsUiaWindowProvider::get_IsTopmost(__RPC__out BOOL *pRetVal) {
128 return UIA_E_NOTSUPPORTED;