Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-103591

Windows: Comboboxes (Qml and QtWidgets) don't have the UIAutomation (UIA) ExpandCollapse pattern

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • P3: Somewhat important
    • 6.3.2, 6.4.0 Beta2
    • 6.2.1, 6.4.0
    • None
    • Windows (Not version-specific)

      Tested on Qt 6.2.1, but looking at the source code, it looks like this has always been there, and never changed (I looked at 6.4.0)

    • Windows
    • ecd41111a3 (qt/qtbase/dev) 30daa8248e (qt/qtbase/6.4) 44efb4a73c (qt/qtbase/6.3)

    Description

      Context

      I'm using http://accessibilityinsights.io/ to make sure my QML application passes Microsoft requirements for accessibility.

      There's only one error that I couldn't resolve : Qml ComboBoxes don't have the ExpandCollapse pattern.

      Code to reproduce:

      ComboBox {
       model: ["First", "Second", "Third"]
      }

      Error

      Accessibility Insights says "An element of the given ControlType must support the ExpandCollapse pattern. Section 508 502.3.10" and "How to fix:"

      1. Make sure the element has the appropriate ControlType property for its function.
      2. If the current ControlType is correct, modify the element to support the ExpandCollapse pattern.

       

      I did not find any related issues in the Qt bug list.

      Digging deeper

      I went on to examine Qt's source code and found the following file: 

      qtbase\src\plugins\platforms\windows\uiautomation\qwindowsuiamainprovider.cpp

       Here's the part that was most relevant:

      case UIA_ExpandCollapsePatternId:
      // Menu items with submenus.
      if (accessible->role() == QAccessible::MenuItem
       && accessible->childCount() > 0
       && accessible->child(0)->role() == QAccessible::PopupMenu) {
       *pRetVal = new QWindowsUiaExpandCollapseProvider(id());
      }

      Which means that for the ExpandCollapse pattern to work, there must be a MenuItem object (the qml combobox doesn't have that), nor a child that's a PopupMenu.

      After further testing, the ExpandCollapse pattern works fine in a menu (from QWidgets), but not in qml.

      I couldn't change the combobox's role (Accessible.MenuItem), as it doesn't register for some reason (perhaps because of the C++ backend)

      I tried "hacking" this in qml, to see if it could work, by testing the following code:

      MenuItem
      {
       text: "test"
       Rectangle {
       Accessible.role: Accessible.PopupMenu
       visible:false // to make the state "collapsed" by default.
       }
      }

      With this fake popup menu, I have the ExpandCollapse pattern. But obviously this isn't a ComboBox.

      Solution

      I think the only way to resolve this issue is to change qwindowsuiamainprovider.cpp to add the ExpandCollapse pattern to ComboBoxes, and it should work for both QtWidgets and Qml.

      Accessibility concerns

      I don't know much about accessibility, but if someone uses the narrator and sees that it's a combobox item type (it is), then they can probably manage.

      But, Microsoft is becoming super strict and not allowing any Accessibility issues.

      So I think this request will come in really soon from others (I'm working directly with OEMs that need Microsoft requirements before everyone else)

      Resources

      While looking for bugs, I found out that anrocha could be the person to help with this!

      Attachments

        Issue Links

          For Gerrit Dashboard: QTBUG-103591
          # Subject Branch Project Status CR V

          Activity

            People

              anrocha André De La Rocha (Inactive)
              mgamsby Martin Gamsby
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: