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
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 ??? ()
The crash is https://bugs.kde.org/show_bug.cgi?id=500326, but that's unrelated to the other issue
> 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?
Created attachment 178854 [details] screenshot
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.
Created attachment 178859 [details] Screenshot with ms For me it says ms
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"
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.
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.
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.
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.
> 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
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