Bug 500690 - Wrong unit on accessibility KCM spinboxes
Summary: Wrong unit on accessibility KCM spinboxes
Status: REPORTED
Alias: None
Product: i18n
Classification: Translations
Component: en_GB (other bugs)
Version First Reported In: unspecified
Platform: Other Linux
: NOR crash
Target Milestone: ---
Assignee: en_GB translators/proof-readers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-02-24 20:39 UTC by Philipp Maierhöfer
Modified: 2025-11-30 14:49 UTC (History)
5 users (show)

See Also:
Latest Commit:
Version Fixed/Implemented In:
Sentry Crash Report:


Attachments
backtrace (7.24 KB, text/vnd.kde.kcrash-report)
2025-02-24 20:39 UTC, Philipp Maierhöfer
Details
screenshot (184.71 KB, image/png)
2025-02-25 09:01 UTC, Philipp Maierhöfer
Details
Screenshot with ms (473.88 KB, image/png)
2025-02-25 11:34 UTC, Nicolas Fella
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Philipp Maierhöfer 2025-02-24 20:39:54 UTC
Created attachment 178837 [details]
backtrace

"System Settings/Accessibility/Keyboard Filters" has two issues that might or might not be related:

1. The units of the debounce times don't make sense. The spin boxes accept values in minutes ("min", default=500), where milliseconds should be used. Note that typical values are 5 ms for a defer-like algorithm ("slow keys") and 30 ms for an eager-like algorithm ("bounce keys").

2. When the settings are changed and "Apply" is pressed, kaccess crashes with a segmentation fault. Backtrace is attached.

STEPS TO REPRODUCE
1. Open system settings, go to "Accessibility" and select "Keyboard Filters".
2. Observe that the debounce times are given in units of "min".
3. Change something and press "Apply".

OBSERVED RESULT
A crash notification for kaccess opens. Bounce key delay is not saved. It seems random to me if the settings have any effect at all.

EXPECTED RESULT
No crash. Properly set values from within a reasonable range so that the algorithms actually work.

SOFTWARE/OS VERSIONS
Linux/KDE Plasma: Tumbleweed 20250223
KDE Plasma Version: 6.3.1
KDE Frameworks Version: 6.11.0
Qt Version: 6.8.2
Graphics platform: Wayland
Comment 1 Nate Graham 2025-02-24 21:29:17 UTC
Backtrace of the crashing thread:


Thread 1 (Thread 0x7face539f540 (LWP 9426)):
[KCrash Handler]
#5  QArrayDataPointer<QInputDevice const*>::data (this=0x0) at /usr/src/debug/qtbase-everywhere-src-6.8.2/src/corelib/tools/qcontainertools_impl.h:387
#6  QArrayDataPointer<QInputDevice const*>::constEnd (this=0x0) at /usr/src/debug/qtbase-everywhere-src-6.8.2/src/corelib/tools/qarraydatapointer.h:127
#7  QList<QInputDevice const*>::cend (this=0x0) at /usr/src/debug/qtbase-everywhere-src-6.8.2/src/corelib/tools/qlist.h:644
#8  QtPrivate::sequential_erase_one<QList<QInputDevice const*>, QInputDevice const*> (c=..., t=<synthetic pointer>: <optimized out>) at /usr/src/debug/qtbase-everywhere-src-6.8.2/src/corelib/tools/qcontainertools_impl.h:389
#9  QList<QInputDevice const*>::removeOne<QInputDevice const*> (this=0x0, t=<synthetic pointer>: <optimized out>) at /usr/src/debug/qtbase-everywhere-src-6.8.2/src/corelib/tools/qlist.h:613
#10 QInputDevicePrivate::unregisterDevice (dev=dev@entry=0x55c43b0769c0) at /usr/src/debug/qtbase-everywhere-src-6.8.2/src/gui/kernel/qinputdevice.cpp:360
#11 0x00007face6a2a7ab in QInputDevice::~QInputDevice (this=0x55c43b0769c0, this=<optimized out>) at /usr/src/debug/qtbase-everywhere-src-6.8.2/src/gui/kernel/qinputdevice.cpp:110
#12 0x00007face458f6a7 in QXcbScrollingDevice::~QXcbScrollingDevice (this=0x55c43b0769c0, this=<optimized out>) at /usr/src/debug/qtbase-everywhere-src-6.8.2/src/plugins/platforms/xcb/qxcbscrollingdevice_p.h:29
#13 QXcbScrollingDevice::~QXcbScrollingDevice (this=0x55c43b0769c0, this=<optimized out>) at /usr/src/debug/qtbase-everywhere-src-6.8.2/src/plugins/platforms/xcb/qxcbscrollingdevice_p.h:29
#14 0x00007face61f4e9e in QObject::event (this=0x55c43b0769c0, e=0x55c43b0769e0) at /usr/src/debug/qtbase-everywhere-src-6.8.2/src/corelib/kernel/qobject.cpp:1403
#15 0x00007face75dee35 in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x55c43b0769c0, e=0x55c43b0769e0) at /usr/src/debug/qtbase-everywhere-src-6.8.2/src/widgets/kernel/qapplication.cpp:3296
#16 0x00007face61ada30 in QCoreApplication::notifyInternal2 (receiver=0x55c43b0769c0, event=0x55c43b0769e0) at /usr/src/debug/qtbase-everywhere-src-6.8.2/src/corelib/kernel/qcoreapplication.cpp:1172
#17 0x00007face61b3a20 in QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=52, data=0x55c43b02d9e0) at /usr/src/debug/qtbase-everywhere-src-6.8.2/src/corelib/kernel/qcoreapplication.cpp:1946
#18 0x00007face646beb4 in operator() (__closure=<optimized out>) at /usr/src/debug/qtbase-everywhere-src-6.8.2/src/corelib/thread/qthread_unix.cpp:403
#19 (anonymous namespace)::terminate_on_exception<QThreadPrivate::finish()::{lambda()#1}>(QThreadPrivate::finish()::{lambda()#1}&&) [clone .isra.0] (t=<optimized out>) at /usr/src/debug/qtbase-everywhere-src-6.8.2/src/corelib/thread/qthread_unix.cpp:311
#20 0x00007face631f0b5 in set_thread_data(QThreadData*)::Cleanup::~Cleanup() () at /usr/src/debug/qtbase-everywhere-src-6.8.2/src/corelib/thread/qthread_unix.cpp:386
#21 0x00007face58438e1 in __cxa_finalize (d=0x7face6643000) at cxa_finalize.c:97
#22 0x00007face612e9e7 in __do_global_dtors_aux () at /lib64/libQt6Core.so.6
#23 0x00007face7caf9f0 in ??? ()
#24 0x00007face802a102 in _dl_call_fini (closure_map=0x7ffd63cb1650, closure_map@entry=0x7face7caf9f0) at dl-call_fini.c:43
#25 0x00007face802d4ce in _dl_fini () at dl-fini.c:114
#26 0x00007face5843eb1 in __run_exit_handlers (status=0, listp=0x7face59f5680 <__exit_funcs>, run_list_atexit=run_list_atexit@entry=true, run_dtors=run_dtors@entry=true) at exit.c:108
#27 0x00007face5843f80 in __GI_exit (status=<optimized out>) at exit.c:138
#28 0x00007face7e59ac3 in Registration::attemptRegistration (this=0x7ffd63cb1ef0) at /usr/src/debug/kdbusaddons-6.11.0/src/kdbusservice.cpp:234
#29 Registration::registerOnBus (this=0x7ffd63cb1ef0) at /usr/src/debug/kdbusaddons-6.11.0/src/kdbusservice.cpp:159
#30 Registration::run (this=0x7ffd63cb1ef0) at /usr/src/debug/kdbusaddons-6.11.0/src/kdbusservice.cpp:111
#31 KDBusService::KDBusService (this=<optimized out>, options=..., parent=<optimized out>, this=<optimized out>, options=..., parent=<optimized out>) at /usr/src/debug/kdbusaddons-6.11.0/src/kdbusservice.cpp:275
#32 0x000055c40d0d8aea in ??? ()
#33 0x000055c40d0d4f55 in ??? ()
#34 0x00007face582a2ae in __libc_start_call_main (main=main@entry=0x55c40d0d4b00, argc=argc@entry=1, argv=argv@entry=0x7ffd63cb2518) at ../sysdeps/nptl/libc_start_call_main.h:58
#35 0x00007face582a379 in __libc_start_main_impl (main=0x55c40d0d4b00, argc=1, argv=0x7ffd63cb2518, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffd63cb2508) at ../csu/libc-start.c:360
#36 0x000055c40d0d5155 in ??? ()
Comment 2 Nicolas Fella 2025-02-24 22:02:12 UTC
The crash is https://bugs.kde.org/show_bug.cgi?id=500326, but that's unrelated to the other issue
Comment 3 Nicolas Fella 2025-02-24 22:07:19 UTC
> The spin boxes accept values in minutes ("min", default=500), where milliseconds should be used.

I don't follow. The spinbox has "ms" as suffix, no?
Comment 4 Philipp Maierhöfer 2025-02-25 09:01:45 UTC
Created attachment 178854 [details]
screenshot
Comment 5 Philipp Maierhöfer 2025-02-25 09:03:31 UTC
The unit is "min", see attachment. If I type in "ms", this is not saved.

