Date   
Re: Problem with fast browse mode - multiple NVDAObjects are created

Tony Malykh
 

Hi Michael,

Thanks for your response. I really appreciate that you would like to prioritize this, but as I mentioned in my previous email, I won't have time anymore to work on this, at least in the nearby future. I have a day job and it's consuming more and more of my time. Besides, my investigation on this PR take me deeper and deeper into NVDA internals and it looks like polishing this PR until it's production-ready might require more time than I initially estimated. I wish someone else could finish this job some day...

Best regards

Tony


On 4/15/2019 4:50 AM, Michael Curran wrote:

Hi Tony,


I would like to publicly apologize for not replying to your email around a month ago. I should have at very least explained that I did not have time to look at this at that point in time.


I still stand by my statement that I do think this work is important, and that I would like to see this in 2019.2. I also want to get this work in before speech refactor / Python 3. Therefore, I will in deed prioritize this now.


I need to clear my head enough to give this full attention and try and reconcile the issues I previously had with the PR. I am currently on personal leave but will be back next week and will start looking into it again then.


Thanks again for your contributions.


Mick










On 4/14/2019 5:06 AM, Tony Malykh wrote:

Hi Reef,
I appreciate your explanation.
1. I haven't heard from Michael for over a month. At this point I believe he saw my email and decided not to reply. I understand he was busy, but I can't believe he didn't have time to reply a few lines to me for over a month.
2. I believe I explained my problem clearly enough - duplicate  NVDA objects are created. The rest are details, test case, etc - you can find that in my previous emails in this thread.
3. I understand that you guys have your own set of priorities. However when you're saying that (and correct me if I'm wrong), it creates an impression that fast browse mode is not important or not worthy of Michael's reply. Here I pulled the list of 22 NVDA issues that I was trying to fix by fast browse mode (some of them are closed as duplicates):
    * nvda jumping the text box to enter the text to translate in google translator #8992
    * nvda 2018.4 beta 2 stuck in sum elements in web page #8999
    * Navigating quickly in edit fields on GMail causes NVDA to change from focus to browse mode unexpectedly #8211
    * When navigating the gmail page gsuite corporate inbox using the default view, nvda gets stuck in the navigation of the chat tabs #8111
    * NVDA cuts words and reports parts of different elements together on one key press; first occurance since nvda 2018.4 #9129
    * Internal focus handling seems quirky #5831
    * Browse mode problems with slow/inappropriate focus changes in browsers #2039
    * Losing Focus When Using Browse Mode #1544
    * Long pressing arror key will force to enter edit mode in firefox. #4719
    * In Firefox 37,when I move focus to a new line or control NVDA sometimes sets focus back to the previous line or control which had focus #5032
    * focus mode is activated due to caret movement sometimes randomly even when configured not to do so #5359
    * Firefox: Performance Degradation since merging #2039 Fix #5411
    * NVDA jumps when navigating on the web #2211
    * NVDA jumps to the bottom of the page when reaching the main landmark or heading level 1 on certain pages #4797
    * cursor moving backwards in navigation with the keyboard #2312
    * firefox edit fields: duplicate llines and words #3156
    * Sometimes focus jumps back to a previous web element in Firefox when arrowing down a webpage #4522
    * Internet Explorer 11 64 bit on windows 7 #6450
    * Timing issues in virtual buffers #6586
    * The user is unexpectedly dropped into focus mode on Twit.tv #6625
    * the cursor jumps backwards when browsing certain websites in Firefox, Chrome and Edge #7956
    * in chrome, sometimes focus is jumping #8013
So apparently NVDA users are bothered by bugs in NVDA browse mode as they keep creating new issues for years.
4. My attempts to fix all the bugs of fast browse mode take me deeper and deeper into NVDA internals. This particular problem with duplicate NVDA objects is very hard to fix. I could fix it for Chrome and Firefox by rewriting speech cache,but then in Internet explorer duplicate NVDA objects even have different IA2UniqueIDs, which makes it impossible for me to relate them. In edge there is another problem with focus event not being received, which I havn't started to look at. I was hoping to at least ask someone to explain to me what was the logic of creating NVDAObjects, when a new one is created as at a glance there doesn't seem to be any cache in NVDA code. But again, I received no reply. I was just trying to help NVDA, but it looks like my help is not very welcome here, Michael is only willing to be a passive code reviewer. Well, he's the boss here, but this attitude will make much harder for contributors to submit any pull requests longer than a few lines of code. Given all of that and given lack of my own free time, I'll not be working on fast browse mode anymore. I wish someone else could one day fix NVDA browse mode.
--Tony


On 4/10/2019 2:37 AM, Reef Turner wrote:
Hi Tony,

I can't speak for Michael, or the previous conversations that you have had. However, I can point out that this has been a very busy month for us at NV Access. We have had a week at CSUN AT conference (and got over the resulting jetlag), worked hard to get 2019.1 out the door and are pursuing a 2019.1.1 release. Michael and the rest of the team are taking some leave before we get into the work for the next quarter. I'm telling you this just to give some context.

Internal to NV Access, I'm sure you can appreciate that we have our own priorities and quite a busy schedule. The best advice I can give you for getting help on your project, is to try to distil the problem down to it's core, explain it is simply and succinctly as you can. You may find that there are other people on this list who can help.

On Tue, 2 Apr 2019 at 18:15, Tony Malykh <anton.malykh@...> wrote:
Hello Michael,

Did you see my previous emails?

--Tony



On 3/25/2019 3:12 PM, Tony Malykh via Groups.Io wrote:
> Hello Michael,
>
> I was wondering if I could have any assistance with this issue? I was
> under impression that you offered to help me with debugging fast
> browse mode PR... I haven't heard from you for more than two weeks, so
> should I keep waiting? Or did I misunderstand you and I'm own my own
> with this PR?
>
> Thanks
>
> --Tony
>
> On 3/20/2019 9:20 AM, Tony Malykh via Groups.Io wrote:
>> Moving this thread to new mailing list.
>>
>> [BCC old mailing list]
>>
>>
>> --Tony
>>
>> On 3/9/2019 2:49 PM, Tony Malykh wrote:
>>> Hello NVDA devs and especially Michael,
>>>
>>> I am trying to work on fast browse mode PR (a.k.a. focus follows
>>> browse mode off).
>>> Just a quick recap: In v1 of this PR there were some  bugs related
>>> to the fact that some logic was asynchronous and it relied on
>>> gainFocus event being received from the operating system. However in
>>> some cases for unknown reason operating system wouldn't send this
>>> event, causing bugs that are hard to deal with, such as inability to
>>> activate form elements on web pages.
>>> I am now working on v2:
>>> https://github.com/nvaccess/nvda/pull/9360
>>> The code is by no means ready to be reviewed, but it's just for the
>>> reference.
>>> The main change in v2 is replacing asynchronous logic with
>>> synchronous logic there, and in general it works, but there is one
>>> new bugI'm facing that I would like to discuss and maybe ask for
>>> some help.
>>>
>>> Basic description of the bug:
>>> When unchecking a checkbox on a web page, its new state is not being
>>> announced. The bug only reproduces for unchecking - that is checking
>>> previously blank checkbox works as expected.
>>> Here are the concrete steps to reproduce the bug.
>>> 1. Enter Fast browse mode by pressing NVDA+num row 8.
>>> 2. In Chrome or Firefox navigate to
>>> https://www.ironspider.ca/forms/checkradio.htm
>>> 3. Check the first 3 checkboxes on the page
>>> 4. Go back to the first check box
>>> 5. Press space to uncheck it. The check box will be successfully
>>> unchecked, but the new state will not be announced immediately.
>>>
>>> I spent some time debugging this , and here are my findings so far.
>>> Announcing state change works like this. First
>>> speech.speakObject(obj,controlTypes.REASON_ONLYCACHE) is called to
>>> cache the previous state. In traditional browse mode this function
>>> is called when user navigates to that checkbox, and therefore system
>>> focus is switched to that checkbox as well. This happens in
>>> BrowseModeDocumentTreeInterceptor.event_gainFocus.
>>> Then, assuming that user presses space bar on a checkbox,
>>> BrowseModeTreeInterceptor._activatePosition is triggered, which
>>> activates this checkbox. Shortly, in response to that we receive a
>>> state changed event, that is processed in
>>> NVDAObject.event_stateChange(), which in turn calls
>>> speech.speakObjectProperties(self,states=True,
>>> reason=controlTypes.REASON_CHANGE).
>>> So we make two calls to speech module: the first one to cache object
>>> properties, the second one to speak whatever properties have
>>> changed. Cached properties are stored inside NVDAObject, so it is
>>> very important that the same object is passed to both these calls.
>>>
>>> Now back to fast browse mode v2. Since we don't update system focus
>>> on every browse mode focus change, we need to update system focus
>>> right before activating the checkbox. This is accomplished in
>>> BrowseModeTreeInterceptor.maybeSyncFocus(). And in the same
>>> function, right after I call obj.setFocus(), I also call
>>> speech.speakObject(obj,controlTypes.REASON_ONLYCACHE).
>>> However, here is the problem. When we receive state changed event,
>>> the function NVDAObject.event_stateChange is called on a different
>>> NVDA object instance. So we completely miss the cached state.
>>> When I say a different NVDAObject instance, I only mean a different
>>> python object. So there are apparently (at least) two NVDAObjects,
>>> I'll call them NVDAObject1 and NVDAObject2. Both represent the same
>>> checkbox in the browser, both have the same IA2UniqueID and
>>> windowHandle. Yet in the first call (cacheonly) I see NVDAObject1,
>>> and the state changed event comes in with NVDAObject2.
>>> To illustrate this, here is the example from my logs (slightly
>>> formatted):
>>> cacheonly from maybeSyncFocus():
>>>     <NVDAObjects.IAccessible.mozilla.Mozilla object at 0x07A6A370>
>>>     uniqueID = (67548, -33555216)
>>> speakObject on stateChanged
>>>     <NVDAObjects.IAccessible.mozilla.Mozilla object at 0x07A6A1F0>
>>>     uniqueID = (67548L, -33555216)
>>>
>>> So the big question I have is why there are two separate NVDAObjects
>>> created for the same checkbox in my scenario? And why they are not
>>> created Without my PR? What is logic behind creating new NVDA
>>> Objects? I did some cursory debugging of that and I saw that most of
>>> NVDAObjects are created using function getNVDAObjectFromEvent()
>>> defined in IAccessible2\__init__.py, and there doesn't seem to be
>>> any caching logic there.
>>> It seems there are two potential approaches of tackling this issue.
>>> 1. We need to figure out why two separate NVDA objects are created.
>>> 2. Potentially another approach is to allow creating multiple python
>>> NVDAObjects for the same Checkbox (or any other real IAccessible2
>>> object), and have a properties cache that would take this into
>>> account. Some kind of weakKeyDictionary might work. Property caching
>>> logic in speech.py might have to be redesigned though.
>>>
>>> And also another thing worth noticing in the logs that I pasted
>>> above. UniqueID is a tuple of WindowHandle and IA2UniqueID . If you
>>> looked at both entries carefully, you would notice that WindowHandle
>>> is slightly different: even though the value is the same, in the
>>> first entry it is int, and in the second entry it is long. This
>>> looks very suspicious to me. Do you think this might be the reason
>>> why two copies of NVDAObjects are created? On the other hand it
>>> doesn't explain why two objects are not created in stock NVDA.
>>>
>>> Anyway, this is current state of my second attempt to implement fast
>>> browse mode. Any suggestions will be appreciated!
>>> Best
>>> --Tony
>>>
>>
>>
>>
>
>
>





