Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

NVDA's sleep functionality does not completely affect touch screen interaction #4041

Open
nvaccessAuto opened this issue Mar 30, 2014 · 10 comments

Comments

@nvaccessAuto
Copy link

Reported by k_kolev1985 on 2014-03-30 12:12
When you execute the NVDA sleep mode for an application on a device with a touch screen, the touch screen does not respond to touch actions while the focus is in that specific application. Actually, slide gestures work as they should as if NVDA is not running, but interaction with elements (objects) from that application is not possible - single or double tapping them does nothing.

Steps to reproduce it:

  1. Open an application.
  2. Enable NVDA's sleep mode for that application.
  3. Try to interact with that application and the controls in its window.

Actual results:
Interaction with objects in the application for witch NVDA is in sleep mode is not possible. slide gestures work, but activating an item is not possible.

Expected results:
When NVDA is in sleep mode for an application, the interaction with the touch screen in that application should be as if NVDA is not running.

System specifications:
NVDA version: next-10444,672c1cd.
OS version: Windows 8.1, 32-bit.
Device: ASUS T100 tablet.

@nvaccessAuto
Copy link
Author

Comment 1 by nvdakor on 2014-07-06 11:52
Hi,
A Twitter user reported a similar problem/suggestion, and somebody replied with a coded workaround:

  1. From the app in question, open NVDA Python Console (Control+NVDA+Z).
  2. Type the following:
import touchHandler
touchHandler.terminate()
  1. To restore touch functionality, use:
touchHandler.initialize()

This isn't an ideal workaround, but it allows NVDA to "forget" that touchscreen is active.

@nvaccessAuto
Copy link
Author

Comment 2 by nvdakor on 2014-07-06 12:06
Hi,
A possible workaround would be as follows:

  1. Add a new method called touchHandler.sleep() that toggles suspend status for touchscreens. This method will call touchHandler.terminate if touch is active and will call touchHandler.initialize() if not, but I'm sure there is a solution that doesn't require calling terminate/initialize. This could be integrated into appModuleHandler.AppModule.sleepMode to make sure touch gestures honors sleep mode for the app in question.
  2. Provide two new variables named touchHandler.touchActive and touchHandler.numTouchPoints that stores whether touch is active or not and number of touch points, respectively. The first variable will be toggled via touchHandler.sleep() method, and the second will be set during touchHandler.initialize() and will determine number of available touch points. The second variable is needed to detect that we're on a computer without touch support (numTouchPoints == 0).
  3. In globalCommands.script_toggleCurrentAppSleepMode, if touch is active (that is, we're using an installed copy on a computer running Windows 8 or higher with touch device installed with touch support active), call touchHandler.sleep().
  4. Just in case a touch user wishes to toggle sleep mode, I propose gesture of four finger double tap to prevent a user from entering sleep mode by accident.
    Thanks.

@nvaccessAuto
Copy link
Author

Comment 3 by jteh (in reply to comment 2) on 2014-07-06 22:41
Replying to nvdakor:

  1. Just in case a touch user wishes to toggle sleep mode, I propose gesture of four finger double tap to prevent a user from entering sleep mode by accident.

Herein lies the crux of the issue. If they activate it like this, how do they deactivate it? When touch is disabled, we can't itnercept any touch gestures, so they won't be able to disable it.

@nvaccessAuto
Copy link
Author

Comment 4 by nvdakor (in reply to comment 3) on 2014-07-07 15:47
Replying to jteh:

Replying to nvdakor:

  1. Just in case a touch user wishes to toggle sleep mode, I propose gesture of four finger double tap to prevent a user from entering sleep mode by accident.

Herein lies the crux of the issue. If they activate it like this, how do they deactivate it? When touch is disabled, we can't itnercept any touch gestures, so they won't be able to disable it.

Right. If only there was a way to let touch gestures be dropped, like keyboard gestures... I guess the acceptable solution is to just have keyboard control the sleep mode toggle. This is just a workaround, as it is expected that we may not be able to toggle sleep mode from touchscreens if a tablet or a slate is used without a keyboard.

@nvaccessAuto
Copy link
Author

Comment 5 by zahari_bgr on 2014-07-07 18:43
Hi,
I've never touched one of those, but on Android devices one could disable Talkback and enable it back again by going to the lock screan, e.g. turning off the screen and turning it back on.
Perhaps Windows tablets have something like that which NVDA could use?
Joseph's solution is also good and I think it would be useful for laptop users despite other options.

@nvaccessAuto
Copy link
Author

Comment 6 by nvdakor on 2014-07-07 19:54
Hi,
You can "emulate" that in NVDA by exiting NVDA for a while and restarting it. The scope is to putting NvDA to sleep for an application. My solution may or may not work (especially step 4) if we need to toggle sleep mode using a slate tablet - that is, a tablet without a physical keyboard present.
Thanks.

@nvaccessAuto
Copy link
Author

Comment 7 by nvdakor on 2014-07-07 19:55
Hi,
And it wasn't me who posted the original soluton - it was someone over at Twitter who posted the code in the first place.

@bhavyashah
Copy link

@jcsteh's #4041 (comment) raises certain concerns with regards to this ticket's proposal, which have again been addressed in subsequent comments by @josephsl and user zahari_bgr. Touch Screen experts - are we in consensus, or are there still pertinent problems to be discussed?

@Adriani90
Copy link
Collaborator

@k-kolev1985 is this still reproducible?

@k-kolev1985
Copy link

@Adriani90 As I said in another NVDA ticket here, I rarely use my portable touch screen computer nowadays. And as the NVDA developers explained why completely disabling touch screen interaction is not so easy to do, I'll leave it at that. I think Joseph Lee's "Enhanced Touch Gestures" add-on has a function to temporarily disable touch screen interaction of NVDA, that might be a solution/workaround for this issue (or just turn off NVDA for such cases where direct touch screen interaction is needed 🙂).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants