Open notepad in Kleopatra and start encryption with symmetric passphase.
The pinentry window pops up and NVDA reads (according to speech log)
pinentry-qt5 dialog Enter passphrase Passphrase: edit protected blank pinentry-qt5 dialog Enter passphrase
where the second line isn't audible. Maybe it's canceled/skipped in favor of the third line.
INFO - __main__ (17:04:31.564) - MainThread (5092): Starting NVDA version 2025.1.2 x86 [...] DEBUG - external:globalPlugins.evtTracker.GlobalPlugin.evtDebugLogging (17:05:59.376) - MainThread (5092): EvtTracker: object: <NVDAObjects.Dynamic_DialogUIAWindowNVDAObject object at 0x05DB3E10> name: pinentry-qt5 role: DIALOG event: foreground app module: AppModule(appModuleHandler, appName='pinentry', processID=7840) window class name: Qt5159QWindowIcon UIA Automation Id: class name: PinEntryDialog DEBUG - external:globalPlugins.evtTracker.GlobalPlugin.evtDebugLogging (17:05:59.376) - MainThread (5092): EvtTracker: object: <NVDAObjects.Dynamic_DialogUIAWindowNVDAObject object at 0x0941AA90> name: pinentry-qt5 role: DIALOG event: focusEntered app module: AppModule(appModuleHandler, appName='pinentry', processID=7840) window class name: Qt5159QWindowIcon UIA Automation Id: class name: PinEntryDialog IO - speech.speech.speak (17:05:59.444) - MainThread (5092): Speaking [LangChangeCommand ('en_GB'), 'pinentry-qt5', 'dialog', 'Enter passphrase\n', CancellableSpeech (still valid)] DEBUG - external:globalPlugins.evtTracker.GlobalPlugin.evtDebugLogging (17:05:59.446) - MainThread (5092): EvtTracker: object: <NVDAObjects.Dynamic_EditableTextWithAutoSelectDetectionUIA object at 0x013F81F0> name: Passphrase: role: EDITABLETEXT event: gainFocus app module: AppModule(appModuleHandler, appName='pinentry', processID=7840) window class name: Qt5159QWindowIcon UIA Automation Id: class name: PinLineEdit DEBUG - NVDAObjects.NVDAObject._get_placeholder (17:05:59.455) - MainThread (5092): Potential unimplemented child class: <NVDAObjects.Dynamic_EditableTextWithAutoSelectDetectionUIA object at 0x013F81F0> IO - speech.speech.speak (17:05:59.471) - MainThread (5092): Speaking [LangChangeCommand ('en_GB'), 'Passphrase:', 'edit', 'protected', CancellableSpeech (still valid), 'blank'] DEBUG - external:globalPlugins.evtTracker.GlobalPlugin.evtDebugLogging (17:05:59.476) - MainThread (5092): EvtTracker: object: <NVDAObjects.IAccessible.Button object at 0x013F8E50> name: pinentry.exe - 1 running window role: BUTTON event: stateChange states: 16, 8192, 16777216 app module: AppModule(explorer, appName='explorer', processID=4632) window class name: MSTaskListWClass IAccessible accName: 'pinentry.exe - 1 running window' IAccessibleChildID: 13 DEBUG - external:globalPlugins.evtTracker.GlobalPlugin.evtDebugLogging (17:05:59.478) - MainThread (5092): EvtTracker: object: <NVDAObjects.Dynamic_EditableTextWithAutoSelectDetectionUIA object at 0x013F81F0> name: Passphrase: role: EDITABLETEXT event: loseFocus app module: AppModule(appModuleHandler, appName='pinentry', processID=7840) window class name: Qt5159QWindowIcon UIA Automation Id: class name: PinLineEdit DEBUG - external:globalPlugins.evtTracker.GlobalPlugin.evtDebugLogging (17:05:59.479) - MainThread (5092): EvtTracker: object: <NVDAObjects.Dynamic_DialogUIAWindowNVDAObject object at 0x095E3E50> name: pinentry-qt5 role: DIALOG event: gainFocus app module: AppModule(appModuleHandler, appName='pinentry', processID=7840) window class name: Qt5159QWindowIcon UIA Automation Id: class name: PinEntryDialog IO - speech.speech.speak (17:05:59.561) - MainThread (5092): Speaking [LangChangeCommand ('en_GB'), 'pinentry-qt5', 'dialog', 'Enter passphrase\n', CancellableSpeech (still valid)] DEBUG - external:globalPlugins.evtTracker.GlobalPlugin.evtDebugLogging (17:05:59.564) - MainThread (5092): EvtTracker: object: <NVDAObjects.Dynamic_DialogUIAWindowNVDAObject object at 0x013F8350> name: pinentry-qt5 role: DIALOG event: UIA_window_windowOpen app module: AppModule(appModuleHandler, appName='pinentry', processID=7840) window class name: Qt5159QWindowIcon UIA Automation Id: class name: PinEntryDialog
We see
- focusEntered for pinentry-qt5 dialog -> NVDA speaks pinentry-qt5 dialog Enter passphrase
- gainFocus for Passphrase input field -> NVDA speaks Passphrase: edit protected blank
- loseFocus for Passphrase input field
- gainFocus for pinentry-qt5 dialog -> NVDA speaks pinentry-qt5 dialog Enter passphrase
This could point to a bug in Qt with wrong order of events, e.g. focus event for dialog is sent after focus event for input field.
Update: This also happens with Qt 6 and with many secondary windows in kleopatra (e.g. Create New OpenPGP Certificate, Error windows, etc.).