nvaccess / nvda

NVDA, the free and open source Screen Reader for Microsoft Windows
https://www.nvaccess.org/
Other
2.11k stars 637 forks source link

PowerPoint: Support for announcing animated textual content after they appear #7877

Open mush42 opened 6 years ago

mush42 commented 6 years ago

Steps to reproduce:

Currently, when you open the slide show window of any PowerPoint presentation, NVDA will read the content of each slide at once when you navigate to it. Although this default behavior is adequate in most situations, consider the case of animated textual content that are initially hidden, which appear when pressing the space bar. The problem is this, NVDA does not announce them when they are shown.

To give a concrete example illustrating what I mean, let's design a simple presentation:

  1. Fire up PowerPoint and create an empty presentation
  2. Press Ctrl+m to create a new slide, tab to the "Title" placeholder and enter any filler text, tab to the "Object" placeholder and type in whatever you want.
  3. Press escape and tab until you select the "Object" placeholder
  4. Press alt and navigate to the "Animations" tab in the Ribbon
  5. In the "Animations" tab, navigate to "Animation styles", select any one of the animations eg. Appear, and then press enter to apply the selected animation.
  6. Press F5 to start the slide show

Actual behavior:

Initially, in the slide show window, only the "Title" will be shown visually. The "Body" wont be shown unless you advance the slide show by pressing "enter" for example.

There are two problems here:

  1. NVDA will read the whole content of the slide, as if all the content is visually shown, which is not accurate
  2. Moreover, when you advance the slide show, the "Body" text will appear visually, but you will not get any feedback from NVDA indicateing that a new content has been shown in the slide.

Expected behavior:

  1. Essentially, NVDA must announce animated textual elements as they appear in the slide, basically, treating the slide show as if it is a live region.
  2. Ideally, if a portion of the slide content is initially hidden, NVDA should not include that hidden portion in its virtual buffer. Instead, NVDA should only, and only, include the visible content of the slide in the buffer, updating the buffer as new content are shown.

Rationale

This bug (or feature) has been nagging on me for a while. I am a university instructor who uses NVDA with PowerPoint on a regular bases to deliver his lectures on many topics related to business, ranging from Managerial Statistics to sales management.

Once in a while, I need to disentangle a complex concept by introducing its elements one by one. The most suitable format for this is having the concepts split into several bullet points, showing each concept after the preceding concepts have been well understood.

Or Consider the more common scenario of having some discussion questions, you don't want your students to be bombarded by five or more questions at once, so initially you show them the first question, and after discussing it exhaustively you can then move on to the next question and so on...

I know that it is possible to do this using powerpoint without relying so much on NVDA's announcements, but wouldn't it be helpful and much easier to have NVDA announce updates as you advance the presentation. This way you will be in the track with sighted people, and for me, I will be always on the flow by eliminating commonly occuring absentmindedness.

Additional Remarks:

I think JFW has this feature for along time, actually, the last time I've used JFW was 6 years ago, and PowerPoint slide shows were working mind bogglingly well then.

feerrenrut commented 6 years ago

While there are plans to move to a UIA implementation for various Office products, for the time being we will need to also continue to support the Office object model. If someone wanted to tackle this feature, a reference for the powerpoint object model can be found here: https://msdn.microsoft.com/en-gb/vba/powerpoint-vba/articles/object-model-powerpoint-vba-reference, at first glance I would suggest looking at shape.visible to determine whether this is false / true before / after the animation. The Using COM with NVDA wiki page should give some background to those who are unfamiliar with how to investigate these objects.

PratikP1 commented 6 years ago

One of the reasons why I have relied on JFW while giving presentations is this bug. The resolution of this will also help when using braille displays. It's far easier to have material appear bullet by bullet on the display rather than needing to scroll back and forth.

bramd commented 6 years ago

I had a quick look at this and don't see an easy way to solve this. Shape.visible is always true it seems. There is info about animations in the Timeline object and it's possible to get the number of clicks for a slide and the current click index, but I don't see an easy way to put this info together and calculate what's actually visible yet.

mush42 commented 6 years ago

Hello everyone,

For @bramd and anyone who might be interested in implementing this.

Quick Technical Facts:

An Initial Implementation Strategy may look like this:

Note: For a complete implementation, refer to this attachment: powerpoint.zip. The attachment is the core module of a little program called "PowerTalk". This program is pretty old, it is dated back to 2003. I've ported the code to python 3, and also reformatted the code and added some minor tweaks. Note also that the module uses pywin32's win32com.client instead of comtypes to access PowerPoint's object model.

Strategy

Qchristensen commented 6 years ago

Although this appears to be a duplicate of #2907 I'd be inclined to keep this one as it seems to have a more up-to-date analysis of the situation. That said, has anyone had a look at this issue recently? It is definitely still an issue in Office 365 as at October 2018.

mush42 commented 6 years ago

Currently I am using a fork of Power Talk I've modified, and it works well with my specific use case. I intend to port those features to NVDA, but I am too busy to do it.

venkateshpotluri commented 5 years ago

@mush42 I face a similar issue but would not like to switch to JFW for my presentations because that interferes with the live captions feature.

Thanks.

dkager commented 5 years ago

This would be a very welcome feature, though I'm a bit disappointed to learn it takes this much effort. Still, I may look into it over summer if noone else has.

Qchristensen commented 1 year ago

This is still an issue under:

NVDA 2023.1.0.27913 Windows 11 (64-bit) Version: 22H2, Build: 22621.1702 Office 365 (64-bit) Version: 16.0.16327.20248

and still being reported by users. I don't have a workaround, although I'd offer the following tips:

(Note this works even where the text in a bullet goes over multiple lines. I just tested a paragraph which was 88 words / 442 characters long)