--
Reef Turner
Software Developer 
 
Facebook: https://www.facebook.com/NVAccess 
Twitter: @NVAccess 


Re: Problem with fast browse mode - multiple NVDAObjects are created

Tony Malykh
 

Hi Leonard,

Object properties cache in speech.py relies on the fact that only a single unique NVDAObject represents a checkbox, because the cache is stored inside NVDAObject. Once we have multiple duplicate NVDAObjects representing the same checkbox this logic falls apart, since we'd have two separate instances of properties caches.

--Tony


On 4/16/2019 10:20 AM, Leonard de Ruijter wrote:

Hey Tony,


I've quickly looked at the pr and the issue you're facing.


I don't think it is that strange that there are multiple python objects referring to the same content. For example, try the following:


>>> a=(1, 2)
>>> b=(1, 2)
>>> a==b
True
>>> a is b
False

Note that the == operator calls a.__eq__(b), whereas the word is is more strict, i.e. it directly checks whether this is entirely the same object.


I've seen this issue in other cases as well actually, totally unrelated to browse mode.


Regards,

Leonard

On 15-4-2019 13:50, Michael Curran wrote:

Hi Tony,


I would like to publicly apologize for not replying to your email around a month ago. I should have at very least explained that I did not have time to look at this at that point in time.


I still stand by my statement that I do think this work is important, and that I would like to see this in 2019.2. I also want to get this work in before speech refactor / Python 3. Therefore, I will in deed prioritize this now.


I need to clear my head enough to give this full attention and try and reconcile the issues I previously had with the PR. I am currently on personal leave but will be back next week and will start looking into it again then.


Thanks again for your contributions.


Mick










On 4/14/2019 5:06 AM, Tony Malykh wrote:

Hi Reef,
I appreciate your explanation.
1. I haven't heard from Michael for over a month. At this point I believe he saw my email and decided not to reply. I understand he was busy, but I can't believe he didn't have time to reply a few lines to me for over a month.
2. I believe I explained my problem clearly enough - duplicate  NVDA objects are created. The rest are details, test case, etc - you can find that in my previous emails in this thread.
3. I understand that you guys have your own set of priorities. However when you're saying that (and correct me if I'm wrong), it creates an impression that fast browse mode is not important or not worthy of Michael's reply. Here I pulled the list of 22 NVDA issues that I was trying to fix by fast browse mode (some of them are closed as duplicates):
    * nvda jumping the text box to enter the text to translate in google translator #8992
    * nvda 2018.4 beta 2 stuck in sum elements in web page #8999
    * Navigating quickly in edit fields on GMail causes NVDA to change from focus to browse mode unexpectedly #8211
    * When navigating the gmail page gsuite corporate inbox using the default view, nvda gets stuck in the navigation of the chat tabs #8111
    * NVDA cuts words and reports parts of different elements together on one key press; first occurance since nvda 2018.4 #9129
    * Internal focus handling seems quirky #5831
    * Browse mode problems with slow/inappropriate focus changes in browsers #2039
    * Losing Focus When Using Browse Mode #1544
    * Long pressing arror key will force to enter edit mode in firefox. #4719
    * In Firefox 37,when I move focus to a new line or control NVDA sometimes sets focus back to the previous line or control which had focus #5032
    * focus mode is activated due to caret movement sometimes randomly even when configured not to do so #5359
    * Firefox: Performance Degradation since merging #2039 Fix #5411
    * NVDA jumps when navigating on the web #2211
    * NVDA jumps to the bottom of the page when reaching the main landmark or heading level 1 on certain pages #4797
    * cursor moving backwards in navigation with the keyboard #2312
    * firefox edit fields: duplicate llines and words #3156
    * Sometimes focus jumps back to a previous web element in Firefox when arrowing down a webpage #4522
    * Internet Explorer 11 64 bit on windows 7 #6450
    * Timing issues in virtual buffers #6586
    * The user is unexpectedly dropped into focus mode on Twit.tv #6625
    * the cursor jumps backwards when browsing certain websites in Firefox, Chrome and Edge #7956
    * in chrome, sometimes focus is jumping #8013
So apparently NVDA users are bothered by bugs in NVDA browse mode as they keep creating new issues for years.
4. My attempts to fix all the bugs of fast browse mode take me deeper and deeper into NVDA internals. This particular problem with duplicate NVDA objects is very hard to fix. I could fix it for Chrome and Firefox by rewriting speech cache,but then in Internet explorer duplicate NVDA objects even have different IA2UniqueIDs, which makes it impossible for me to relate them. In edge there is another problem with focus event not being received, which I havn't started to look at. I was hoping to at least ask someone to explain to me what was the logic of creating NVDAObjects, when a new one is created as at a glance there doesn't seem to be any cache in NVDA code. But again, I received no reply. I was just trying to help NVDA, but it looks like my help is not very welcome here, Michael is only willing to be a passive code reviewer. Well, he's the boss here, but this attitude will make much harder for contributors to submit any pull requests longer than a few lines of code. Given all of that and given lack of my own free time, I'll not be working on fast browse mode anymore. I wish someone else could one day fix NVDA browse mode.
--Tony


On 4/10/2019 2:37 AM, Reef Turner wrote:
Hi Tony,

I can't speak for Michael, or the previous conversations that you have had. However, I can point out that this has been a very busy month for us at NV Access. We have had a week at CSUN AT conference (and got over the resulting jetlag), worked hard to get 2019.1 out the door and are pursuing a 2019.1.1 release. Michael and the rest of the team are taking some leave before we get into the work for the next quarter. I'm telling you this just to give some context.

Internal to NV Access, I'm sure you can appreciate that we have our own priorities and quite a busy schedule. The best advice I can give you for getting help on your project, is to try to distil the problem down to it's core, explain it is simply and succinctly as you can. You may find that there are other people on this list who can help.

On Tue, 2 Apr 2019 at 18:15, Tony Malykh <anton.malykh@...> wrote:
Hello Michael,

Did you see my previous emails?

--Tony



On 3/25/2019 3:12 PM, Tony Malykh via Groups.Io wrote:
> Hello Michael,
>
> I was wondering if I could have any assistance with this issue? I was
> under impression that you offered to help me with debugging fast
> browse mode PR... I haven't heard from you for more than two weeks, so
> should I keep waiting? Or did I misunderstand you and I'm own my own
> with this PR?
>
> Thanks
>
> --Tony
>
> On 3/20/2019 9:20 AM, Tony Malykh via Groups.Io wrote:
>> Moving this thread to new mailing list.
>>
>> [BCC old mailing list]
>>
>>
>> --Tony
>>
>> On 3/9/2019 2:49 PM, Tony Malykh wrote:
>>> Hello NVDA devs and especially Michael,
>>>
>>> I am trying to work on fast browse mode PR (a.k.a. focus follows
>>> browse mode off).
>>> Just a quick recap: In v1 of this PR there were some  bugs related
>>> to the fact that some logic was asynchronous and it relied on
>>> gainFocus event being received from the operating system. However in
>>> some cases for unknown reason operating system wouldn't send this
>>> event, causing bugs that are hard to deal with, such as inability to
>>> activate form elements on web pages.
>>> I am now working on v2:
>>> https://github.com/nvaccess/nvda/pull/9360
>>> The code is by no means ready to be reviewed, but it's just for the
>>> reference.
>>> The main change in v2 is replacing asynchronous logic with
>>> synchronous logic there, and in general it works, but there is one
>>> new bugI'm facing that I would like to discuss and maybe ask for
>>> some help.
>>>
>>> Basic description of the bug:
>>> When unchecking a checkbox on a web page, its new state is not being
>>> announced. The bug only reproduces for unchecking - that is checking
>>> previously blank checkbox works as expected.
>>> Here are the concrete steps to reproduce the bug.
>>> 1. Enter Fast browse mode by pressing NVDA+num row 8.
>>> 2. In Chrome or Firefox navigate to
>>> https://www.ironspider.ca/forms/checkradio.htm
>>> 3. Check the first 3 checkboxes on the page
>>> 4. Go back to the first check box
>>> 5. Press space to uncheck it. The check box will be successfully
>>> unchecked, but the new state will not be announced immediately.
>>>
>>> I spent some time debugging this , and here are my findings so far.
>>> Announcing state change works like this. First
>>> speech.speakObject(obj,controlTypes.REASON_ONLYCACHE) is called to
>>> cache the previous state. In traditional browse mode this function
>>> is called when user navigates to that checkbox, and therefore system
>>> focus is switched to that checkbox as well. This happens in
>>> BrowseModeDocumentTreeInterceptor.event_gainFocus.
>>> Then, assuming that user presses space bar on a checkbox,
>>> BrowseModeTreeInterceptor._activatePosition is triggered, which
>>> activates this checkbox. Shortly, in response to that we receive a
>>> state changed event, that is processed in
>>> NVDAObject.event_stateChange(), which in turn calls
>>> speech.speakObjectProperties(self,states=True,
>>> reason=controlTypes.REASON_CHANGE).
>>> So we make two calls to speech module: the first one to cache object
>>> properties, the second one to speak whatever properties have
>>> changed. Cached properties are stored inside NVDAObject, so it is
>>> very important that the same object is passed to both these calls.
>>>
>>> Now back to fast browse mode v2. Since we don't update system focus
>>> on every browse mode focus change, we need to update system focus
>>> right before activating the checkbox. This is accomplished in
>>> BrowseModeTreeInterceptor.maybeSyncFocus(). And in the same
>>> function, right after I call obj.setFocus(), I also call
>>> speech.speakObject(obj,controlTypes.REASON_ONLYCACHE).
>>> However, here is the problem. When we receive state changed event,
>>> the function NVDAObject.event_stateChange is called on a different
>>> NVDA object instance. So we completely miss the cached state.
>>> When I say a different NVDAObject instance, I only mean a different
>>> python object. So there are apparently (at least) two NVDAObjects,
>>> I'll call them NVDAObject1 and NVDAObject2. Both represent the same
>>> checkbox in the browser, both have the same IA2UniqueID and
>>> windowHandle. Yet in the first call (cacheonly) I see NVDAObject1,
>>> and the state changed event comes in with NVDAObject2.
>>> To illustrate this, here is the example from my logs (slightly
>>> formatted):
>>> cacheonly from maybeSyncFocus():
>>>     <NVDAObjects.IAccessible.mozilla.Mozilla object at 0x07A6A370>
>>>     uniqueID = (67548, -33555216)
>>> speakObject on stateChanged
>>>     <NVDAObjects.IAccessible.mozilla.Mozilla object at 0x07A6A1F0>
>>>     uniqueID = (67548L, -33555216)
>>>
>>> So the big question I have is why there are two separate NVDAObjects
>>> created for the same checkbox in my scenario? And why they are not
>>> created Without my PR? What is logic behind creating new NVDA
>>> Objects? I did some cursory debugging of that and I saw that most of
>>> NVDAObjects are created using function getNVDAObjectFromEvent()
>>> defined in IAccessible2\__init__.py, and there doesn't seem to be
>>> any caching logic there.
>>> It seems there are two potential approaches of tackling this issue.
>>> 1. We need to figure out why two separate NVDA objects are created.
>>> 2. Potentially another approach is to allow creating multiple python
>>> NVDAObjects for the same Checkbox (or any other real IAccessible2
>>> object), and have a properties cache that would take this into
>>> account. Some kind of weakKeyDictionary might work. Property caching
>>> logic in speech.py might have to be redesigned though.
>>>
>>> And also another thing worth noticing in the logs that I pasted
>>> above. UniqueID is a tuple of WindowHandle and IA2UniqueID . If you
>>> looked at both entries carefully, you would notice that WindowHandle
>>> is slightly different: even though the value is the same, in the
>>> first entry it is int, and in the second entry it is long. This
>>> looks very suspicious to me. Do you think this might be the reason
>>> why two copies of NVDAObjects are created? On the other hand it
>>> doesn't explain why two objects are not created in stock NVDA.
>>>
>>> Anyway, this is current state of my second attempt to implement fast
>>> browse mode. Any suggestions will be appreciated!
>>> Best
>>> --Tony
>>>
>>
>>
>>
>
>
>





