outlook calendar - location field in new or existing appointment not read properly with arrow keys #4126

Closed
nvaccessAuto opened this Issue May 7, 2014 · 13 comments

2 participants

@nvaccessAuto

Reported by manish on 2014-05-07 01:45
In outlook 2010 calendar, when creating a new appointment or meeting request, NVDA doesn't read the location field with arrow keys. When you tab into the location field, NVDA does correctly read the current value.
However, you cannot use left and right arrow keys to read the text by character or word or up and down arrow keys to go through the various recently used locations available in the drop down.

Very intermittently, left and right arrow keys suddenly start working for the location field in certain appointments. I am not sure what triggers this correction.
up and down arrow keys only ever say "blank".

@nvaccessAuto

Comment 1 by nvdakor on 2014-05-07 04:34
Hi,
Confirmed. Are there other combo boxes with this problem?
Technical: I guess we're dealing with yet another display model based control. If we can track cursor (caret) movement, then perhaps we should implement yet another overlay for this guy.

@nvaccessAuto

Comment 2 by manish on 2014-06-29 06:14
fix available on
https://manish_agrawal@bitbucket.org/manish_agrawal/nvda.git
branch: in_t4126

This did not need a display model based overlay. Simply mapping the field to a rich edit control did the trick. Also caught the state change event as an autocomplete list item.

@nvaccessAuto

Comment 4 by mdcurran on 2014-06-30 03:59
From a little research, it looks like ReCombobox20w actually comes from richedit20.dll (a system dll) thus it is probably best that the support for this control be moved into the core.
Map it in Window NVDAObject's findOverlayClasses around the same point we handle RichEdit. Also I'm guessing it actually is a RichEdit20 control, not RichEdit so our RichEdit20 class should be used if that works.

If you need to handle any specific logic for this control, such as a cancelSpeech or something then obviously in NVDAObjects.window.edit create a new ReCombobox20 class which subclasses RichEdit20.

@nvaccessAuto

Comment 5 by manish (in reply to comment 4) on 2014-09-01 17:36
Made the changes recommended. The class is now mapped in nvdaObjects/Window/init.py and there is no special handling required.

Replying to mdcurran:

From a little research, it looks like ReCombobox20w actually comes from richedit20.dll (a system dll) thus it is probably best that the support for this control be moved into the core.

Map it in Window NVDAObject's findOverlayClasses around the same point we handle RichEdit. Also I'm guessing it actually is a RichEdit20 control, not RichEdit so our RichEdit20 class should be used if that works.

If you need to handle any specific logic for this control, such as a cancelSpeech or something then obviously in NVDAObjects.window.edit create a new ReCombobox20 class which subclasses RichEdit20.

@nvaccessAuto

Comment 7 by jteh on 2014-09-02 01:37

+     if windowClassName=="REComboBox20W":

Any reason you use if instead of elif here (given that other similar checks are elif)?

Also, for future reference, probably best to reset the branch to master when the implementation differs so drastically to the original implementation, as we don't need the other attempts and merges in the repo. Don't worry about this for this ticket; I'll handle it when I merge.

@nvaccessAuto

Comment 8 by jteh on 2014-09-02 01:42
Also, the check for "REComboBox20W" can probably be moved into the same check as "RichEdit20", since they both result in the same class. Again, happy to just make that change when I merge once you clarify comment:7. Thanks.

@nvaccessAuto

Comment 9 by manish (in reply to comment 8) on 2014-09-02 22:39
Have made the code change you recommended. There was no reason for the "if".
Also, is there a set of git commands that will allow me to just have the last commit or the current diff from master as the only commit and loose all other history? or do you mean that I should create a fresh branch from master and apply the diff from this and master to the new one?
Will need something similar for the excel chart work that I will submit for code review shortly because that has loads of changes that are not relevant any more.

Replying to jteh:

Also, the check for "REComboBox20W" can probably be moved into the same check as "RichEdit20", since they both result in the same class. Again, happy to just make that change when I merge once you clarify comment:7. Thanks.

@nvaccessAuto

Comment 10 by jteh (in reply to comment 9) on 2014-09-02 23:22
Replying to manish:

Have made the code change you recommended. There was no reason for the "if".

Thanks. However:

+               elif windowClassName=="RichEdit20" or "REComboBox20W":

The correct line is:

elif windowClassName in ("RichEdit20", "REComboBox20W"):

Your original expression would always have evaluated to True, since the expression after the "or" was just a non-empty string which evaluates to True.

Also, is there a set of git commands that will allow me to just have the last commit or the current diff from master as the only commit and loose all other history? or do you mean that I should create a fresh branch from master and apply the diff from this and master to the new one?

There are many options. In this case, I probably would have just git reset --hard your branch to master and started again because you wanted none of the old changes. You could also git rebase -i and choose the commits to pick, squash into other commits, edit, etc. I use this quite a lot. However, using this well takes practice and you should definitely read documentation first. Note that this changes history and you should only do this if there aren't people depending on your branch already; e.g. multiple collaborators or primary branches like master. When you change history, you'll have to git push -f to overwrite the upstream branch.

@nvaccessAuto

Comment 11 by James Teh <jamie@... on 2014-09-03 00:03
In [75dd4e6]:
```CommitTicketReference repository="" revision="75dd4e62abcef49da5e630e651b48ff76adc3eb0"
In Outlook 2010, moving the caret now works as expected in the location field of appointments and meeting requests.

Re #4126.

@nvaccessAuto

Comment 12 by James Teh <jamie@... on 2014-09-03 00:08
In [c21104f]:
```CommitTicketReference repository="" revision="c21104f908513d63736f571c4aa943f88e958375"
Merge branch 't4126' into next

Incubates #4126.

Changes:
Added labels: incubating
@nvaccessAuto

Comment 13 by jteh on 2014-09-03 00:50
I've made the changes I noted in comment:10, so don't worry about doing this yourself. FYI, I used git rebase -i, picking the first commit and squashing all others to make one commit.

@nvaccessAuto

Comment 14 by James Teh <jamie@... on 2014-10-08 00:35
In [1fb7b99]:
```CommitTicketReference repository="" revision="1fb7b9983aa5a1caca0d6d5c349e2200de798839"
In Outlook 2010, moving the caret now works as expected in the location field of appointments and meeting requests.

Fixes #4126.

Changes:
Removed labels: incubating
State: closed
@nvaccessAuto

Comment 15 by jteh on 2014-10-08 00:44
Changes:
Milestone changed from None to 2014.4

@jcsteh jcsteh was assigned by nvaccessAuto Nov 10, 2015
@nvaccessAuto nvaccessAuto added this to the 2014.4 milestone Nov 10, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment