<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Accessibility on KDE Blogs</title><link>https://blogs.kde.org/categories/accessibility/</link><description>Recent content in Accessibility on KDE Blogs</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Tue, 24 Mar 2026 20:32:00 +0000</lastBuildDate><atom:link href="https://blogs.kde.org/categories/accessibility/index.xml" rel="self" type="application/rss+xml"/><item><title>KDE Goals - Our Cumulative Culture</title><link>https://blogs.kde.org/2024/08/26/kde-goals-our-cumulative-culture/</link><pubDate>Mon, 26 Aug 2024 00:00:00 +0000</pubDate><author>Farid Abdelnour</author><guid>https://blogs.kde.org/2024/08/26/kde-goals-our-cumulative-culture/</guid><description>&lt;p&gt;Every two years, the KDE community selects three goals that serve as focal points for the entire community's efforts in the coming years. This cyclical process of goal-setting and community-wide focus is a great example of KDE's &lt;a href="https://openevo.eva.mpg.de/teachingbase/cumulative-culture/"&gt;&lt;em&gt;Cumulative Culture&lt;/em&gt;&lt;/a&gt; in action.&lt;/p&gt;
&lt;p&gt;This concept, typically observed in human societies, refers to the ability to build upon previous knowledge and innovations to create increasingly complex and effective solutions. In KDE's case, each cycle of goals represents a new layer of accumulated wisdom, i.e. new features and more stability.&lt;/p&gt;
&lt;h2 id="the-first-cycle-2018-2020"&gt;The First Cycle (2018-2020)&lt;/h2&gt;
&lt;p&gt;The first cycle of goals laid the groundwork with its focus on community growth, privacy, and usability.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T7116"&gt;Streamlined Onboarding&lt;/a&gt;: Focused on attracting and retaining new contributors by making the onboarding process smoother and more engaging.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T7050"&gt;Privacy Software&lt;/a&gt;: Prioritized user privacy and security, ensuring KDE software respects user data and complies with security standards.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T6831"&gt;Usability &amp;amp; Productivity&lt;/a&gt;: Aimed to enhance the usability and productivity of KDE software, making it powerful yet easy to use.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-second-cycle-2020-2022"&gt;The Second Cycle (2020-2022)&lt;/h2&gt;
&lt;p&gt;The second cycle tackled more complex challenges. Goals like Wayland implementation improvements (which layed the foundation for the Plasma 6 release), improving the app ecosystem, and ensuring consistency in design and functionality.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T11081"&gt;Wayland&lt;/a&gt;: This task aimed at stabilizing Wayland support accross KDE apps.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T11117"&gt;All About the Apps&lt;/a&gt;: Improved KDE's app infrastructure, enabling more efficient app delivery and better support services.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T11093"&gt;Improve Consistency across the Board&lt;/a&gt;: Ensured uniformity in design and functionality across KDE software, improving usability and reducing redundancy.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-third-cycle-2022-2024"&gt;The Third Cycle (2022-2024)&lt;/h2&gt;
&lt;p&gt;The third cycle, which is currently coming to an end, was about progress and adaptation. A focus to include environmental responsibility, operational efficiency, and inclusive design.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T15676"&gt;Sustainable Software&lt;/a&gt;: Focused on making KDE software more energy-efficient and environmentally friendly by implementing practices that reduce resource consumption and ensure long-term sustainability.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T15627"&gt;Automate and Systematize Internal Processes&lt;/a&gt;: Aimed to streamline KDE’s internal workflows by automating repetitive tasks, adding code tests across projects and creating a Quality Assurance team to name a few.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T15611"&gt;KDE For All&lt;/a&gt;: Seeked to make KDE software accessible and inclusive for all users.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="a-new-cycle-a-comin-2024-2026"&gt;A New Cycle A Comin' (2024-2026)&lt;/h2&gt;
&lt;p&gt;Now, as we enter the fourth cycle of the KDE Goals, we see the full power of this cumulative process. Each goal, whether fully achieved or not, contributes to the collective knowledge and capability of the KDE community. Ideas and partial solutions from past cycles become a solid foundation of knowledge and experience that support future efforts.&lt;/p&gt;
&lt;p&gt;The commmunity is currently voting on the following proposals for the next KDE Goals cycle that will guide our efforts and shape our focus for the coming years:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T17435"&gt;Enhancing control and automation: integrate KDE Plasma (and apps) with Smart Home Ecosystems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T17458"&gt;Freedom through Better Data and Workflow Organization and Management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T17439"&gt;KDE Needs You! 🫵 - Formalise and boost KDE's processes for recruiting active contributors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T17406"&gt;KDE-based Text Snippet Expansion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T17370"&gt;Sandbox all the things!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T17408"&gt;Plasma - A Beacon for Open Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T17372"&gt;Refining and Enriching KDE: Empowering Users with Convenient and Intuitive Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T17396"&gt;Streamlined Application Development Experience&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T17391"&gt;Unify the Plasma experience&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phabricator.kde.org/T17433"&gt;We care about your Input&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="kde-goals-at-akademy"&gt;KDE Goals at Akademy&lt;/h2&gt;
&lt;p&gt;The three most voted goals will be &lt;a href="https://conf.kde.org/event/6/contributions/194/"&gt;announced&lt;/a&gt; at &lt;a href="https://akademy.kde.org/2024/"&gt;Akademy&lt;/a&gt;, where there will also be a &lt;a href="https://conf.kde.org/event/6/contributions/200/"&gt;wrap-up talk&lt;/a&gt; about the achievements of the current goals. Also, there will be &lt;a href="https://community.kde.org/Akademy/2024/Monday"&gt;Birds-of-a-feather (BoF)&lt;/a&gt; sessions with the new goal champions.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Join the &lt;a href="https://go.kde.org/matrix/#/%23goals:kde.org"&gt;Matrix room&lt;/a&gt; and keep an eye on the &lt;a href="https://kde.org/goals/"&gt;website&lt;/a&gt; for the latest KDE Goals updates.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Accessibility and a bit of automation at the KDE Goals Sprint in Berlin</title><link>https://blogs.kde.org/2024/05/20/accessibility-and-a-bit-of-automation-at-the-kde-goals-sprint-in-berlin/</link><pubDate>Mon, 20 May 2024 00:00:00 +0000</pubDate><author>Ingo Klöcker</author><guid>https://blogs.kde.org/2024/05/20/accessibility-and-a-bit-of-automation-at-the-kde-goals-sprint-in-berlin/</guid><description>&lt;p&gt;A few weeks ago (Time flies!) I attended the &lt;a href="https://community.kde.org/Sprints/Goals/2024"&gt;KDE Goals Sprint&lt;/a&gt; in Berlin. I didn't have concrete plans, but I intended to look into accessibility. Quite some time ago I had improved the accessibility of Kleopatra and at Akademy 2023 in Thessaloniki I gave a &lt;a href="https://conf.kde.org/event/5/contributions/141/"&gt;talk&lt;/a&gt; about it. Back then I had taken the easy route fixing everything directly in Kleopatra and working around several issues in Qt instead of fixing the issues in Qt itself so that all apps could profit. Time to do something about it.&lt;/p&gt;
&lt;h2 id="in-accessible-icon-only-buttons"&gt;(In-)Accessible icon-only buttons&lt;/h2&gt;
&lt;p&gt;A common problem for accessibility is icon-only buttons. If a button doesn't have text then screen readers can only tell their user that there's a button. That's not very helpful. Sometimes the developers have at least assigned a tool tip to the button. This can be read out by the screen readers (Qt provides the tool tip as accessible description of the button.), but it's often too verbose. To make a button without text accessible the developer has to set the &lt;a href="https://doc.qt.io/qt-6/qwidget.html#accessibleName-prop"&gt;accessible name property&lt;/a&gt; of the widget or, in case of a Qt Quick app, the name property of the &lt;a href="https://doc.qt.io/qt-6/qml-qtquick-accessible.html"&gt;Accessible QML Type&lt;/a&gt;. Unfortunately, that's often forgotten if the UI isn't designed with accessibility in mind.&lt;/p&gt;
&lt;p&gt;At the sprint I discussed several ideas with other participants to help developers remember to set the accessible name:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A helper class to instantiate in your app which inspects the app's windows and prints a report at the end with all inaccessible icon-only buttons it has found. A bit like Qt's &lt;a href="https://doc.qt.io/qt-6/qabstractitemmodeltester.html"&gt;QAbstractItemModelTester&lt;/a&gt; or the different compiler sanitizers. I implemented a prototype of such a class, but didn't pursue this further. The downside of this approach is that the developer needs to open each window of the app to find all inaccessible buttons. If they are already aware of the problem then it's probably easier to search the code.&lt;/li&gt;
&lt;li&gt;Instead of using a helper class to inspect the widget tree from the inside one could inspect the accessibility tree of the app from the outside. This could be built into our Appium-driven UI test framework so that developers don't have to do anything special. Except that they need to write UI tests that open each and every window of their app. I think it's still worth to look into this.&lt;/li&gt;
&lt;li&gt;Last but not least, we pondered writing a &lt;a href="https://invent.kde.org/sdk/clazy"&gt;clazy&lt;/a&gt; test. Thinking about the many different ways a text can be set on a button (e.g. with &lt;a href="https://api.kde.org/frameworks/kwidgetsaddons/html/classKGuiItem.html"&gt;KGuiItem::assign&lt;/a&gt;) we doubted that it would be feasible to write such a test.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the end the easiest approach could be education. If the developers are aware of the problem then there's a good chance that they remember to set an accessible name the next time they add an icon-only button to their app.&lt;/p&gt;
&lt;h2 id="accessible-datetime-inputs"&gt;Accessible date/time inputs&lt;/h2&gt;
&lt;p&gt;Volker, Carl, David, Harald and me discussed and explored some ideas to make the date and time inputs in Qt Quick apps like Itinerary accessible. In Kleopatra I resorted to allow the user to enter the date in a simple text input instead of trying to make the complex UI of KDE's &lt;a href="https://api.kde.org/frameworks/kwidgetsaddons/html/classKDatePicker.html"&gt;date picker&lt;/a&gt; accessible. Read &lt;a href="https://volkerkrause.eu/2024/04/27/kde-goal-sprint-april-2024.html"&gt;Volker's blog&lt;/a&gt; and &lt;a href="https://blog.david-redondo.de/kde/2024/04/26/goals-sprint.html"&gt;David's blog&lt;/a&gt; to find out which solutions they found for Qt Quick apps.&lt;/p&gt;
&lt;h2 id="a-small-automation-interlude"&gt;A small automation interlude&lt;/h2&gt;
&lt;p&gt;One advantage of sitting with other people in the same room is that you may overhear them talking about a mistake (e.g. a faulty commit) and you know exactly how to prevent this kind of mistake in the future. In this case the problem was a missing quote character in some YAML file. And the preventive measure was &lt;a href="https://invent.kde.org/sysadmin/ci-management/-/merge_requests/99"&gt;adding a YAML linter CI job&lt;/a&gt;. While I was at it I &lt;a href="https://invent.kde.org/sysadmin/ci-utilities/-/merge_requests/294"&gt;removed some unnecessary code from the CI job&lt;/a&gt; and &lt;a href="https://invent.kde.org/sysadmin/repo-metadata/-/merge_requests/377"&gt;added the job to a second repository&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="list-views-with-underlying-multi-column-model"&gt;List views with underlying multi-column model&lt;/h2&gt;
&lt;p&gt;In several widgets that show or use a simple list of items Qt allows using a model with multiple columns, e.g. &lt;a href="https://doc.qt.io/qt-6/qlistview.html#modelColumn-prop"&gt;QListView&lt;/a&gt;, &lt;a href="https://doc.qt.io/qt-6/qcombobox.html#modelColumn-prop"&gt;QComboBox&lt;/a&gt;, &lt;a href="https://doc.qt.io/qt-6/qcompleter.html#completionColumn-prop"&gt;QCompleter&lt;/a&gt;. In general this works well except that Qt has a long-standing bug: When navigating through the list screen readers read the entries of the underlying model column by column instead of reading only the entries in the selected model column (&lt;a href="https://bugreports.qt.io/browse/QTBUG-33786"&gt;QTBUG-33786&lt;/a&gt;). In Kleopatra I worked around this bug with a proxy model which pretended that the model only had one column.&lt;/p&gt;
&lt;p&gt;During the sprint I finally sat down and prepared a fix for Qt. For better readability I split my changes in five separate commits which resulted in five separate patches for Qt: &lt;a href="https://codereview.qt-project.org/c/qt/qtbase/&amp;#43;/556857"&gt;556857&lt;/a&gt;, &lt;a href="https://codereview.qt-project.org/c/qt/qtbase/&amp;#43;/556858"&gt;556858&lt;/a&gt;, &lt;a href="https://codereview.qt-project.org/c/qt/qtbase/&amp;#43;/556859"&gt;556859&lt;/a&gt;, &lt;a href="https://codereview.qt-project.org/c/qt/qtbase/&amp;#43;/556860"&gt;556860&lt;/a&gt;, &lt;a href="https://codereview.qt-project.org/c/qt/qtbase/&amp;#43;/556861"&gt;556861&lt;/a&gt;. Being used to multi-commit MRs in GitLab I wondered if I had done something wrong when I submitted my changes, but apparently that's Gerrit's way of handling patch reviews. The first two commits are code clean-ups, the third commit changes one aspect of the accessibility test for list views, the fourth commit is the actual fix, and the fifth commit adds a few more unit tests I find useful. The first three commits have been merged, but the actual fix is still waiting for a review.&lt;/p&gt;
&lt;p&gt;After that I looked into the problem that QListView emitted an accessibility focus event when the current item changed even if the list view didn't have focus. I found out that this had been fixed recently by a fellow Qt contributor who ran into the &lt;a href="https://bugreports.qt.io/browse/QTBUG-118800"&gt;same problem&lt;/a&gt; independently of me. This meant that I could &lt;a href="https://invent.kde.org/pim/kleopatra/-/commit/765b624e99670a420cf586673b9bd80c669005d5"&gt;remove the workaround in Kleopatra&lt;/a&gt; for new enough Qt.&lt;/p&gt;
&lt;p&gt;Thanks to MBition for hosting us and to Aleix for making sure we don't starve. And many thanks to those &lt;a href="https://kde.org/donate"&gt;donating to KDE&lt;/a&gt; which makes these sprints possible.&lt;/p&gt;</description></item></channel></rss>