--
Reef Turner
Software Developer 
 
Facebook: https://www.facebook.com/NVAccess 
Twitter: @NVAccess 


Re: Problem with fast browse mode - multiple NVDAObjects are created

 

Hello Tony,

Thanks for pointing this out. I might have some time to dive into this as well. If you allow me to push directly to your branch, I'm happy to start improving right away.

Regards,
Leonard

Op 17 apr. 2019 om 18:20 heeft Tony Malykh <anton.malykh@...> het volgende geschreven:

Hi Michael,

Thanks for your response. I really appreciate that you would like to prioritize this, but as I mentioned in my previous email, I won't have time anymore to work on this, at least in the nearby future. I have a day job and it's consuming more and more of my time. Besides, my investigation on this PR take me deeper and deeper into NVDA internals and it looks like polishing this PR until it's production-ready might require more time than I initially estimated. I wish someone else could finish this job some day...

Best regards

Tony


On 4/15/2019 4:50 AM, Michael Curran wrote:

Hi Tony,


I would like to publicly apologize for not replying to your email around a month ago. I should have at very least explained that I did not have time to look at this at that point in time.


I still stand by my statement that I do think this work is important, and that I would like to see this in 2019.2. I also want to get this work in before speech refactor / Python 3. Therefore, I will in deed prioritize this now.


I need to clear my head enough to give this full attention and try and reconcile the issues I previously had with the PR. I am currently on personal leave but will be back next week and will start looking into it again then.


Thanks again for your contributions.


Mick










On 4/14/2019 5:06 AM, Tony Malykh wrote:

Hi Reef,
I appreciate your explanation.
1. I haven't heard from Michael for over a month. At this point I believe he saw my email and decided not to reply. I understand he was busy, but I can't believe he didn't have time to reply a few lines to me for over a month.
2. I believe I explained my problem clearly enough - duplicate  NVDA objects are created. The rest are details, test case, etc - you can find that in my previous emails in this thread.
3. I understand that you guys have your own set of priorities. However when you're saying that (and correct me if I'm wrong), it creates an impression that fast browse mode is not important or not worthy of Michael's reply. Here I pulled the list of 22 NVDA issues that I was trying to fix by fast browse mode (some of them are closed as duplicates):
    * nvda jumping the text box to enter the text to translate in google translator #8992
    * nvda 2018.4 beta 2 stuck in sum elements in web page #8999
    * Navigating quickly in edit fields on GMail causes NVDA to change from focus to browse mode unexpectedly #8211
    * When navigating the gmail page gsuite corporate inbox using the default view, nvda gets stuck in the navigation of the chat tabs #8111
    * NVDA cuts words and reports parts of different elements together on one key press; first occurance since nvda 2018.4 #9129
    * Internal focus handling seems quirky #5831
    * Browse mode problems with slow/inappropriate focus changes in browsers #2039
    * Losing Focus When Using Browse Mode #1544
    * Long pressing arror key will force to enter edit mode in firefox. #4719
    * In Firefox 37,when I move focus to a new line or control NVDA sometimes sets focus back to the previous line or control which had focus #5032
    * focus mode is activated due to caret movement sometimes randomly even when configured not to do so #5359
    * Firefox: Performance Degradation since merging #2039 Fix #5411
    * NVDA jumps when navigating on the web #2211
    * NVDA jumps to the bottom of the page when reaching the main landmark or heading level 1 on certain pages #4797
    * cursor moving backwards in navigation with the keyboard #2312
    * firefox edit fields: duplicate llines and words #3156
    * Sometimes focus jumps back to a previous web element in Firefox when arrowing down a webpage #4522
    * Internet Explorer 11 64 bit on windows 7 #6450
    * Timing issues in virtual buffers #6586
    * The user is unexpectedly dropped into focus mode on Twit.tv #6625
    * the cursor jumps backwards when browsing certain websites in Firefox, Chrome and Edge #7956
    * in chrome, sometimes focus is jumping #8013
So apparently NVDA users are bothered by bugs in NVDA browse mode as they keep creating new issues for years.
4. My attempts to fix all the bugs of fast browse mode take me deeper and deeper into NVDA internals. This particular problem with duplicate NVDA objects is very hard to fix. I could fix it for Chrome and Firefox by rewriting speech cache,but then in Internet explorer duplicate NVDA objects even have different IA2UniqueIDs, which makes it impossible for me to relate them. In edge there is another problem with focus event not being received, which I havn't started to look at. I was hoping to at least ask someone to explain to me what was the logic of creating NVDAObjects, when a new one is created as at a glance there doesn't seem to be any cache in NVDA code. But again, I received no reply. I was just trying to help NVDA, but it looks like my help is not very welcome here, Michael is only willing to be a passive code reviewer. Well, he's the boss here, but this attitude will make much harder for contributors to submit any pull requests longer than a few lines of code. Given all of that and given lack of my own free time, I'll not be working on fast browse mode anymore. I wish someone else could one day fix NVDA browse mode.
--Tony


