Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

soffice: Implement methods for status bar announcement #14933

Conversation

michaelweghorn
Copy link
Contributor

Link to issue number:

Fixes #11698

Summary of the issue:

Announcement of the status bar in LibreOffice (e.g. triggered by NVDA+End) didn't work because the default implementations do not work for the LibreOffice case.

Description of user facing changes

Announcement of the status bar (e.g. triggered
by NVDA+End) works for LibreOffice.

Description of development approach

Override the default app module implementation to retrieve the status bar and announce its text in the LibreOffice app module, since the default implementations are not sufficient for the LibreOffice case:

  • To retrieve the status bar object, locate the descendant with the corresponding role, but only descend into children of role ROOTPANE and WINDOW for performance reasons.

  • To generate text from the status bar object, retrieve the text of each status bar child using the IAccessibleText interface. (The default implementation in api.py only uses the object names and values, which are both empty.)

Testing strategy:

  1. start NVDA
  2. start LibreOffice Writer
  3. Press NVDA+End key to trigger announcement of status line 4) check that the visible content of the status bar is announced
    (e.g. something like "Page 1 of 1 5 words, 20 characters Default
    Page Style English (United States) {en-US} 80%")
  4. repeat the above steps, but use LibreOffice Calc, Draw and Impress
    instead of Writer (in step 2)

Known issues with pull request:

none

Change log entries:

Changes
Announcement of the status bar (e.g. triggered by NVDA+End) works for LibreOffice. (#11698)

Code Review Checklist:

  • Pull Request description:
    • description is up to date
    • change log entries
  • Testing:
    • Unit tests
    • System (end to end) tests
    • Manual testing
  • API is compatible with existing add-ons.
  • Documentation:
    • User Documentation
    • Developer / Technical Documentation
    • Context sensitive help for GUI changes
  • UX of all users considered:
    • Speech
    • Braille
    • Low Vision
    • Different web browsers
    • Localization in other languages / culture than English
  • Security precautions taken.

@michaelweghorn michaelweghorn marked this pull request as ready for review May 18, 2023 14:07
@michaelweghorn michaelweghorn requested a review from a team as a code owner May 18, 2023 14:07
Copy link
Member

@seanbudd seanbudd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @michaelweghorn, the approach looks good, just need type hints added to each function

source/appModules/soffice.py Outdated Show resolved Hide resolved
source/appModules/soffice.py Outdated Show resolved Hide resolved
@michaelweghorn michaelweghorn force-pushed the michaelweghorn/nvda11698_tdf137075_statusbar_announcement_libreoffice branch from 6d41410 to 8bb4817 Compare June 1, 2023 15:05
@michaelweghorn
Copy link
Contributor Author

Thanks @michaelweghorn, the approach looks good, just need type hints added to each function

Thanks @seanbudd for the review. I've updated the PR as suggested.

source/appModules/soffice.py Outdated Show resolved Hide resolved
source/appModules/soffice.py Outdated Show resolved Hide resolved
 ### Link to issue number:

Fixes nvaccess#11698

 ### Summary of the issue:

Announcement of the status bar in LibreOffice (e.g. triggered
by NVDA+End) didn't work because the default implementations
do not work for the LibreOffice case.

 ### Description of user facing changes

Announcement of the status bar (e.g. triggered
by NVDA+End) works for LibreOffice.

 ### Description of development approach

Override the default app module implementation to retrieve the status bar
and announce its text in the LibreOffice app module, since
the default implementations are not sufficient for the
LibreOffice case:

* To retrieve the status bar object, locate the descendant
  with the corresponding role, but only descend into children
  of role `ROOTPANE` and `WINDOW` for performance
  reasons.

* To generate text from the status bar object, retrieve the text
  of each status bar child using the IAccessibleText interface.
  (The default implementation in api.py only uses the object names
  and values, which are both empty.)

 ### Testing strategy:

1) start NVDA
2) start LibreOffice Writer
3) Press NVDA+End key to trigger announcement of status line
4) check that the visible content of the status bar is announced
   (e.g. something like "Page 1 of 1 5 words, 20 characters  Default
   Page Style English (United States) {en-US}       80%")
5) repeat the above steps, but use LibreOffice Calc, Draw and Impress
   instead of Writer (in step 2)

 ### Known issues with pull request:

none

 ### Change log entries:

Changes
`Announcement of the status bar (e.g. triggered
by NVDA+End) works for LibreOffice. (nvaccess#11698)`
@michaelweghorn michaelweghorn force-pushed the michaelweghorn/nvda11698_tdf137075_statusbar_announcement_libreoffice branch from 8bb4817 to cc41b89 Compare June 2, 2023 04:27
Copy link
Member

