Topics

how to make a control more accessible

Travis Siegel
 

I have a program I'm working on that has an html view as part of it's main screen.  NVDA reads the text well enough, but it doesn't read it well, in that it breaks lines at unexpected places, and it doesn't show embedded links.  The links isn't really a problem, since I'm not really concerned with links pointing elsewhere anyhow, so that's only a minor issue, but I would like to know how to get NVDA to treat this text area as html text, so it will pay attention to things like headers, and handle the reading a bit better, since now it's reading the text in the window in fragments, and most of the time, those fragments aren't making sense.

Admittedly, I'm not sure how much control I have over the presentation of the text, since it's an imported one, (it calls a windows dll/api to render the text), but when I look at the text line by line, it seems odd to me where NVDA is choosing to put breaks, as well as the fact that the read to end function in NVDA doesn't work.  This at least is one thing I'd really like to fix, since reading is the primary purpose of the app.  I'll include the nvda-F1 text below for the control, perhaps someone here can help me figure out what I need to do to make it work better, whether it be via NVDA plugins, or just adding attributes to the window. There's only so much I can do programatically, since it's an api/dll call, but I'm certainly open to suggestions.  It works as is, but reading the text requires the nvda cursor, not the system one, and I know some folks aren't going to like that, so again, any suggestions would be appreciated.

** cut here **

Developer info for navigator object:
name: u'Copyright'
role: ROLE_DOCUMENT
states: STATE_READONLY
isFocusable: True
hasFocus: False
Python object: <NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessible object at 0x05256770>
Python class mro: (<class 'NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessible'>, <class 'NVDAObjects.behaviors.EditableTextWithoutAutoSelectDetection'>, <class 'editableText.EditableTextWithoutAutoSelectDetection'>, <class 'NVDAObjects.behaviors.EditableText'>, <class 'editableText.EditableText'>, <class 'NVDAObjects.IAccessible.MSHTML.Body'>, <class 'NVDAObjects.IAccessible.MSHTML.MSHTML'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>)
description: None
location: RectLTWH(left=412, top=186, width=759, height=628)
value: ''
appModule: <'appModuleHandler' (appName u'reader', process ID 1084) at address 52567b0>
appModule.productName: exception: No version information
appModule.productVersion: exception: No version information
TextInfo: <class 'NVDAObjects.IAccessible.MSHTML.MSHTMLTextInfo'>
windowHandle: 2556670
windowClassName: u'Internet Explorer_Server'
windowControlID: 0
windowStyle: 1442840576
windowThreadID: 6488
windowText: u''
displayText: u''
IAccessibleObject: <POINTER(IAccessible) ptr=0x9039038 at 5085170>
IAccessibleChildID: 0
IAccessible event parameters: windowHandle=2556670, objectID=None, childID=0
IAccessible accName: u'Copyright'
IAccessible accRole: ROLE_SYSTEM_PANE
IAccessible accState: STATE_SYSTEM_READONLY, STATE_SYSTEM_VALID (64)
IAccessible accDescription: exception: (-2147467263, 'Not implemented', (None, None, None, 0, None))
IAccessible accValue: u'file://C:\\books\\storybundle\\Adventure\\Singularity - Bill DeSmedt\\OEBPS\\copyright.xhtml'
MSHTML node has ancestor IAccessible: False
MSHTML nodeName: u'body'
** cut here**

I'm actually not sure why it's claiming it's an editable object, because it's most certainly not editable <frown>

The rest seems to be correct though.

James Scholes
 

It may be helpful in this instance to have a runnable sample. However, straight off the bat, I'd recommend using a more up-to-date rendering engine for your web view (Chromium would be ideal for instance via CEF).

What environment is creating the web view? Is it a standard Win32 app? WPF? WinForms? UWP? Something else?

Regards,

James Scholes

On 13/08/2019 at 9:21 pm, Travis Siegel wrote:
I have a program I'm working on that has an html view as part of it's main screen.  NVDA reads the text well enough, but it doesn't read it well, in that it breaks lines at unexpected places, and it doesn't show embedded links.  The links isn't really a problem, since I'm not really concerned with links pointing elsewhere anyhow, so that's only a minor issue, but I would like to know how to get NVDA to treat this text area as html text, so it will pay attention to things like headers, and handle the reading a bit better, since now it's reading the text in the window in fragments, and most of the time, those fragments aren't making sense.
Admittedly, I'm not sure how much control I have over the presentation of the text, since it's an imported one, (it calls a windows dll/api to render the text), but when I look at the text line by line, it seems odd to me where NVDA is choosing to put breaks, as well as the fact that the read to end function in NVDA doesn't work.  This at least is one thing I'd really like to fix, since reading is the primary purpose of the app.  I'll include the nvda-F1 text below for the control, perhaps someone here can help me figure out what I need to do to make it work better, whether it be via NVDA plugins, or just adding attributes to the window. There's only so much I can do programatically, since it's an api/dll call, but I'm certainly open to suggestions.  It works as is, but reading the text requires the nvda cursor, not the system one, and I know some folks aren't going to like that, so again, any suggestions would be appreciated.
** cut here **
Developer info for navigator object:
name: u'Copyright'
role: ROLE_DOCUMENT
states: STATE_READONLY
isFocusable: True
hasFocus: False
Python object: <NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessible object at 0x05256770>
Python class mro: (<class 'NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessible'>, <class 'NVDAObjects.behaviors.EditableTextWithoutAutoSelectDetection'>, <class 'editableText.EditableTextWithoutAutoSelectDetection'>, <class 'NVDAObjects.behaviors.EditableText'>, <class 'editableText.EditableText'>, <class 'NVDAObjects.IAccessible.MSHTML.Body'>, <class 'NVDAObjects.IAccessible.MSHTML.MSHTML'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>)
description: None
location: RectLTWH(left=412, top=186, width=759, height=628)
value: ''
appModule: <'appModuleHandler' (appName u'reader', process ID 1084) at address 52567b0>
appModule.productName: exception: No version information
appModule.productVersion: exception: No version information
TextInfo: <class 'NVDAObjects.IAccessible.MSHTML.MSHTMLTextInfo'>
windowHandle: 2556670
windowClassName: u'Internet Explorer_Server'
windowControlID: 0
windowStyle: 1442840576
windowThreadID: 6488
windowText: u''
displayText: u''
IAccessibleObject: <POINTER(IAccessible) ptr=0x9039038 at 5085170>
IAccessibleChildID: 0
IAccessible event parameters: windowHandle=2556670, objectID=None, childID=0
IAccessible accName: u'Copyright'
IAccessible accRole: ROLE_SYSTEM_PANE
IAccessible accState: STATE_SYSTEM_READONLY, STATE_SYSTEM_VALID (64)
IAccessible accDescription: exception: (-2147467263, 'Not implemented', (None, None, None, 0, None))
IAccessible accValue: u'file://C:\\books\\storybundle\\Adventure\\Singularity - Bill DeSmedt\\OEBPS\\copyright.xhtml'
MSHTML node has ancestor IAccessible: False
MSHTML nodeName: u'body'
** cut here**
I'm actually not sure why it's claiming it's an editable object, because it's most certainly not editable <frown>
The rest seems to be correct though.

Travis Siegel
 

It's actually calling routines in the ATL.DLL windows library file.  Two routines from that dll initialize and process the html view.

The atl.dll file on my windows 8.1 system has a file stamp of 2014, so it's a relatively old dll to be sure.  But, that means this code will work on just about any version of windows, which was my primary intent when I started the project.  Admittedly, I didn't have a clue how to do what I wanted (I.E. embed an html control into my program) when I started, but via some heavy use of google, and a bit of searching on my favorite programming sites, I found this little gem that was only a couple functions, a couple api calls, and poof, exactly what I wanted.

Interestingly enough, under jaws, if I tell jaws that the control is an html area, it behaves properly, (which it most certainly did not do before doing so).  In fact, before I told jaws it was an html control, jaws couldn't even find the text on the screen.  To fix that problem, I had to add the html area to the tab order, then tell jaws it was anhtml control, after that, jaws works like a dream, pressing the button (or hot key) to go to the next chapter starts jaws reading the text automatically just as soon as it comes up on the screen.

I was hoping I could do something similar for NVDA.

Especially, since NVDA doesn't suffer from the issue of not knowing the html control is on the screen, it finds it just fine, and I can even read it, but again, I have to use the numpad keys to work my way through the text.  Interestingly enough, NVDA doesn't seem to know about the various headers, links, and other html elements in the text, but jaws not only sees them, but alows me to click on them as if it were an actual browser.  I'm not real happy with that result, since it means NVDA is being shown up at something it initially has a much better handle on, so if I could tell NVDA this is an html area, and allow it to behave accordingly, I'm fairly certain all would work like a treat.

I just don't know how to do that.

On 8/13/2019 5:50 PM, James Scholes wrote:

It may be helpful in this instance to have a runnable sample. However, straight off the bat, I'd recommend using a more up-to-date rendering engine for your web view (Chromium would be ideal for instance via CEF).

What environment is creating the web view?  Is it a standard Win32 app? WPF?  WinForms?  UWP?  Something else?

Regards,

James Scholes

On 13/08/2019 at 9:21 pm, Travis Siegel wrote:
I have a program I'm working on that has an html view as part of it's main screen.  NVDA reads the text well enough, but it doesn't read it well, in that it breaks lines at unexpected places, and it doesn't show embedded links. The links isn't really a problem, since I'm not really concerned with links pointing elsewhere anyhow, so that's only a minor issue, but I would like to know how to get NVDA to treat this text area as html text, so it will pay attention to things like headers, and handle the reading a bit better, since now it's reading the text in the window in fragments, and most of the time, those fragments aren't making sense.

Admittedly, I'm not sure how much control I have over the presentation of the text, since it's an imported one, (it calls a windows dll/api to render the text), but when I look at the text line by line, it seems odd to me where NVDA is choosing to put breaks, as well as the fact that the read to end function in NVDA doesn't work.  This at least is one thing I'd really like to fix, since reading is the primary purpose of the app.  I'll include the nvda-F1 text below for the control, perhaps someone here can help me figure out what I need to do to make it work better, whether it be via NVDA plugins, or just adding attributes to the window. There's only so much I can do programatically, since it's an api/dll call, but I'm certainly open to suggestions.  It works as is, but reading the text requires the nvda cursor, not the system one, and I know some folks aren't going to like that, so again, any suggestions would be appreciated.

** cut here **

Developer info for navigator object:
name: u'Copyright'
role: ROLE_DOCUMENT
states: STATE_READONLY
isFocusable: True
hasFocus: False
Python object: <NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessible object at 0x05256770>
Python class mro: (<class 'NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessible'>, <class 'NVDAObjects.behaviors.EditableTextWithoutAutoSelectDetection'>, <class 'editableText.EditableTextWithoutAutoSelectDetection'>, <class 'NVDAObjects.behaviors.EditableText'>, <class 'editableText.EditableText'>, <class 'NVDAObjects.IAccessible.MSHTML.Body'>, <class 'NVDAObjects.IAccessible.MSHTML.MSHTML'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>)
description: None
location: RectLTWH(left=412, top=186, width=759, height=628)
value: ''
appModule: <'appModuleHandler' (appName u'reader', process ID 1084) at address 52567b0>
appModule.productName: exception: No version information
appModule.productVersion: exception: No version information
TextInfo: <class 'NVDAObjects.IAccessible.MSHTML.MSHTMLTextInfo'>
windowHandle: 2556670
windowClassName: u'Internet Explorer_Server'
windowControlID: 0
windowStyle: 1442840576
windowThreadID: 6488
windowText: u''
displayText: u''
IAccessibleObject: <POINTER(IAccessible) ptr=0x9039038 at 5085170>
IAccessibleChildID: 0
IAccessible event parameters: windowHandle=2556670, objectID=None, childID=0
IAccessible accName: u'Copyright'
IAccessible accRole: ROLE_SYSTEM_PANE
IAccessible accState: STATE_SYSTEM_READONLY, STATE_SYSTEM_VALID (64)
IAccessible accDescription: exception: (-2147467263, 'Not implemented', (None, None, None, 0, None))
IAccessible accValue: u'file://C:\\books\\storybundle\\Adventure\\Singularity - Bill DeSmedt\\OEBPS\\copyright.xhtml'
MSHTML node has ancestor IAccessible: False
MSHTML nodeName: u'body'
** cut here**

I'm actually not sure why it's claiming it's an editable object, because it's most certainly not editable <frown>

The rest seems to be correct though.





James Scholes
 

I don't want to stress overly on this, but when you say "next chapter", it sounds like you're creating some sort of reading software. If it's for eBooks, that really strengthens the case for a better browser engine. There's no reason an embedded Chrome browser can't work across multiple versions of Windows.

Regards,

James Scholes

On 14/08/2019 at 12:34 am, Travis Siegel wrote:
It's actually calling routines in the ATL.DLL windows library file.  Two routines from that dll initialize and process the html view.
The atl.dll file on my windows 8.1 system has a file stamp of 2014, so it's a relatively old dll to be sure.  But, that means this code will work on just about any version of windows, which was my primary intent when I started the project.  Admittedly, I didn't have a clue how to do what I wanted (I.E. embed an html control into my program) when I started, but via some heavy use of google, and a bit of searching on my favorite programming sites, I found this little gem that was only a couple functions, a couple api calls, and poof, exactly what I wanted.
Interestingly enough, under jaws, if I tell jaws that the control is an html area, it behaves properly, (which it most certainly did not do before doing so).  In fact, before I told jaws it was an html control, jaws couldn't even find the text on the screen.  To fix that problem, I had to add the html area to the tab order, then tell jaws it was anhtml control, after that, jaws works like a dream, pressing the button (or hot key) to go to the next chapter starts jaws reading the text automatically just as soon as it comes up on the screen.
I was hoping I could do something similar for NVDA.
Especially, since NVDA doesn't suffer from the issue of not knowing the html control is on the screen, it finds it just fine, and I can even read it, but again, I have to use the numpad keys to work my way through the text.  Interestingly enough, NVDA doesn't seem to know about the various headers, links, and other html elements in the text, but jaws not only sees them, but alows me to click on them as if it were an actual browser.  I'm not real happy with that result, since it means NVDA is being shown up at something it initially has a much better handle on, so if I could tell NVDA this is an html area, and allow it to behave accordingly, I'm fairly certain all would work like a treat.
I just don't know how to do that.
On 8/13/2019 5:50 PM, James Scholes wrote:

It may be helpful in this instance to have a runnable sample. However, straight off the bat, I'd recommend using a more up-to-date rendering engine for your web view (Chromium would be ideal for instance via CEF).

What environment is creating the web view?  Is it a standard Win32 app? WPF?  WinForms?  UWP?  Something else?

Regards,

James Scholes

On 13/08/2019 at 9:21 pm, Travis Siegel wrote:
I have a program I'm working on that has an html view as part of it's main screen.  NVDA reads the text well enough, but it doesn't read it well, in that it breaks lines at unexpected places, and it doesn't show embedded links. The links isn't really a problem, since I'm not really concerned with links pointing elsewhere anyhow, so that's only a minor issue, but I would like to know how to get NVDA to treat this text area as html text, so it will pay attention to things like headers, and handle the reading a bit better, since now it's reading the text in the window in fragments, and most of the time, those fragments aren't making sense.

Admittedly, I'm not sure how much control I have over the presentation of the text, since it's an imported one, (it calls a windows dll/api to render the text), but when I look at the text line by line, it seems odd to me where NVDA is choosing to put breaks, as well as the fact that the read to end function in NVDA doesn't work. This at least is one thing I'd really like to fix, since reading is the primary purpose of the app.  I'll include the nvda-F1 text below for the control, perhaps someone here can help me figure out what I need to do to make it work better, whether it be via NVDA plugins, or just adding attributes to the window. There's only so much I can do programatically, since it's an api/dll call, but I'm certainly open to suggestions.  It works as is, but reading the text requires the nvda cursor, not the system one, and I know some folks aren't going to like that, so again, any suggestions would be appreciated.