On 4/10/2019 2:37 AM, Reef Turner wrote:
Hi Tony,

I can't speak for Michael, or the previous conversations that you have had. However, I can point out that this has been a very busy month for us at NV Access. We have had a week at CSUN AT conference (and got over the resulting jetlag), worked hard to get 2019.1 out the door and are pursuing a 2019.1.1 release. Michael and the rest of the team are taking some leave before we get into the work for the next quarter. I'm telling you this just to give some context.

Internal to NV Access, I'm sure you can appreciate that we have our own priorities and quite a busy schedule. The best advice I can give you for getting help on your project, is to try to distil the problem down to it's core, explain it is simply and succinctly as you can. You may find that there are other people on this list who can help.

On Tue, 2 Apr 2019 at 18:15, Tony Malykh <anton.malykh@...> wrote:
Hello Michael,

Did you see my previous emails?

--Tony



On 3/25/2019 3:12 PM, Tony Malykh via Groups.Io wrote:
> Hello Michael,
>
> I was wondering if I could have any assistance with this issue? I was
> under impression that you offered to help me with debugging fast
> browse mode PR... I haven't heard from you for more than two weeks, so
> should I keep waiting? Or did I misunderstand you and I'm own my own
> with this PR?
>
> Thanks
>
> --Tony
>
> On 3/20/2019 9:20 AM, Tony Malykh via Groups.Io wrote:
>> Moving this thread to new mailing list.
>>
>> [BCC old mailing list]
>>
>>
>> --Tony
>>
>> On 3/9/2019 2:49 PM, Tony Malykh wrote:
>>> Hello NVDA devs and especially Michael,
>>>
>>> I am trying to work on fast browse mode PR (a.k.a. focus follows
>>> browse mode off).
>>> Just a quick recap: In v1 of this PR there were some  bugs related
>>> to the fact that some logic was asynchronous and it relied on
>>> gainFocus event being received from the operating system. However in
>>> some cases for unknown reason operating system wouldn't send this
>>> event, causing bugs that are hard to deal with, such as inability to
>>> activate form elements on web pages.
>>> I am now working on v2:
>>> https://github.com/nvaccess/nvda/pull/9360
>>> The code is by no means ready to be reviewed, but it's just for the
>>> reference.
>>> The main change in v2 is replacing asynchronous logic with
>>> synchronous logic there, and in general it works, but there is one
>>> new bugI'm facing that I would like to discuss and maybe ask for
>>> some help.
>>>
>>> Basic description of the bug:
>>> When unchecking a checkbox on a web page, its new state is not being
>>> announced. The bug only reproduces for unchecking - that is checking
>>> previously blank checkbox works as expected.
>>> Here are the concrete steps to reproduce the bug.
>>> 1. Enter Fast browse mode by pressing NVDA+num row 8.
>>> 2. In Chrome or Firefox navigate to
>>> https://www.ironspider.ca/forms/checkradio.htm
>>> 3. Check the first 3 checkboxes on the page
>>> 4. Go back to the first check box
>>> 5. Press space to uncheck it. The check box will be successfully
>>> unchecked, but the new state will not be announced immediately.
>>>
>>> I spent some time debugging this , and here are my findings so far.
>>> Announcing state change works like this. First
>>> speech.speakObject(obj,controlTypes.REASON_ONLYCACHE) is called to
>>> cache the previous state. In traditional browse mode this function
>>> is called when user navigates to that checkbox, and therefore system
>>> focus is switched to that checkbox as well. This happens in
>>> BrowseModeDocumentTreeInterceptor.event_gainFocus.
>>> Then, assuming that user presses space bar on a checkbox,
>>> BrowseModeTreeInterceptor._activatePosition is triggered, which
>>> activates this checkbox. Shortly, in response to that we receive a
>>> state changed event, that is processed in
>>> NVDAObject.event_stateChange(), which in turn calls
>>> speech.speakObjectProperties(self,states=True,
>>> reason=controlTypes.REASON_CHANGE).
>>> So we make two calls to speech module: the first one to cache object
>>> properties, the second one to speak whatever properties have
>>> changed. Cached properties are stored inside NVDAObject, so it is
>>> very important that the same object is passed to both these calls.
>>>
>>> Now back to fast browse mode v2. Since we don't update system focus
>>> on every browse mode focus change, we need to update system focus
>>> right before activating the checkbox. This is accomplished in
>>> BrowseModeTreeInterceptor.maybeSyncFocus(). And in the same
>>> function, right after I call obj.setFocus(), I also call
>>> speech.speakObject(obj,controlTypes.REASON_ONLYCACHE).
>>> However, here is the problem. When we receive state changed event,
>>> the function NVDAObject.event_stateChange is called on a different
>>> NVDA object instance. So we completely miss the cached state.
>>> When I say a different NVDAObject instance, I only mean a different
>>> python object. So there are apparently (at least) two NVDAObjects,
>>> I'll call them NVDAObject1 and NVDAObject2. Both represent the same
>>> checkbox in the browser, both have the same IA2UniqueID and
>>> windowHandle. Yet in the first call (cacheonly) I see NVDAObject1,
>>> and the state changed event comes in with NVDAObject2.
>>> To illustrate this, here is the example from my logs (slightly
>>> formatted):
>>> cacheonly from maybeSyncFocus():
>>>     <NVDAObjects.IAccessible.mozilla.Mozilla object at 0x07A6A370>
>>>     uniqueID = (67548, -33555216)
>>> speakObject on stateChanged
>>>     <NVDAObjects.IAccessible.mozilla.Mozilla object at 0x07A6A1F0>
>>>     uniqueID = (67548L, -33555216)
>>>
>>> So the big question I have is why there are two separate NVDAObjects
>>> created for the same checkbox in my scenario? And why they are not
>>> created Without my PR? What is logic behind creating new NVDA
>>> Objects? I did some cursory debugging of that and I saw that most of
>>> NVDAObjects are created using function getNVDAObjectFromEvent()
>>> defined in IAccessible2\__init__.py, and there doesn't seem to be
>>> any caching logic there.
>>> It seems there are two potential approaches of tackling this issue.
>>> 1. We need to figure out why two separate NVDA objects are created.
>>> 2. Potentially another approach is to allow creating multiple python
>>> NVDAObjects for the same Checkbox (or any other real IAccessible2
>>> object), and have a properties cache that would take this into
>>> account. Some kind of weakKeyDictionary might work. Property caching
>>> logic in speech.py might have to be redesigned though.
>>>
>>> And also another thing worth noticing in the logs that I pasted
>>> above. UniqueID is a tuple of WindowHandle and IA2UniqueID . If you
>>> looked at both entries carefully, you would notice that WindowHandle
>>> is slightly different: even though the value is the same, in the
>>> first entry it is int, and in the second entry it is long. This
>>> looks very suspicious to me. Do you think this might be the reason
>>> why two copies of NVDAObjects are created? On the other hand it
>>> doesn't explain why two objects are not created in stock NVDA.
>>>
>>> Anyway, this is current state of my second attempt to implement fast
>>> browse mode. Any suggestions will be appreciated!
>>> Best
>>> --Tony
>>>
>>
>>
>>
>
>
>





--
Reef Turner
Software Developer 
 
Facebook: https://www.facebook.com/NVAccess 
Twitter: @NVAccess 


Code Docs

Jim Homme
 

Hi,

The developer guide on nvda-project repository says to consult the development guide, but does not say how to do this. How does one do this. And, if I would submit a pull request with a documentation change that adds this information, which directions should I follow to get that done?

 

Thanks.


Jim

 

 

 

==========

Jim Homme

Digital Accessibility

Bender Consulting Services

412-787-8567

https://www.benderconsult.com/our%20services/hightest-accessible-technology-solutions

 

Questions About Getting the NVDA Source

Jim Homme
 

Hi,

Before I read the instructions in the readme.md file on the NVDA repository, I forked a copy of the NVDA repository to my GitHub account. I see that those directions do not talk about forking. Should I have forked a copy?

 

Also, I cloned my copy of the repository to my local machine, but I did not use the ---recursive option. Should I do that part again?

 

Thanks.


Jim

 

 

 

==========

Jim Homme

Digital Accessibility

Bender Consulting Services

412-787-8567

https://www.benderconsult.com/our%20services/hightest-accessible-technology-solutions

 

Git Bash Behavior VS Git Cmd Behavior

Jim Homme
 

Hi,

On my computer, I noticed that when I run Git Cmd, Git says it is deprecated, so I ran Git Bash. When I did that, I notice that the characters I type do not speak. What part of the NVDA source would I check out that handles echoing of characters back to us.

 

Thanks.


Jim

 

 

 

==========

Jim Homme

Digital Accessibility

Bender Consulting Services

412-787-8567

https://www.benderconsult.com/our%20services/hightest-accessible-technology-solutions

 

Re: Questions About Getting the NVDA Source

Arnold Loubriat
 

Hello Jim,
If you want to submit pull requests to NVDA's repository, you of course need to fork it first on your GitHub account.
Once you've cloned your own fork on your local machine, if you forgot to grab the submodules using the `--recursive` flag, you can always use the `git submodule --init` command that will perform the same actions.
Don't forget to make sure you have all the dependencies required to build the source, and always remember to type `scons source` to prepare the code. After that you should be able to build your copy of the software just fine.
Best regards.

Arnold

Re: Questions About Getting the NVDA Source

Jim Homme
 

Hi Arnold,

Thanks for this answer. I happened to see the command you talked about below. I executed that. That brought up another question with me. If I only want to change the English documentation, do I need to follow the process you  talk about below, rebuilding the source? I will also go and see if I can figure out the answers. Let me know if I’m clogging up the list with elementary things.

 

Thanks.


Jim

 

 

 

==========

Jim Homme

Digital Accessibility

Bender Consulting Services

412-787-8567

https://www.benderconsult.com/our%20services/hightest-accessible-technology-solutions

 

From: nvda-devel@groups.io <nvda-devel@groups.io> On Behalf Of Arnold Loubriat via Groups.Io
Sent: Wednesday, April 17, 2019 3:54 PM
To: nvda-devel@groups.io
Subject: Re: [nvda-devel] Questions About Getting the NVDA Source

 

Hello Jim,
If you want to submit pull requests to NVDA's repository, you of course need to fork it first on your GitHub account.
Once you've cloned your own fork on your local machine, if you forgot to grab the submodules using the `--recursive` flag, you can always use the `git submodule --init` command that will perform the same actions.
Don't forget to make sure you have all the dependencies required to build the source, and always remember to type `scons source` to prepare the code. After that you should be able to build your copy of the software just fine.
Best regards.

Arnold

GitHub Instructions About Keeping NVDA Repository In Sync With Local Repository

Jim Homme
 

Hi,

The readme.md file on the NVDA repository talks about getting the source code, but does not talk about keeping it in sync. The wiki page at https://github.com/nvaccess/nvda/wiki/Contributing gives instructions about keeping local source in sync. I feel it would be a good idea to change the readme.md file so that it points to the wiki page and consolidate the instructions into one place. Assuming the techy folks here think this is a good idea, what would be the process for me to change the documentation and submit the change? Should I fork the wiki over to my account and change that and submit it, then change my readme.md file and submit a pull request for that change? I think that this exercise may also help me make the docs more clear, and I can submit that, also.

 

Thanks.

 

Jim H

 

 

 

==========

Jim Homme

Digital Accessibility

Bender Consulting Services

412-787-8567