@seanbudd seanbudd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@seanbudd seanbudd merged commit 62536a9 into nvaccess:master Jun 2, 2023
1 check was pending
@nvaccessAuto nvaccessAuto added this to the 2023.2 milestone Jun 2, 2023
@michaelweghorn michaelweghorn deleted the michaelweghorn/nvda11698_tdf137075_statusbar_announcement_libreoffice branch June 2, 2023 12:49
michaelweghorn added a commit to michaelweghorn/nvda that referenced this pull request Oct 6, 2023
 ### Link to issue number:

Fixes nvaccess#15591

 ### Summary of the issue:

Commit 62536a9
("soffice: Implement methods for status bar announcement (nvaccess#14933)")
added support for status bar announcement in LibreOffice by
searching for it in the a11y tree. For performance reasons,
only objects of specific roles are considered when traversing
the tree. The DIALOG and OPTIONPANE roles, needed to find the status
bar in Writer's "Edit Contour" dialog were not taken into
account yet, so the status bar was not found and could
therefore not be announced when pressing NVDA+End.

In addition, the status bar object in dialogs like that one
did not have the proper role in LibreOffice yet.

 ### Description of user facing changes

Status bar announcement for LibreOffice using the NVDA+End keyboard
shortcut now also works for dialogs and with the upcoming LibreOffice
version 24.2.

 ### Description of development approach

LibreOffice is adapted to expose the proper role for the status
bar in dialogs like the one mentioned above:
https://gerrit.libreoffice.org/c/core/+/157659

The DIALOG and OPTIONPANE roles are now also considered
by NVDA when traversing the a11y tree to find the status bar.

In addition, the FRAME role is also taken into account,
which is needed to support finding the status bar in
the default application window with LibreOffice >= 24.2,
see commit message of this LibreOffice change for more details:
https://gerrit.libreoffice.org/c/core/+/157658

Add a check whether the statusbar children have the
'IAccessibleTextObject' member before accessing it.

 ### Testing strategy:

1) Start LibreOffice Writer (current development version including
   https://gerrit.libreoffice.org/c/core/+/157659 )
2) insert a Formula: "Insert" -> "OLE Object" -> "Formula Object", type any formula, e.g. "1+1=2"
3) click outside of the formula then click the formula object again to focus it
4) in Writer's menu, select "Format" -> "Wrap" -> "Edit Contour"
5) Once the dialog shows up, press NVDA+End to announce the status bar

 ### Known issues with pull request:

Requires https://gerrit.libreoffice.org/c/core/+/157659
on LibreOffice side in addition for the announcement to
actually work.

 ### Code Review Checklist:

- [x] Documentation:
  - Change log entry
  - User Documentation
  - Developer / Technical Documentation
  - Context sensitive help for GUI changes
- [x] Testing:
  - Unit tests
  - System (end to end) tests
  - Manual testing
- [x] UX of all users considered:
  - Speech
  - Braille
  - Low Vision
  - Different web browsers
  - Localization in other languages / culture than English
- [x] API is compatible with existing add-ons.
- [x] Security precautions taken.
seanbudd pushed a commit that referenced this pull request Oct 9, 2023
…15592)

Fixes #15591

Summary of the issue:
Commit 62536a9
("soffice: Implement methods for status bar announcement (#14933)") added support for status bar announcement in LibreOffice by searching for it in the a11y tree. For performance reasons, only objects of specific roles are considered when traversing the tree. The DIALOG and OPTIONPANE roles, needed to find the status bar in Writer's "Edit Contour" dialog were not taken into account yet, so the status bar was not found and could therefore not be announced when pressing NVDA+End.

In addition, the status bar object in dialogs like that one did not have the proper role in LibreOffice yet.

Description of user facing changes
Status bar announcement for LibreOffice using the NVDA+End keyboard shortcut now also works for dialogs and with the upcoming LibreOffice version 24.2.

Description of development approach
LibreOffice is adapted to expose the proper role for the status bar in dialogs like the one mentioned above:
https://gerrit.libreoffice.org/c/core/+/157659

The DIALOG and OPTIONPANE roles are now also considered by NVDA when traversing the a11y tree to find the status bar.

In addition, the FRAME role is also taken into account, which is needed to support finding the status bar in the default application window with LibreOffice >= 24.2, see commit message of this LibreOffice change for more details: https://gerrit.libreoffice.org/c/core/+/157658

Add a check whether the statusbar children have the 'IAccessibleTextObject' member before accessing it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

LibreOffice Writer: Statusline is not announced
3 participants