** cut here **

Developer info for navigator object:
name: u'Copyright'
role: ROLE_DOCUMENT
states: STATE_READONLY
isFocusable: True
hasFocus: False
Python object: <NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessible object at 0x05256770>
Python class mro: (<class 'NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessible'>, <class 'NVDAObjects.behaviors.EditableTextWithoutAutoSelectDetection'>, <class 'editableText.EditableTextWithoutAutoSelectDetection'>, <class 'NVDAObjects.behaviors.EditableText'>, <class 'editableText.EditableText'>, <class 'NVDAObjects.IAccessible.MSHTML.Body'>, <class 'NVDAObjects.IAccessible.MSHTML.MSHTML'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>)
description: None
location: RectLTWH(left=412, top=186, width=759, height=628)
value: ''
appModule: <'appModuleHandler' (appName u'reader', process ID 1084) at address 52567b0>
appModule.productName: exception: No version information
appModule.productVersion: exception: No version information
TextInfo: <class 'NVDAObjects.IAccessible.MSHTML.MSHTMLTextInfo'>
windowHandle: 2556670
windowClassName: u'Internet Explorer_Server'
windowControlID: 0
windowStyle: 1442840576
windowThreadID: 6488
windowText: u''
displayText: u''
IAccessibleObject: <POINTER(IAccessible) ptr=0x9039038 at 5085170>
IAccessibleChildID: 0
IAccessible event parameters: windowHandle=2556670, objectID=None, childID=0
IAccessible accName: u'Copyright'
IAccessible accRole: ROLE_SYSTEM_PANE
IAccessible accState: STATE_SYSTEM_READONLY, STATE_SYSTEM_VALID (64)
IAccessible accDescription: exception: (-2147467263, 'Not implemented', (None, None, None, 0, None))
IAccessible accValue: u'file://C:\\books\\storybundle\\Adventure\\Singularity - Bill DeSmedt\\OEBPS\\copyright.xhtml'
MSHTML node has ancestor IAccessible: False
MSHTML nodeName: u'body'
** cut here**

I'm actually not sure why it's claiming it's an editable object, because it's most certainly not editable <frown>

The rest seems to be correct though.






Brian's Mail list account
 

It seems the implementation is not triggering the creation of the virtual buffer here, which is why its not working.
Brian

bglists@...
Sent via blueyonder.
Please address personal E-mail to:-
briang1@..., putting 'Brian Gaff'
in the display name field.
Newsgroup monitored: alt.comp.blind-users

----- Original Message -----
From: "Travis Siegel" <tsiegel@...>
To: <nvda-devel@groups.io>
Sent: Wednesday, August 14, 2019 12:34 AM
Subject: Re: [nvda-devel] how to make a control more accessible


It's actually calling routines in the ATL.DLL windows library file. Two
routines from that dll initialize and process the html view.

The atl.dll file on my windows 8.1 system has a file stamp of 2014, so
it's a relatively old dll to be sure. But, that means this code will
work on just about any version of windows, which was my primary intent
when I started the project. Admittedly, I didn't have a clue how to do
what I wanted (I.E. embed an html control into my program) when I
started, but via some heavy use of google, and a bit of searching on my
favorite programming sites, I found this little gem that was only a
couple functions, a couple api calls, and poof, exactly what I wanted.

Interestingly enough, under jaws, if I tell jaws that the control is an
html area, it behaves properly, (which it most certainly did not do
before doing so). In fact, before I told jaws it was an html control,
jaws couldn't even find the text on the screen. To fix that problem, I
had to add the html area to the tab order, then tell jaws it was anhtml
control, after that, jaws works like a dream, pressing the button (or
hot key) to go to the next chapter starts jaws reading the text
automatically just as soon as it comes up on the screen.

I was hoping I could do something similar for NVDA.

Especially, since NVDA doesn't suffer from the issue of not knowing the
html control is on the screen, it finds it just fine, and I can even
read it, but again, I have to use the numpad keys to work my way through
the text. Interestingly enough, NVDA doesn't seem to know about the
various headers, links, and other html elements in the text, but jaws
not only sees them, but alows me to click on them as if it were an
actual browser. I'm not real happy with that result, since it means
NVDA is being shown up at something it initially has a much better
handle on, so if I could tell NVDA this is an html area, and allow it to
behave accordingly, I'm fairly certain all would work like a treat.

I just don't know how to do that.


On 8/13/2019 5:50 PM, James Scholes wrote:

It may be helpful in this instance to have a runnable sample. However, straight off the bat, I'd recommend using a more up-to-date rendering engine for your web view (Chromium would be ideal for instance via CEF).

What environment is creating the web view? Is it a standard Win32 app? WPF? WinForms? UWP? Something else?

Regards,

James Scholes

On 13/08/2019 at 9:21 pm, Travis Siegel wrote:
I have a program I'm working on that has an html view as part of it's main screen. NVDA reads the text well enough, but it doesn't read it well, in that it breaks lines at unexpected places, and it doesn't show embedded links. The links isn't really a problem, since I'm not really concerned with links pointing elsewhere anyhow, so that's only a minor issue, but I would like to know how to get NVDA to treat this text area as html text, so it will pay attention to things like headers, and handle the reading a bit better, since now it's reading the text in the window in fragments, and most of the time, those fragments aren't making sense.

Admittedly, I'm not sure how much control I have over the presentation of the text, since it's an imported one, (it calls a windows dll/api to render the text), but when I look at the text line by line, it seems odd to me where NVDA is choosing to put breaks, as well as the fact that the read to end function in NVDA doesn't work. This at least is one thing I'd really like to fix, since reading is the primary purpose of the app. I'll include the nvda-F1 text below for the control, perhaps someone here can help me figure out what I need to do to make it work better, whether it be via NVDA plugins, or just adding attributes to the window. There's only so much I can do programatically, since it's an api/dll call, but I'm certainly open to suggestions. It works as is, but reading the text requires the nvda cursor, not the system one, and I know some folks aren't going to like that, so again, any suggestions would be appreciated.

** cut here **

Developer info for navigator object:
name: u'Copyright'
role: ROLE_DOCUMENT
states: STATE_READONLY
isFocusable: True
hasFocus: False
Python object: <NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessible object at 0x05256770>
Python class mro: (<class 'NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessible'>, <class 'NVDAObjects.behaviors.EditableTextWithoutAutoSelectDetection'>, <class 'editableText.EditableTextWithoutAutoSelectDetection'>, <class 'NVDAObjects.behaviors.EditableText'>, <class 'editableText.EditableText'>, <class 'NVDAObjects.IAccessible.MSHTML.Body'>, <class 'NVDAObjects.IAccessible.MSHTML.MSHTML'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>)
description: None
location: RectLTWH(left=412, top=186, width=759, height=628)
value: ''
appModule: <'appModuleHandler' (appName u'reader', process ID 1084) at address 52567b0>
appModule.productName: exception: No version information
appModule.productVersion: exception: No version information
TextInfo: <class 'NVDAObjects.IAccessible.MSHTML.MSHTMLTextInfo'>
windowHandle: 2556670
windowClassName: u'Internet Explorer_Server'
windowControlID: 0
windowStyle: 1442840576
windowThreadID: 6488
windowText: u''
displayText: u''
IAccessibleObject: <POINTER(IAccessible) ptr=0x9039038 at 5085170>
IAccessibleChildID: 0
IAccessible event parameters: windowHandle=2556670, objectID=None, childID=0
IAccessible accName: u'Copyright'
IAccessible accRole: ROLE_SYSTEM_PANE
IAccessible accState: STATE_SYSTEM_READONLY, STATE_SYSTEM_VALID (64)
IAccessible accDescription: exception: (-2147467263, 'Not implemented', (None, None, None, 0, None))
IAccessible accValue: u'file://C:\\books\\storybundle\\Adventure\\Singularity - Bill DeSmedt\\OEBPS\\copyright.xhtml'
MSHTML node has ancestor IAccessible: False
MSHTML nodeName: u'body'
** cut here**

I'm actually not sure why it's claiming it's an editable object, because it's most certainly not editable <frown>

The rest seems to be correct though.






Travis Siegel
 

Yeah, but the problem is that if I use an embedded chrome browser, I need to ship extra crap with my program, and from my experience, the more stuff you include, the more problems people have with it, (because they have a tendency to knowingly (or otherwise) break things.  I'd much rather use a windows embedded control even if it isn't the best possible solution, because then there's fewer things to break.

And, yes, it's ebook reading software.  I don't know about anyone else, but I got fed up with the inaccessible epub reading software out there, because I couldn't find a single epub reader that did the job simply, easily, and was 100 percent accessible.  I normally just extract the epub files myself, and read them in my browser, but I've run across a few epub files that have what amounts to random garbage for file names, and determining the order of reading was problematic, so that kind of nixed the browser reading process I usually use.  Those are the main reason I set out to write this piece of software.

If nobody else uses it, that's ok with me, it solves a problem I have, and really, that's all that's necessary.  I'm just trying to make it more user friendly, so that I can release it and allow others to use it as well.

If I can't find a way to do that, then I'll leave it as is, but I just know I'm going to get complaints because it doesn't read automatically, or because it doesn't handle broken epub files, or because it doesn't read outloud, or any number of other issues I haven't even thought of yet.

Folks really tend to blow up if it works well for one screen reader, but not for another one, so that's why the questions here.  I have no trouble making it work perfectly with jaws, and I'd really like to have that same transparency with NVDA, since that's my screen reader of choice, and it's kind of sad that I'd release a program that works better on a screen reader I don't even use.

On 8/14/2019 3:55 AM, James Scholes wrote:

I don't want to stress overly on this, but when you say "next chapter", it sounds like you're creating some sort of reading software.  If it's for eBooks, that really strengthens the case for a better browser engine.  There's no reason an embedded Chrome browser can't work across multiple versions of Windows.

Regards,

James Scholes

On 14/08/2019 at 12:34 am, Travis Siegel wrote:
It's actually calling routines in the ATL.DLL windows library file.  Two routines from that dll initialize and process the html view.

The atl.dll file on my windows 8.1 system has a file stamp of 2014, so it's a relatively old dll to be sure.  But, that means this code will work on just about any version of windows, which was my primary intent when I started the project.  Admittedly, I didn't have a clue how to do what I wanted (I.E. embed an html control into my program) when I started, but via some heavy use of google, and a bit of searching on my favorite programming sites, I found this little gem that was only a couple functions, a couple api calls, and poof, exactly what I wanted.

Interestingly enough, under jaws, if I tell jaws that the control is an html area, it behaves properly, (which it most certainly did not do before doing so).  In fact, before I told jaws it was an html control, jaws couldn't even find the text on the screen.  To fix that problem, I had to add the html area to the tab order, then tell jaws it was anhtml control, after that, jaws works like a dream, pressing the button (or hot key) to go to the next chapter starts jaws reading the text automatically just as soon as it comes up on the screen.

I was hoping I could do something similar for NVDA.

Especially, since NVDA doesn't suffer from the issue of not knowing the html control is on the screen, it finds it just fine, and I can even read it, but again, I have to use the numpad keys to work my way through the text.  Interestingly enough, NVDA doesn't seem to know about the various headers, links, and other html elements in the text, but jaws not only sees them, but alows me to click on them as if it were an actual browser.  I'm not real happy with that result, since it means NVDA is being shown up at something it initially has a much better handle on, so if I could tell NVDA this is an html area, and allow it to behave accordingly, I'm fairly certain all would work like a treat.

I just don't know how to do that.


On 8/13/2019 5:50 PM, James Scholes wrote:

It may be helpful in this instance to have a runnable sample. However, straight off the bat, I'd recommend using a more up-to-date rendering engine for your web view (Chromium would be ideal for instance via CEF).

What environment is creating the web view?  Is it a standard Win32 app? WPF?  WinForms?  UWP?  Something else?

Regards,

James Scholes

On 13/08/2019 at 9:21 pm, Travis Siegel wrote:
I have a program I'm working on that has an html view as part of it's main screen.  NVDA reads the text well enough, but it doesn't read it well, in that it breaks lines at unexpected places, and it doesn't show embedded links. The links isn't really a problem, since I'm not really concerned with links pointing elsewhere anyhow, so that's only a minor issue, but I would like to know how to get NVDA to treat this text area as html text, so it will pay attention to things like headers, and handle the reading a bit better, since now it's reading the text in the window in fragments, and most of the time, those fragments aren't making sense.

Admittedly, I'm not sure how much control I have over the presentation of the text, since it's an imported one, (it calls a windows dll/api to render the text), but when I look at the text line by line, it seems odd to me where NVDA is choosing to put breaks, as well as the fact that the read to end function in NVDA doesn't work. This at least is one thing I'd really like to fix, since reading is the primary purpose of the app.  I'll include the nvda-F1 text below for the control, perhaps someone here can help me figure out what I need to do to make it work better, whether it be via NVDA plugins, or just adding attributes to the window. There's only so much I can do programatically, since it's an api/dll call, but I'm certainly open to suggestions.  It works as is, but reading the text requires the nvda cursor, not the system one, and I know some folks aren't going to like that, so again, any suggestions would be appreciated.

** cut here **

Developer info for navigator object:
name: u'Copyright'
role: ROLE_DOCUMENT
states: STATE_READONLY
isFocusable: True
hasFocus: False
Python object: <NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessible object at 0x05256770>
Python class mro: (<class 'NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessible'>, <class 'NVDAObjects.behaviors.EditableTextWithoutAutoSelectDetection'>, <class 'editableText.EditableTextWithoutAutoSelectDetection'>, <class 'NVDAObjects.behaviors.EditableText'>, <class 'editableText.EditableText'>, <class 'NVDAObjects.IAccessible.MSHTML.Body'>, <class 'NVDAObjects.IAccessible.MSHTML.MSHTML'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>)
description: None
location: RectLTWH(left=412, top=186, width=759, height=628)
value: ''
appModule: <'appModuleHandler' (appName u'reader', process ID 1084) at address 52567b0>
appModule.productName: exception: No version information
appModule.productVersion: exception: No version information
TextInfo: <class 'NVDAObjects.IAccessible.MSHTML.MSHTMLTextInfo'>
windowHandle: 2556670
windowClassName: u'Internet Explorer_Server'
windowControlID: 0
windowStyle: 1442840576
windowThreadID: 6488
windowText: u''
displayText: u''
IAccessibleObject: <POINTER(IAccessible) ptr=0x9039038 at 5085170>
IAccessibleChildID: 0
IAccessible event parameters: windowHandle=2556670, objectID=None, childID=0
IAccessible accName: u'Copyright'
IAccessible accRole: ROLE_SYSTEM_PANE
IAccessible accState: STATE_SYSTEM_READONLY, STATE_SYSTEM_VALID (64)
IAccessible accDescription: exception: (-2147467263, 'Not implemented', (None, None, None, 0, None))
IAccessible accValue: u'file://C:\\books\\storybundle\\Adventure\\Singularity - Bill DeSmedt\\OEBPS\\copyright.xhtml'
MSHTML node has ancestor IAccessible: False
MSHTML nodeName: u'body'
** cut here**

I'm actually not sure why it's claiming it's an editable object, because it's most certainly not editable <frown>

The rest seems to be correct though.









Tyler Spivey
 

If the HTML control works with JAWS and lets you use browse mode, then I would argue that it was a bug in NVDA.
Submit a simple test program with one HTMl control as an issue and see what happens.

On 8/14/2019 11:47 AM, Travis Siegel wrote:
Yeah, but the problem is that if I use an embedded chrome browser, I need to ship extra crap with my program, and from my experience, the more stuff you include, the more problems people have with it, (because they have a tendency to knowingly (or otherwise) break things.  I'd much rather use a windows embedded control even if it isn't the best possible solution, because then there's fewer things to break.
And, yes, it's ebook reading software.  I don't know about anyone else, but I got fed up with the inaccessible epub reading software out there, because I couldn't find a single epub reader that did the job simply, easily, and was 100 percent accessible.  I normally just extract the epub files myself, and read them in my browser, but I've run across a few epub files that have what amounts to random garbage for file names, and determining the order of reading was problematic, so that kind of nixed the browser reading process I usually use.  Those are the main reason I set out to write this piece of software.
If nobody else uses it, that's ok with me, it solves a problem I have, and really, that's all that's necessary.  I'm just trying to make it more user friendly, so that I can release it and allow others to use it as well.
If I can't find a way to do that, then I'll leave it as is, but I just know I'm going to get complaints because it doesn't read automatically, or because it doesn't handle broken epub files, or because it doesn't read outloud, or any number of other issues I haven't even thought of yet.
Folks really tend to blow up if it works well for one screen reader, but not for another one, so that's why the questions here.  I have no trouble making it work perfectly with jaws, and I'd really like to have that same transparency with NVDA, since that's my screen reader of choice, and it's kind of sad that I'd release a program that works better on a screen reader I don't even use.
On 8/14/2019 3:55 AM, James Scholes wrote:

I don't want to stress overly on this, but when you say "next chapter", it sounds like you're creating some sort of reading software.  If it's for eBooks, that really strengthens the case for a better browser engine.  There's no reason an embedded Chrome browser can't work across multiple versions of Windows.

Regards,

James Scholes

On 14/08/2019 at 12:34 am, Travis Siegel wrote:
It's actually calling routines in the ATL.DLL windows library file. Two routines from that dll initialize and process the html view.

The atl.dll file on my windows 8.1 system has a file stamp of 2014, so it's a relatively old dll to be sure.  But, that means this code will work on just about any version of windows, which was my primary intent when I started the project.  Admittedly, I didn't have a clue how to do what I wanted (I.E. embed an html control into my program) when I started, but via some heavy use of google, and a bit of searching on my favorite programming sites, I found this little gem that was only a couple functions, a couple api calls, and poof, exactly what I wanted.

Interestingly enough, under jaws, if I tell jaws that the control is an html area, it behaves properly, (which it most certainly did not do before doing so).  In fact, before I told jaws it was an html control, jaws couldn't even find the text on the screen.  To fix that problem, I had to add the html area to the tab order, then tell jaws it was anhtml control, after that, jaws works like a dream, pressing the button (or hot key) to go to the next chapter starts jaws reading the text automatically just as soon as it comes up on the screen.

I was hoping I could do something similar for NVDA.

Especially, since NVDA doesn't suffer from the issue of not knowing the html control is on the screen, it finds it just fine, and I can even read it, but again, I have to use the numpad keys to work my way through the text.  Interestingly enough, NVDA doesn't seem to know about the various headers, links, and other html elements in the text, but jaws not only sees them, but alows me to click on them as if it were an actual browser.  I'm not real happy with that result, since it means NVDA is being shown up at something it initially has a much better handle on, so if I could tell NVDA this is an html area, and allow it to behave accordingly, I'm fairly certain all would work like a treat.

I just don't know how to do that.


On 8/13/2019 5:50 PM, James Scholes wrote:

It may be helpful in this instance to have a runnable sample. However, straight off the bat, I'd recommend using a more up-to-date rendering engine for your web view (Chromium would be ideal for instance via CEF).

What environment is creating the web view?  Is it a standard Win32 app? WPF?  WinForms?  UWP?  Something else?

Regards,

James Scholes

On 13/08/2019 at 9:21 pm, Travis Siegel wrote:
I have a program I'm working on that has an html view as part of it's main screen.  NVDA reads the text well enough, but it doesn't read it well, in that it breaks lines at unexpected places, and it doesn't show embedded links. The links isn't really a problem, since I'm not really concerned with links pointing elsewhere anyhow, so that's only a minor issue, but I would like to know how to get NVDA to treat this text area as html text, so it will pay attention to things like headers, and handle the reading a bit better, since now it's reading the text in the window in fragments, and most of the time, those fragments aren't making sense.

Admittedly, I'm not sure how much control I have over the presentation of the text, since it's an imported one, (it calls a windows dll/api to render the text), but when I look at the text line by line, it seems odd to me where NVDA is choosing to put breaks, as well as the fact that the read to end function in NVDA doesn't work. This at least is one thing I'd really like to fix, since reading is the primary purpose of the app.  I'll include the nvda-F1 text below for the control, perhaps someone here can help me figure out what I need to do to make it work better, whether it be via NVDA plugins, or just adding attributes to the window. There's only so much I can do programatically, since it's an api/dll call, but I'm certainly open to suggestions.  It works as is, but reading the text requires the nvda cursor, not the system one, and I know some folks aren't going to like that, so again, any suggestions would be appreciated.

** cut here **

Developer info for navigator object:
name: u'Copyright'
role: ROLE_DOCUMENT
states: STATE_READONLY
isFocusable: True
hasFocus: False
Python object: <NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessible object at 0x05256770>
Python class mro: (<class 'NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessible'>, <class 'NVDAObjects.behaviors.EditableTextWithoutAutoSelectDetection'>, <class 'editableText.EditableTextWithoutAutoSelectDetection'>, <class 'NVDAObjects.behaviors.EditableText'>, <class 'editableText.EditableText'>, <class 'NVDAObjects.IAccessible.MSHTML.Body'>, <class 'NVDAObjects.IAccessible.MSHTML.MSHTML'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>)
description: None
location: RectLTWH(left=412, top=186, width=759, height=628)
value: ''
appModule: <'appModuleHandler' (appName u'reader', process ID 1084) at address 52567b0>
appModule.productName: exception: No version information
appModule.productVersion: exception: No version information
TextInfo: <class 'NVDAObjects.IAccessible.MSHTML.MSHTMLTextInfo'>
windowHandle: 2556670
windowClassName: u'Internet Explorer_Server'
windowControlID: 0
windowStyle: 1442840576
windowThreadID: 6488
windowText: u''
displayText: u''
IAccessibleObject: <POINTER(IAccessible) ptr=0x9039038 at 5085170>
IAccessibleChildID: 0
IAccessible event parameters: windowHandle=2556670, objectID=None, childID=0
IAccessible accName: u'Copyright'
IAccessible accRole: ROLE_SYSTEM_PANE
IAccessible accState: STATE_SYSTEM_READONLY, STATE_SYSTEM_VALID (64)
IAccessible accDescription: exception: (-2147467263, 'Not implemented', (None, None, None, 0, None))
IAccessible accValue: u'file://C:\\books\\storybundle\\Adventure\\Singularity - Bill DeSmedt\\OEBPS\\copyright.xhtml'
MSHTML node has ancestor IAccessible: False
MSHTML nodeName: u'body'
** cut here**

I'm actually not sure why it's claiming it's an editable object, because it's most certainly not editable <frown>

The rest seems to be correct though.










Travis Siegel
 

Yeah, but you see, that's the problem.

By itself, it doesn't work with jaws.  As I said before, Jaws couldn't even see the text of the html area, until I did several things.

1. I made the html area part of the tab order.

(before that it wasn't included, because it was only a display area, and there was no need to focus the cursor there, since you couldn't do anything with it anyway).

2. I made the default focus go to this html area.
Because, without doing that, jaws couldn't find the control on the screen, I had to use the mouse to get jaws to focus on it.
3. I used the jaws-f6 (or f5, don't remember which) key to reclassify the control as an html area.
By doing that, jaws now treats the text as html text, including the capability to click on links and the whole works.
This is exactly what I was trying to make NVDA do, because when it comes down to it, it truly is html code, and that's why I was hunting for an embedded windows control to handle it for me, otherwise I'd have to write all kinds of parsing code (if for no other reason, to strip out the xml and html tags in the epub files) to have them display properly.  This method saves me lots and lots of time.

Now, with that said,
Even before the changes above, NVDA did not have any problems seeing the text area, and getting to it was as simple as NVDA-left arrow when focused on the first tabbable control.

After these changes, you need only nvda-down arrow to get into the text area, then you can read the text with the normal navigation keys on the numpad.

The only issue there is that the chunks of text NVDA reads have little (if any) bearing on the actual text formatting.

That's why I'd like to reclassify the text area as an html control, so NVDA will behave properly.

The problem though is that NVDA has no facility for doing this like jaws does, so I haven't a clue how to make it happen.

As I said, it works as is, but it requires a bit more effort, and there's just no way folks are going to like that.  Heck, sometimes (like if I'm eating or something) I still load up my browser to read the epub files, because I can have it read continuously instead of having to reach up and tap the numpad-9 key every few seconds.

So, if I'm not happy with tthe way it works, I know others aren't going to be happy with it either, that's the whole reason for asking here to see how this can be solved.

Using another method of displaying the file is fine, as long as that method can be integrated into my program, and not leave any stray pieces lying around.

On 8/14/2019 2:54 PM, Tyler Spivey wrote:

If the HTML control works with JAWS and lets you use browse mode, then I would argue that it was a bug in NVDA.
Submit a simple test program with one HTMl control as an issue and see what happens.

On 8/14/2019 11:47 AM, Travis Siegel wrote:
Yeah, but the problem is that if I use an embedded chrome browser, I need to ship extra crap with my program, and from my experience, the more stuff you include, the more problems people have with it, (because they have a tendency to knowingly (or otherwise) break things.  I'd much rather use a windows embedded control even if it isn't the best possible solution, because then there's fewer things to break.

And, yes, it's ebook reading software.  I don't know about anyone else, but I got fed up with the inaccessible epub reading software out there, because I couldn't find a single epub reader that did the job simply, easily, and was 100 percent accessible.  I normally just extract the epub files myself, and read them in my browser, but I've run across a few epub files that have what amounts to random garbage for file names, and determining the order of reading was problematic, so that kind of nixed the browser reading process I usually use.  Those are the main reason I set out to write this piece of software.

If nobody else uses it, that's ok with me, it solves a problem I have, and really, that's all that's necessary.  I'm just trying to make it more user friendly, so that I can release it and allow others to use it as well.

If I can't find a way to do that, then I'll leave it as is, but I just know I'm going to get complaints because it doesn't read automatically, or because it doesn't handle broken epub files, or because it doesn't read outloud, or any number of other issues I haven't even thought of yet.

Folks really tend to blow up if it works well for one screen reader, but not for another one, so that's why the questions here.  I have no trouble making it work perfectly with jaws, and I'd really like to have that same transparency with NVDA, since that's my screen reader of choice, and it's kind of sad that I'd release a program that works better on a screen reader I don't even use.


On 8/14/2019 3:55 AM, James Scholes wrote:

I don't want to stress overly on this, but when you say "next chapter", it sounds like you're creating some sort of reading software.  If it's for eBooks, that really strengthens the case for a better browser engine. There's no reason an embedded Chrome browser can't work across multiple versions of Windows.

Regards,

James Scholes

On 14/08/2019 at 12:34 am, Travis Siegel wrote:
It's actually calling routines in the ATL.DLL windows library file. Two routines from that dll initialize and process the html view.

The atl.dll file on my windows 8.1 system has a file stamp of 2014, so it's a relatively old dll to be sure.  But, that means this code will work on just about any version of windows, which was my primary intent when I started the project.  Admittedly, I didn't have a clue how to do what I wanted (I.E. embed an html control into my program) when I started, but via some heavy use of google, and a bit of searching on my favorite programming sites, I found this little gem that was only a couple functions, a couple api calls, and poof, exactly what I wanted.

Interestingly enough, under jaws, if I tell jaws that the control is an html area, it behaves properly, (which it most certainly did not do before doing so).  In fact, before I told jaws it was an html control, jaws couldn't even find the text on the screen.  To fix that problem, I had to add the html area to the tab order, then tell jaws it was anhtml control, after that, jaws works like a dream, pressing the button (or hot key) to go to the next chapter starts jaws reading the text automatically just as soon as it comes up on the screen.

I was hoping I could do something similar for NVDA.

Especially, since NVDA doesn't suffer from the issue of not knowing the html control is on the screen, it finds it just fine, and I can even read it, but again, I have to use the numpad keys to work my way through the text.  Interestingly enough, NVDA doesn't seem to know about the various headers, links, and other html elements in the text, but jaws not only sees them, but alows me to click on them as if it were an actual browser.  I'm not real happy with that result, since it means NVDA is being shown up at something it initially has a much better handle on, so if I could tell NVDA this is an html area, and allow it to behave accordingly, I'm fairly certain all would work like a treat.

I just don't know how to do that.


On 8/13/2019 5:50 PM, James Scholes wrote:

It may be helpful in this instance to have a runnable sample. However, straight off the bat, I'd recommend using a more up-to-date rendering engine for your web view (Chromium would be ideal for instance via CEF).

What environment is creating the web view?  Is it a standard Win32 app? WPF?  WinForms?  UWP?  Something else?

Regards,

James Scholes

On 13/08/2019 at 9:21 pm, Travis Siegel wrote:
I have a program I'm working on that has an html view as part of it's main screen.  NVDA reads the text well enough, but it doesn't read it well, in that it breaks lines at unexpected places, and it doesn't show embedded links. The links isn't really a problem, since I'm not really concerned with links pointing elsewhere anyhow, so that's only a minor issue, but I would like to know how to get NVDA to treat this text area as html text, so it will pay attention to things like headers, and handle the reading a bit better, since now it's reading the text in the window in fragments, and most of the time, those fragments aren't making sense.

Admittedly, I'm not sure how much control I have over the presentation of the text, since it's an imported one, (it calls a windows dll/api to render the text), but when I look at the text line by line, it seems odd to me where NVDA is choosing to put breaks, as well as the fact that the read to end function in NVDA doesn't work. This at least is one thing I'd really like to fix, since reading is the primary purpose of the app.  I'll include the nvda-F1 text below for the control, perhaps someone here can help me figure out what I need to do to make it work better, whether it be via NVDA plugins, or just adding attributes to the window. There's only so much I can do programatically, since it's an api/dll call, but I'm certainly open to suggestions.  It works as is, but reading the text requires the nvda cursor, not the system one, and I know some folks aren't going to like that, so again, any suggestions would be appreciated.

** cut here **

Developer info for navigator object:
name: u'Copyright'
role: ROLE_DOCUMENT
states: STATE_READONLY
isFocusable: True
hasFocus: False
Python object: <NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessible object at 0x05256770>
Python class mro: (<class 'NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessible'>, <class 'NVDAObjects.behaviors.EditableTextWithoutAutoSelectDetection'>, <class 'editableText.EditableTextWithoutAutoSelectDetection'>, <class 'NVDAObjects.behaviors.EditableText'>, <class 'editableText.EditableText'>, <class 'NVDAObjects.IAccessible.MSHTML.Body'>, <class 'NVDAObjects.IAccessible.MSHTML.MSHTML'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>)
description: None
location: RectLTWH(left=412, top=186, width=759, height=628)
value: ''
appModule: <'appModuleHandler' (appName u'reader', process ID 1084) at address 52567b0>
appModule.productName: exception: No version information
appModule.productVersion: exception: No version information
TextInfo: <class 'NVDAObjects.IAccessible.MSHTML.MSHTMLTextInfo'>
windowHandle: 2556670
windowClassName: u'Internet Explorer_Server'
windowControlID: 0
windowStyle: 1442840576
windowThreadID: 6488
windowText: u''
displayText: u''
IAccessibleObject: <POINTER(IAccessible) ptr=0x9039038 at 5085170>
IAccessibleChildID: 0
IAccessible event parameters: windowHandle=2556670, objectID=None, childID=0
IAccessible accName: u'Copyright'
IAccessible accRole: ROLE_SYSTEM_PANE
IAccessible accState: STATE_SYSTEM_READONLY, STATE_SYSTEM_VALID (64)
IAccessible accDescription: exception: (-2147467263, 'Not implemented', (None, None, None, 0, None))
IAccessible accValue: u'file://C:\\books\\storybundle\\Adventure\\Singularity - Bill DeSmedt\\OEBPS\\copyright.xhtml'
MSHTML node has ancestor IAccessible: False
MSHTML nodeName: u'body'
** cut here**

I'm actually not sure why it's claiming it's an editable object, because it's most certainly not editable <frown>

The rest seems to be correct though.














 

Hi,
Actually, there might be a way to "reclassify" the text area as an HTML content, but doing so requires the following:]
1. A reliable way to identify this control - not object navigation emulation, but things such as window class name, control ID, and info you may fetch from accessibility API's in hopes of identifying this control.
2. A tree interceptor implementation - basically, a way to work with a tree of objects as though it is a single object, which is sort of a base for browse mode.
3. An easier way might be fooling NVDA to believe that your text area is a tree interceptor (or is associated with it). This allows NVDA to work with the text area as though it is a browse mode document. This is how support for EdgeHTML came about in 2015.
Cheers,
Joseph

-----Original Message-----
From: nvda-devel@groups.io <nvda-devel@groups.io> On Behalf Of Travis Siegel
Sent: Wednesday, August 14, 2019 2:40 PM
To: nvda-devel@groups.io
Subject: Re: [nvda-devel] how to make a control more accessible

Yeah, but you see, that's the problem.

By itself, it doesn't work with jaws. As I said before, Jaws couldn't even see the text of the html area, until I did several things.

1. I made the html area part of the tab order.

(before that it wasn't included, because it was only a display area, and there was no need to focus the cursor there, since you couldn't do anything with it anyway).

2. I made the default focus go to this html area.
Because, without doing that, jaws couldn't find the control on the screen, I had to use the mouse to get jaws to focus on it.
3. I used the jaws-f6 (or f5, don't remember which) key to reclassify the control as an html area.
By doing that, jaws now treats the text as html text, including the capability to click on links and the whole works.
This is exactly what I was trying to make NVDA do, because when it comes down to it, it truly is html code, and that's why I was hunting for an embedded windows control to handle it for me, otherwise I'd have to write all kinds of parsing code (if for no other reason, to strip out the xml and html tags in the epub files) to have them display properly. This method saves me lots and lots of time.

Now, with that said,
Even before the changes above, NVDA did not have any problems seeing the text area, and getting to it was as simple as NVDA-left arrow when focused on the first tabbable control.

After these changes, you need only nvda-down arrow to get into the text area, then you can read the text with the normal navigation keys on the numpad.

The only issue there is that the chunks of text NVDA reads have little (if any) bearing on the actual text formatting.

That's why I'd like to reclassify the text area as an html control, so NVDA will behave properly.

The problem though is that NVDA has no facility for doing this like jaws does, so I haven't a clue how to make it happen.

As I said, it works as is, but it requires a bit more effort, and there's just no way folks are going to like that. Heck, sometimes (like if I'm eating or something) I still load up my browser to read the epub files, because I can have it read continuously instead of having to reach up and tap the numpad-9 key every few seconds.

So, if I'm not happy with tthe way it works, I know others aren't going to be happy with it either, that's the whole reason for asking here to see how this can be solved.

Using another method of displaying the file is fine, as long as that method can be integrated into my program, and not leave any stray pieces lying around.



On 8/14/2019 2:54 PM, Tyler Spivey wrote:

If the HTML control works with JAWS and lets you use browse mode, then
I would argue that it was a bug in NVDA.
Submit a simple test program with one HTMl control as an issue and see
what happens.

On 8/14/2019 11:47 AM, Travis Siegel wrote:
Yeah, but the problem is that if I use an embedded chrome browser, I
need to ship extra crap with my program, and from my experience, the
more stuff you include, the more problems people have with it,
(because they have a tendency to knowingly (or otherwise) break
things. I'd much rather use a windows embedded control even if it
isn't the best possible solution, because then there's fewer things
to break.

And, yes, it's ebook reading software. I don't know about anyone
else, but I got fed up with the inaccessible epub reading software
out there, because I couldn't find a single epub reader that did the
job simply, easily, and was 100 percent accessible. I normally just
extract the epub files myself, and read them in my browser, but I've
run across a few epub files that have what amounts to random garbage
for file names, and determining the order of reading was problematic,
so that kind of nixed the browser reading process I usually use.
Those are the main reason I set out to write this piece of software.

If nobody else uses it, that's ok with me, it solves a problem I
have, and really, that's all that's necessary. I'm just trying to
make it more user friendly, so that I can release it and allow others
to use it as well.

If I can't find a way to do that, then I'll leave it as is, but I
just know I'm going to get complaints because it doesn't read
automatically, or because it doesn't handle broken epub files, or
because it doesn't read outloud, or any number of other issues I
haven't even thought of yet.

Folks really tend to blow up if it works well for one screen reader,
but not for another one, so that's why the questions here. I have no
trouble making it work perfectly with jaws, and I'd really like to
have that same transparency with NVDA, since that's my screen reader
of choice, and it's kind of sad that I'd release a program that works
better on a screen reader I don't even use.


On 8/14/2019 3:55 AM, James Scholes wrote:

I don't want to stress overly on this, but when you say "next
chapter", it sounds like you're creating some sort of reading
software. If it's for eBooks, that really strengthens the case for
a better browser engine. There's no reason an embedded Chrome
browser can't work across multiple versions of Windows.

Regards,

James Scholes

On 14/08/2019 at 12:34 am, Travis Siegel wrote:
It's actually calling routines in the ATL.DLL windows library file.
Two routines from that dll initialize and process the html view.

The atl.dll file on my windows 8.1 system has a file stamp of 2014,
so it's a relatively old dll to be sure. But, that means this code
will work on just about any version of windows, which was my
primary intent when I started the project. Admittedly, I didn't
have a clue how to do what I wanted (I.E. embed an html control
into my program) when I started, but via some heavy use of google,
and a bit of searching on my favorite programming sites, I found
this little gem that was only a couple functions, a couple api
calls, and poof, exactly what I wanted.

Interestingly enough, under jaws, if I tell jaws that the control
is an html area, it behaves properly, (which it most certainly did
not do before doing so). In fact, before I told jaws it was an
html control, jaws couldn't even find the text on the screen. To
fix that problem, I had to add the html area to the tab order, then
tell jaws it was anhtml control, after that, jaws works like a
dream, pressing the button (or hot key) to go to the next chapter
starts jaws reading the text automatically just as soon as it comes
up on the screen.

I was hoping I could do something similar for NVDA.

Especially, since NVDA doesn't suffer from the issue of not knowing
the html control is on the screen, it finds it just fine, and I can
even read it, but again, I have to use the numpad keys to work my
way through the text. Interestingly enough, NVDA doesn't seem to
know about the various headers, links, and other html elements in
the text, but jaws not only sees them, but alows me to click on
them as if it were an actual browser. I'm not real happy with that
result, since it means NVDA is being shown up at something it
initially has a much better handle on, so if I could tell NVDA this
is an html area, and allow it to behave accordingly, I'm fairly
certain all would work like a treat.

I just don't know how to do that.


On 8/13/2019 5:50 PM, James Scholes wrote:

It may be helpful in this instance to have a runnable sample.
However, straight off the bat, I'd recommend using a more
up-to-date rendering engine for your web view (Chromium would be
ideal for instance via CEF).

What environment is creating the web view? Is it a standard Win32
app? WPF? WinForms? UWP? Something else?

Regards,

James Scholes

On 13/08/2019 at 9:21 pm, Travis Siegel wrote:
I have a program I'm working on that has an html view as part of
it's main screen. NVDA reads the text well enough, but it
doesn't read it well, in that it breaks lines at unexpected
places, and it doesn't show embedded links. The links isn't
really a problem, since I'm not really concerned with links
pointing elsewhere anyhow, so that's only a minor issue, but I
would like to know how to get NVDA to treat this text area as
html text, so it will pay attention to things like headers, and
handle the reading a bit better, since now it's reading the text
in the window in fragments, and most of the time, those fragments
aren't making sense.

Admittedly, I'm not sure how much control I have over the
presentation of the text, since it's an imported one, (it calls a
windows dll/api to render the text), but when I look at the text
line by line, it seems odd to me where NVDA is choosing to put
breaks, as well as the fact that the read to end function in NVDA
doesn't work. This at least is one thing I'd really like to fix,
since reading is the primary purpose of the app. I'll include
the nvda-F1 text below for the control, perhaps someone here can
help me figure out what I need to do to make it work better,
whether it be via NVDA plugins, or just adding attributes to the
window. There's only so much I can do programatically, since it's
an api/dll call, but I'm certainly open to suggestions. It works
as is, but reading the text requires the nvda cursor, not the
system one, and I know some folks aren't going to like that, so
again, any suggestions would be appreciated.

** cut here **

Developer info for navigator object:
name: u'Copyright'
role: ROLE_DOCUMENT
states: STATE_READONLY
isFocusable: True
hasFocus: False
Python object:
<NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMS
HTMLIAccessible
object at 0x05256770>
Python class mro: (<class
'NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMS
HTMLIAccessible'>,
<class
'NVDAObjects.behaviors.EditableTextWithoutAutoSelectDetection'>,
<class 'editableText.EditableTextWithoutAutoSelectDetection'>,
<class 'NVDAObjects.behaviors.EditableText'>, <class
'editableText.EditableText'>, <class
'NVDAObjects.IAccessible.MSHTML.Body'>, <class
'NVDAObjects.IAccessible.MSHTML.MSHTML'>, <class
'NVDAObjects.IAccessible.IAccessible'>, <class
'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>,
<class 'documentBase.TextContainerObject'>, <class
'baseObject.ScriptableObject'>, <class
'baseObject.AutoPropertyObject'>, <type 'object'>)
description: None
location: RectLTWH(left=412, top=186, width=759, height=628)
value: ''
appModule: <'appModuleHandler' (appName u'reader', process ID
1084) at address 52567b0>
appModule.productName: exception: No version information
appModule.productVersion: exception: No version information
TextInfo: <class 'NVDAObjects.IAccessible.MSHTML.MSHTMLTextInfo'>
windowHandle: 2556670
windowClassName: u'Internet Explorer_Server'
windowControlID: 0
windowStyle: 1442840576
windowThreadID: 6488
windowText: u''
displayText: u''
IAccessibleObject: <POINTER(IAccessible) ptr=0x9039038 at
5085170>
IAccessibleChildID: 0
IAccessible event parameters: windowHandle=2556670,
objectID=None, childID=0 IAccessible accName: u'Copyright'
IAccessible accRole: ROLE_SYSTEM_PANE IAccessible accState:
STATE_SYSTEM_READONLY, STATE_SYSTEM_VALID (64) IAccessible
accDescription: exception: (-2147467263, 'Not implemented',
(None, None, None, 0, None)) IAccessible accValue:
u'file://C:\\books\\storybundle\\Adventure\\Singularity - Bill
DeSmedt\\OEBPS\\copyright.xhtml'
MSHTML node has ancestor IAccessible: False MSHTML nodeName:
u'body'
** cut here**

I'm actually not sure why it's claiming it's an editable object,
because it's most certainly not editable <frown>

The rest seems to be correct though.















Luke Davis
 

Hi Travis, been a long time!

I admit I have not been following this thread closely, but an idea comes to mind.

What about just turning your program into a preprocessor, generate a temporary HTML file of the entire book, and have it opened with the default browser? You might be able to use JS to do callouts back to your code, or to other temporary files, for things you need your program to handle.

Or pick a browser, and do the whole thing as a browser plugin to begin with.

Luke

Travis Siegel
 

Doing a browser plugin is certainly possible, and I believe Chrome has such a plugin already, though I've never seen or tried it.

The suggestion to use another browser has already been raised, and again, that's certainly an option, but I'd like to keep this as simple as possible, and requiring folks to have particular browsers, or installing extra junk when my program installs is something I dispise in other software, so would really really rather not go that route.

As I've already said, the program as is works, I'm just trying to make it work better for NVDA users, as jaws users already have it completely automated, and all that took was a simple change in jaws itself to tell it the displayed text was actually an html area.

If I am having trouble making NVDA work as well as jaws does on a program I wrote, and I know all about screen readers, then who can blame other folks for not having completely accessible software. This is something that should be a simple fix, and on jaws, it is, on NVDA, it isn't, and that more than anything else saddens me greatly.

On 8/15/2019 12:23 AM, Luke Davis wrote:

Hi Travis, been a long time!

I admit I have not been following this thread closely, but an idea comes to mind.

What about just turning your program into a preprocessor, generate a temporary HTML file of the entire book, and have it opened with the default browser? You might be able to use JS to do callouts back to your code, or to other temporary files, for things you need your program to handle.

Or pick a browser, and do the whole thing as a browser plugin to begin with.

Luke



James Scholes
 

Extra dependencies are not junk if, (A) they make your program work better and (B) make your life easier as a developer because no NVDA work-arounds are needed. Many eBook files are too complex for Internet Explorer. Heck, most web pages these days are too complex for Internet Explorer to handle properly.

Do you use IE as your daily web browser? Because if not, you shouldn't force your users to use it either. Apps which use Chromium may be bigger than ones which don't, but I'd prefer a slightly larger distribution over using outdated technology which doesn't actually work all that well.

In any case, you seem determined to ignore that advice, so I hope someone can help you with this specific problem. You've been asked a couple of times to post a sample app; we should be able to make more progress once you've done that.

Regards,

James Scholes

On 15/08/2019 at 4:05 pm, Travis Siegel wrote:
Doing a browser plugin is certainly possible, and I believe Chrome has such a plugin already, though I've never seen or tried it.
The suggestion to use another browser has already been raised, and again, that's certainly an option, but I'd like to keep this as simple as possible, and requiring folks to have particular browsers, or installing extra junk when my program installs is something I dispise in other software, so would really really rather not go that route.
As I've already said, the program as is works, I'm just trying to make it work better for NVDA users, as jaws users already have it completely automated, and all that took was a simple change in jaws itself to tell it the displayed text was actually an html area.
If I am having trouble making NVDA work as well as jaws does on a program I wrote, and I know all about screen readers, then who can blame other folks for not having completely accessible software. This is something that should be a simple fix, and on jaws, it is, on NVDA, it isn't, and that more than anything else saddens me greatly.
On 8/15/2019 12:23 AM, Luke Davis wrote:

Hi Travis, been a long time!

I admit I have not been following this thread closely, but an idea comes to mind.

What about just turning your program into a preprocessor, generate a temporary HTML file of the entire book, and have it opened with the default browser? You might be able to use JS to do callouts back to your code, or to other temporary files, for things you need your program to handle.

Or pick a browser, and do the whole thing as a browser plugin to begin with.

Luke




Travis Siegel
 

Apparently I'm not getting my point across here.

An epub book is nothing more than a bunch of xml or html files with the text of the book in them.  The formatting is all done via html tags, and the files themselves are xml, because of the tree structure of the included information (I.E. title, author, chapter headings, and so on).

Therefore, nothing fancy is required, this is about as plain as html files get.

There is no javascript, there is no includes of other pages, often times, there's even no links in the files pointing to other files and/or sites.  It doesn't get any simpler than this when it comes to html interpretation.  I could certainly write my own html parsing code, which to be honest, would largely consist of simply deleting unnecessary html tags from the actual html code.  There is nothing wrong with using a windows api to display this text. 99 percent of the time, nobody is going to be clicking links in the displayed text, simply because there aren't any to click. Since I'm only using the internet explorer engine, (not internet explorer itself, only it's html engine), I see nothing inherent in that forcing anyone to use explorer or any other browser for that matter.  The html code is simply interpreted, then displayed in a window within my app.  The problem I'm running into isn't that NVDA doesn't work, I've already stated several times that NVDA does work, and it works well enough for me to leave it alone, and just release it as is, and all will be just fine.

What I'm trying to accomplish is to make the NVDA experience a better one, and in my opinion, the easiest way to do that is to convince NVDA that my displayed text area is not plain text, but actually an html view.  That way, all familiar controls will work for NVDA users, and they won't have to press additional keys to make it read the text as is required now.

That's all I'm after here.  I'm not asking for design advice, alternatives to my current solution, or ways to change NVDA, I'm simply asking how I can tell NVDA that this text area is indeed an html area, so it will operate properly.  (well, what I'd consider properly anyway).

If you can't or won't help with that, then I have no interest in drawing out a dicussion on what you believe to be correct or not as relates to a program you have zero knowledge of.  I'm asking one simple question, that appears not to have a simple solution. If there's someone who knows how to tell NVDA my text area is in fact an html view, then by all means, let me know how to do this, otherwise, if this kind of thing isn't possible, then there's no point in continuing this thread, and I'll go away with yet another unsolved NVDA issue.  It won't bother me in the least.

On 8/15/2019 1:44 PM, James Scholes wrote:
Extra dependencies are not junk if, (A) they make your program work better and (B) make your life easier as a developer because no NVDA work-arounds are needed.  Many eBook files are too complex for Internet Explorer.  Heck, most web pages these days are too complex for Internet Explorer to handle properly.

Do you use IE as your daily web browser?  Because if not, you shouldn't force your users to use it either.  Apps which use Chromium may be bigger than ones which don't, but I'd prefer a slightly larger distribution over using outdated technology which doesn't actually work all that well.

In any case, you seem determined to ignore that advice, so I hope someone can help you with this specific problem.  You've been asked a couple of times to post a sample app; we should be able to make more progress once you've done that.

Regards,

James Scholes

On 15/08/2019 at 4:05 pm, Travis Siegel wrote:
Doing a browser plugin is certainly possible, and I believe Chrome has such a plugin already, though I've never seen or tried it.

The suggestion to use another browser has already been raised, and again, that's certainly an option, but I'd like to keep this as simple as possible, and requiring folks to have particular browsers, or installing extra junk when my program installs is something I dispise in other software, so would really really rather not go that route.

As I've already said, the program as is works, I'm just trying to make it work better for NVDA users, as jaws users already have it completely automated, and all that took was a simple change in jaws itself to tell it the displayed text was actually an html area.

If I am having trouble making NVDA work as well as jaws does on a program I wrote, and I know all about screen readers, then who can blame other folks for not having completely accessible software. This is something that should be a simple fix, and on jaws, it is, on NVDA, it isn't, and that more than anything else saddens me greatly.

On 8/15/2019 12:23 AM, Luke Davis wrote:

Hi Travis, been a long time!

I admit I have not been following this thread closely, but an idea comes to mind.

What about just turning your program into a preprocessor, generate a temporary HTML file of the entire book, and have it opened with the default browser? You might be able to use JS to do callouts back to your code, or to other temporary files, for things you need your program to handle.

Or pick a browser, and do the whole thing as a browser plugin to begin with.

Luke







James Scholes
 

As we've said: give us some details of the APIs you're using, and post a sample program. We'll help you make it work with NVDA. You can't just reclassify it as you can with JAWS. Tyler and others have given you some proposed solutions, so have you tried those? Did they work? Not work?

FYI, the EPUB3 specification allows for all sorts of embedded content, including video, audio, mathematics, etc. EPUB books can use ARIA, disclosures via the <details> element to show and hide image descriptions, and more. All of this is valid, because eBooks are not limited to text-only fiction. Anybody who's tried to use Adobe Digital Editions to read a textbook will tell you the problems with just treating books as plain text, or using IE.

Regards,

James Scholes

On 15/08/2019 at 8:26 pm, Travis Siegel wrote:
Apparently I'm not getting my point across here.
An epub book is nothing more than a bunch of xml or html files with the text of the book in them.  The formatting is all done via html tags, and the files themselves are xml, because of the tree structure of the included information (I.E. title, author, chapter headings, and so on).
Therefore, nothing fancy is required, this is about as plain as html files get.
There is no javascript, there is no includes of other pages, often times, there's even no links in the files pointing to other files and/or sites.  It doesn't get any simpler than this when it comes to html interpretation.  I could certainly write my own html parsing code, which to be honest, would largely consist of simply deleting unnecessary html tags from the actual html code.  There is nothing wrong with using a windows api to display this text. 99 percent of the time, nobody is going to be clicking links in the displayed text, simply because there aren't any to click. Since I'm only using the internet explorer engine, (not internet explorer itself, only it's html engine), I see nothing inherent in that forcing anyone to use explorer or any other browser for that matter.  The html code is simply interpreted, then displayed in a window within my app.  The problem I'm running into isn't that NVDA doesn't work, I've already stated several times that NVDA does work, and it works well enough for me to leave it alone, and just release it as is, and all will be just fine.
What I'm trying to accomplish is to make the NVDA experience a better one, and in my opinion, the easiest way to do that is to convince NVDA that my displayed text area is not plain text, but actually an html view.  That way, all familiar controls will work for NVDA users, and they won't have to press additional keys to make it read the text as is required now.
That's all I'm after here.  I'm not asking for design advice, alternatives to my current solution, or ways to change NVDA, I'm simply asking how I can tell NVDA that this text area is indeed an html area, so it will operate properly.  (well, what I'd consider properly anyway).
If you can't or won't help with that, then I have no interest in drawing out a dicussion on what you believe to be correct or not as relates to a program you have zero knowledge of.  I'm asking one simple question, that appears not to have a simple solution. If there's someone who knows how to tell NVDA my text area is in fact an html view, then by all means, let me know how to do this, otherwise, if this kind of thing isn't possible, then there's no point in continuing this thread, and I'll go away with yet another unsolved NVDA issue.  It won't bother me in the least.
On 8/15/2019 1:44 PM, James Scholes wrote:
Extra dependencies are not junk if, (A) they make your program work better and (B) make your life easier as a developer because no NVDA work-arounds are needed.  Many eBook files are too complex for Internet Explorer.  Heck, most web pages these days are too complex for Internet Explorer to handle properly.

Do you use IE as your daily web browser?  Because if not, you shouldn't force your users to use it either.  Apps which use Chromium may be bigger than ones which don't, but I'd prefer a slightly larger distribution over using outdated technology which doesn't actually work all that well.

In any case, you seem determined to ignore that advice, so I hope someone can help you with this specific problem.  You've been asked a couple of times to post a sample app; we should be able to make more progress once you've done that.

Regards,

James Scholes

On 15/08/2019 at 4:05 pm, Travis Siegel wrote:
Doing a browser plugin is certainly possible, and I believe Chrome has such a plugin already, though I've never seen or tried it.

The suggestion to use another browser has already been raised, and again, that's certainly an option, but I'd like to keep this as simple as possible, and requiring folks to have particular browsers, or installing extra junk when my program installs is something I dispise in other software, so would really really rather not go that route.

As I've already said, the program as is works, I'm just trying to make it work better for NVDA users, as jaws users already have it completely automated, and all that took was a simple change in jaws itself to tell it the displayed text was actually an html area.

If I am having trouble making NVDA work as well as jaws does on a program I wrote, and I know all about screen readers, then who can blame other folks for not having completely accessible software. This is something that should be a simple fix, and on jaws, it is, on NVDA, it isn't, and that more than anything else saddens me greatly.

On 8/15/2019 12:23 AM, Luke Davis wrote:

Hi Travis, been a long time!

I admit I have not been following this thread closely, but an idea comes to mind.

What about just turning your program into a preprocessor, generate a temporary HTML file of the entire book, and have it opened with the default browser? You might be able to use JS to do callouts back to your code, or to other temporary files, for things you need your program to handle.

Or pick a browser, and do the whole thing as a browser plugin to begin with.

Luke








Travis Siegel
 

The program is on the page at:

http://www.softcon.com/files/

The url to download it directly is:

http://www.softcon.com/files/softconreader.exe

I've also put alice in wonderland there as a test file for use with the program.

http://www.softcon.com/files/pg11.epub

Probably not the best example file, since softconreader won't actually load this particular epub file, you'll need to extract it into a directory (simply rename it to .zip instead of .epub then extract it if your system won't allow direct extraction).

You'll need to point to the toc.ncx file located in the oebps directory after it's extracted in order for the softconreader to work properly.  I haven't written the search routines yet to locate a toc.ncx file if it isn't in the roote of the epub file, so at the moment, extracting the file and pointing to the toc.ncx is the only way to make it work in softconreader.

Another reason this isn't the best file to use is that several chapters are in each html file, so you need to go to chapter 5 before you will see that it loads a different file.  Currently, there's no indication of what chapter you're actually reading, other than the url shown on the url textbox.

I should probably search around until I find one that works optimally with the program, but although I have several of them, hunting for one that is free to distribute could be problematic, so I think I'll stick with project gutenbers's text of alice in wonderland for now, it's still enough to show the operation of the program, and possibly to find a solution to the NVDA not working as well as it could issue.

On 8/15/2019 3:49 PM, James Scholes wrote:
As we've said: give us some details of the APIs you're using, and post a sample program.  We'll help you make it work with NVDA. You can't just reclassify it as you can with JAWS.  Tyler and others have given you some proposed solutions, so have you tried those?  Did they work?  Not work?

FYI, the EPUB3 specification allows for all sorts of embedded content, including video, audio, mathematics, etc.  EPUB books can use ARIA, disclosures via the <details> element to show and hide image descriptions, and more.  All of this is valid, because eBooks are not limited to text-only fiction.  Anybody who's tried to use Adobe Digital Editions to read a textbook will tell you the problems with just treating books as plain text, or using IE.

Regards,

James Scholes

On 15/08/2019 at 8:26 pm, Travis Siegel wrote:
Apparently I'm not getting my point across here.

An epub book is nothing more than a bunch of xml or html files with the text of the book in them.  The formatting is all done via html tags, and the files themselves are xml, because of the tree structure of the included information (I.E. title, author, chapter headings, and so on).

Therefore, nothing fancy is required, this is about as plain as html files get.

There is no javascript, there is no includes of other pages, often times, there's even no links in the files pointing to other files and/or sites.  It doesn't get any simpler than this when it comes to html interpretation.  I could certainly write my own html parsing code, which to be honest, would largely consist of simply deleting unnecessary html tags from the actual html code.  There is nothing wrong with using a windows api to display this text. 99 percent of the time, nobody is going to be clicking links in the displayed text, simply because there aren't any to click. Since I'm only using the internet explorer engine, (not internet explorer itself, only it's html engine), I see nothing inherent in that forcing anyone to use explorer or any other browser for that matter.  The html code is simply interpreted, then displayed in a window within my app.  The problem I'm running into isn't that NVDA doesn't work, I've already stated several times that NVDA does work, and it works well enough for me to leave it alone, and just release it as is, and all will be just fine.

What I'm trying to accomplish is to make the NVDA experience a better one, and in my opinion, the easiest way to do that is to convince NVDA that my displayed text area is not plain text, but actually an html view.  That way, all familiar controls will work for NVDA users, and they won't have to press additional keys to make it read the text as is required now.

That's all I'm after here.  I'm not asking for design advice, alternatives to my current solution, or ways to change NVDA, I'm simply asking how I can tell NVDA that this text area is indeed an html area, so it will operate properly.  (well, what I'd consider properly anyway).

If you can't or won't help with that, then I have no interest in drawing out a dicussion on what you believe to be correct or not as relates to a program you have zero knowledge of.  I'm asking one simple question, that appears not to have a simple solution. If there's someone who knows how to tell NVDA my text area is in fact an html view, then by all means, let me know how to do this, otherwise, if this kind of thing isn't possible, then there's no point in continuing this thread, and I'll go away with yet another unsolved NVDA issue.  It won't bother me in the least.


On 8/15/2019 1:44 PM, James Scholes wrote:
Extra dependencies are not junk if, (A) they make your program work better and (B) make your life easier as a developer because no NVDA work-arounds are needed.  Many eBook files are too complex for Internet Explorer.  Heck, most web pages these days are too complex for Internet Explorer to handle properly.

Do you use IE as your daily web browser?  Because if not, you shouldn't force your users to use it either.  Apps which use Chromium may be bigger than ones which don't, but I'd prefer a slightly larger distribution over using outdated technology which doesn't actually work all that well.

In any case, you seem determined to ignore that advice, so I hope someone can help you with this specific problem.  You've been asked a couple of times to post a sample app; we should be able to make more progress once you've done that.

Regards,

James Scholes

On 15/08/2019 at 4:05 pm, Travis Siegel wrote:
Doing a browser plugin is certainly possible, and I believe Chrome has such a plugin already, though I've never seen or tried it.

The suggestion to use another browser has already been raised, and again, that's certainly an option, but I'd like to keep this as simple as possible, and requiring folks to have particular browsers, or installing extra junk when my program installs is something I dispise in other software, so would really really rather not go that route.

As I've already said, the program as is works, I'm just trying to make it work better for NVDA users, as jaws users already have it completely automated, and all that took was a simple change in jaws itself to tell it the displayed text was actually an html area.

If I am having trouble making NVDA work as well as jaws does on a program I wrote, and I know all about screen readers, then who can blame other folks for not having completely accessible software. This is something that should be a simple fix, and on jaws, it is, on NVDA, it isn't, and that more than anything else saddens me greatly.

On 8/15/2019 12:23 AM, Luke Davis wrote:

Hi Travis, been a long time!

I admit I have not been following this thread closely, but an idea comes to mind.

What about just turning your program into a preprocessor, generate a temporary HTML file of the entire book, and have it opened with the default browser? You might be able to use JS to do callouts back to your code, or to other temporary files, for things you need your program to handle.

Or pick a browser, and do the whole thing as a browser plugin to begin with.

Luke











 

Hi,
I can read the linked Epub in Edge (EdgeHTML version) with issues you've described, namely odd line cut-offs, which suggests something going on with the file itself or UIA Edge text info object. When I try to run the linked executable, I get an execution error saying that a DLL was missing.
Cheers,
Joseph

-----Original Message-----
From: nvda-devel@groups.io <nvda-devel@groups.io> On Behalf Of Travis Siegel
Sent: Thursday, August 15, 2019 2:11 PM
To: nvda-devel@groups.io
Subject: Re: [nvda-devel] how to make a control more accessible

The program is on the page at:

http://www.softcon.com/files/

The url to download it directly is:

http://www.softcon.com/files/softconreader.exe

I've also put alice in wonderland there as a test file for use with the program.

http://www.softcon.com/files/pg11.epub

Probably not the best example file, since softconreader won't actually load this particular epub file, you'll need to extract it into a directory (simply rename it to .zip instead of .epub then extract it if your system won't allow direct extraction).

You'll need to point to the toc.ncx file located in the oebps directory after it's extracted in order for the softconreader to work properly. I haven't written the search routines yet to locate a toc.ncx file if it isn't in the roote of the epub file, so at the moment, extracting the file and pointing to the toc.ncx is the only way to make it work in softconreader.

Another reason this isn't the best file to use is that several chapters are in each html file, so you need to go to chapter 5 before you will see that it loads a different file. Currently, there's no indication of what chapter you're actually reading, other than the url shown on the url textbox.

I should probably search around until I find one that works optimally with the program, but although I have several of them, hunting for one that is free to distribute could be problematic, so I think I'll stick with project gutenbers's text of alice in wonderland for now, it's still enough to show the operation of the program, and possibly to find a solution to the NVDA not working as well as it could issue.



On 8/15/2019 3:49 PM, James Scholes wrote:
As we've said: give us some details of the APIs you're using, and post
a sample program. We'll help you make it work with NVDA. You can't
just reclassify it as you can with JAWS. Tyler and others have given
you some proposed solutions, so have you tried those? Did they work?
Not work?

FYI, the EPUB3 specification allows for all sorts of embedded content,
including video, audio, mathematics, etc. EPUB books can use ARIA,
disclosures via the <details> element to show and hide image
descriptions, and more. All of this is valid, because eBooks are not
limited to text-only fiction. Anybody who's tried to use Adobe
Digital Editions to read a textbook will tell you the problems with
just treating books as plain text, or using IE.

Regards,

James Scholes

On 15/08/2019 at 8:26 pm, Travis Siegel wrote:
Apparently I'm not getting my point across here.

An epub book is nothing more than a bunch of xml or html files with
the text of the book in them. The formatting is all done via html
tags, and the files themselves are xml, because of the tree structure
of the included information (I.E. title, author, chapter headings,
and so on).

Therefore, nothing fancy is required, this is about as plain as html
files get.

There is no javascript, there is no includes of other pages, often
times, there's even no links in the files pointing to other files
and/or sites. It doesn't get any simpler than this when it comes to
html interpretation. I could certainly write my own html parsing
code, which to be honest, would largely consist of simply deleting
unnecessary html tags from the actual html code. There is nothing
wrong with using a windows api to display this text. 99 percent of
the time, nobody is going to be clicking links in the displayed text,
simply because there aren't any to click. Since I'm only using the
internet explorer engine, (not internet explorer itself, only it's
html engine), I see nothing inherent in that forcing anyone to use
explorer or any other browser for that matter. The html code is
simply interpreted, then displayed in a window within my app. The
problem I'm running into isn't that NVDA doesn't work, I've already
stated several times that NVDA does work, and it works well enough
for me to leave it alone, and just release it as is, and all will be
just fine.

What I'm trying to accomplish is to make the NVDA experience a better
one, and in my opinion, the easiest way to do that is to convince
NVDA that my displayed text area is not plain text, but actually an
html view. That way, all familiar controls will work for NVDA users,
and they won't have to press additional keys to make it read the text
as is required now.

That's all I'm after here. I'm not asking for design advice,
alternatives to my current solution, or ways to change NVDA, I'm
simply asking how I can tell NVDA that this text area is indeed an
html area, so it will operate properly. (well, what I'd consider
properly anyway).

If you can't or won't help with that, then I have no interest in
drawing out a dicussion on what you believe to be correct or not as
relates to a program you have zero knowledge of. I'm asking one
simple question, that appears not to have a simple solution. If
there's someone who knows how to tell NVDA my text area is in fact an
html view, then by all means, let me know how to do this, otherwise,
if this kind of thing isn't possible, then there's no point in
continuing this thread, and I'll go away with yet another unsolved
NVDA issue. It won't bother me in the least.


On 8/15/2019 1:44 PM, James Scholes wrote:
Extra dependencies are not junk if, (A) they make your program work
better and (B) make your life easier as a developer because no NVDA
work-arounds are needed. Many eBook files are too complex for
Internet Explorer. Heck, most web pages these days are too complex
for Internet Explorer to handle properly.

Do you use IE as your daily web browser? Because if not, you
shouldn't force your users to use it either. Apps which use
Chromium may be bigger than ones which don't, but I'd prefer a
slightly larger distribution over using outdated technology which
doesn't actually work all that well.

In any case, you seem determined to ignore that advice, so I hope
someone can help you with this specific problem. You've been asked
a couple of times to post a sample app; we should be able to make
more progress once you've done that.

Regards,

James Scholes

On 15/08/2019 at 4:05 pm, Travis Siegel wrote:
Doing a browser plugin is certainly possible, and I believe Chrome
has such a plugin already, though I've never seen or tried it.

The suggestion to use another browser has already been raised, and
again, that's certainly an option, but I'd like to keep this as
simple as possible, and requiring folks to have particular
browsers, or installing extra junk when my program installs is
something I dispise in other software, so would really really
rather not go that route.

As I've already said, the program as is works, I'm just trying to
make it work better for NVDA users, as jaws users already have it
completely automated, and all that took was a simple change in jaws
itself to tell it the displayed text was actually an html area.

If I am having trouble making NVDA work as well as jaws does on a
program I wrote, and I know all about screen readers, then who can
blame other folks for not having completely accessible software.
This is something that should be a simple fix, and on jaws, it is,
on NVDA, it isn't, and that more than anything else saddens me
greatly.

On 8/15/2019 12:23 AM, Luke Davis wrote:

Hi Travis, been a long time!

I admit I have not been following this thread closely, but an idea
comes to mind.

What about just turning your program into a preprocessor, generate
a temporary HTML file of the entire book, and have it opened with
the default browser? You might be able to use JS to do callouts
back to your code, or to other temporary files, for things you
need your program to handle.

Or pick a browser, and do the whole thing as a browser plugin to
begin with.

Luke












Travis Siegel
 

Doh.

Sorry, didn't include the dll used for unzipping the epub files.

Fixed now.

same urls as before.

On 8/15/2019 5:20 PM, Joseph Lee wrote:
Hi,
I can read the linked Epub in Edge (EdgeHTML version) with issues you've described, namely odd line cut-offs, which suggests something going on with the file itself or UIA Edge text info object. When I try to run the linked executable, I get an execution error saying that a DLL was missing.
Cheers,
Joseph

-----Original Message-----
From: nvda-devel@groups.io <nvda-devel@groups.io> On Behalf Of Travis Siegel
Sent: Thursday, August 15, 2019 2:11 PM
To: nvda-devel@groups.io
Subject: Re: [nvda-devel] how to make a control more accessible

The program is on the page at:

http://www.softcon.com/files/

The url to download it directly is:

http://www.softcon.com/files/softconreader.exe

I've also put alice in wonderland there as a test file for use with the program.

http://www.softcon.com/files/pg11.epub

Probably not the best example file, since softconreader won't actually load this particular epub file, you'll need to extract it into a directory (simply rename it to .zip instead of .epub then extract it if your system won't allow direct extraction).

You'll need to point to the toc.ncx file located in the oebps directory after it's extracted in order for the softconreader to work properly. I haven't written the search routines yet to locate a toc.ncx file if it isn't in the roote of the epub file, so at the moment, extracting the file and pointing to the toc.ncx is the only way to make it work in softconreader.

Another reason this isn't the best file to use is that several chapters are in each html file, so you need to go to chapter 5 before you will see that it loads a different file. Currently, there's no indication of what chapter you're actually reading, other than the url shown on the url textbox.

I should probably search around until I find one that works optimally with the program, but although I have several of them, hunting for one that is free to distribute could be problematic, so I think I'll stick with project gutenbers's text of alice in wonderland for now, it's still enough to show the operation of the program, and possibly to find a solution to the NVDA not working as well as it could issue.



On 8/15/2019 3:49 PM, James Scholes wrote:
As we've said: give us some details of the APIs you're using, and post
a sample program. We'll help you make it work with NVDA. You can't
just reclassify it as you can with JAWS. Tyler and others have given
you some proposed solutions, so have you tried those? Did they work?
Not work?

FYI, the EPUB3 specification allows for all sorts of embedded content,
including video, audio, mathematics, etc. EPUB books can use ARIA,
disclosures via the <details> element to show and hide image
descriptions, and more. All of this is valid, because eBooks are not
limited to text-only fiction. Anybody who's tried to use Adobe
Digital Editions to read a textbook will tell you the problems with
just treating books as plain text, or using IE.

Regards,

James Scholes

On 15/08/2019 at 8:26 pm, Travis Siegel wrote:
Apparently I'm not getting my point across here.

An epub book is nothing more than a bunch of xml or html files with
the text of the book in them. The formatting is all done via html
tags, and the files themselves are xml, because of the tree structure
of the included information (I.E. title, author, chapter headings,
and so on).

Therefore, nothing fancy is required, this is about as plain as html
files get.

There is no javascript, there is no includes of other pages, often
times, there's even no links in the files pointing to other files
and/or sites. It doesn't get any simpler than this when it comes to
html interpretation. I could certainly write my own html parsing
code, which to be honest, would largely consist of simply deleting
unnecessary html tags from the actual html code. There is nothing
wrong with using a windows api to display this text. 99 percent of
the time, nobody is going to be clicking links in the displayed text,
simply because there aren't any to click. Since I'm only using the
internet explorer engine, (not internet explorer itself, only it's
html engine), I see nothing inherent in that forcing anyone to use
explorer or any other browser for that matter. The html code is
simply interpreted, then displayed in a window within my app. The
problem I'm running into isn't that NVDA doesn't work, I've already
stated several times that NVDA does work, and it works well enough
for me to leave it alone, and just release it as is, and all will be
just fine.

What I'm trying to accomplish is to make the NVDA experience a better
one, and in my opinion, the easiest way to do that is to convince
NVDA that my displayed text area is not plain text, but actually an
html view. That way, all familiar controls will work for NVDA users,
and they won't have to press additional keys to make it read the text
as is required now.

That's all I'm after here. I'm not asking for design advice,
alternatives to my current solution, or ways to change NVDA, I'm
simply asking how I can tell NVDA that this text area is indeed an
html area, so it will operate properly. (well, what I'd consider
properly anyway).

If you can't or won't help with that, then I have no interest in
drawing out a dicussion on what you believe to be correct or not as
relates to a program you have zero knowledge of. I'm asking one
simple question, that appears not to have a simple solution. If
there's someone who knows how to tell NVDA my text area is in fact an
html view, then by all means, let me know how to do this, otherwise,
if this kind of thing isn't possible, then there's no point in
continuing this thread, and I'll go away with yet another unsolved
NVDA issue. It won't bother me in the least.


On 8/15/2019 1:44 PM, James Scholes wrote:
Extra dependencies are not junk if, (A) they make your program work
better and (B) make your life easier as a developer because no NVDA
work-arounds are needed. Many eBook files are too complex for
Internet Explorer. Heck, most web pages these days are too complex
for Internet Explorer to handle properly.

Do you use IE as your daily web browser? Because if not, you
shouldn't force your users to use it either. Apps which use
Chromium may be bigger than ones which don't, but I'd prefer a
slightly larger distribution over using outdated technology which
doesn't actually work all that well.

In any case, you seem determined to ignore that advice, so I hope
someone can help you with this specific problem. You've been asked
a couple of times to post a sample app; we should be able to make
more progress once you've done that.

Regards,

James Scholes

On 15/08/2019 at 4:05 pm, Travis Siegel wrote:
Doing a browser plugin is certainly possible, and I believe Chrome
has such a plugin already, though I've never seen or tried it.

The suggestion to use another browser has already been raised, and
again, that's certainly an option, but I'd like to keep this as
simple as possible, and requiring folks to have particular
browsers, or installing extra junk when my program installs is
something I dispise in other software, so would really really
rather not go that route.

As I've already said, the program as is works, I'm just trying to
make it work better for NVDA users, as jaws users already have it
completely automated, and all that took was a simple change in jaws
itself to tell it the displayed text was actually an html area.

If I am having trouble making NVDA work as well as jaws does on a
program I wrote, and I know all about screen readers, then who can
blame other folks for not having completely accessible software.
This is something that should be a simple fix, and on jaws, it is,
on NVDA, it isn't, and that more than anything else saddens me
greatly.

On 8/15/2019 12:23 AM, Luke Davis wrote:

Hi Travis, been a long time!

I admit I have not been following this thread closely, but an idea
comes to mind.

What about just turning your program into a preprocessor, generate
a temporary HTML file of the entire book, and have it opened with
the default browser? You might be able to use JS to do callouts
back to your code, or to other temporary files, for things you
need your program to handle.

Or pick a browser, and do the whole thing as a browser plugin to
begin with.

Luke












Tyler Spivey
 

I'm not sure how to fix your problem technically, but in the meantime, do this:

When NVDA says pane, descend into that pane with object nav. You'll hear document.
From there, press NVDA+shift+backspace (laptop) or NVDA+shift+numpad minus (desktop) to set focus to the embedded document. Now browse mode should work.

On 8/15/2019 4:01 PM, Travis Siegel wrote:
Doh.
Sorry, didn't include the dll used for unzipping the epub files.
Fixed now.
same urls as before.
On 8/15/2019 5:20 PM, Joseph Lee wrote:
Hi,
I can read the linked Epub in Edge (EdgeHTML version) with issues you've described, namely odd line cut-offs, which suggests something going on with the file itself or UIA Edge text info object. When I try to run the linked executable, I get an execution error saying that a DLL was missing.
Cheers,
Joseph

-----Original Message-----
From: nvda-devel@groups.io <nvda-devel@groups.io> On Behalf Of Travis Siegel
Sent: Thursday, August 15, 2019 2:11 PM
To: nvda-devel@groups.io
Subject: Re: [nvda-devel] how to make a control more accessible

The program is on the page at:

http://www.softcon.com/files/

The url to download it directly is:

http://www.softcon.com/files/softconreader.exe

I've also put alice in wonderland there as a test file for use with the program.

http://www.softcon.com/files/pg11.epub

Probably not the best example file, since softconreader won't actually load this particular epub file, you'll need to extract it into a directory (simply rename it to .zip instead of .epub then extract it if your system won't allow direct extraction).

You'll need to point to the toc.ncx file located in the oebps directory after it's extracted in order for the softconreader to work properly.  I haven't written the search routines yet to locate a toc.ncx file if it isn't in the roote of the epub file, so at the moment, extracting the file and pointing to the toc.ncx is the only way to make it work in softconreader.

Another reason this isn't the best file to use is that several chapters are in each html file, so you need to go to chapter 5 before you will see that it loads a different file.  Currently, there's no indication of what chapter you're actually reading, other than the url shown on the url textbox.

I should probably search around until I find one that works optimally with the program, but although I have several of them, hunting for one that is free to distribute could be problematic, so I think I'll stick with project gutenbers's text of alice in wonderland for now, it's still enough to show the operation of the program, and possibly to find a solution to the NVDA not working as well as it could issue.



On 8/15/2019 3:49 PM, James Scholes wrote:
As we've said: give us some details of the APIs you're using, and post
a sample program.  We'll help you make it work with NVDA. You can't
just reclassify it as you can with JAWS.  Tyler and others have given
you some proposed solutions, so have you tried those?  Did they work?
Not work?

FYI, the EPUB3 specification allows for all sorts of embedded content,
including video, audio, mathematics, etc.  EPUB books can use ARIA,
disclosures via the <details> element to show and hide image
descriptions, and more.  All of this is valid, because eBooks are not
limited to text-only fiction.  Anybody who's tried to use Adobe
Digital Editions to read a textbook will tell you the problems with
just treating books as plain text, or using IE.

Regards,

James Scholes

On 15/08/2019 at 8:26 pm, Travis Siegel wrote:
Apparently I'm not getting my point across here.

An epub book is nothing more than a bunch of xml or html files with
the text of the book in them.  The formatting is all done via html
tags, and the files themselves are xml, because of the tree structure
of the included information (I.E. title, author, chapter headings,
and so on).

Therefore, nothing fancy is required, this is about as plain as html
files get.

There is no javascript, there is no includes of other pages, often
times, there's even no links in the files pointing to other files
and/or sites.  It doesn't get any simpler than this when it comes to
html interpretation.  I could certainly write my own html parsing
code, which to be honest, would largely consist of simply deleting
unnecessary html tags from the actual html code.  There is nothing
wrong with using a windows api to display this text. 99 percent of
the time, nobody is going to be clicking links in the displayed text,
simply because there aren't any to click. Since I'm only using the
internet explorer engine, (not internet explorer itself, only it's
html engine), I see nothing inherent in that forcing anyone to use
explorer or any other browser for that matter.  The html code is
simply interpreted, then displayed in a window within my app.  The
problem I'm running into isn't that NVDA doesn't work, I've already
stated several times that NVDA does work, and it works well enough
for me to leave it alone, and just release it as is, and all will be
just fine.

What I'm trying to accomplish is to make the NVDA experience a better
one, and in my opinion, the easiest way to do that is to convince
NVDA that my displayed text area is not plain text, but actually an
html view.  That way, all familiar controls will work for NVDA users,
and they won't have to press additional keys to make it read the text
as is required now.

That's all I'm after here.  I'm not asking for design advice,
alternatives to my current solution, or ways to change NVDA, I'm
simply asking how I can tell NVDA that this text area is indeed an
html area, so it will operate properly.  (well, what I'd consider
properly anyway).

If you can't or won't help with that, then I have no interest in
drawing out a dicussion on what you believe to be correct or not as
relates to a program you have zero knowledge of.  I'm asking one
simple question, that appears not to have a simple solution. If
there's someone who knows how to tell NVDA my text area is in fact an
html view, then by all means, let me know how to do this, otherwise,
if this kind of thing isn't possible, then there's no point in
continuing this thread, and I'll go away with yet another unsolved
NVDA issue.  It won't bother me in the least.


On 8/15/2019 1:44 PM, James Scholes wrote:
Extra dependencies are not junk if, (A) they make your program work
better and (B) make your life easier as a developer because no NVDA
work-arounds are needed.  Many eBook files are too complex for
Internet Explorer.  Heck, most web pages these days are too complex
for Internet Explorer to handle properly.

Do you use IE as your daily web browser?  Because if not, you
shouldn't force your users to use it either.  Apps which use
Chromium may be bigger than ones which don't, but I'd prefer a
slightly larger distribution over using outdated technology which
doesn't actually work all that well.

In any case, you seem determined to ignore that advice, so I hope
someone can help you with this specific problem.  You've been asked
a couple of times to post a sample app; we should be able to make
more progress once you've done that.

Regards,

James Scholes

On 15/08/2019 at 4:05 pm, Travis Siegel wrote:
Doing a browser plugin is certainly possible, and I believe Chrome
has such a plugin already, though I've never seen or tried it.

The suggestion to use another browser has already been raised, and
again, that's certainly an option, but I'd like to keep this as
simple as possible, and requiring folks to have particular
browsers, or installing extra junk when my program installs is
something I dispise in other software, so would really really
rather not go that route.

As I've already said, the program as is works, I'm just trying to
make it work better for NVDA users, as jaws users already have it
completely automated, and all that took was a simple change in jaws
itself to tell it the displayed text was actually an html area.

If I am having trouble making NVDA work as well as jaws does on a
program I wrote, and I know all about screen readers, then who can
blame other folks for not having completely accessible software.
This is something that should be a simple fix, and on jaws, it is,
on NVDA, it isn't, and that more than anything else saddens me
greatly.

On 8/15/2019 12:23 AM, Luke Davis wrote:

Hi Travis, been a long time!

I admit I have not been following this thread closely, but an idea
comes to mind.

What about just turning your program into a preprocessor, generate
a temporary HTML file of the entire book, and have it opened with
the default browser? You might be able to use JS to do callouts
back to your code, or to other temporary files, for things you
need your program to handle.

Or pick a browser, and do the whole thing as a browser plugin to
begin with.

Luke













 

Hi,
Technical: rendered via MSHTML, as obvious from the following developer info for the text area (the first piece of information I personally needed and looks very similar to the one Travis initially posted):
name: ''
role: ROLE_SECTION
states:
isFocusable: False
hasFocus: False
Python object: <NVDAObjects.IAccessible.MSHTML.MSHTML object at 0x050BEA70>
Python class mro: (<class 'NVDAObjects.IAccessible.MSHTML.MSHTML'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>)
description: ''
location: RectLTWH(left=412, top=320, width=759, height=68)
value: ''
appModule: <'appModuleHandler' (appName u'reader', process ID 2136) at address 50b9030>
appModule.productName: exception: No version information
appModule.productVersion: exception: No version information
TextInfo: <class 'NVDAObjects.NVDAObjectTextInfo'>
windowHandle: 5836140
windowClassName: u'Internet Explorer_Server'
windowControlID: 0
windowStyle: 1442840576
extendedWindowStyle: 0
windowThreadID: 11348
windowText: u''
displayText: u''
IAccessibleObject: <POINTER(IAccessible) ptr=0x76c0abc at 4ca1210>
IAccessibleChildID: 0
IAccessible event parameters: windowHandle=5836140, objectID=None, childID=0
IAccessible accName: u"Alice's Adventures in Wonderland, by Lewis Carroll"
IAccessible accRole: ROLE_SYSTEM_PANE
IAccessible accState: STATE_SYSTEM_READONLY, STATE_SYSTEM_FOCUSABLE, STATE_SYSTEM_VALID (1048640)
IAccessible accDescription: exception: (-2147467263, 'Not implemented', (None, None, None, 0, None))
IAccessible accValue: u'file://C:\\Users\\User\\Downloads\\pg11\\OEBPS\\@public@vhost@g@gutenberg@html@files@11@11-h@...#pgepubid00000'
MSHTML node has ancestor IAccessible: True
MSHTML nodeName: u'DIV'

And the document window which hosts this text area (in this case, the parent of this window; you'll notice this is the object Travis is referring to in his original post):
name: u"Alice's Adventures in Wonderland, by Lewis Carroll"
role: ROLE_DOCUMENT
states: STATE_READONLY, STATE_FOCUSABLE
isFocusable: True
hasFocus: False
Python object: <NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessibleWindowNVDAObject object at 0x0514B0F0>
Python class mro: (<class 'NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessibleWindowNVDAObject'>, <class 'NVDAObjects.behaviors.EditableTextWithoutAutoSelectDetection'>, <class 'editableText.EditableTextWithoutAutoSelectDetection'>, <class 'NVDAObjects.behaviors.EditableText'>, <class 'editableText.EditableText'>, <class 'NVDAObjects.IAccessible.MSHTML.Body'>, <class 'NVDAObjects.IAccessible.MSHTML.MSHTML'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>)
description: None
location: RectLTWH(left=412, top=320, width=759, height=11725)
value: ''
appModule: <'appModuleHandler' (appName u'reader', process ID 2136) at address 50b9030>
appModule.productName: exception: No version information
appModule.productVersion: exception: No version information
TextInfo: <class 'NVDAObjects.IAccessible.MSHTML.MSHTMLTextInfo'>
windowHandle: 5836140
windowClassName: u'Internet Explorer_Server'
windowControlID: 0
windowStyle: 1442840576
extendedWindowStyle: 0
windowThreadID: 11348
windowText: u''
displayText: u''
IAccessibleObject: <POINTER(IAccessible) ptr=0x7f22c80 at 51634e0>
IAccessibleChildID: 0
IAccessible event parameters: windowHandle=5836140, objectID=None, childID=0
IAccessible accName: u"Alice's Adventures in Wonderland, by Lewis Carroll"
IAccessible accRole: ROLE_SYSTEM_PANE
IAccessible accState: STATE_SYSTEM_READONLY, STATE_SYSTEM_FOCUSABLE, STATE_SYSTEM_VALID (1048640)
IAccessible accDescription: exception: (-2147467263, 'Not implemented', (None, None, None, 0, None))
IAccessible accValue: u'file://C:\\Users\\User\\Downloads\\pg11\\OEBPS\\@public@vhost@g@gutenberg@html@files@11@11-h@...#pgepubid00000'
MSHTML node has ancestor IAccessible: False
MSHTML nodeName: u'BODY'

But the actual window that gets focused after opening this file is way different than the above and ends up in tab order:
name: None
role: ROLE_PANE
states: STATE_FOCUSABLE, STATE_FOCUSED
isFocusable: True
hasFocus: True
Python object: <NVDAObjects.IAccessible.ShellDocObjectView object at 0x05060C90>
Python class mro: (<class 'NVDAObjects.IAccessible.ShellDocObjectView'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>)
description: None
location: RectLTWH(left=404, top=320, width=792, height=511)
value: None
appModule: <'appModuleHandler' (appName u'reader', process ID 6364) at address 4d44d90>
appModule.productName: exception: No version information
appModule.productVersion: exception: No version information
TextInfo: <class 'NVDAObjects.NVDAObjectTextInfo'>
windowHandle: 3608504
windowClassName: u'Shell DocObject View'
windowControlID: 0
windowStyle: 1442906112
extendedWindowStyle: 0
windowThreadID: 10492
windowText: u''
displayText: u''
IAccessibleObject: <POINTER(IAccessible) ptr=0x7efa630 at 4c32c10>
IAccessibleChildID: 0
IAccessible event parameters: windowHandle=3608504, objectID=-4, childID=0
IAccessible accName: None
IAccessible accRole: ROLE_SYSTEM_CLIENT
IAccessible accState: STATE_SYSTEM_FOCUSED, STATE_SYSTEM_FOCUSABLE, STATE_SYSTEM_VALID (1048580)
IAccessible accDescription: None
IAccessible accValue: None

Procedure used:
1. Extract the test book and run the program provided by Travis.
2. Open the book in Reader - you have to open OEBPS/toc.ncx.
3. Move the system focus (Tab key) to a pane window.
4. Go down one level (first child) and force system focus to move to the text area (NVDA+Shift+Numpad minus or NVDA+Shift+Backspace depending on keyboard layout). After that, text area will be navigable as a browse mode document.

The very fact that the book element is recognized as an MSHTML element (basis for browse mode in Internet Explorer and friends powered by MSHTML) means my initial suggestion on class reassignment isn't needed (NVDA knows it is an MSHTML element already). In this respect, Brian Gaff is right.

The solution I think is to place the document itself (not the pane parent window) in the tab order, and I think there should be a Windows API function that can do this. If this works, the experience will be similar to how today's web browsers work - you can move between app UI and document content simply by pressing the Tab key. If the app itself can do this with help from the GUI toolkit used (I bet Active Template Library, as that's what ATL stands for), then there's no need to tell JAWS to place the document in tab order nor force NVDA to manipulate system focus. If you wish to provide a customization for NVDA, the best bet would be an app module for this app that will listen to gainFocus event, which will direct system focus to move to the book content if meeting the document pane object for the first time.

For sake of completeness, I tested this with Narrator (I'm using Windows 10 Version 19H2), and just like NVDA, it could not see the book content in tab order until I enabled scan mode (Narrator+Space). At least it works a bit better with scan mode on.

Cheers,
Joseph

-----Original Message-----
From: nvda-devel@groups.io <nvda-devel@groups.io> On Behalf Of Travis Siegel
Sent: Thursday, August 15, 2019 4:02 PM
To: nvda-devel@groups.io
Subject: Re: [nvda-devel] how to make a control more accessible

Doh.

Sorry, didn't include the dll used for unzipping the epub files.

Fixed now.

same urls as before.


On 8/15/2019 5:20 PM, Joseph Lee wrote:
Hi,
I can read the linked Epub in Edge (EdgeHTML version) with issues you've described, namely odd line cut-offs, which suggests something going on with the file itself or UIA Edge text info object. When I try to run the linked executable, I get an execution error saying that a DLL was missing.
Cheers,
Joseph

-----Original Message-----
From: nvda-devel@groups.io <nvda-devel@groups.io> On Behalf Of Travis
Siegel
Sent: Thursday, August 15, 2019 2:11 PM
To: nvda-devel@groups.io
Subject: Re: [nvda-devel] how to make a control more accessible

The program is on the page at:

http://www.softcon.com/files/

The url to download it directly is:

http://www.softcon.com/files/softconreader.exe

I've also put alice in wonderland there as a test file for use with the program.

http://www.softcon.com/files/pg11.epub

Probably not the best example file, since softconreader won't actually load this particular epub file, you'll need to extract it into a directory (simply rename it to .zip instead of .epub then extract it if your system won't allow direct extraction).

You'll need to point to the toc.ncx file located in the oebps directory after it's extracted in order for the softconreader to work properly. I haven't written the search routines yet to locate a toc.ncx file if it isn't in the roote of the epub file, so at the moment, extracting the file and pointing to the toc.ncx is the only way to make it work in softconreader.

Another reason this isn't the best file to use is that several chapters are in each html file, so you need to go to chapter 5 before you will see that it loads a different file. Currently, there's no indication of what chapter you're actually reading, other than the url shown on the url textbox.

I should probably search around until I find one that works optimally with the program, but although I have several of them, hunting for one that is free to distribute could be problematic, so I think I'll stick with project gutenbers's text of alice in wonderland for now, it's still enough to show the operation of the program, and possibly to find a solution to the NVDA not working as well as it could issue.



On 8/15/2019 3:49 PM, James Scholes wrote:
As we've said: give us some details of the APIs you're using, and
post a sample program. We'll help you make it work with NVDA. You
can't just reclassify it as you can with JAWS. Tyler and others have
given you some proposed solutions, so have you tried those? Did they work?
Not work?

FYI, the EPUB3 specification allows for all sorts of embedded
content, including video, audio, mathematics, etc. EPUB books can
use ARIA, disclosures via the <details> element to show and hide
image descriptions, and more. All of this is valid, because eBooks
are not limited to text-only fiction. Anybody who's tried to use
Adobe Digital Editions to read a textbook will tell you the problems
with just treating books as plain text, or using IE.

Regards,

James Scholes

On 15/08/2019 at 8:26 pm, Travis Siegel wrote:
Apparently I'm not getting my point across here.

An epub book is nothing more than a bunch of xml or html files with
the text of the book in them. The formatting is all done via html
tags, and the files themselves are xml, because of the tree
structure of the included information (I.E. title, author, chapter
headings, and so on).

Therefore, nothing fancy is required, this is about as plain as html
files get.

There is no javascript, there is no includes of other pages, often
times, there's even no links in the files pointing to other files
and/or sites. It doesn't get any simpler than this when it comes to
html interpretation. I could certainly write my own html parsing
code, which to be honest, would largely consist of simply deleting
unnecessary html tags from the actual html code. There is nothing
wrong with using a windows api to display this text. 99 percent of
the time, nobody is going to be clicking links in the displayed
text, simply because there aren't any to click. Since I'm only using
the internet explorer engine, (not internet explorer itself, only
it's html engine), I see nothing inherent in that forcing anyone to
use explorer or any other browser for that matter. The html code is
simply interpreted, then displayed in a window within my app. The
problem I'm running into isn't that NVDA doesn't work, I've already
stated several times that NVDA does work, and it works well enough
for me to leave it alone, and just release it as is, and all will be
just fine.

What I'm trying to accomplish is to make the NVDA experience a
better one, and in my opinion, the easiest way to do that is to
convince NVDA that my displayed text area is not plain text, but
actually an html view. That way, all familiar controls will work
for NVDA users, and they won't have to press additional keys to make
it read the text as is required now.

That's all I'm after here. I'm not asking for design advice,
alternatives to my current solution, or ways to change NVDA, I'm
simply asking how I can tell NVDA that this text area is indeed an
html area, so it will operate properly. (well, what I'd consider
properly anyway).

If you can't or won't help with that, then I have no interest in
drawing out a dicussion on what you believe to be correct or not as
relates to a program you have zero knowledge of. I'm asking one
simple question, that appears not to have a simple solution. If
there's someone who knows how to tell NVDA my text area is in fact
an html view, then by all means, let me know how to do this,
otherwise, if this kind of thing isn't possible, then there's no
point in continuing this thread, and I'll go away with yet another
unsolved NVDA issue. It won't bother me in the least.


On 8/15/2019 1:44 PM, James Scholes wrote:
Extra dependencies are not junk if, (A) they make your program work
better and (B) make your life easier as a developer because no NVDA
work-arounds are needed. Many eBook files are too complex for
Internet Explorer. Heck, most web pages these days are too complex
for Internet Explorer to handle properly.

Do you use IE as your daily web browser? Because if not, you
shouldn't force your users to use it either. Apps which use
Chromium may be bigger than ones which don't, but I'd prefer a
slightly larger distribution over using outdated technology which
doesn't actually work all that well.

In any case, you seem determined to ignore that advice, so I hope
someone can help you with this specific problem. You've been asked
a couple of times to post a sample app; we should be able to make
more progress once you've done that.

Regards,

James Scholes

On 15/08/2019 at 4:05 pm, Travis Siegel wrote:
Doing a browser plugin is certainly possible, and I believe Chrome
has such a plugin already, though I've never seen or tried it.

The suggestion to use another browser has already been raised, and
again, that's certainly an option, but I'd like to keep this as
simple as possible, and requiring folks to have particular
browsers, or installing extra junk when my program installs is
something I dispise in other software, so would really really
rather not go that route.

As I've already said, the program as is works, I'm just trying to
make it work better for NVDA users, as jaws users already have it
completely automated, and all that took was a simple change in
jaws itself to tell it the displayed text was actually an html area.

If I am having trouble making NVDA work as well as jaws does on a
program I wrote, and I know all about screen readers, then who can
blame other folks for not having completely accessible software.
This is something that should be a simple fix, and on jaws, it is,
on NVDA, it isn't, and that more than anything else saddens me
greatly.

On 8/15/2019 12:23 AM, Luke Davis wrote:

Hi Travis, been a long time!

I admit I have not been following this thread closely, but an
idea comes to mind.

What about just turning your program into a preprocessor,
generate a temporary HTML file of the entire book, and have it
opened with the default browser? You might be able to use JS to
do callouts back to your code, or to other temporary files, for
things you need your program to handle.

Or pick a browser, and do the whole thing as a browser plugin to
begin with.

Luke













Travis Siegel
 

Interesting.  I'd not tried routing the nvda cursor to the html area, honestly, it didn't even occur to me. <sigh>

But, you're right, once NVDA focuses on that area, all works as it should.  So, ow it's just a matter of finding out which functions I need to find the window in question, so I can make it the active focus point.  I know there are api calls to do this, I just need to find them.  I have the window handle of the initial window, I just don't have the children it creates.  I'll need to figure out how to get them, then focus on the html area, and all is solved.

Thanks, I didn't even realize there were additional objects inside the main pane, which I should have, since I had to intract with the pane to get to the html text in the first place.  If I'd tried routing the cursor there, I may have figured this out days ago.

Doing that should eliminate the need for any plugins or configuration settings in any of the various screen readers.

On 8/15/2019 7:39 PM, Joseph Lee wrote:
Hi,
Technical: rendered via MSHTML, as obvious from the following developer info for the text area (the first piece of information I personally needed and looks very similar to the one Travis initially posted):
name: ''
role: ROLE_SECTION
states:
isFocusable: False
hasFocus: False
Python object: <NVDAObjects.IAccessible.MSHTML.MSHTML object at 0x050BEA70>
Python class mro: (<class 'NVDAObjects.IAccessible.MSHTML.MSHTML'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>)
description: ''
location: RectLTWH(left=412, top=320, width=759, height=68)
value: ''
appModule: <'appModuleHandler' (appName u'reader', process ID 2136) at address 50b9030>
appModule.productName: exception: No version information
appModule.productVersion: exception: No version information
TextInfo: <class 'NVDAObjects.NVDAObjectTextInfo'>
windowHandle: 5836140
windowClassName: u'Internet Explorer_Server'
windowControlID: 0
windowStyle: 1442840576
extendedWindowStyle: 0
windowThreadID: 11348
windowText: u''
displayText: u''
IAccessibleObject: <POINTER(IAccessible) ptr=0x76c0abc at 4ca1210>
IAccessibleChildID: 0
IAccessible event parameters: windowHandle=5836140, objectID=None, childID=0
IAccessible accName: u"Alice's Adventures in Wonderland, by Lewis Carroll"
IAccessible accRole: ROLE_SYSTEM_PANE
IAccessible accState: STATE_SYSTEM_READONLY, STATE_SYSTEM_FOCUSABLE, STATE_SYSTEM_VALID (1048640)
IAccessible accDescription: exception: (-2147467263, 'Not implemented', (None, None, None, 0, None))
IAccessible accValue: u'file://C:\\Users\\User\\Downloads\\pg11\\OEBPS\\@public@vhost@g@gutenberg@html@files@11@11-h@...#pgepubid00000'
MSHTML node has ancestor IAccessible: True
MSHTML nodeName: u'DIV'

And the document window which hosts this text area (in this case, the parent of this window; you'll notice this is the object Travis is referring to in his original post):
name: u"Alice's Adventures in Wonderland, by Lewis Carroll"
role: ROLE_DOCUMENT
states: STATE_READONLY, STATE_FOCUSABLE
isFocusable: True
hasFocus: False
Python object: <NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessibleWindowNVDAObject object at 0x0514B0F0>
Python class mro: (<class 'NVDAObjects.Dynamic_EditableTextWithoutAutoSelectDetectionBodyMSHTMLIAccessibleWindowNVDAObject'>, <class 'NVDAObjects.behaviors.EditableTextWithoutAutoSelectDetection'>, <class 'editableText.EditableTextWithoutAutoSelectDetection'>, <class 'NVDAObjects.behaviors.EditableText'>, <class 'editableText.EditableText'>, <class 'NVDAObjects.IAccessible.MSHTML.Body'>, <class 'NVDAObjects.IAccessible.MSHTML.MSHTML'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>)
description: None
location: RectLTWH(left=412, top=320, width=759, height=11725)
value: ''
appModule: <'appModuleHandler' (appName u'reader', process ID 2136) at address 50b9030>
appModule.productName: exception: No version information
appModule.productVersion: exception: No version information
TextInfo: <class 'NVDAObjects.IAccessible.MSHTML.MSHTMLTextInfo'>
windowHandle: 5836140
windowClassName: u'Internet Explorer_Server'
windowControlID: 0
windowStyle: 1442840576
extendedWindowStyle: 0
windowThreadID: 11348
windowText: u''
displayText: u''
IAccessibleObject: <POINTER(IAccessible) ptr=0x7f22c80 at 51634e0>
IAccessibleChildID: 0
IAccessible event parameters: windowHandle=5836140, objectID=None, childID=0
IAccessible accName: u"Alice's Adventures in Wonderland, by Lewis Carroll"
IAccessible accRole: ROLE_SYSTEM_PANE
IAccessible accState: STATE_SYSTEM_READONLY, STATE_SYSTEM_FOCUSABLE, STATE_SYSTEM_VALID (1048640)
IAccessible accDescription: exception: (-2147467263, 'Not implemented', (None, None, None, 0, None))
IAccessible accValue: u'file://C:\\Users\\User\\Downloads\\pg11\\OEBPS\\@public@vhost@g@gutenberg@html@files@11@11-h@...#pgepubid00000'
MSHTML node has ancestor IAccessible: False
MSHTML nodeName: u'BODY'

But the actual window that gets focused after opening this file is way different than the above and ends up in tab order:
name: None
role: ROLE_PANE
states: STATE_FOCUSABLE, STATE_FOCUSED
isFocusable: True
hasFocus: True
Python object: <NVDAObjects.IAccessible.ShellDocObjectView object at 0x05060C90>
Python class mro: (<class 'NVDAObjects.IAccessible.ShellDocObjectView'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>)
description: None
location: RectLTWH(left=404, top=320, width=792, height=511)
value: None
appModule: <'appModuleHandler' (appName u'reader', process ID 6364) at address 4d44d90>
appModule.productName: exception: No version information
appModule.productVersion: exception: No version information
TextInfo: <class 'NVDAObjects.NVDAObjectTextInfo'>
windowHandle: 3608504
windowClassName: u'Shell DocObject View'
windowControlID: 0
windowStyle: 1442906112
extendedWindowStyle: 0
windowThreadID: 10492
windowText: u''
displayText: u''
IAccessibleObject: <POINTER(IAccessible) ptr=0x7efa630 at 4c32c10>
IAccessibleChildID: 0
IAccessible event parameters: windowHandle=3608504, objectID=-4, childID=0
IAccessible accName: None
IAccessible accRole: ROLE_SYSTEM_CLIENT
IAccessible accState: STATE_SYSTEM_FOCUSED, STATE_SYSTEM_FOCUSABLE, STATE_SYSTEM_VALID (1048580)
IAccessible accDescription: None
IAccessible accValue: None

Procedure used:
1. Extract the test book and run the program provided by Travis.
2. Open the book in Reader - you have to open OEBPS/toc.ncx.
3. Move the system focus (Tab key) to a pane window.
4. Go down one level (first child) and force system focus to move to the text area (NVDA+Shift+Numpad minus or NVDA+Shift+Backspace depending on keyboard layout). After that, text area will be navigable as a browse mode document.

The very fact that the book element is recognized as an MSHTML element (basis for browse mode in Internet Explorer and friends powered by MSHTML) means my initial suggestion on class reassignment isn't needed (NVDA knows it is an MSHTML element already). In this respect, Brian Gaff is right.

The solution I think is to place the document itself (not the pane parent window) in the tab order, and I think there should be a Windows API function that can do this. If this works, the experience will be similar to how today's web browsers work - you can move between app UI and document content simply by pressing the Tab key. If the app itself can do this with help from the GUI toolkit used (I bet Active Template Library, as that's what ATL stands for), then there's no need to tell JAWS to place the document in tab order nor force NVDA to manipulate system focus. If you wish to provide a customization for NVDA, the best bet would be an app module for this app that will listen to gainFocus event, which will direct system focus to move to the book content if meeting the document pane object for the first time.

For sake of completeness, I tested this with Narrator (I'm using Windows 10 Version 19H2), and just like NVDA, it could not see the book content in tab order until I enabled scan mode (Narrator+Space). At least it works a bit better with scan mode on.

Cheers,
Joseph


-----Original Message-----
From: nvda-devel@groups.io <nvda-devel@groups.io> On Behalf Of Travis Siegel
Sent: Thursday, August 15, 2019 4:02 PM
To: nvda-devel@groups.io
Subject: Re: [nvda-devel] how to make a control more accessible

Doh.

Sorry, didn't include the dll used for unzipping the epub files.

Fixed now.

same urls as before.


On 8/15/2019 5:20 PM, Joseph Lee wrote:
Hi,
I can read the linked Epub in Edge (EdgeHTML version) with issues you've described, namely odd line cut-offs, which suggests something going on with the file itself or UIA Edge text info object. When I try to run the linked executable, I get an execution error saying that a DLL was missing.
Cheers,
Joseph

-----Original Message-----
From: nvda-devel@groups.io <nvda-devel@groups.io> On Behalf Of Travis
Siegel
Sent: Thursday, August 15, 2019 2:11 PM
To: nvda-devel@groups.io
Subject: Re: [nvda-devel] how to make a control more accessible

The program is on the page at:

http://www.softcon.com/files/

The url to download it directly is:

http://www.softcon.com/files/softconreader.exe

I've also put alice in wonderland there as a test file for use with the program.

http://www.softcon.com/files/pg11.epub

Probably not the best example file, since softconreader won't actually load this particular epub file, you'll need to extract it into a directory (simply rename it to .zip instead of .epub then extract it if your system won't allow direct extraction).

You'll need to point to the toc.ncx file located in the oebps directory after it's extracted in order for the softconreader to work properly. I haven't written the search routines yet to locate a toc.ncx file if it isn't in the roote of the epub file, so at the moment, extracting the file and pointing to the toc.ncx is the only way to make it work in softconreader.

Another reason this isn't the best file to use is that several chapters are in each html file, so you need to go to chapter 5 before you will see that it loads a different file. Currently, there's no indication of what chapter you're actually reading, other than the url shown on the url textbox.

I should probably search around until I find one that works optimally with the program, but although I have several of them, hunting for one that is free to distribute could be problematic, so I think I'll stick with project gutenbers's text of alice in wonderland for now, it's still enough to show the operation of the program, and possibly to find a solution to the NVDA not working as well as it could issue.



On 8/15/2019 3:49 PM, James Scholes wrote:
As we've said: give us some details of the APIs you're using, and
post a sample program. We'll help you make it work with NVDA. You
can't just reclassify it as you can with JAWS. Tyler and others have
given you some proposed solutions, so have you tried those? Did they work?
Not work?

FYI, the EPUB3 specification allows for all sorts of embedded
content, including video, audio, mathematics, etc. EPUB books can
use ARIA, disclosures via the <details> element to show and hide
image descriptions, and more. All of this is valid, because eBooks
are not limited to text-only fiction. Anybody who's tried to use
Adobe Digital Editions to read a textbook will tell you the problems
with just treating books as plain text, or using IE.

Regards,

James Scholes

On 15/08/2019 at 8:26 pm, Travis Siegel wrote:
Apparently I'm not getting my point across here.

An epub book is nothing more than a bunch of xml or html files with
the text of the book in them. The formatting is all done via html
tags, and the files themselves are xml, because of the tree
structure of the included information (I.E. title, author, chapter
headings, and so on).

Therefore, nothing fancy is required, this is about as plain as html
files get.

There is no javascript, there is no includes of other pages, often
times, there's even no links in the files pointing to other files
and/or sites. It doesn't get any simpler than this when it comes to
html interpretation. I could certainly write my own html parsing
code, which to be honest, would largely consist of simply deleting
unnecessary html tags from the actual html code. There is nothing
wrong with using a windows api to display this text. 99 percent of
the time, nobody is going to be clicking links in the displayed
text, simply because there aren't any to click. Since I'm only using
the internet explorer engine, (not internet explorer itself, only
it's html engine), I see nothing inherent in that forcing anyone to
use explorer or any other browser for that matter. The html code is
simply interpreted, then displayed in a window within my app. The
problem I'm running into isn't that NVDA doesn't work, I've already
stated several times that NVDA does work, and it works well enough
for me to leave it alone, and just release it as is, and all will be
just fine.

What I'm trying to accomplish is to make the NVDA experience a
better one, and in my opinion, the easiest way to do that is to
convince NVDA that my displayed text area is not plain text, but
actually an html view. That way, all familiar controls will work
for NVDA users, and they won't have to press additional keys to make
it read the text as is required now.

That's all I'm after here. I'm not asking for design advice,
alternatives to my current solution, or ways to change NVDA, I'm
simply asking how I can tell NVDA that this text area is indeed an
html area, so it will operate properly. (well, what I'd consider
properly anyway).

If you can't or won't help with that, then I have no interest in
drawing out a dicussion on what you believe to be correct or not as
relates to a program you have zero knowledge of. I'm asking one
simple question, that appears not to have a simple solution. If
there's someone who knows how to tell NVDA my text area is in fact
an html view, then by all means, let me know how to do this,
otherwise, if this kind of thing isn't possible, then there's no
point in continuing this thread, and I'll go away with yet another
unsolved NVDA issue. It won't bother me in the least.


On 8/15/2019 1:44 PM, James Scholes wrote:
Extra dependencies are not junk if, (A) they make your program work
better and (B) make your life easier as a developer because no NVDA
work-arounds are needed. Many eBook files are too complex for
Internet Explorer. Heck, most web pages these days are too complex
for Internet Explorer to handle properly.

Do you use IE as your daily web browser? Because if not, you
shouldn't force your users to use it either. Apps which use
Chromium may be bigger than ones which don't, but I'd prefer a
slightly larger distribution over using outdated technology which
doesn't actually work all that well.

In any case, you seem determined to ignore that advice, so I hope
someone can help you with this specific problem. You've been asked
a couple of times to post a sample app; we should be able to make
more progress once you've done that.

Regards,

James Scholes

On 15/08/2019 at 4:05 pm, Travis Siegel wrote:
Doing a browser plugin is certainly possible, and I believe Chrome
has such a plugin already, though I've never seen or tried it.

The suggestion to use another browser has already been raised, and
again, that's certainly an option, but I'd like to keep this as
simple as possible, and requiring folks to have particular
browsers, or installing extra junk when my program installs is
something I dispise in other software, so would really really
rather not go that route.

As I've already said, the program as is works, I'm just trying to
make it work better for NVDA users, as jaws users already have it
completely automated, and all that took was a simple change in
jaws itself to tell it the displayed text was actually an html area.

If I am having trouble making NVDA work as well as jaws does on a
program I wrote, and I know all about screen readers, then who can
blame other folks for not having completely accessible software.
This is something that should be a simple fix, and on jaws, it is,
on NVDA, it isn't, and that more than anything else saddens me
greatly.

On 8/15/2019 12:23 AM, Luke Davis wrote:

Hi Travis, been a long time!

I admit I have not been following this thread closely, but an
idea comes to mind.

What about just turning your program into a preprocessor,
generate a temporary HTML file of the entire book, and have it
opened with the default browser? You might be able to use JS to
do callouts back to your code, or to other temporary files, for
things you need your program to handle.

Or pick a browser, and do the whole thing as a browser plugin to
begin with.

Luke