https://www.benderconsult.com/our%20services/hightest-accessible-technology-solutions

 

Re: Questions About Getting the NVDA Source

Marlon Brandão de Sousa
 

You can for k and use yours version. You will need to use the recursive option .. at this point I recomend you clone a new copy using that option

Obrigado,
Marlon

Em 17 de abr de 2019, à(s) 16:15, Jim Homme <jhomme@...> escreveu:

Hi,

Before I read the instructions in the readme.md file on the NVDA repository, I forked a copy of the NVDA repository to my GitHub account. I see that those directions do not talk about forking. Should I have forked a copy?

 

Also, I cloned my copy of the repository to my local machine, but I did not use the ---recursive option. Should I do that part again?

 

Thanks.


Jim

 

 

 

==========

Jim Homme

Digital Accessibility

Bender Consulting Services

412-787-8567

https://www.benderconsult.com/our%20services/hightest-accessible-technology-solutions

 

Re: Git Bash Behavior VS Git Cmd Behavior

Jens Gierke
 

Hi,

during installation of Git Bash, there is a question which terminal
emulation you would like to use. Default is MinTTY. Using MinTTY, NVDA
doesn't speak the input. Choosing "Windows default terminal" or
something like that (I don't remember the exact expression), also Git
Bash uses the Windows terminal and NVDA behaves as in CMD.

Best regards,
Jens Gierke


Am 17.04.2019 um 21:44 schrieb Jim Homme:

Hi,
On my computer, I noticed that when I run Git Cmd, Git says it is deprecated, so I ran Git Bash. When I did that, I notice that the characters I type do not speak. What part of the NVDA source would I check out that handles echoing of characters back to us.

Thanks.

Jim



==========
Jim Homme
Digital Accessibility
Bender Consulting Services
412-787-8567
https://www.benderconsult.com/our%20services/hightest-accessible-technology-solutions



Add Braille support for emojis

Corentin Bacqué-cazenave <corentin@...>
 

Hello,
I think it would be interesting to offer support for emojis in Braille.
In the emoji panel of Windows 10 for example, it would be nice if the selected emoji is displayed in Braille.
By cons, it would not necessarily good to display it all the time, to avoid making lines too big.
What do you think about this idea ?
Thank you.

Re: Add Braille support for emojis

Gabriele Battaglia <iz4apu@...>
 

Hi Corentin.
I think it would be a great idea.

I use Braille every day with NVDA and it's a shame to see all those 0x character on my Display.
I could help to find Braille strings that rapresent the most common emojes.
Gabriele.

Re: Add Braille support for emojis

Alberto Buffolino
 

Corentin Bacqué-cazenave via Groups.Io, il 22/04/2019 17.27, ha scritto:
I think it would be interesting to offer support for emojis in Braille.
Alberto:
Hi Corentin,
I agree. And created an issue about it, some time ago:
https://github.com/nvaccess/nvda/issues/9213
Unfortunately, I have a good knowledge of Python, but no experience about NVDA Braille management, so I cannot provide any pull request.
Alberto

Treshold version of NVDA

Rui Fontes
 

Hello!

What is the purpose of this new category of NVDA versions?

Best regards,

Rui Fontes
NVDA portuguese team

Re: Treshold version of NVDA

 

hello Rui Fontes
This is the submission information of appveyor
appVayor: Build a threshold snapshot for the speechRefactor / Python3 transition work.
thank

Re: Treshold version of NVDA

Rui Fontes
 

Thanks!

I will keep an eye in this version...

Rui Fontes

Às 11:30 de 26/04/2019, dingpengyu escreveu:

hello Rui Fontes
This is the submission information of appveyor
appVayor: Build a threshold snapshot for the speechRefactor / Python3 transition work.
thank

Tracking keypress events on an add on

Marlon Brandão de Sousa
 

Hello,
As the message subject says, I need to track keypress events on an ad on. Basically I need a function to be called whenever any key is pressed and take some decisions depending on what key it is. How can I achieve these in NVDA?

Since we are on this topic, is there any centralized place where I can find all events that mvda is capable of producing?

Obrigado,
Marlon

How to view the debug logs, and get exceptions in NVDAHelper

derek riemer
 

I'm trying to get exceptions in NVDAHelper, for some error I caused in one of the MSHTML vbuff backend methods. 
I see this coder in remoteLoader/loader.cpp.
#ifndef NDEBUG
    Beep(880,100);
    #endif
I also see a logger method that does some cryptic things I don't understand. Does anyone here know how I can set the log level, and/or view the logs? How can I get a debugger attached to IE, so I can figure out what horrible thing I did that is crashing IE? I tried getting windbg to attach to iexplore but it won't do anything for some reason.
Short of that, can I generate a minidump somehow, or a full dump, when IE breaks? It doesn't seem to crash the whole browser, but just the page.
Chbeers
--
Derek Riemer
Improving the world one byte at a time!        ⠠⠊⠍⠏⠗⠕⠧⠬ ⠮ ⠸⠺ ⠐⠕ ⠃⠽⠞⠑ ⠁⠞ ⠁ ⠐⠞⠖
•    Accessibility enthusiast.
•    Proud user of the NVDA screen reader.
•    Open source enthusiast.
•    Skier.

•    Personal website: https://derekriemer.com




Over the Threshold...

Brian's Mail list account
 

So this new snapshot branch then. I noticed that as it was none o of the current add ons are enabled. So where angels feared to tread go I and changed them all to tested version of 2019.2.0.
This then brings them all into functioning, and several then do an update. Note the folder I installed the portable version of Threshold into was an old test snap with older add ons in it you understand. So basically now it seems the only add ons that were updated were Resource monitor, Focus Highlight and add on updater of course.
I have as I say hand amended the manifests of a lot of other wanes just to see what happens next. So is there a lay persons description of what this branch is being used for?
Thanks.
Brian

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