By the way, the crash seems to be more common. I just disabled "Shake cursor", which also made kaccess crash. But unlike debouncing, shake cursor was successfully disabled anyway.
Comment 6 Nicolas Fella 2025-02-25 11:34:47 UTC
Created attachment 178859 [details]
Screenshot with ms

For me it says ms
Comment 7 Nicolas Fella 2025-02-25 11:45:40 UTC
This seems to be a mistake in the en_GB translation files: https://invent.kde.org/plasma/plasma-desktop/-/blob/master/po/en_GB/kcm_access.po?ref_type=heads#L459

"%1 ms" is wrongly translated as "%1 min"
Comment 8 Philipp Maierhöfer 2025-02-25 13:23:37 UTC
Ok, thanks. Let's see if the problems disappear with Qt 6.8.3. I'm not 100% confident though, because the spin box for bounce keys misbehaves in other ways, too. E.g. when I change the value, often the "apply" button doesn't become available and when using the up/down arrow buttons, the value jumps back to 100.
Comment 9 Philipp Maierhöfer 2025-02-25 14:00:28 UTC
The "slow keys" spin box has the same problems by the way. And both of them don't accept values smaller than 100 ms. That's way too much for defer-type debouncing.

And I understand a bit better now why sometimes I see an effect of the settings, sometimes not: KDE applications on wayland do not respect the settings, but applications started with Xwayland (tried with libreoffice) do respect them.
Comment 10 Nicolas Fella 2025-02-26 11:42:57 UTC
The crash is unrelated to any of the functionality working.

Slow keys are not implemented on Wayland, see https://bugs.kde.org/show_bug.cgi?id=490826. Other settings like bounce keys are implemented.

The delay range is set to 100-10000. That limit is pretty arbitrary and could be changed, but it's been like that ~forever.

Looking at Gnome it has a default delay of 300ms (https://github.com/GNOME/gsettings-desktop-schemas/blob/c3b6912336704895ff10983e03fb5e8cd9900804/schemas/org.gnome.desktop.a11y.keyboard.gschema.xml.in#L64), XFCE uses 100 ms by default (https://github.com/xfce-mirror/xfce4-settings/blob/master/xfsettingsd/accessibility.c#L265). That's very different to the 5ms you are saying.
Comment 11 Philipp Maierhöfer 2025-02-26 20:26:39 UTC
We've been discussing 5 different issue here. Let me summarize to avoid confusion:

1. Translation mistake ms = min in en_GB.
2. kaccess crash (https://bugs.kde.org/show_bug.cgi?id=500326).
3. Slow keys not working on Wayland (https://bugs.kde.org/show_bug.cgi?id=490826).
4. Allowed value range doesn't cover all use cases.
5. Misbehaving spin boxes: when a value is typed in, the "apply" button doesn't become available. Using the arrow buttons reset typed in values to 100. Can anyone reproduce this?

To point 4:
As I understand it, slow keys essentially applies a "defer" debounce algorithm, bounce keys applies an "eager" algorithm. Maybe this is useful with large delays as accessibility feature for people with certain medical conditions. To use it as software debouncing of a keyboard that has problems with key chatter, 5 ms delay is a common value (see https://docs.qmk.fm/feature_debounce_type). The better place to do this is the keyboard firmware, but if that is not possible, software debouncing in the OS is very useful.

I configured this quite some time ago and everything was working fine for me until a few days ago when I switched this particular machine to Wayland.
Comment 12 kde49861515 2025-11-30 14:46:44 UTC
> 5. Misbehaving spin boxes: when a value is typed in, the "apply" button
> doesn't become available. Using the arrow buttons reset typed in values to
> 100. Can anyone reproduce this?

I can confirm I am on GB language and have the same mistranslation from ms -> min. This is present on other windows also (for example "System bell" accessibility settings Duration box

It seems to be an issue with the delay box losing focus, as that is when the value is reverted. You can't actually enter a value using the keyboard (either by typing or arrow keys) or the arrow keys in the box itself because the value jumps to "5 min" as soon as you lose focus on the box

The only way I've found to enter a value into this box is to:

Press tab until your focus is on another element (such as the "Help" or "Defaults" button at the bottom of the page)
Use your mouse wheel to alter the value in the box (do NOT click inside the box again)
Now press Apply

The setting then seems to persist normally
Comment 13 kde49861515 2025-11-30 14:49:28 UTC
I forgot to add version details:

Operating System: Fedora Linux 43
KDE Plasma Version: 6.5.3
KDE Frameworks Version: 6.20.0
Qt Version: 6.10.1
Kernel Version: 6.17.8-300.fc43.x86_64 (64-bit)
Graphics Platform: Wayland