https://techbase.kde.org/api.php?action=feedcontributions&user=Frederik.gladhorn&feedformat=atomKDE TechBase - User contributions [en]2024-03-28T08:13:21ZUser contributionsMediaWiki 1.40.2https://techbase.kde.org/index.php?title=Projects/Usability/HIG/CustomControls&diff=83576Projects/Usability/HIG/CustomControls2014-09-08T14:44:24Z<p>Frederik.gladhorn: /* Guidelines */</p>
<hr />
<div>__NOTOC__<br />
{{Construction}}<br />
== Purpose ==<br />
<br />
== Examples ==<br />
<br />
== Guidelines ==<br />
* Do you really need a custom widget? Check whether an existing widget cannot be used instead.<br />
* It is strongly recommended to consult the usability team (https://git.reviewboard.kde.org/groups/usability/) and the accessibility team (https://git.reviewboard.kde.org/groups/kdeaccessibility/) in advance of your implementation.<br />
* Create interaction by following natural design. Find the appropriate metaphor and create interface as near to real usage as possible.<br />
* Make sure your new widget:<br />
** Resizes correctly<br />
** Handles right-to-left setups<br />
** Supports keyboard navigation (receives and gives focus, indicates when it is focused)<br />
** Works well with different color schemes<br />
** Looks as close to existing Qt or kdelibs widgets as possible (use QStyle or QStylePainter to draw elements).<br />
** Is based on an existing widget rather than a plain QWidget if possible<br />
** Supports keyboard navigation (receives and gives focus, indicates when it is focused)<br />
** Is accessible, refer to the Qt documentation how to do that<br />
*** QWidget: http://qt-project.org/doc/qt-5/accessible-qwidget.html<br />
*** Qt Quick Control: http://qt-project.org/doc/qt-5/qml-qtquick-accessible.html<br />
* If possible, consider making your widget reusable enough so that it can be integrated in standard widgets<br />
<br />
== Implementation ==</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Getting_Started&diff=71607Getting Started2012-05-08T22:40:16Z<p>Frederik.gladhorn: /* Building and Running KDE Software From Source */</p>
<hr />
<div><languages /><br />
<translate><br />
<br />
<!--T:1--><br />
{{Warning|These pages are currently being completely re-written to reflect the new KDE infrastructure and may not be in a consistent state. Information and commands on some page may no longer be valid and should be used with care.}}<br />
<br />
<!--T:2--><br />
{{Template:I18n/Language Navigation Bar|Getting_Started}} <br />
<br />
== Introduction == <!--T:3--><br />
<br />
<!--T:4--><br />
There are many different ways to become involved in the KDE Community, ranging all the way from a simply using our software through to being a core platform developer.<br />
<br />
<!--T:5--><br />
You can find more general information on getting involved in KDE at the following links:<br />
* [http://kde.org/community/getinvolved/ Getting Involved in KDE]<br />
* [[Special:myLanguage/Contribute|Contribute to KDE]]<br />
<br />
<!--T:6--><br />
This section of KDE TechBase is designed to help get you started in participating in the technical side of the KDE community. It will explain to you how KDE Software is structured and built, and how you can participate by building KDE for yourself.<br />
<br />
<!--T:7--><br />
{{Note|'''Quickstart:''' If you are impatient to get started without understanding what you are doing then you can skip straight to using a [[Special:myLanguage/Getting_Started/Build#Scripted_Builds|Build Script]], but it is strongly recommended you read this documentation first.}}<br />
<br />
== Using KDE Software == <!--T:8--><br />
<br />
<!--T:9--><br />
If you just want to use stable KDE software for your everyday computing needs, then you do not need to build KDE Software for yourself. You should instead use the software installer provided by your Linux distribution to install KDE package.<br />
<br />
<!--T:10--><br />
The best place to learn how to do this is through your distributions normal support channels, although you may find some useful information on the following pages:<br />
* [http://www.kde.org/download/distributions.php Distributions shipping KDE]<br />
* [[Special:myLanguage/Getting_Started/Build/Distributions|Install KDE Software on Linux and BSD Distributions]]<br />
* [[Special:myLanguage/Projects/KDE_on_Windows/Installation|Install KDE Software on Windows]]<br />
* Mac OS X does not currently have an installer available for KDE Software, but you can simplify building it by using [http://mac.kde.org/?id=build MacPorts or Fink]<br />
<br />
== Getting Help == <!--T:11--><br />
<br />
<!--T:12--><br />
If you are looking for help in using the KDE Workspace or KDE Applications then please visit the [http://userbase.kde.org/ KDE UserBase]. <br />
<br />
<!--T:13--><br />
If you have any questions or problems with building or developing KDE Software please feel free to [[Special:myLanguage/Development/Getting_Help|ask for help]]. However, be patient while waiting for a response, and try to work through the problem yourself, we aren't going to do it ''all'' for you. Working your way through and understanding why something doesn't work is a good way to learn how to do things the right way.<br />
<br />
== Browsing the code == <!--T:28--><br />
The KDE project is all free and open source. You can view its source code and make changes.<br />
<br />
<!--T:29--><br />
http://projects.kde.org hosts the source for many KDE-related initiatives, including [https://projects.kde.org/projects/kde KDE itself]. Choose a piece of KDE such as KDE Libraries, then click Repository to browse its source. [[Getting_Started/Sources]] explains the organization of KDE source code.<br />
<br />
<!--T:30--><br />
There are other utilities to browse the source code:<br />
<br />
<!--T:31--><br />
* http://lxr.kde.org/search lets you search the code ''(may be out of date?)''<br />
* http://api.kde.org lets you browse API documentation generated from the code. You can search for class names, but not filenames.<br />
<br />
== Building and Running KDE Software From Source == <!--T:14--><br />
<br />
<!--T:15--><br />
There are several possible ways to build and install KDE software and the method you choose depends on what you want to do with the software. In particular if you are only wanting to build and develop a single application you may not need to build the entire KDE Development Platform to do so. You can read more about this on the [[Special:myLanguage/Getting_Started/Build/Methods|Build Methods page]].<br />
<br />
If you simply want to build one application, the simple tutorial [[Development/Tutorials/Building_An_Existing_Application|Building an Existing Application]] might be enough already.<br />
<br />
<!--T:32--><br />
<!-- what about https://launchpad.net/project-neon that used to be linked here in 2010, does that still apply? - User:Skierpage --><br />
<br />
<!--T:16--><br />
The following sections explain the steps you need to understand and give the instructions you need to follow to successfully build KDE Software from source:<br />
<br />
<!--T:17--><br />
* [[Special:myLanguage/Getting_Started/Sources|How the KDE Source Code is structured]]<br />
* [[Special:myLanguage/Getting_Started/Build|How to Build and Install the software]]<br />
* [[Special:myLanguage/Getting_Started/Run/Nested_Session|How to Run a nested session of KDE]]<br />
* [[Special:myLanguage/Getting_Started/Run/Full_Session|How to Run a full session of KDE]]<br />
<br />
== Development Model == <!--T:18--><br />
<br />
<!--T:19--><br />
TODO: General introduction to the dev model, release cycles, etc.<br />
<br />
<!--T:20--><br />
* [[Special:myLanguage/Schedules/Release_Schedules_Guide|The KDE Release Schedule]]<br />
* [[Special:myLanguage/Development/Software_Engineering_Framework|The KDE Software Engineering Framework]]<br />
* [[Special:myLanguage/Policies|KDE Development Policies and Procedures to follow]]<br />
* [[Special:myLanguage/Policies/Application_Lifecycle|The development lifecycle for a new application]]<br />
<br />
== Development Tools == <!--T:21--><br />
<br />
<!--T:22--><br />
There are a number of [[Special:myLanguage/Development/Tools|Development Tools]] that are either required or helpful when building KDE Software. For these you will usually want to use the stable packages provided by your distribution.<br />
<br />
<!--T:23--><br />
You may want to use a graphical IDE for your development work:<br />
* [[Special:myLanguage/Development/Tutorials/Using_Qt_Creator|Qt Creator]]<br />
* [http://www.kdevelop.org/ KDevelop 4]<br />
* [[Special:myLanguage/Development/Tools/Eclipse|Eclipse]]<br />
* [[Special:myLanguage/Getting_Started/Using_an_IDE_with_KDE4|Using an IDE with KDE4]]<br />
<br />
== Contributing To KDE == <!--T:24--><br />
<br />
<!--T:25--><br />
Once you have a copy of KDE built you can then start contributing back to KDE. The pages below will help you find out how you can help make KDE even better.<br />
<br />
<!--T:26--><br />
[[Image:Action_tool.svg|right|32px]]<br />
* [[Special:myLanguage/Contribute|Contribute]]<br />
* [[Special:myLanguage/Contribute/Send_Patches|Send Patches]]<br />
* [[Special:myLanguage/Contribute/Bugsquad|Bugsquad]]<br />
<br />
<!--T:27--><br />
[[Category:Build_KDE]]<br />
</translate></div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials&diff=71602Development/Tutorials2012-05-08T22:32:09Z<p>Frederik.gladhorn: /* Basics of KDE 4 Programming */</p>
<hr />
<div><languages /><br />
<translate><br />
<!--T:1--><br />
{{Template:I18n/Language Navigation Bar|Development/Tutorials}}<br />
<br />
<!--T:2--><br />
Tutorials are the fastest way of finding out what KDE will do for you, and how to do it. Here is a list of currently available tutorials '''for KDE4'''. Material for KDE3 and KDE2 is available on the bottom of this page.<br />
<br />
== Basics of KDE 4 Programming == <!--T:3--><br />
<br />
<!--T:4--><br />
Are you interested in writing applications with KDE 4? This tutorial series is aimed at those completely new to KDE programming.<br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/First program|<translate><!--T:5--><br />
Hello World</translate>]]<br />
:<translate><!--T:6--><br />
An introduction to the very basics of KDE4 programming</translate><br />
;[[Special:myLanguage/Development/Tutorials/Using KXmlGuiWindow|<translate><!--T:7--><br />
Creating the Main Window</translate>]]<br />
:<translate><!--T:8--><br />
This tutorial shows you the magic of an application's most important thing: The main window.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Using KActions|<translate><!--T:9--><br />
Using KActions</translate>]]<br />
:<translate><!--T:10--><br />
How to add actions to the menus and toolbars. Based on the MainWindow tutorial.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Physical_Simulation|<translate><!--T:11--><br />
Physical Simulation</translate>]]<br />
:<translate><!--T:12--><br />
How to perform a physical simulation: animation and diagram</translate><br />
;[[Special:myLanguage/Development/Tutorials/Saving and loading|<translate><!--T:13--><br />
Saving and Loading</translate>]]<br />
:<translate><!--T:14--><br />
Introduces the KIO library while adding loading and saving support to our application.</translate><br />
;[[Special:myLanguage/Development/Tutorials/SqLite|<translate><!--T:15--><br />
Using SqLite databases and QtSq</translate>l]]<br />
:<translate><!--T:16--><br />
Integrated databases without the need for a database server</translate><br />
;[[Special:myLanguage/Development/Tutorials/KCmdLineArgs|<translate><!--T:17--><br />
Command line arguments</translate>]]<br />
:<translate><!--T:18--><br />
Adds the ability to specify which file to open from the command line to our text editor.</translate><br />
;[[Special:myLanguage/Development/Tutorials/CMake|<translate><!--T:19--><br />
Introduction to CMake</translate>]]<br />
:<translate><!--T:20--><br />
How to use the CMake build system used by KDE4.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Common Programming Mistakes|<translate><!--T:21--><br />
Common Programming Mistakes</translate>]]<br />
:<translate><!--T:22--><br />
Various common mistakes made while developing Qt and KDE applications and how to avoid them.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Debugging Linker Errors|<translate><!--T:23--><br />
Debugging Linker Errors</translate>]]<br />
:<translate><!--T:24--><br />
How to understand and debug errors from the linker, at compile time.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Using Qt Creator|<translate><!--T:25--><br />
Using Qt Creator to develop your KDE program</translate>]]<br />
:<translate><!--T:26--><br />
How to use Qt Creator as an [http://en.wikipedia.org/wiki/Integrated_development_environment IDE] to develop KDE programs</translate><br />
;[[Special:myLanguage/Development/Tutorials/Creating Libraries|<translate><!--T:27--><br />
Creating Libraries to share code</translate>]]<br />
:<translate><!--T:28--><br />
How to add the library to the buildsystem and how to prepare the source code.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Session_Management|<translate><!--T:29--><br />
Session Management</translate>]]<br />
:<translate><!--T:30--><br />
Make your application aware of X sessions</translate><br />
;[[Special:myLanguage/Development/Tutorial/Icons|<translate><!--T:31--><br />
Icons</translate>]]<br />
:<translate><!--T:32--><br />
Deliver your application with icons that are automatically installed to the right places. Based on the [[Development/Tutorials/Using_KActions|Kaction Tutorial]].</translate><br />
;[[Special:myLanguage/Development/Tutorials/Desktop_File|<translate><!--T:33--><br />
Desktop File</translate>]]<br />
:<translate><!--T:34--><br />
Let your application show up in the K menu and in application menus. Based on the Icons Tutorial.<br />
;[[Development/Tutorials/Building_An_Existing_Application|Building an Existing KDE Application]]<br />
If you want to improve an existing application, you can usually build and install it easily. This tutorial shows how to build an application in a way that doesn't interfere with your system. If you do not need to modify kdelibs this may be the easiest way to get started with development.<br />
<br />
== Testing And Debugging == <!--T:35--><br />
<br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/Debugging|<translate><!--T:36--><br />
Debugging your application</translate>]]<br />
:<translate><!--T:37--><br />
Tips, tools and techniques to apply when debugging your KDE application</translate><br />
;[[Special:myLanguage/Development/Tutorials/Unittests|<translate><!--T:38--><br />
Writing Unittests for Qt4 and KDE4 with QTestLib</translate>]] ([http://developer.kde.org/documentation/tutorials/writingunittests/writingunittests.html <translate><!--T:39--><br />
Original link</translate>])<br />
:<translate><!--T:40--><br />
Tutorial by [mailto:bradh@frogmouth.net Brad Hards] that describes how to write unit tests using the QTestLib framework. It is presented as an example based tutorial, and is still under development.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Code_Checking|<translate><!--T:41--><br />
Semi-automatic ways to detect code errors</translate>]]<br />
<translate><!--T:42--><br />
:Techniques you can use to detect errors in KDE code<br />
<br />
== Managing Configuration Data With KConfig == <!--T:43--><br />
<br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/KConfig|<translate><!--T:44--><br />
Introduction To KConfig</translate>]]<br />
:<translate><!--T:45--><br />
An overview of the KConfig classes and how to use them in your application code</translate><br />
;[[Special:myLanguage/Development/Tutorials/Using KConfig XT|<translate><!--T:46--><br />
Using KConfig XT</translate>]]<br />
:<translate><!--T:47--><br />
Tutorial on how to efficiently use the KConfig XT framework.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Updating KConfig Files|<translate><!--T:48--><br />
Updating KConfig Files</translate>]]<br />
:<translate><!--T:49--><br />
Tutorial on how to write an update script to keep changes in your application's config file format in sync with the user's already existing config file<br />
<br />
== Services: Applications and Plugins == <!--T:50--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Services/Introduction|<translate><!--T:51--><br />
Introduction to the Services Framework]]<br />
:An overview of the services framework in KDE and what it provides the application developer. Covers the system configuration cache (SyCoCa), the source data files and what the indexed information can be used for.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Services/Traders|<translate><!--T:52--><br />
Finding Services Using Trader Queries</translate>]]<br />
:<translate><!--T:53--><br />
How to find services, such as plugins or mimetypes, that are indexed in the SyCoCa using Trader Query Syntax</translate><br />
;[[Special:myLanguage/Development/Tutorials/Services/Plugins|<translate><!--T:54--><br />
Creating and Loading Plugins Using KService]]<br />
:Learn how to define custom plugin types, find installed plugins (including 3rd party plugins) and load them in an easy and portable fashion using KService.<br />
<br />
== Localization == <!--T:55--><br />
<br />
<!--T:56--><br />
See also [[Special:myLanguage/Localization|Localization portal]].<br />
</translate><br />
;[[Development/Tutorials/Localization/Unicode|<translate><!--T:57--><br />
Introduction To Unicode]]<br />
:An introduction to what Unicode is as well as how to handle Unicode data in KDE applications.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n|<translate><!--T:58--><br />
Writing Applications With Localization In Mind</translate>]]<br />
:<translate><!--T:59--><br />
This tutorial covers what localization is, why it's important and how to ensure your application is ready to be localized. A must read for all application developers.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n Mistakes|<translate><!--T:60--><br />
Avoiding Common Localization Pitfalls</translate>]]<br />
:<translate><!--T:61--><br />
There are several common mistakes that prevent applications from being properly localized. Find out what they are and how to easily avoid them in this tutorial.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/Building KDE's l10n Module|<translate><!--T:62--><br />
Building KDE's Localization Module</translate>]]<br />
:<translate><!--T:63--><br />
Building and installing language support from KDE's localization (l10n) module is a good idea for those working on applications in the main KDE repository. Doing so will allow you to test your application in another language and spot problem areas. Learn how to do just that in this tutorial.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n Build Systems|<translate><!--T:64--><br />
Incorporating i18n Into the Build System</translate>]]<br />
:<translate><!--T:65--><br />
Once your application is ready to be localized, the next step is to ensure that translation files are built automatically and kept up to date. This tutorial covers the necessary CMakeFiles.txt additions as well the process of distributing the resulting message catalogs with your application.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n Challenges|<translate><!--T:66--><br />
Common i18n Challenges and Solutions</translate>]]<br />
:<translate><!--T:67--><br />
This tutorial covers challenges that you may eventually run into such as translating handbooks and other data that exists outside of the source code, merging and handling obsolete .po files, dealing with freezes, coding in languages other than English and creating independent releases of or moving applications between KDE modules.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n_Semantics|<translate><!--T:68--><br />
Semantic Markup of Messages</translate>]]<br />
:<translate><!--T:69--><br />
To ensure consistent presentation and more meaningful representations of messages in applications, semantic markup can be applied to messages marked for translation using the KUIT system. This tutorial describes how this system works.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n Krazy|<translate><!--T:70--><br />
Automated i18n Code Checking</translate>]]<br />
:<translate><!--T:71--><br />
The Krazy code checker scans KDE's code and reports common i18n mistakes.<br />
<br />
== Documentation == <!--T:72--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/API_Documentation|<translate><!--T:73--><br />
API Documentation</translate>]]<br />
:<translate><!--T:74--><br />
This tutorial explains how to document your APIs properly.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Man_Pages|<translate><!--T:75--><br />
Man Pages</translate>]]<br />
:<translate><!--T:76--><br />
Writing and Generating Reference Manual Pages.<br />
;Source Code</translate><br />
: http://quickgit.kde.org<br />
: http://websvn.kde.org<br />
<br />
== Accessibility ==<br />
<br />
;[[Special:myLanguage/Development/Tutorials/Accessibility|<translate><!--T:77--><br />
Accessibility Overview</translate>]]<br />
:<translate><!--T:78--><br />
A list of accessibility tutorials and general information.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Accessibility/Checklist|<translate><!--T:79--><br />
Accessibility Checklist</translate>]]<br />
:<translate><!--T:80--><br />
What to look for in your application to make it accessible for as many people as possible.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Accessibility/Screen_Reader_Setup|<translate><!--T:81--><br />
Screen Reader</translate>]]<br />
:<translate><!--T:82--><br />
This tutorial will explain some details about using screen readers with KDE applications.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Text-To-Speech|<translate><!--T:83--><br />
Text-To-Speech</translate>]]<br />
:<translate><!--T:84--><br />
How to utilize Jovie text-to-speech service in your application.<br />
<br />
== Application Automation and Scripting == <!--T:85--><br />
<br />
=== D-Bus === <!--T:86--><br />
</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Introduction|<translate><!--T:87--><br />
Introduction to D-Bus</translate>]]<br />
:<translate><!--T:88--><br />
A straight-forward introduction to the core concepts in D-Bus from an application developer's perspective, this tutorial covers what D-Bus is and how it can be used by applications.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Accessing Interfaces|<translate><!--T:89--><br />
Accessing D-Bus Interfaces</translate>]]<br />
:<translate><!--T:90--><br />
A step-by-step guide to calling D-Bus methods and connecting to D-Bus signals using QtDBus.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Intermediate_D-Bus|<translate><!--T:91--><br />
Intermediate D-Bus</translate>]]<br />
:<translate><!--T:92--><br />
Tips to make use of QtDBus when faced with problematic real-world interfaces.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Creating Interfaces|<translate><!--T:93--><br />
Creating D-Bus Interfaces</translate>]]<br />
:<translate><!--T:94--><br />
Learn how to expose functionality in your application by creating and using custom D-Bus interfaces. Covers generating the XML descriptions, instantiating interfaces at run time and setting up the build system with CMake.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/CustomTypes|<translate><!--T:95--><br />
Using Custom Types with D-Bus</translate>]]<br />
:<translate> <!--T:96--><br />
Learn how to use your own types in classes exported on D-Bus. Covers marhaling and unmarshaling of objects, the integration of custom types into XML descriptions and registering the custom types with the Qt Meta Object system.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Autostart Services|<translate><!--T:97--><br />
D-Bus Autostart Services</translate>]]<br />
:<translate><!--T:98--><br />
Turn your application into a D-Bus autostart service with this tutorial. This D-Bus feature, also known as "D-Bus service activation", will ensure that even when your application isn't running that D-Bus calls made to it will work by relying on the D-Bus daemon itself to start your app if and when needed.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Porting_to_D-Bus|<translate><!--T:99--><br />
Porting from DCOP to D-Bus</translate>]]<br />
:<translate> <!--T:100--><br />
Port your applications from DCOP to D-Bus with this handy guide.<br />
<br />
=== Konqueror === <!--T:101--><br />
</translate><br />
; [[Special:myLanguage/Development/Tutorials/Creating Konqueror Service Menus|<translate><!--T:102--><br />
Creating Konqueror Service Menus</translate>]]<br />
:<translate><!--T:103--><br />
This tutorial shows you how to create mimetype-specific actions in Konqueror's context menu (aka "servicemenus").</translate><br />
<br />
=== Kross ===<br />
<br />
; [[Special:myLanguage/Development/Tutorials/Kross/Introduction|<translate><!--T:104--><br />
Introduction to Kross</translate>]]<br />
:<translate><!--T:105--><br />
An introduction to the Kross Scripting Framework.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Hello_World|<translate><!--T:106--><br />
Hello World</translate>]]<br />
:<translate><!--T:107--><br />
A first application with working kross code.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Call_Functions_in_Kross|<translate><!--T:108--><br />
Calling Functions in Kross</translate>]]<br />
:<translate><!--T:109--><br />
Simple demonstration of calling scripting functions</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Connecting_Signals_and_slots_in_Kross|<translate><!--T:110--><br />
Connecting Signals and Slots in Kross</translate>]]<br />
:<translate><!--T:111--><br />
Simple demonstration of connecting object signals with script slots</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Scripts-as-Plugins|<translate><!--T:112--><br />
Scripts as Plugins with Kross</translate>]]<br />
:<translate><!--T:113--><br />
This tutorial provides a step-by-step introduction how to integrate scripts as plugins into a KDE application.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Script-Actions|<translate><!--T:114--><br />
Placing script actions in your application menus </translate>]]<br />
:<translate><!--T:115--><br />
Simple demonstration on how to extend you application menus to execute script files.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/ActionCollections|<translate><!--T:116--><br />
How to use an ActionCollection ]</translate>]<br />
:<translate><!--T:117--><br />
A small Tutorial on How to use Kross::ActionCollections.<br />
{{:KOffice/Plugin Tutorials}}<br />
<br />
=== SuperKaramba === <!--T:118--><br />
</translate><br />
<br />
; [[Special:myLanguage/Development/Tutorials/SuperKaramba|<translate><!--T:119--><br />
SuperKaramba Tutorial</translate>]]<br />
:<translate><!--T:120--><br />
This tutorial provides an overview of SuperKaramba, theme files and scripting with Python, Ruby and JavaScript.<br />
<br />
=== System Activity === <!--T:121--><br />
</translate><br />
<br />
: [[Special:myLanguage/Development/Tutorials/SystemActivity/Scripting|<translate><!--T:122--><br />
Writing script actions for the process's context menu</translate>]]<br />
:<translate><!--T:123--><br />
This tutorial shows how to add a context menu action to show custom information about a process.<br />
<br />
=== KWin === <!--T:124--><br />
</translate><br />
<br />
: [[Special:myLanguage/Development/Tutorials/KWin/Scripting<translate><!--T:125--><br />
|KWin Scripting Tutorial</translate>]]<br />
:<translate><!--T:126--><br />
This tutorial shows how to write a useful script for KWin.<br />
<br />
== Plugins and KParts == <!--T:127--><br />
</translate><br />
<br />
; [[Special:myLanguage/Development/Tutorials/Using KParts|<translate><!--T:128--><br />
Using KParts</translate>]]<br />
:<translate><!--T:129--><br />
A kPart is a plugin that you can just load into your application. For example, it is easy to integrate an editor (the katePart) or a console (the konsolePart) into your application's window.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Writing kontact plugins|<translate><!--T:130--><br />
Writing kontact plugins</translate>]]<br />
:<translate><!--T:131--><br />
Kontact plugins are KParts. This tutorial describes how you can write one.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Writing Qt Designer Plugins|<translate><!--T:132--><br />
Writing Qt Designer Plugins</translate>]]<br />
<translate><!--T:133--><br />
:Add your widgets to Qt Designer and thus make them usable in UI files.<br />
; [[Special:myLanguage/Development/Tutorials/KCM_HowTo|KCM HowTo]]<br />
:KCM are plugins which are loaded by System Settings to display configuration elements. They can also be used within an application.<br />
<br />
== Search and Metadata == <!--T:134--><br />
<br />
=== Strigi === <!--T:135--><br />
</translate><br />
<br />
; [[Special:myLanguage/Development/Tutorials/Writing file analyzers|<translate><!--T:136--><br />
Writing file analyzers</translate>]]<br />
:<translate>File analyzers extract data from files to display in the file dialogs and file managers. The data gathered this way is also used to search for files. KDE4 allows the use of multiple analyzers per file type. This tutorial describes how you can write new analyzers.<br />
=== [http://nepomuk.kde.org Nepomuk] === <!--T:137--><br />
<br />
<!--T:138--><br />
See [[Special:myLanguage/Development/Tutorials/Metadata/Nepomuk|Nepomuk tutorials]].<br />
<br />
<br />
== Hardware Awareness (Solid) == <!--T:139--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Solid/Introduction|<translate><!--T:140--><br />
Introduction to Solid</translate>]]<br />
:<translate><!--T:141--><br />
An introduction to the Solid effort in general and it library in particular.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Solid/Device_Discovery|<translate><!--T:142--><br />
Listing Devices</translate>]]<br />
:<translate><!--T:143--><br />
How to use the Solid core library to discover the hardware and interact with the system.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Solid/Network_Management|<translate><!--T:144--><br />
Accessing Network Information</translate>]]<br />
:<translate><!--T:145--><br />
How to use the Solid system to get information about the network</translate><br />
;[[Special:myLanguage/Development/Tutorials/Solid/Device_Actions|<translate><!--T:146--><br />
Creating a Device Action</translate>]]<br />
:<translate><!--T:147--><br />
When your application is interested in registering actions with the system for removable hardware<br />
<br />
== Authorization and Privilege escalation (KAuth) == <!--T:148--><br />
</translate><br />
<br />
; [[Special:myLanguage/Development/Tutorials/KAuth/KAuth_Basics|<translate><!--T:149--><br />
KAuth Basics</translate>]]<br />
:<translate><!--T:150--><br />
An overview of concepts and basic knowledge required to understand and use KAuth effectively</translate><br />
; [[Special:myLanguage/Development/Tutorials/KAuth/KAuth_Actions|<translate><!--T:151--><br />
Using KAuth actions in your application</translate>]]<br />
:<translate><!--T:152--><br />
How to execute KAuth actions in your application, and how to integrate them tightly into your UI</translate><br />
; [[Special:myLanguage/Development/Tutorials/KAuth/Helper_HowTo|<translate><!--T:153--><br />
Creating a KAuth helper to perform a privileged action</translate>]]<br />
:<translate><!--T:154--><br />
You will learn how to use KAuth's helpers and escalation facilities, and how to seamlessly make a privileged and non privileged portion of your application interact</translate><br />
; [[Special:myLanguage/Development/Tutorials/KAuth/KCM_HowTo|<translate><!--T:155--><br />
Creating a KCM requiring authorization upon saving</translate>]]<br />
:<translate><!--T:156--><br />
Learn how to use the high level KCModule API to create KCModules handling authorization, and its UI integration, on their own<br />
<br />
== Multimedia (Phonon) == <!--T:157--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Phonon/Introduction|<translate><!--T:158--><br />
Phonon</translate>]]<br />
:<translate><!--T:159--><br />
The ;[[Special:myLanguage/Development/Tutorials/Phonon/Introduction|Introduction to Phonon]] tells how to compile and run the code. If you like to work in Python, try [[Development/Tutorials/Phonon/Introduction/Python|this version]] of the same tutorial</translate><br />
;[[Special:myLanguage/Development/Tutorials/Phonon/Backends|<translate><!--T:160--><br />
Writing Backends</translate>]]<br />
:<translate><!--T:161--><br />
How to start creating a new backend for the multimedia API</translate><br />
<translate><!--T:162--><br />
;Resources</translate><br />
<translate><!--T:163--><br />
:Please have a look at the [http://api.kde.org/kdesupport-api/kdesupport-apidocs/phonon-git/html/ online documentation] for information on the Phonon API. If you prefer using Qt Assistant or Qt Creator you can also use our [http://mts.ms/phonon-4.4.2.qch offline documentation].<br />
<br />
== Plasma == <!--T:164--><br />
</translate><br />
<br />
See [[Special:myLanguage/Development/Tutorials/Plasma|<translate><!--T:165--><br />
Plasma tutorials</translate>]].<br />
<br />
<translate><br />
== Personal Information Management (Akonadi) == <!--T:166--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Akonadi/Application|<translate><!--T:167--><br />
Using Akonadi in Applications</translate>]]<br />
:<translate><!--T:168--><br />
Displaying and modifying data provided by Akonadi</translate><br />
;[[Special:myLanguage/Development/Tutorials/Akonadi/Resources|<translate><!--T:169--><br />
Developing Akonadi Resources</translate>]]<br />
:<translate><!--T:170--><br />
Akonadi Resources are agent programs which transport PIM data between Akonadi and a backend (files, servers, etc)</translate><br />
;[[Special:myLanguage/Development/Tutorials/Akonadi/SerializerPlugin|<translate><!--T:171--><br />
Using custom data types with Akonadi</translate>]]<br />
:<translate><!--T:172--><br />
Akonadi can handle arbitrary data as item payloads through the use of a plugin based serialization framework</translate><br />
;[[Special:myLanguage/Development/AkonadiPorting|<translate><!--T:173--><br />
Porting Applications which use KResource API</translate>]]<br />
:<translate><!--T:174--><br />
Applications using KDE's now deprecated KResource APIs, e.g. KABC or KCal, need to be ported to use their Akonadi equivalents<br />
<br />
== Kate / Kwrite == <!--T:175--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Kate/KTextEditor Plugins|<translate><!--T:176--><br />
Getting started with KTextEditor plugins</translate>]]<br />
:<translate><!--T:177--><br />
Creating your first KTextEditor plugin</translate><br />
;[[Special:myLanguage/Development/Tutorials/Kate/KTextEditor_Plugins_Advanced|<translate><!--T:178--><br />
Developing a plugin with configuration dialog</translate>]]<br />
:<translate><!--T:179--><br />
Adding a configuration dialog to the Time & Date example</translate><br />
;[[Special:myLanguage/Development/Tutorials/Kate/KTextEditor_Example|<translate><!--T:180--><br />
A small Editor</translate>]]<br />
:<translate><!--T:181--><br />
Create a small application using KTextEditor<br />
<br />
== KDevelop == <!--T:182--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/KDevelop-PG-Qt_Introduction|<translate><!--T:183--><br />
KDevelop-PG-Qt Introduction</translate>]]<br />
:<translate><!--T:184--><br />
Information on the KDevelop parser generator, useful for language plugins.<br />
<br />
==Printing== <!--T:185--><br />
<br />
<!--T:186--><br />
KDE mostly uses the [http://doc.qt.nokia.com/latest/printing.html Qt Printing infrastructure].<br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Printing Hello World|<translate><!--T:187--><br />
Hello World</translate>]]<br />
:<translate><!--T:188--><br />
Introduction to the KDE printing system<br />
<br />
== kioslaves == <!--T:189--><br />
</translate><br />
<br />
* [[Special:myLanguage/Development/Tutorials/KIO Slaves/Using KIO Slaves in your Program|<translate><!--T:190--><br />
Using kioslaves in your Program</translate>]]<br />
* [[Special:myLanguage/Development/Tutorials/KIO Slaves/Hello World|<translate><!--T:191--><br />
Creating a Hello-World kioslave</translate>]]<br />
<translate><br />
== Collaboration == <!--T:192--><br />
<br />
=== Open Collaboration Services (libattica) === <!--T:193--><br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/Collaboration/Attica/Introduction|<translate><!--T:194--><br />
Introduction to Attica</translate>]]<br />
:<translate><!--T:195--><br />
In this tutorial a simple widget showing information about a Person on the server is created.<br />
<br />
=== Get Hot New Stuff === <!--T:196--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Collaboration/HotNewStuff/Introduction|<translate><!--T:197--><br />
Get Hot New Stuff 3 - Download</translate>]] <br />
:<translate><!--T:198--><br />
How to use KHotNewStuff3 in your application.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Collaboration/HotNewStuff/Updates|<translate><!--T:199--><br />
Get Hot New Stuff 3 - Checking for Updates</translate>]] <br />
:<translate><!--T:200--><br />
How to check whether updates for installed stuff are available without showing the dialog/widget.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Collaboration/HotNewStuff/Upload|<translate><!--T:201--><br />
Get Hot New Stuff 3 - Upload</translate>]] <br />
:<translate><!--T:202--><br />
How to add an upload dialog to your application.<br />
<br />
<!--T:203--><br />
Old links for KNS2 and KNS1 content:<br><br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/K Hot New Stuff2|<translate><!--T:204--><br />
Introduction to Get Hot New Stuff 2</translate>]] <br />
:<translate><!--T:205--><br />
A short tutorial about how to use KHotNewStuff2 in your application. Deprecated, use version 3 </translate><br />
;[[Special:myLanguage/Development/Tutorials/Introduction to Get Hot New Stuff|<translate><!--T:206--><br />
Introduction to Get Hot New Stuff</translate>]] <br />
:<translate><!--T:207--><br />
An introduction to the developer-friendly network update system that allows KDE applications to fetch new application data at runtime in a user friendly manner.</translate><br />
;[[Special:myLanguage/Development/Tutorials/KNewStuffSecure|<translate><!--T:208--><br />
KNewStuff Secure</translate>]] ([http://developer.kde.org/documentation/tutorials/knewstuffsecure/index.html <translate><!--T:209--><br />
Original Link</translate>]) <br />
:<translate><!--T:210--><br />
Tutorial showing how to share resources in a secured way (KDE 3.4 and later). By András Mantia &lt;amantia@kde.org&gt;.<br />
<br />
== Goya == <!--T:211--><br />
</translate><br />
; [[Special:myLanguage/Development/Tutorials/Introduction to Goya usage|<translate><!--T:212--><br />
Introduction to Goya usage</translate>]]<br />
:<translate><!--T:213--><br />
An introduction for the Goya subsystem usage, which allows you to easily add widgets to your itemviews and connect their signals to your code, as they were real widgets.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Introduction to Goya usage 2|<translate><!--T:214--><br />
Introduction to Goya usage (part 2)</translate>]]<br />
:<translate><!--T:215--><br />
The second part of the tutorial, with a slightly more complex example than the first part.<br />
<br />
== Other programming languages == <!--T:216--><br />
<br />
=== Python === <!--T:217--><br />
</translate><br />
;[http://www.learningpython.com/2008/09/20/an-introduction-to-pyqt/ <translate><!--T:218--><br />
An Introduction to PyQt</translate>]<br />
:<translate><!--T:219--><br />
Starting off</translate><br />
;[http://lateral.netmanagers.com.ar/stories/BBS47.html<translate> <!--T:220--><br />
PyQt by Example</translate>]<br />
:<translate><!--T:221--><br />
Another introduction to PyQt</translate><br />
;[[Special:myLanguage/Development/Languages/Python/PyKDE_WebKit_Tutorial|<translate><!--T:222--><br />
PyKDE WebKit Tutorial</translate>]]<br />
:<translate><!--T:223--><br />
A simple web browser application in PyKDE</translate><br />
;[[Special:myLanguage/Development/Tutorials/Python introduction to signals and slots|<translate><!--T:224--><br />
101 Introduction to signals and slots</translate>]]<br />
:<translate><!--T:225--><br />
A simple introduction to Qt's signal and slot architecture.</translate><br />
;[[Special:myLanguage/Development/Languages/Python/PyKDE_DBus_Tutorial|<translate><!--T:226--><br />
PyKDE DBus Tutorial</translate>]]<br />
:<translate><!--T:227--><br />
An introduction to DBus communication using PyKDE</translate><br />
;[[Special:myLanguage/Development/Languages/Python/PyKDE_Knotify_Tutorial|<translate><!--T:228--><br />
PyKDE KNotify Tutorial]]<br />
:An introduction to Knotify (Notifications and KJobs) using PyKDE<br />
<br />
=== Ruby === <!--T:229--><br />
</translate><br />
<br />
;[http://developer.kde.org/language-bindings/ruby/kde3tutorial/index.html <translate><!--T:230--><br />
KDE Ruby Korundum tutorial</translate>]<br />
:<translate><!--T:231--><br />
A ruby version of Antonio Larrosa Jim&eacute;nez's KDE tutorial by Richard Dale. See the [[Development/Languages/Ruby|Ruby Developers Corner]] for Qt tutorials and other info.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial|<translate><!--T:232--><br />
Qt4 Ruby Tutorial</translate>]]<br />
:<translate><!--T:233--><br />
Nokia's fabulous introductory tutorial to Qt, translated to Ruby.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Plasma/RubyApplet|<translate><!--T:234--><br />
Creating a Plasma Widget in Ruby</translate>]]<br />
:<translate><!--T:235--><br />
Tutorial that shows how to create your first Plasma Applet using the Ruby language.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Developing_Qt4_Applications_using_Qt_Designer_and_Ruby_on_Kubuntu|<translate><!--T:236--><br />
Developing Qt4 Applications using Qt Designer and Ruby on Kubuntu</translate>]]<br />
:<translate><!--T:237--><br />
Tutorial that shows how to design a simple User Interface in Qt Designer and then use the resulting widget in a Qt Ruby application we build from scratch.</translate><br />
;[[Special:myLanguage/Development/Languages/Ruby/Ruby-Qt/KDE_Book|<translate><!--T:238--><br />
Ruby-Qt/KDE Book]]<br />
:There is also an approach to create an Ruby-Qt/KDE Book under a free license. The content will be created in this wiki.<br />
<br />
=== Shell === <!--T:239--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Shell_Scripting_with_KDE_Dialogs|<translate><!--T:240--><br />
Shell Scripting with KDE dialogs</translate>]] ([http://developer.kde.org/documentation/tutorials/kdialog/t1.html <translate><!--T:241--><br />
Original Link</translate>]) <br />
:<translate><!--T:242--><br />
Tutorial by [mailto:bradh@frogmouth.net Brad Hards] that describes how to use KDE dialogs in shell scripts with kdialog. It is presented as an example based tutorial.<br />
<br />
== Graphics Programming == <!--T:243--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Graphics/Performance|<translate><!--T:244--><br />
QPainter Perfomance</translate>]]<br />
:<translate><!--T:245--><br />
Hints on avoiding common mistakes leading to poor performance when using QPainter<br />
<br />
== Using the KDE Games Libraries == <!--T:246--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Games/KStandardGameAction|<translate> <!--T:247--><br />
KStandardGameAction</translate>]]<br />
:<translate><!--T:248--><br />
Using libkdegames to make your game fit the kdegames standard</translate><br />
;[[Special:myLanguage/Development/Tutorials/Games/Highscores| <translate><!--T:249--><br />
Highscores</translate>]]<br />
:<translate><!--T:250--><br />
Implementing a simple highscore table into your game</translate><br />
;[[Special:myLanguage/Development/Tutorials/Games/Theme Selector|<translate> <!--T:251--><br />
Theme Selector</translate>]]<br />
:<translate><!--T:252--><br />
Using the libkdegames theme selection dialog</translate><br />
;[[Special:myLanguage/Development/Tutorials/Games/Palapeli Patterns|<translate> <!--T:253--><br />
Palapeli Slicers</translate>]]<br />
:<translate><!--T:254--><br />
Creating a slicer plugin for Palapeli<br />
<br />
=== KGLEngine === <!--T:255--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Games/kglengine/kglengine-simpleBox|<translate> <!--T:256--><br />
Installation and your first KGLItem</translate>]]<br />
:<translate><!--T:257--><br />
start your first kglengine application</translate><br />
;[[Special:myLanguage/Development/Tutorials/Games/KGLEngine2d| kglpong]]<br />
:<translate><!--T:258--><br />
Now use our knowledge to make a pong</translate><br />
<br />
== Using the KDE PIM Libraries ==<br />
<br />
;[[Special:myLanguage/Development/Tutorials/PIM/ical|<translate> <!--T:259--><br />
iCalendar functionality</translate>]]<br />
:<translate><!--T:260--><br />
Using kcal to manage iCalendar files</translate><br />
<br />
<translate>== Other tutorials == <!--T:261--><br />
<br />
=== 2D Plotting (KPlotWidget) === <!--T:262--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/KPlotWidget|<translate><!--T:263--><br />
Using the KDE data-plotting widget</translate>]]<br />
:<translate><!--T:264--><br />
This tutorial introduces KPlotWidget, which is used for 2-D data plotting. It includes information on simple usage of the widget (including adding and modifying data sets, and customizing the plot axes and labels), and advanced customization (including extending the widget through sub-classing).<br />
<br />
=== Spelling and Grammar Checking (Sonnet) === <!--T:265--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Sonnet/SonnetTutorial|<translate><!--T:266--><br />
Adding spell-checking or grammar-checking to KDE applications</translate>]]<br />
:<translate><!--T:267--><br />
This tutorial introduces Sonnet and how one may use it to add language correction to your KDE application. Sonnet's auxiliary features shall be described in a separate tutorial.<br />
<br />
=== Pixmap cache (KPixmapCache) === <!--T:268--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/KPixmapCache|<translate><!--T:269--><br />
Using the KDE pixmap cache</translate>]]<br />
:<translate><!--T:270--><br />
This tutorial shows how to use KPixmapCache to cache e.g. pixmaps generated from SVGs or some data.<br />
<br />
=== Using MarbleWidget (Marble) === <!--T:271--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/MarbleWidget|<translate><!--T:272--><br />
Using MarbleWidget</translate>]]<br />
:<translate><!--T:273--><br />
This short tutorial describes how to use the MarbleWidget in your project<br />
<br />
=== Using local SCM for KDE development === <!--T:274--><br />
</translate><br />
;[[Special:myLanguage/Development/Git|<translate><!--T:275--><br />
Using Git to develop for KDE</translate>]]<br />
:<translate><!--T:276--><br />
Here you find how to use Git to develop for KDE<br />
<br />
=== Kwin effect tutorial (blog) === <!--T:277--><br />
<br />
<!--T:278--><br />
;[http://blog.martin-graesslin.com/blog/?p=258 blog by Martin Graesslin]<br />
:This tutorial guides you through the development of a simple KWin effect<br />
<br />
=== Implementing KSysGuard sensors and adding them === <!--T:279--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Sensors|<translate><!--T:280--><br />
Sensors Tutorial</translate>]]<br />
:<translate><!--T:281--><br />
This tutorial shows how to write and KSysGuard sensor and connect it to the systray. </translate><br />
Runners<br />
<br />
<translate><br />
=== Porting an application from KSystemTrayIcon to KStatusNotifierItem === <!--T:282--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/PortToKStatusNotifierItem|<translate><!--T:283--><br />
Porting from KSystemTrayIcon to KStatusNotifierItem</translate>]]<br />
:<translate><!--T:284--><br />
This tutorials shows how to port an application using KSystemTrayIcon to KStatusNotifierItem<br />
<br />
=== Using the KDE Wallet API for safe storage === <!--T:285--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/KWallet|<translate><!--T:286--><br />
KWallet</translate>]]<br />
:<translate><!--T:287--><br />
"Brief introduction to the KWallet API which can be used for storing all kinds of sensitive information."<br />
<br />
===How to edit a wiki with Libmediawiki === <!--T:288--><br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/Libmediawiki|<translate><!--T:289--><br />
Libmediawiki</translate>]]<br />
:<translate><!--T:290--><br />
This tutorial present how to edit a wiki with Libmediawiki.<br />
<br />
== KDE2 and KDE3 Materials == <!--T:291--><br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/KWallet|<translate><!--T:292--><br />
KWallet]]</translate><br />
;[[Special:myLanguage/Development/Tutorials/KDE4 Porting Guide|<translate><!--T:293--><br />
Porting Your Application from KDE 3 to KDE 4</translate>]]<br />
:<translate><!--T:294--><br />
These tutorials cover topics related to the migration from KDE 3 to KDE 4.</translate><br />
;[[Special:myLanguage/Development/Tutorials/KDE3|<translate><!--T:295--><br />
KDE3 Tutorials</translate>]]<br />
:<translate><!--T:296--><br />
These tutorials cover topics related to KDE3.</translate><br />
;[[Special:myLanguage/Development/Tutorials/KDE2|<translate><!--T:297--><br />
KDE2 Tutorials</translate>]]<br />
:<translate><!--T:298--><br />
These tutorials cover topics related to KDE2.<br />
<br />
<!--T:299--><br />
[[Category:KDE4]]<br />
[[Category:Tutorials]]<br />
</translate></div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials&diff=71601Development/Tutorials2012-05-08T22:31:45Z<p>Frederik.gladhorn: /* Basics of KDE 4 Programming */</p>
<hr />
<div><languages /><br />
<translate><br />
<!--T:1--><br />
{{Template:I18n/Language Navigation Bar|Development/Tutorials}}<br />
<br />
<!--T:2--><br />
Tutorials are the fastest way of finding out what KDE will do for you, and how to do it. Here is a list of currently available tutorials '''for KDE4'''. Material for KDE3 and KDE2 is available on the bottom of this page.<br />
<br />
== Basics of KDE 4 Programming == <!--T:3--><br />
<br />
<!--T:4--><br />
Are you interested in writing applications with KDE 4? This tutorial series is aimed at those completely new to KDE programming.<br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/First program|<translate><!--T:5--><br />
Hello World</translate>]]<br />
:<translate><!--T:6--><br />
An introduction to the very basics of KDE4 programming</translate><br />
;[[Special:myLanguage/Development/Tutorials/Using KXmlGuiWindow|<translate><!--T:7--><br />
Creating the Main Window</translate>]]<br />
:<translate><!--T:8--><br />
This tutorial shows you the magic of an application's most important thing: The main window.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Using KActions|<translate><!--T:9--><br />
Using KActions</translate>]]<br />
:<translate><!--T:10--><br />
How to add actions to the menus and toolbars. Based on the MainWindow tutorial.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Physical_Simulation|<translate><!--T:11--><br />
Physical Simulation</translate>]]<br />
:<translate><!--T:12--><br />
How to perform a physical simulation: animation and diagram</translate><br />
;[[Special:myLanguage/Development/Tutorials/Saving and loading|<translate><!--T:13--><br />
Saving and Loading</translate>]]<br />
:<translate><!--T:14--><br />
Introduces the KIO library while adding loading and saving support to our application.</translate><br />
;[[Special:myLanguage/Development/Tutorials/SqLite|<translate><!--T:15--><br />
Using SqLite databases and QtSq</translate>l]]<br />
:<translate><!--T:16--><br />
Integrated databases without the need for a database server</translate><br />
;[[Special:myLanguage/Development/Tutorials/KCmdLineArgs|<translate><!--T:17--><br />
Command line arguments</translate>]]<br />
:<translate><!--T:18--><br />
Adds the ability to specify which file to open from the command line to our text editor.</translate><br />
;[[Special:myLanguage/Development/Tutorials/CMake|<translate><!--T:19--><br />
Introduction to CMake</translate>]]<br />
:<translate><!--T:20--><br />
How to use the CMake build system used by KDE4.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Common Programming Mistakes|<translate><!--T:21--><br />
Common Programming Mistakes</translate>]]<br />
:<translate><!--T:22--><br />
Various common mistakes made while developing Qt and KDE applications and how to avoid them.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Debugging Linker Errors|<translate><!--T:23--><br />
Debugging Linker Errors</translate>]]<br />
:<translate><!--T:24--><br />
How to understand and debug errors from the linker, at compile time.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Using Qt Creator|<translate><!--T:25--><br />
Using Qt Creator to develop your KDE program</translate>]]<br />
:<translate><!--T:26--><br />
How to use Qt Creator as an [http://en.wikipedia.org/wiki/Integrated_development_environment IDE] to develop KDE programs</translate><br />
;[[Special:myLanguage/Development/Tutorials/Creating Libraries|<translate><!--T:27--><br />
Creating Libraries to share code</translate>]]<br />
:<translate><!--T:28--><br />
How to add the library to the buildsystem and how to prepare the source code.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Session_Management|<translate><!--T:29--><br />
Session Management</translate>]]<br />
:<translate><!--T:30--><br />
Make your application aware of X sessions</translate><br />
;[[Special:myLanguage/Development/Tutorial/Icons|<translate><!--T:31--><br />
Icons</translate>]]<br />
:<translate><!--T:32--><br />
Deliver your application with icons that are automatically installed to the right places. Based on the [[Development/Tutorials/Using_KActions|Kaction Tutorial]].</translate><br />
;[[Special:myLanguage/Development/Tutorials/Desktop_File|<translate><!--T:33--><br />
Desktop File</translate>]]<br />
:<translate><!--T:34--><br />
Let your application show up in the K menu and in application menus. Based on the Icons Tutorial.<br />
;[[Development/Tutorials/Building_An_Existing_Application|Building an Existing KDE Application]] If you want to improve an existing application, you can usually build and install it easily. This tutorial shows how to build an application in a way that doesn't interfere with your system. If you do not need to modify kdelibs this may be the easiest way to get started with development.<br />
<br />
== Testing And Debugging == <!--T:35--><br />
<br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/Debugging|<translate><!--T:36--><br />
Debugging your application</translate>]]<br />
:<translate><!--T:37--><br />
Tips, tools and techniques to apply when debugging your KDE application</translate><br />
;[[Special:myLanguage/Development/Tutorials/Unittests|<translate><!--T:38--><br />
Writing Unittests for Qt4 and KDE4 with QTestLib</translate>]] ([http://developer.kde.org/documentation/tutorials/writingunittests/writingunittests.html <translate><!--T:39--><br />
Original link</translate>])<br />
:<translate><!--T:40--><br />
Tutorial by [mailto:bradh@frogmouth.net Brad Hards] that describes how to write unit tests using the QTestLib framework. It is presented as an example based tutorial, and is still under development.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Code_Checking|<translate><!--T:41--><br />
Semi-automatic ways to detect code errors</translate>]]<br />
<translate><!--T:42--><br />
:Techniques you can use to detect errors in KDE code<br />
<br />
== Managing Configuration Data With KConfig == <!--T:43--><br />
<br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/KConfig|<translate><!--T:44--><br />
Introduction To KConfig</translate>]]<br />
:<translate><!--T:45--><br />
An overview of the KConfig classes and how to use them in your application code</translate><br />
;[[Special:myLanguage/Development/Tutorials/Using KConfig XT|<translate><!--T:46--><br />
Using KConfig XT</translate>]]<br />
:<translate><!--T:47--><br />
Tutorial on how to efficiently use the KConfig XT framework.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Updating KConfig Files|<translate><!--T:48--><br />
Updating KConfig Files</translate>]]<br />
:<translate><!--T:49--><br />
Tutorial on how to write an update script to keep changes in your application's config file format in sync with the user's already existing config file<br />
<br />
== Services: Applications and Plugins == <!--T:50--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Services/Introduction|<translate><!--T:51--><br />
Introduction to the Services Framework]]<br />
:An overview of the services framework in KDE and what it provides the application developer. Covers the system configuration cache (SyCoCa), the source data files and what the indexed information can be used for.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Services/Traders|<translate><!--T:52--><br />
Finding Services Using Trader Queries</translate>]]<br />
:<translate><!--T:53--><br />
How to find services, such as plugins or mimetypes, that are indexed in the SyCoCa using Trader Query Syntax</translate><br />
;[[Special:myLanguage/Development/Tutorials/Services/Plugins|<translate><!--T:54--><br />
Creating and Loading Plugins Using KService]]<br />
:Learn how to define custom plugin types, find installed plugins (including 3rd party plugins) and load them in an easy and portable fashion using KService.<br />
<br />
== Localization == <!--T:55--><br />
<br />
<!--T:56--><br />
See also [[Special:myLanguage/Localization|Localization portal]].<br />
</translate><br />
;[[Development/Tutorials/Localization/Unicode|<translate><!--T:57--><br />
Introduction To Unicode]]<br />
:An introduction to what Unicode is as well as how to handle Unicode data in KDE applications.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n|<translate><!--T:58--><br />
Writing Applications With Localization In Mind</translate>]]<br />
:<translate><!--T:59--><br />
This tutorial covers what localization is, why it's important and how to ensure your application is ready to be localized. A must read for all application developers.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n Mistakes|<translate><!--T:60--><br />
Avoiding Common Localization Pitfalls</translate>]]<br />
:<translate><!--T:61--><br />
There are several common mistakes that prevent applications from being properly localized. Find out what they are and how to easily avoid them in this tutorial.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/Building KDE's l10n Module|<translate><!--T:62--><br />
Building KDE's Localization Module</translate>]]<br />
:<translate><!--T:63--><br />
Building and installing language support from KDE's localization (l10n) module is a good idea for those working on applications in the main KDE repository. Doing so will allow you to test your application in another language and spot problem areas. Learn how to do just that in this tutorial.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n Build Systems|<translate><!--T:64--><br />
Incorporating i18n Into the Build System</translate>]]<br />
:<translate><!--T:65--><br />
Once your application is ready to be localized, the next step is to ensure that translation files are built automatically and kept up to date. This tutorial covers the necessary CMakeFiles.txt additions as well the process of distributing the resulting message catalogs with your application.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n Challenges|<translate><!--T:66--><br />
Common i18n Challenges and Solutions</translate>]]<br />
:<translate><!--T:67--><br />
This tutorial covers challenges that you may eventually run into such as translating handbooks and other data that exists outside of the source code, merging and handling obsolete .po files, dealing with freezes, coding in languages other than English and creating independent releases of or moving applications between KDE modules.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n_Semantics|<translate><!--T:68--><br />
Semantic Markup of Messages</translate>]]<br />
:<translate><!--T:69--><br />
To ensure consistent presentation and more meaningful representations of messages in applications, semantic markup can be applied to messages marked for translation using the KUIT system. This tutorial describes how this system works.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n Krazy|<translate><!--T:70--><br />
Automated i18n Code Checking</translate>]]<br />
:<translate><!--T:71--><br />
The Krazy code checker scans KDE's code and reports common i18n mistakes.<br />
<br />
== Documentation == <!--T:72--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/API_Documentation|<translate><!--T:73--><br />
API Documentation</translate>]]<br />
:<translate><!--T:74--><br />
This tutorial explains how to document your APIs properly.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Man_Pages|<translate><!--T:75--><br />
Man Pages</translate>]]<br />
:<translate><!--T:76--><br />
Writing and Generating Reference Manual Pages.<br />
;Source Code</translate><br />
: http://quickgit.kde.org<br />
: http://websvn.kde.org<br />
<br />
== Accessibility ==<br />
<br />
;[[Special:myLanguage/Development/Tutorials/Accessibility|<translate><!--T:77--><br />
Accessibility Overview</translate>]]<br />
:<translate><!--T:78--><br />
A list of accessibility tutorials and general information.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Accessibility/Checklist|<translate><!--T:79--><br />
Accessibility Checklist</translate>]]<br />
:<translate><!--T:80--><br />
What to look for in your application to make it accessible for as many people as possible.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Accessibility/Screen_Reader_Setup|<translate><!--T:81--><br />
Screen Reader</translate>]]<br />
:<translate><!--T:82--><br />
This tutorial will explain some details about using screen readers with KDE applications.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Text-To-Speech|<translate><!--T:83--><br />
Text-To-Speech</translate>]]<br />
:<translate><!--T:84--><br />
How to utilize Jovie text-to-speech service in your application.<br />
<br />
== Application Automation and Scripting == <!--T:85--><br />
<br />
=== D-Bus === <!--T:86--><br />
</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Introduction|<translate><!--T:87--><br />
Introduction to D-Bus</translate>]]<br />
:<translate><!--T:88--><br />
A straight-forward introduction to the core concepts in D-Bus from an application developer's perspective, this tutorial covers what D-Bus is and how it can be used by applications.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Accessing Interfaces|<translate><!--T:89--><br />
Accessing D-Bus Interfaces</translate>]]<br />
:<translate><!--T:90--><br />
A step-by-step guide to calling D-Bus methods and connecting to D-Bus signals using QtDBus.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Intermediate_D-Bus|<translate><!--T:91--><br />
Intermediate D-Bus</translate>]]<br />
:<translate><!--T:92--><br />
Tips to make use of QtDBus when faced with problematic real-world interfaces.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Creating Interfaces|<translate><!--T:93--><br />
Creating D-Bus Interfaces</translate>]]<br />
:<translate><!--T:94--><br />
Learn how to expose functionality in your application by creating and using custom D-Bus interfaces. Covers generating the XML descriptions, instantiating interfaces at run time and setting up the build system with CMake.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/CustomTypes|<translate><!--T:95--><br />
Using Custom Types with D-Bus</translate>]]<br />
:<translate> <!--T:96--><br />
Learn how to use your own types in classes exported on D-Bus. Covers marhaling and unmarshaling of objects, the integration of custom types into XML descriptions and registering the custom types with the Qt Meta Object system.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Autostart Services|<translate><!--T:97--><br />
D-Bus Autostart Services</translate>]]<br />
:<translate><!--T:98--><br />
Turn your application into a D-Bus autostart service with this tutorial. This D-Bus feature, also known as "D-Bus service activation", will ensure that even when your application isn't running that D-Bus calls made to it will work by relying on the D-Bus daemon itself to start your app if and when needed.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Porting_to_D-Bus|<translate><!--T:99--><br />
Porting from DCOP to D-Bus</translate>]]<br />
:<translate> <!--T:100--><br />
Port your applications from DCOP to D-Bus with this handy guide.<br />
<br />
=== Konqueror === <!--T:101--><br />
</translate><br />
; [[Special:myLanguage/Development/Tutorials/Creating Konqueror Service Menus|<translate><!--T:102--><br />
Creating Konqueror Service Menus</translate>]]<br />
:<translate><!--T:103--><br />
This tutorial shows you how to create mimetype-specific actions in Konqueror's context menu (aka "servicemenus").</translate><br />
<br />
=== Kross ===<br />
<br />
; [[Special:myLanguage/Development/Tutorials/Kross/Introduction|<translate><!--T:104--><br />
Introduction to Kross</translate>]]<br />
:<translate><!--T:105--><br />
An introduction to the Kross Scripting Framework.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Hello_World|<translate><!--T:106--><br />
Hello World</translate>]]<br />
:<translate><!--T:107--><br />
A first application with working kross code.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Call_Functions_in_Kross|<translate><!--T:108--><br />
Calling Functions in Kross</translate>]]<br />
:<translate><!--T:109--><br />
Simple demonstration of calling scripting functions</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Connecting_Signals_and_slots_in_Kross|<translate><!--T:110--><br />
Connecting Signals and Slots in Kross</translate>]]<br />
:<translate><!--T:111--><br />
Simple demonstration of connecting object signals with script slots</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Scripts-as-Plugins|<translate><!--T:112--><br />
Scripts as Plugins with Kross</translate>]]<br />
:<translate><!--T:113--><br />
This tutorial provides a step-by-step introduction how to integrate scripts as plugins into a KDE application.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Script-Actions|<translate><!--T:114--><br />
Placing script actions in your application menus </translate>]]<br />
:<translate><!--T:115--><br />
Simple demonstration on how to extend you application menus to execute script files.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/ActionCollections|<translate><!--T:116--><br />
How to use an ActionCollection ]</translate>]<br />
:<translate><!--T:117--><br />
A small Tutorial on How to use Kross::ActionCollections.<br />
{{:KOffice/Plugin Tutorials}}<br />
<br />
=== SuperKaramba === <!--T:118--><br />
</translate><br />
<br />
; [[Special:myLanguage/Development/Tutorials/SuperKaramba|<translate><!--T:119--><br />
SuperKaramba Tutorial</translate>]]<br />
:<translate><!--T:120--><br />
This tutorial provides an overview of SuperKaramba, theme files and scripting with Python, Ruby and JavaScript.<br />
<br />
=== System Activity === <!--T:121--><br />
</translate><br />
<br />
: [[Special:myLanguage/Development/Tutorials/SystemActivity/Scripting|<translate><!--T:122--><br />
Writing script actions for the process's context menu</translate>]]<br />
:<translate><!--T:123--><br />
This tutorial shows how to add a context menu action to show custom information about a process.<br />
<br />
=== KWin === <!--T:124--><br />
</translate><br />
<br />
: [[Special:myLanguage/Development/Tutorials/KWin/Scripting<translate><!--T:125--><br />
|KWin Scripting Tutorial</translate>]]<br />
:<translate><!--T:126--><br />
This tutorial shows how to write a useful script for KWin.<br />
<br />
== Plugins and KParts == <!--T:127--><br />
</translate><br />
<br />
; [[Special:myLanguage/Development/Tutorials/Using KParts|<translate><!--T:128--><br />
Using KParts</translate>]]<br />
:<translate><!--T:129--><br />
A kPart is a plugin that you can just load into your application. For example, it is easy to integrate an editor (the katePart) or a console (the konsolePart) into your application's window.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Writing kontact plugins|<translate><!--T:130--><br />
Writing kontact plugins</translate>]]<br />
:<translate><!--T:131--><br />
Kontact plugins are KParts. This tutorial describes how you can write one.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Writing Qt Designer Plugins|<translate><!--T:132--><br />
Writing Qt Designer Plugins</translate>]]<br />
<translate><!--T:133--><br />
:Add your widgets to Qt Designer and thus make them usable in UI files.<br />
; [[Special:myLanguage/Development/Tutorials/KCM_HowTo|KCM HowTo]]<br />
:KCM are plugins which are loaded by System Settings to display configuration elements. They can also be used within an application.<br />
<br />
== Search and Metadata == <!--T:134--><br />
<br />
=== Strigi === <!--T:135--><br />
</translate><br />
<br />
; [[Special:myLanguage/Development/Tutorials/Writing file analyzers|<translate><!--T:136--><br />
Writing file analyzers</translate>]]<br />
:<translate>File analyzers extract data from files to display in the file dialogs and file managers. The data gathered this way is also used to search for files. KDE4 allows the use of multiple analyzers per file type. This tutorial describes how you can write new analyzers.<br />
=== [http://nepomuk.kde.org Nepomuk] === <!--T:137--><br />
<br />
<!--T:138--><br />
See [[Special:myLanguage/Development/Tutorials/Metadata/Nepomuk|Nepomuk tutorials]].<br />
<br />
<br />
== Hardware Awareness (Solid) == <!--T:139--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Solid/Introduction|<translate><!--T:140--><br />
Introduction to Solid</translate>]]<br />
:<translate><!--T:141--><br />
An introduction to the Solid effort in general and it library in particular.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Solid/Device_Discovery|<translate><!--T:142--><br />
Listing Devices</translate>]]<br />
:<translate><!--T:143--><br />
How to use the Solid core library to discover the hardware and interact with the system.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Solid/Network_Management|<translate><!--T:144--><br />
Accessing Network Information</translate>]]<br />
:<translate><!--T:145--><br />
How to use the Solid system to get information about the network</translate><br />
;[[Special:myLanguage/Development/Tutorials/Solid/Device_Actions|<translate><!--T:146--><br />
Creating a Device Action</translate>]]<br />
:<translate><!--T:147--><br />
When your application is interested in registering actions with the system for removable hardware<br />
<br />
== Authorization and Privilege escalation (KAuth) == <!--T:148--><br />
</translate><br />
<br />
; [[Special:myLanguage/Development/Tutorials/KAuth/KAuth_Basics|<translate><!--T:149--><br />
KAuth Basics</translate>]]<br />
:<translate><!--T:150--><br />
An overview of concepts and basic knowledge required to understand and use KAuth effectively</translate><br />
; [[Special:myLanguage/Development/Tutorials/KAuth/KAuth_Actions|<translate><!--T:151--><br />
Using KAuth actions in your application</translate>]]<br />
:<translate><!--T:152--><br />
How to execute KAuth actions in your application, and how to integrate them tightly into your UI</translate><br />
; [[Special:myLanguage/Development/Tutorials/KAuth/Helper_HowTo|<translate><!--T:153--><br />
Creating a KAuth helper to perform a privileged action</translate>]]<br />
:<translate><!--T:154--><br />
You will learn how to use KAuth's helpers and escalation facilities, and how to seamlessly make a privileged and non privileged portion of your application interact</translate><br />
; [[Special:myLanguage/Development/Tutorials/KAuth/KCM_HowTo|<translate><!--T:155--><br />
Creating a KCM requiring authorization upon saving</translate>]]<br />
:<translate><!--T:156--><br />
Learn how to use the high level KCModule API to create KCModules handling authorization, and its UI integration, on their own<br />
<br />
== Multimedia (Phonon) == <!--T:157--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Phonon/Introduction|<translate><!--T:158--><br />
Phonon</translate>]]<br />
:<translate><!--T:159--><br />
The ;[[Special:myLanguage/Development/Tutorials/Phonon/Introduction|Introduction to Phonon]] tells how to compile and run the code. If you like to work in Python, try [[Development/Tutorials/Phonon/Introduction/Python|this version]] of the same tutorial</translate><br />
;[[Special:myLanguage/Development/Tutorials/Phonon/Backends|<translate><!--T:160--><br />
Writing Backends</translate>]]<br />
:<translate><!--T:161--><br />
How to start creating a new backend for the multimedia API</translate><br />
<translate><!--T:162--><br />
;Resources</translate><br />
<translate><!--T:163--><br />
:Please have a look at the [http://api.kde.org/kdesupport-api/kdesupport-apidocs/phonon-git/html/ online documentation] for information on the Phonon API. If you prefer using Qt Assistant or Qt Creator you can also use our [http://mts.ms/phonon-4.4.2.qch offline documentation].<br />
<br />
== Plasma == <!--T:164--><br />
</translate><br />
<br />
See [[Special:myLanguage/Development/Tutorials/Plasma|<translate><!--T:165--><br />
Plasma tutorials</translate>]].<br />
<br />
<translate><br />
== Personal Information Management (Akonadi) == <!--T:166--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Akonadi/Application|<translate><!--T:167--><br />
Using Akonadi in Applications</translate>]]<br />
:<translate><!--T:168--><br />
Displaying and modifying data provided by Akonadi</translate><br />
;[[Special:myLanguage/Development/Tutorials/Akonadi/Resources|<translate><!--T:169--><br />
Developing Akonadi Resources</translate>]]<br />
:<translate><!--T:170--><br />
Akonadi Resources are agent programs which transport PIM data between Akonadi and a backend (files, servers, etc)</translate><br />
;[[Special:myLanguage/Development/Tutorials/Akonadi/SerializerPlugin|<translate><!--T:171--><br />
Using custom data types with Akonadi</translate>]]<br />
:<translate><!--T:172--><br />
Akonadi can handle arbitrary data as item payloads through the use of a plugin based serialization framework</translate><br />
;[[Special:myLanguage/Development/AkonadiPorting|<translate><!--T:173--><br />
Porting Applications which use KResource API</translate>]]<br />
:<translate><!--T:174--><br />
Applications using KDE's now deprecated KResource APIs, e.g. KABC or KCal, need to be ported to use their Akonadi equivalents<br />
<br />
== Kate / Kwrite == <!--T:175--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Kate/KTextEditor Plugins|<translate><!--T:176--><br />
Getting started with KTextEditor plugins</translate>]]<br />
:<translate><!--T:177--><br />
Creating your first KTextEditor plugin</translate><br />
;[[Special:myLanguage/Development/Tutorials/Kate/KTextEditor_Plugins_Advanced|<translate><!--T:178--><br />
Developing a plugin with configuration dialog</translate>]]<br />
:<translate><!--T:179--><br />
Adding a configuration dialog to the Time & Date example</translate><br />
;[[Special:myLanguage/Development/Tutorials/Kate/KTextEditor_Example|<translate><!--T:180--><br />
A small Editor</translate>]]<br />
:<translate><!--T:181--><br />
Create a small application using KTextEditor<br />
<br />
== KDevelop == <!--T:182--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/KDevelop-PG-Qt_Introduction|<translate><!--T:183--><br />
KDevelop-PG-Qt Introduction</translate>]]<br />
:<translate><!--T:184--><br />
Information on the KDevelop parser generator, useful for language plugins.<br />
<br />
==Printing== <!--T:185--><br />
<br />
<!--T:186--><br />
KDE mostly uses the [http://doc.qt.nokia.com/latest/printing.html Qt Printing infrastructure].<br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Printing Hello World|<translate><!--T:187--><br />
Hello World</translate>]]<br />
:<translate><!--T:188--><br />
Introduction to the KDE printing system<br />
<br />
== kioslaves == <!--T:189--><br />
</translate><br />
<br />
* [[Special:myLanguage/Development/Tutorials/KIO Slaves/Using KIO Slaves in your Program|<translate><!--T:190--><br />
Using kioslaves in your Program</translate>]]<br />
* [[Special:myLanguage/Development/Tutorials/KIO Slaves/Hello World|<translate><!--T:191--><br />
Creating a Hello-World kioslave</translate>]]<br />
<translate><br />
== Collaboration == <!--T:192--><br />
<br />
=== Open Collaboration Services (libattica) === <!--T:193--><br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/Collaboration/Attica/Introduction|<translate><!--T:194--><br />
Introduction to Attica</translate>]]<br />
:<translate><!--T:195--><br />
In this tutorial a simple widget showing information about a Person on the server is created.<br />
<br />
=== Get Hot New Stuff === <!--T:196--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Collaboration/HotNewStuff/Introduction|<translate><!--T:197--><br />
Get Hot New Stuff 3 - Download</translate>]] <br />
:<translate><!--T:198--><br />
How to use KHotNewStuff3 in your application.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Collaboration/HotNewStuff/Updates|<translate><!--T:199--><br />
Get Hot New Stuff 3 - Checking for Updates</translate>]] <br />
:<translate><!--T:200--><br />
How to check whether updates for installed stuff are available without showing the dialog/widget.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Collaboration/HotNewStuff/Upload|<translate><!--T:201--><br />
Get Hot New Stuff 3 - Upload</translate>]] <br />
:<translate><!--T:202--><br />
How to add an upload dialog to your application.<br />
<br />
<!--T:203--><br />
Old links for KNS2 and KNS1 content:<br><br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/K Hot New Stuff2|<translate><!--T:204--><br />
Introduction to Get Hot New Stuff 2</translate>]] <br />
:<translate><!--T:205--><br />
A short tutorial about how to use KHotNewStuff2 in your application. Deprecated, use version 3 </translate><br />
;[[Special:myLanguage/Development/Tutorials/Introduction to Get Hot New Stuff|<translate><!--T:206--><br />
Introduction to Get Hot New Stuff</translate>]] <br />
:<translate><!--T:207--><br />
An introduction to the developer-friendly network update system that allows KDE applications to fetch new application data at runtime in a user friendly manner.</translate><br />
;[[Special:myLanguage/Development/Tutorials/KNewStuffSecure|<translate><!--T:208--><br />
KNewStuff Secure</translate>]] ([http://developer.kde.org/documentation/tutorials/knewstuffsecure/index.html <translate><!--T:209--><br />
Original Link</translate>]) <br />
:<translate><!--T:210--><br />
Tutorial showing how to share resources in a secured way (KDE 3.4 and later). By András Mantia &lt;amantia@kde.org&gt;.<br />
<br />
== Goya == <!--T:211--><br />
</translate><br />
; [[Special:myLanguage/Development/Tutorials/Introduction to Goya usage|<translate><!--T:212--><br />
Introduction to Goya usage</translate>]]<br />
:<translate><!--T:213--><br />
An introduction for the Goya subsystem usage, which allows you to easily add widgets to your itemviews and connect their signals to your code, as they were real widgets.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Introduction to Goya usage 2|<translate><!--T:214--><br />
Introduction to Goya usage (part 2)</translate>]]<br />
:<translate><!--T:215--><br />
The second part of the tutorial, with a slightly more complex example than the first part.<br />
<br />
== Other programming languages == <!--T:216--><br />
<br />
=== Python === <!--T:217--><br />
</translate><br />
;[http://www.learningpython.com/2008/09/20/an-introduction-to-pyqt/ <translate><!--T:218--><br />
An Introduction to PyQt</translate>]<br />
:<translate><!--T:219--><br />
Starting off</translate><br />
;[http://lateral.netmanagers.com.ar/stories/BBS47.html<translate> <!--T:220--><br />
PyQt by Example</translate>]<br />
:<translate><!--T:221--><br />
Another introduction to PyQt</translate><br />
;[[Special:myLanguage/Development/Languages/Python/PyKDE_WebKit_Tutorial|<translate><!--T:222--><br />
PyKDE WebKit Tutorial</translate>]]<br />
:<translate><!--T:223--><br />
A simple web browser application in PyKDE</translate><br />
;[[Special:myLanguage/Development/Tutorials/Python introduction to signals and slots|<translate><!--T:224--><br />
101 Introduction to signals and slots</translate>]]<br />
:<translate><!--T:225--><br />
A simple introduction to Qt's signal and slot architecture.</translate><br />
;[[Special:myLanguage/Development/Languages/Python/PyKDE_DBus_Tutorial|<translate><!--T:226--><br />
PyKDE DBus Tutorial</translate>]]<br />
:<translate><!--T:227--><br />
An introduction to DBus communication using PyKDE</translate><br />
;[[Special:myLanguage/Development/Languages/Python/PyKDE_Knotify_Tutorial|<translate><!--T:228--><br />
PyKDE KNotify Tutorial]]<br />
:An introduction to Knotify (Notifications and KJobs) using PyKDE<br />
<br />
=== Ruby === <!--T:229--><br />
</translate><br />
<br />
;[http://developer.kde.org/language-bindings/ruby/kde3tutorial/index.html <translate><!--T:230--><br />
KDE Ruby Korundum tutorial</translate>]<br />
:<translate><!--T:231--><br />
A ruby version of Antonio Larrosa Jim&eacute;nez's KDE tutorial by Richard Dale. See the [[Development/Languages/Ruby|Ruby Developers Corner]] for Qt tutorials and other info.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial|<translate><!--T:232--><br />
Qt4 Ruby Tutorial</translate>]]<br />
:<translate><!--T:233--><br />
Nokia's fabulous introductory tutorial to Qt, translated to Ruby.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Plasma/RubyApplet|<translate><!--T:234--><br />
Creating a Plasma Widget in Ruby</translate>]]<br />
:<translate><!--T:235--><br />
Tutorial that shows how to create your first Plasma Applet using the Ruby language.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Developing_Qt4_Applications_using_Qt_Designer_and_Ruby_on_Kubuntu|<translate><!--T:236--><br />
Developing Qt4 Applications using Qt Designer and Ruby on Kubuntu</translate>]]<br />
:<translate><!--T:237--><br />
Tutorial that shows how to design a simple User Interface in Qt Designer and then use the resulting widget in a Qt Ruby application we build from scratch.</translate><br />
;[[Special:myLanguage/Development/Languages/Ruby/Ruby-Qt/KDE_Book|<translate><!--T:238--><br />
Ruby-Qt/KDE Book]]<br />
:There is also an approach to create an Ruby-Qt/KDE Book under a free license. The content will be created in this wiki.<br />
<br />
=== Shell === <!--T:239--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Shell_Scripting_with_KDE_Dialogs|<translate><!--T:240--><br />
Shell Scripting with KDE dialogs</translate>]] ([http://developer.kde.org/documentation/tutorials/kdialog/t1.html <translate><!--T:241--><br />
Original Link</translate>]) <br />
:<translate><!--T:242--><br />
Tutorial by [mailto:bradh@frogmouth.net Brad Hards] that describes how to use KDE dialogs in shell scripts with kdialog. It is presented as an example based tutorial.<br />
<br />
== Graphics Programming == <!--T:243--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Graphics/Performance|<translate><!--T:244--><br />
QPainter Perfomance</translate>]]<br />
:<translate><!--T:245--><br />
Hints on avoiding common mistakes leading to poor performance when using QPainter<br />
<br />
== Using the KDE Games Libraries == <!--T:246--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Games/KStandardGameAction|<translate> <!--T:247--><br />
KStandardGameAction</translate>]]<br />
:<translate><!--T:248--><br />
Using libkdegames to make your game fit the kdegames standard</translate><br />
;[[Special:myLanguage/Development/Tutorials/Games/Highscores| <translate><!--T:249--><br />
Highscores</translate>]]<br />
:<translate><!--T:250--><br />
Implementing a simple highscore table into your game</translate><br />
;[[Special:myLanguage/Development/Tutorials/Games/Theme Selector|<translate> <!--T:251--><br />
Theme Selector</translate>]]<br />
:<translate><!--T:252--><br />
Using the libkdegames theme selection dialog</translate><br />
;[[Special:myLanguage/Development/Tutorials/Games/Palapeli Patterns|<translate> <!--T:253--><br />
Palapeli Slicers</translate>]]<br />
:<translate><!--T:254--><br />
Creating a slicer plugin for Palapeli<br />
<br />
=== KGLEngine === <!--T:255--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Games/kglengine/kglengine-simpleBox|<translate> <!--T:256--><br />
Installation and your first KGLItem</translate>]]<br />
:<translate><!--T:257--><br />
start your first kglengine application</translate><br />
;[[Special:myLanguage/Development/Tutorials/Games/KGLEngine2d| kglpong]]<br />
:<translate><!--T:258--><br />
Now use our knowledge to make a pong</translate><br />
<br />
== Using the KDE PIM Libraries ==<br />
<br />
;[[Special:myLanguage/Development/Tutorials/PIM/ical|<translate> <!--T:259--><br />
iCalendar functionality</translate>]]<br />
:<translate><!--T:260--><br />
Using kcal to manage iCalendar files</translate><br />
<br />
<translate>== Other tutorials == <!--T:261--><br />
<br />
=== 2D Plotting (KPlotWidget) === <!--T:262--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/KPlotWidget|<translate><!--T:263--><br />
Using the KDE data-plotting widget</translate>]]<br />
:<translate><!--T:264--><br />
This tutorial introduces KPlotWidget, which is used for 2-D data plotting. It includes information on simple usage of the widget (including adding and modifying data sets, and customizing the plot axes and labels), and advanced customization (including extending the widget through sub-classing).<br />
<br />
=== Spelling and Grammar Checking (Sonnet) === <!--T:265--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Sonnet/SonnetTutorial|<translate><!--T:266--><br />
Adding spell-checking or grammar-checking to KDE applications</translate>]]<br />
:<translate><!--T:267--><br />
This tutorial introduces Sonnet and how one may use it to add language correction to your KDE application. Sonnet's auxiliary features shall be described in a separate tutorial.<br />
<br />
=== Pixmap cache (KPixmapCache) === <!--T:268--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/KPixmapCache|<translate><!--T:269--><br />
Using the KDE pixmap cache</translate>]]<br />
:<translate><!--T:270--><br />
This tutorial shows how to use KPixmapCache to cache e.g. pixmaps generated from SVGs or some data.<br />
<br />
=== Using MarbleWidget (Marble) === <!--T:271--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/MarbleWidget|<translate><!--T:272--><br />
Using MarbleWidget</translate>]]<br />
:<translate><!--T:273--><br />
This short tutorial describes how to use the MarbleWidget in your project<br />
<br />
=== Using local SCM for KDE development === <!--T:274--><br />
</translate><br />
;[[Special:myLanguage/Development/Git|<translate><!--T:275--><br />
Using Git to develop for KDE</translate>]]<br />
:<translate><!--T:276--><br />
Here you find how to use Git to develop for KDE<br />
<br />
=== Kwin effect tutorial (blog) === <!--T:277--><br />
<br />
<!--T:278--><br />
;[http://blog.martin-graesslin.com/blog/?p=258 blog by Martin Graesslin]<br />
:This tutorial guides you through the development of a simple KWin effect<br />
<br />
=== Implementing KSysGuard sensors and adding them === <!--T:279--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Sensors|<translate><!--T:280--><br />
Sensors Tutorial</translate>]]<br />
:<translate><!--T:281--><br />
This tutorial shows how to write and KSysGuard sensor and connect it to the systray. </translate><br />
Runners<br />
<br />
<translate><br />
=== Porting an application from KSystemTrayIcon to KStatusNotifierItem === <!--T:282--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/PortToKStatusNotifierItem|<translate><!--T:283--><br />
Porting from KSystemTrayIcon to KStatusNotifierItem</translate>]]<br />
:<translate><!--T:284--><br />
This tutorials shows how to port an application using KSystemTrayIcon to KStatusNotifierItem<br />
<br />
=== Using the KDE Wallet API for safe storage === <!--T:285--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/KWallet|<translate><!--T:286--><br />
KWallet</translate>]]<br />
:<translate><!--T:287--><br />
"Brief introduction to the KWallet API which can be used for storing all kinds of sensitive information."<br />
<br />
===How to edit a wiki with Libmediawiki === <!--T:288--><br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/Libmediawiki|<translate><!--T:289--><br />
Libmediawiki</translate>]]<br />
:<translate><!--T:290--><br />
This tutorial present how to edit a wiki with Libmediawiki.<br />
<br />
== KDE2 and KDE3 Materials == <!--T:291--><br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/KWallet|<translate><!--T:292--><br />
KWallet]]</translate><br />
;[[Special:myLanguage/Development/Tutorials/KDE4 Porting Guide|<translate><!--T:293--><br />
Porting Your Application from KDE 3 to KDE 4</translate>]]<br />
:<translate><!--T:294--><br />
These tutorials cover topics related to the migration from KDE 3 to KDE 4.</translate><br />
;[[Special:myLanguage/Development/Tutorials/KDE3|<translate><!--T:295--><br />
KDE3 Tutorials</translate>]]<br />
:<translate><!--T:296--><br />
These tutorials cover topics related to KDE3.</translate><br />
;[[Special:myLanguage/Development/Tutorials/KDE2|<translate><!--T:297--><br />
KDE2 Tutorials</translate>]]<br />
:<translate><!--T:298--><br />
These tutorials cover topics related to KDE2.<br />
<br />
<!--T:299--><br />
[[Category:KDE4]]<br />
[[Category:Tutorials]]<br />
</translate></div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials&diff=71600Development/Tutorials2012-05-08T22:31:14Z<p>Frederik.gladhorn: /* Basics of KDE 4 Programming */</p>
<hr />
<div><languages /><br />
<translate><br />
<!--T:1--><br />
{{Template:I18n/Language Navigation Bar|Development/Tutorials}}<br />
<br />
<!--T:2--><br />
Tutorials are the fastest way of finding out what KDE will do for you, and how to do it. Here is a list of currently available tutorials '''for KDE4'''. Material for KDE3 and KDE2 is available on the bottom of this page.<br />
<br />
== Basics of KDE 4 Programming == <!--T:3--><br />
<br />
<!--T:4--><br />
Are you interested in writing applications with KDE 4? This tutorial series is aimed at those completely new to KDE programming.<br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/First program|<translate><!--T:5--><br />
Hello World</translate>]]<br />
:<translate><!--T:6--><br />
An introduction to the very basics of KDE4 programming</translate><br />
;[[Special:myLanguage/Development/Tutorials/Using KXmlGuiWindow|<translate><!--T:7--><br />
Creating the Main Window</translate>]]<br />
:<translate><!--T:8--><br />
This tutorial shows you the magic of an application's most important thing: The main window.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Using KActions|<translate><!--T:9--><br />
Using KActions</translate>]]<br />
:<translate><!--T:10--><br />
How to add actions to the menus and toolbars. Based on the MainWindow tutorial.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Physical_Simulation|<translate><!--T:11--><br />
Physical Simulation</translate>]]<br />
:<translate><!--T:12--><br />
How to perform a physical simulation: animation and diagram</translate><br />
;[[Special:myLanguage/Development/Tutorials/Saving and loading|<translate><!--T:13--><br />
Saving and Loading</translate>]]<br />
:<translate><!--T:14--><br />
Introduces the KIO library while adding loading and saving support to our application.</translate><br />
;[[Special:myLanguage/Development/Tutorials/SqLite|<translate><!--T:15--><br />
Using SqLite databases and QtSq</translate>l]]<br />
:<translate><!--T:16--><br />
Integrated databases without the need for a database server</translate><br />
;[[Special:myLanguage/Development/Tutorials/KCmdLineArgs|<translate><!--T:17--><br />
Command line arguments</translate>]]<br />
:<translate><!--T:18--><br />
Adds the ability to specify which file to open from the command line to our text editor.</translate><br />
;[[Special:myLanguage/Development/Tutorials/CMake|<translate><!--T:19--><br />
Introduction to CMake</translate>]]<br />
:<translate><!--T:20--><br />
How to use the CMake build system used by KDE4.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Common Programming Mistakes|<translate><!--T:21--><br />
Common Programming Mistakes</translate>]]<br />
:<translate><!--T:22--><br />
Various common mistakes made while developing Qt and KDE applications and how to avoid them.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Debugging Linker Errors|<translate><!--T:23--><br />
Debugging Linker Errors</translate>]]<br />
:<translate><!--T:24--><br />
How to understand and debug errors from the linker, at compile time.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Using Qt Creator|<translate><!--T:25--><br />
Using Qt Creator to develop your KDE program</translate>]]<br />
:<translate><!--T:26--><br />
How to use Qt Creator as an [http://en.wikipedia.org/wiki/Integrated_development_environment IDE] to develop KDE programs</translate><br />
;[[Special:myLanguage/Development/Tutorials/Creating Libraries|<translate><!--T:27--><br />
Creating Libraries to share code</translate>]]<br />
:<translate><!--T:28--><br />
How to add the library to the buildsystem and how to prepare the source code.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Session_Management|<translate><!--T:29--><br />
Session Management</translate>]]<br />
:<translate><!--T:30--><br />
Make your application aware of X sessions</translate><br />
;[[Special:myLanguage/Development/Tutorial/Icons|<translate><!--T:31--><br />
Icons</translate>]]<br />
:<translate><!--T:32--><br />
Deliver your application with icons that are automatically installed to the right places. Based on the [[Development/Tutorials/Using_KActions|Kaction Tutorial]].</translate><br />
;[[Special:myLanguage/Development/Tutorials/Desktop_File|<translate><!--T:33--><br />
Desktop File</translate>]]<br />
:<translate><!--T:34--><br />
Let your application show up in the K menu and in application menus. Based on the Icons Tutorial.<br />
;[[Development/Tutorials/Building_An_Existing_Application|Building an Existing KDE Application]].<br />
If you want to improve an existing application, you can usually build and install it easily. This tutorial shows how to build an application in a way that doesn't interfere with your system. If you do not need to modify kdelibs this may be the easiest way to get started with development.<br />
<br />
== Testing And Debugging == <!--T:35--><br />
<br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/Debugging|<translate><!--T:36--><br />
Debugging your application</translate>]]<br />
:<translate><!--T:37--><br />
Tips, tools and techniques to apply when debugging your KDE application</translate><br />
;[[Special:myLanguage/Development/Tutorials/Unittests|<translate><!--T:38--><br />
Writing Unittests for Qt4 and KDE4 with QTestLib</translate>]] ([http://developer.kde.org/documentation/tutorials/writingunittests/writingunittests.html <translate><!--T:39--><br />
Original link</translate>])<br />
:<translate><!--T:40--><br />
Tutorial by [mailto:bradh@frogmouth.net Brad Hards] that describes how to write unit tests using the QTestLib framework. It is presented as an example based tutorial, and is still under development.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Code_Checking|<translate><!--T:41--><br />
Semi-automatic ways to detect code errors</translate>]]<br />
<translate><!--T:42--><br />
:Techniques you can use to detect errors in KDE code<br />
<br />
== Managing Configuration Data With KConfig == <!--T:43--><br />
<br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/KConfig|<translate><!--T:44--><br />
Introduction To KConfig</translate>]]<br />
:<translate><!--T:45--><br />
An overview of the KConfig classes and how to use them in your application code</translate><br />
;[[Special:myLanguage/Development/Tutorials/Using KConfig XT|<translate><!--T:46--><br />
Using KConfig XT</translate>]]<br />
:<translate><!--T:47--><br />
Tutorial on how to efficiently use the KConfig XT framework.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Updating KConfig Files|<translate><!--T:48--><br />
Updating KConfig Files</translate>]]<br />
:<translate><!--T:49--><br />
Tutorial on how to write an update script to keep changes in your application's config file format in sync with the user's already existing config file<br />
<br />
== Services: Applications and Plugins == <!--T:50--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Services/Introduction|<translate><!--T:51--><br />
Introduction to the Services Framework]]<br />
:An overview of the services framework in KDE and what it provides the application developer. Covers the system configuration cache (SyCoCa), the source data files and what the indexed information can be used for.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Services/Traders|<translate><!--T:52--><br />
Finding Services Using Trader Queries</translate>]]<br />
:<translate><!--T:53--><br />
How to find services, such as plugins or mimetypes, that are indexed in the SyCoCa using Trader Query Syntax</translate><br />
;[[Special:myLanguage/Development/Tutorials/Services/Plugins|<translate><!--T:54--><br />
Creating and Loading Plugins Using KService]]<br />
:Learn how to define custom plugin types, find installed plugins (including 3rd party plugins) and load them in an easy and portable fashion using KService.<br />
<br />
== Localization == <!--T:55--><br />
<br />
<!--T:56--><br />
See also [[Special:myLanguage/Localization|Localization portal]].<br />
</translate><br />
;[[Development/Tutorials/Localization/Unicode|<translate><!--T:57--><br />
Introduction To Unicode]]<br />
:An introduction to what Unicode is as well as how to handle Unicode data in KDE applications.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n|<translate><!--T:58--><br />
Writing Applications With Localization In Mind</translate>]]<br />
:<translate><!--T:59--><br />
This tutorial covers what localization is, why it's important and how to ensure your application is ready to be localized. A must read for all application developers.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n Mistakes|<translate><!--T:60--><br />
Avoiding Common Localization Pitfalls</translate>]]<br />
:<translate><!--T:61--><br />
There are several common mistakes that prevent applications from being properly localized. Find out what they are and how to easily avoid them in this tutorial.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/Building KDE's l10n Module|<translate><!--T:62--><br />
Building KDE's Localization Module</translate>]]<br />
:<translate><!--T:63--><br />
Building and installing language support from KDE's localization (l10n) module is a good idea for those working on applications in the main KDE repository. Doing so will allow you to test your application in another language and spot problem areas. Learn how to do just that in this tutorial.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n Build Systems|<translate><!--T:64--><br />
Incorporating i18n Into the Build System</translate>]]<br />
:<translate><!--T:65--><br />
Once your application is ready to be localized, the next step is to ensure that translation files are built automatically and kept up to date. This tutorial covers the necessary CMakeFiles.txt additions as well the process of distributing the resulting message catalogs with your application.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n Challenges|<translate><!--T:66--><br />
Common i18n Challenges and Solutions</translate>]]<br />
:<translate><!--T:67--><br />
This tutorial covers challenges that you may eventually run into such as translating handbooks and other data that exists outside of the source code, merging and handling obsolete .po files, dealing with freezes, coding in languages other than English and creating independent releases of or moving applications between KDE modules.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n_Semantics|<translate><!--T:68--><br />
Semantic Markup of Messages</translate>]]<br />
:<translate><!--T:69--><br />
To ensure consistent presentation and more meaningful representations of messages in applications, semantic markup can be applied to messages marked for translation using the KUIT system. This tutorial describes how this system works.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n Krazy|<translate><!--T:70--><br />
Automated i18n Code Checking</translate>]]<br />
:<translate><!--T:71--><br />
The Krazy code checker scans KDE's code and reports common i18n mistakes.<br />
<br />
== Documentation == <!--T:72--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/API_Documentation|<translate><!--T:73--><br />
API Documentation</translate>]]<br />
:<translate><!--T:74--><br />
This tutorial explains how to document your APIs properly.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Man_Pages|<translate><!--T:75--><br />
Man Pages</translate>]]<br />
:<translate><!--T:76--><br />
Writing and Generating Reference Manual Pages.<br />
;Source Code</translate><br />
: http://quickgit.kde.org<br />
: http://websvn.kde.org<br />
<br />
== Accessibility ==<br />
<br />
;[[Special:myLanguage/Development/Tutorials/Accessibility|<translate><!--T:77--><br />
Accessibility Overview</translate>]]<br />
:<translate><!--T:78--><br />
A list of accessibility tutorials and general information.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Accessibility/Checklist|<translate><!--T:79--><br />
Accessibility Checklist</translate>]]<br />
:<translate><!--T:80--><br />
What to look for in your application to make it accessible for as many people as possible.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Accessibility/Screen_Reader_Setup|<translate><!--T:81--><br />
Screen Reader</translate>]]<br />
:<translate><!--T:82--><br />
This tutorial will explain some details about using screen readers with KDE applications.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Text-To-Speech|<translate><!--T:83--><br />
Text-To-Speech</translate>]]<br />
:<translate><!--T:84--><br />
How to utilize Jovie text-to-speech service in your application.<br />
<br />
== Application Automation and Scripting == <!--T:85--><br />
<br />
=== D-Bus === <!--T:86--><br />
</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Introduction|<translate><!--T:87--><br />
Introduction to D-Bus</translate>]]<br />
:<translate><!--T:88--><br />
A straight-forward introduction to the core concepts in D-Bus from an application developer's perspective, this tutorial covers what D-Bus is and how it can be used by applications.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Accessing Interfaces|<translate><!--T:89--><br />
Accessing D-Bus Interfaces</translate>]]<br />
:<translate><!--T:90--><br />
A step-by-step guide to calling D-Bus methods and connecting to D-Bus signals using QtDBus.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Intermediate_D-Bus|<translate><!--T:91--><br />
Intermediate D-Bus</translate>]]<br />
:<translate><!--T:92--><br />
Tips to make use of QtDBus when faced with problematic real-world interfaces.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Creating Interfaces|<translate><!--T:93--><br />
Creating D-Bus Interfaces</translate>]]<br />
:<translate><!--T:94--><br />
Learn how to expose functionality in your application by creating and using custom D-Bus interfaces. Covers generating the XML descriptions, instantiating interfaces at run time and setting up the build system with CMake.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/CustomTypes|<translate><!--T:95--><br />
Using Custom Types with D-Bus</translate>]]<br />
:<translate> <!--T:96--><br />
Learn how to use your own types in classes exported on D-Bus. Covers marhaling and unmarshaling of objects, the integration of custom types into XML descriptions and registering the custom types with the Qt Meta Object system.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Autostart Services|<translate><!--T:97--><br />
D-Bus Autostart Services</translate>]]<br />
:<translate><!--T:98--><br />
Turn your application into a D-Bus autostart service with this tutorial. This D-Bus feature, also known as "D-Bus service activation", will ensure that even when your application isn't running that D-Bus calls made to it will work by relying on the D-Bus daemon itself to start your app if and when needed.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Porting_to_D-Bus|<translate><!--T:99--><br />
Porting from DCOP to D-Bus</translate>]]<br />
:<translate> <!--T:100--><br />
Port your applications from DCOP to D-Bus with this handy guide.<br />
<br />
=== Konqueror === <!--T:101--><br />
</translate><br />
; [[Special:myLanguage/Development/Tutorials/Creating Konqueror Service Menus|<translate><!--T:102--><br />
Creating Konqueror Service Menus</translate>]]<br />
:<translate><!--T:103--><br />
This tutorial shows you how to create mimetype-specific actions in Konqueror's context menu (aka "servicemenus").</translate><br />
<br />
=== Kross ===<br />
<br />
; [[Special:myLanguage/Development/Tutorials/Kross/Introduction|<translate><!--T:104--><br />
Introduction to Kross</translate>]]<br />
:<translate><!--T:105--><br />
An introduction to the Kross Scripting Framework.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Hello_World|<translate><!--T:106--><br />
Hello World</translate>]]<br />
:<translate><!--T:107--><br />
A first application with working kross code.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Call_Functions_in_Kross|<translate><!--T:108--><br />
Calling Functions in Kross</translate>]]<br />
:<translate><!--T:109--><br />
Simple demonstration of calling scripting functions</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Connecting_Signals_and_slots_in_Kross|<translate><!--T:110--><br />
Connecting Signals and Slots in Kross</translate>]]<br />
:<translate><!--T:111--><br />
Simple demonstration of connecting object signals with script slots</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Scripts-as-Plugins|<translate><!--T:112--><br />
Scripts as Plugins with Kross</translate>]]<br />
:<translate><!--T:113--><br />
This tutorial provides a step-by-step introduction how to integrate scripts as plugins into a KDE application.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Script-Actions|<translate><!--T:114--><br />
Placing script actions in your application menus </translate>]]<br />
:<translate><!--T:115--><br />
Simple demonstration on how to extend you application menus to execute script files.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/ActionCollections|<translate><!--T:116--><br />
How to use an ActionCollection ]</translate>]<br />
:<translate><!--T:117--><br />
A small Tutorial on How to use Kross::ActionCollections.<br />
{{:KOffice/Plugin Tutorials}}<br />
<br />
=== SuperKaramba === <!--T:118--><br />
</translate><br />
<br />
; [[Special:myLanguage/Development/Tutorials/SuperKaramba|<translate><!--T:119--><br />
SuperKaramba Tutorial</translate>]]<br />
:<translate><!--T:120--><br />
This tutorial provides an overview of SuperKaramba, theme files and scripting with Python, Ruby and JavaScript.<br />
<br />
=== System Activity === <!--T:121--><br />
</translate><br />
<br />
: [[Special:myLanguage/Development/Tutorials/SystemActivity/Scripting|<translate><!--T:122--><br />
Writing script actions for the process's context menu</translate>]]<br />
:<translate><!--T:123--><br />
This tutorial shows how to add a context menu action to show custom information about a process.<br />
<br />
=== KWin === <!--T:124--><br />
</translate><br />
<br />
: [[Special:myLanguage/Development/Tutorials/KWin/Scripting<translate><!--T:125--><br />
|KWin Scripting Tutorial</translate>]]<br />
:<translate><!--T:126--><br />
This tutorial shows how to write a useful script for KWin.<br />
<br />
== Plugins and KParts == <!--T:127--><br />
</translate><br />
<br />
; [[Special:myLanguage/Development/Tutorials/Using KParts|<translate><!--T:128--><br />
Using KParts</translate>]]<br />
:<translate><!--T:129--><br />
A kPart is a plugin that you can just load into your application. For example, it is easy to integrate an editor (the katePart) or a console (the konsolePart) into your application's window.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Writing kontact plugins|<translate><!--T:130--><br />
Writing kontact plugins</translate>]]<br />
:<translate><!--T:131--><br />
Kontact plugins are KParts. This tutorial describes how you can write one.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Writing Qt Designer Plugins|<translate><!--T:132--><br />
Writing Qt Designer Plugins</translate>]]<br />
<translate><!--T:133--><br />
:Add your widgets to Qt Designer and thus make them usable in UI files.<br />
; [[Special:myLanguage/Development/Tutorials/KCM_HowTo|KCM HowTo]]<br />
:KCM are plugins which are loaded by System Settings to display configuration elements. They can also be used within an application.<br />
<br />
== Search and Metadata == <!--T:134--><br />
<br />
=== Strigi === <!--T:135--><br />
</translate><br />
<br />
; [[Special:myLanguage/Development/Tutorials/Writing file analyzers|<translate><!--T:136--><br />
Writing file analyzers</translate>]]<br />
:<translate>File analyzers extract data from files to display in the file dialogs and file managers. The data gathered this way is also used to search for files. KDE4 allows the use of multiple analyzers per file type. This tutorial describes how you can write new analyzers.<br />
=== [http://nepomuk.kde.org Nepomuk] === <!--T:137--><br />
<br />
<!--T:138--><br />
See [[Special:myLanguage/Development/Tutorials/Metadata/Nepomuk|Nepomuk tutorials]].<br />
<br />
<br />
== Hardware Awareness (Solid) == <!--T:139--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Solid/Introduction|<translate><!--T:140--><br />
Introduction to Solid</translate>]]<br />
:<translate><!--T:141--><br />
An introduction to the Solid effort in general and it library in particular.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Solid/Device_Discovery|<translate><!--T:142--><br />
Listing Devices</translate>]]<br />
:<translate><!--T:143--><br />
How to use the Solid core library to discover the hardware and interact with the system.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Solid/Network_Management|<translate><!--T:144--><br />
Accessing Network Information</translate>]]<br />
:<translate><!--T:145--><br />
How to use the Solid system to get information about the network</translate><br />
;[[Special:myLanguage/Development/Tutorials/Solid/Device_Actions|<translate><!--T:146--><br />
Creating a Device Action</translate>]]<br />
:<translate><!--T:147--><br />
When your application is interested in registering actions with the system for removable hardware<br />
<br />
== Authorization and Privilege escalation (KAuth) == <!--T:148--><br />
</translate><br />
<br />
; [[Special:myLanguage/Development/Tutorials/KAuth/KAuth_Basics|<translate><!--T:149--><br />
KAuth Basics</translate>]]<br />
:<translate><!--T:150--><br />
An overview of concepts and basic knowledge required to understand and use KAuth effectively</translate><br />
; [[Special:myLanguage/Development/Tutorials/KAuth/KAuth_Actions|<translate><!--T:151--><br />
Using KAuth actions in your application</translate>]]<br />
:<translate><!--T:152--><br />
How to execute KAuth actions in your application, and how to integrate them tightly into your UI</translate><br />
; [[Special:myLanguage/Development/Tutorials/KAuth/Helper_HowTo|<translate><!--T:153--><br />
Creating a KAuth helper to perform a privileged action</translate>]]<br />
:<translate><!--T:154--><br />
You will learn how to use KAuth's helpers and escalation facilities, and how to seamlessly make a privileged and non privileged portion of your application interact</translate><br />
; [[Special:myLanguage/Development/Tutorials/KAuth/KCM_HowTo|<translate><!--T:155--><br />
Creating a KCM requiring authorization upon saving</translate>]]<br />
:<translate><!--T:156--><br />
Learn how to use the high level KCModule API to create KCModules handling authorization, and its UI integration, on their own<br />
<br />
== Multimedia (Phonon) == <!--T:157--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Phonon/Introduction|<translate><!--T:158--><br />
Phonon</translate>]]<br />
:<translate><!--T:159--><br />
The ;[[Special:myLanguage/Development/Tutorials/Phonon/Introduction|Introduction to Phonon]] tells how to compile and run the code. If you like to work in Python, try [[Development/Tutorials/Phonon/Introduction/Python|this version]] of the same tutorial</translate><br />
;[[Special:myLanguage/Development/Tutorials/Phonon/Backends|<translate><!--T:160--><br />
Writing Backends</translate>]]<br />
:<translate><!--T:161--><br />
How to start creating a new backend for the multimedia API</translate><br />
<translate><!--T:162--><br />
;Resources</translate><br />
<translate><!--T:163--><br />
:Please have a look at the [http://api.kde.org/kdesupport-api/kdesupport-apidocs/phonon-git/html/ online documentation] for information on the Phonon API. If you prefer using Qt Assistant or Qt Creator you can also use our [http://mts.ms/phonon-4.4.2.qch offline documentation].<br />
<br />
== Plasma == <!--T:164--><br />
</translate><br />
<br />
See [[Special:myLanguage/Development/Tutorials/Plasma|<translate><!--T:165--><br />
Plasma tutorials</translate>]].<br />
<br />
<translate><br />
== Personal Information Management (Akonadi) == <!--T:166--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Akonadi/Application|<translate><!--T:167--><br />
Using Akonadi in Applications</translate>]]<br />
:<translate><!--T:168--><br />
Displaying and modifying data provided by Akonadi</translate><br />
;[[Special:myLanguage/Development/Tutorials/Akonadi/Resources|<translate><!--T:169--><br />
Developing Akonadi Resources</translate>]]<br />
:<translate><!--T:170--><br />
Akonadi Resources are agent programs which transport PIM data between Akonadi and a backend (files, servers, etc)</translate><br />
;[[Special:myLanguage/Development/Tutorials/Akonadi/SerializerPlugin|<translate><!--T:171--><br />
Using custom data types with Akonadi</translate>]]<br />
:<translate><!--T:172--><br />
Akonadi can handle arbitrary data as item payloads through the use of a plugin based serialization framework</translate><br />
;[[Special:myLanguage/Development/AkonadiPorting|<translate><!--T:173--><br />
Porting Applications which use KResource API</translate>]]<br />
:<translate><!--T:174--><br />
Applications using KDE's now deprecated KResource APIs, e.g. KABC or KCal, need to be ported to use their Akonadi equivalents<br />
<br />
== Kate / Kwrite == <!--T:175--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Kate/KTextEditor Plugins|<translate><!--T:176--><br />
Getting started with KTextEditor plugins</translate>]]<br />
:<translate><!--T:177--><br />
Creating your first KTextEditor plugin</translate><br />
;[[Special:myLanguage/Development/Tutorials/Kate/KTextEditor_Plugins_Advanced|<translate><!--T:178--><br />
Developing a plugin with configuration dialog</translate>]]<br />
:<translate><!--T:179--><br />
Adding a configuration dialog to the Time & Date example</translate><br />
;[[Special:myLanguage/Development/Tutorials/Kate/KTextEditor_Example|<translate><!--T:180--><br />
A small Editor</translate>]]<br />
:<translate><!--T:181--><br />
Create a small application using KTextEditor<br />
<br />
== KDevelop == <!--T:182--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/KDevelop-PG-Qt_Introduction|<translate><!--T:183--><br />
KDevelop-PG-Qt Introduction</translate>]]<br />
:<translate><!--T:184--><br />
Information on the KDevelop parser generator, useful for language plugins.<br />
<br />
==Printing== <!--T:185--><br />
<br />
<!--T:186--><br />
KDE mostly uses the [http://doc.qt.nokia.com/latest/printing.html Qt Printing infrastructure].<br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Printing Hello World|<translate><!--T:187--><br />
Hello World</translate>]]<br />
:<translate><!--T:188--><br />
Introduction to the KDE printing system<br />
<br />
== kioslaves == <!--T:189--><br />
</translate><br />
<br />
* [[Special:myLanguage/Development/Tutorials/KIO Slaves/Using KIO Slaves in your Program|<translate><!--T:190--><br />
Using kioslaves in your Program</translate>]]<br />
* [[Special:myLanguage/Development/Tutorials/KIO Slaves/Hello World|<translate><!--T:191--><br />
Creating a Hello-World kioslave</translate>]]<br />
<translate><br />
== Collaboration == <!--T:192--><br />
<br />
=== Open Collaboration Services (libattica) === <!--T:193--><br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/Collaboration/Attica/Introduction|<translate><!--T:194--><br />
Introduction to Attica</translate>]]<br />
:<translate><!--T:195--><br />
In this tutorial a simple widget showing information about a Person on the server is created.<br />
<br />
=== Get Hot New Stuff === <!--T:196--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Collaboration/HotNewStuff/Introduction|<translate><!--T:197--><br />
Get Hot New Stuff 3 - Download</translate>]] <br />
:<translate><!--T:198--><br />
How to use KHotNewStuff3 in your application.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Collaboration/HotNewStuff/Updates|<translate><!--T:199--><br />
Get Hot New Stuff 3 - Checking for Updates</translate>]] <br />
:<translate><!--T:200--><br />
How to check whether updates for installed stuff are available without showing the dialog/widget.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Collaboration/HotNewStuff/Upload|<translate><!--T:201--><br />
Get Hot New Stuff 3 - Upload</translate>]] <br />
:<translate><!--T:202--><br />
How to add an upload dialog to your application.<br />
<br />
<!--T:203--><br />
Old links for KNS2 and KNS1 content:<br><br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/K Hot New Stuff2|<translate><!--T:204--><br />
Introduction to Get Hot New Stuff 2</translate>]] <br />
:<translate><!--T:205--><br />
A short tutorial about how to use KHotNewStuff2 in your application. Deprecated, use version 3 </translate><br />
;[[Special:myLanguage/Development/Tutorials/Introduction to Get Hot New Stuff|<translate><!--T:206--><br />
Introduction to Get Hot New Stuff</translate>]] <br />
:<translate><!--T:207--><br />
An introduction to the developer-friendly network update system that allows KDE applications to fetch new application data at runtime in a user friendly manner.</translate><br />
;[[Special:myLanguage/Development/Tutorials/KNewStuffSecure|<translate><!--T:208--><br />
KNewStuff Secure</translate>]] ([http://developer.kde.org/documentation/tutorials/knewstuffsecure/index.html <translate><!--T:209--><br />
Original Link</translate>]) <br />
:<translate><!--T:210--><br />
Tutorial showing how to share resources in a secured way (KDE 3.4 and later). By András Mantia &lt;amantia@kde.org&gt;.<br />
<br />
== Goya == <!--T:211--><br />
</translate><br />
; [[Special:myLanguage/Development/Tutorials/Introduction to Goya usage|<translate><!--T:212--><br />
Introduction to Goya usage</translate>]]<br />
:<translate><!--T:213--><br />
An introduction for the Goya subsystem usage, which allows you to easily add widgets to your itemviews and connect their signals to your code, as they were real widgets.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Introduction to Goya usage 2|<translate><!--T:214--><br />
Introduction to Goya usage (part 2)</translate>]]<br />
:<translate><!--T:215--><br />
The second part of the tutorial, with a slightly more complex example than the first part.<br />
<br />
== Other programming languages == <!--T:216--><br />
<br />
=== Python === <!--T:217--><br />
</translate><br />
;[http://www.learningpython.com/2008/09/20/an-introduction-to-pyqt/ <translate><!--T:218--><br />
An Introduction to PyQt</translate>]<br />
:<translate><!--T:219--><br />
Starting off</translate><br />
;[http://lateral.netmanagers.com.ar/stories/BBS47.html<translate> <!--T:220--><br />
PyQt by Example</translate>]<br />
:<translate><!--T:221--><br />
Another introduction to PyQt</translate><br />
;[[Special:myLanguage/Development/Languages/Python/PyKDE_WebKit_Tutorial|<translate><!--T:222--><br />
PyKDE WebKit Tutorial</translate>]]<br />
:<translate><!--T:223--><br />
A simple web browser application in PyKDE</translate><br />
;[[Special:myLanguage/Development/Tutorials/Python introduction to signals and slots|<translate><!--T:224--><br />
101 Introduction to signals and slots</translate>]]<br />
:<translate><!--T:225--><br />
A simple introduction to Qt's signal and slot architecture.</translate><br />
;[[Special:myLanguage/Development/Languages/Python/PyKDE_DBus_Tutorial|<translate><!--T:226--><br />
PyKDE DBus Tutorial</translate>]]<br />
:<translate><!--T:227--><br />
An introduction to DBus communication using PyKDE</translate><br />
;[[Special:myLanguage/Development/Languages/Python/PyKDE_Knotify_Tutorial|<translate><!--T:228--><br />
PyKDE KNotify Tutorial]]<br />
:An introduction to Knotify (Notifications and KJobs) using PyKDE<br />
<br />
=== Ruby === <!--T:229--><br />
</translate><br />
<br />
;[http://developer.kde.org/language-bindings/ruby/kde3tutorial/index.html <translate><!--T:230--><br />
KDE Ruby Korundum tutorial</translate>]<br />
:<translate><!--T:231--><br />
A ruby version of Antonio Larrosa Jim&eacute;nez's KDE tutorial by Richard Dale. See the [[Development/Languages/Ruby|Ruby Developers Corner]] for Qt tutorials and other info.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial|<translate><!--T:232--><br />
Qt4 Ruby Tutorial</translate>]]<br />
:<translate><!--T:233--><br />
Nokia's fabulous introductory tutorial to Qt, translated to Ruby.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Plasma/RubyApplet|<translate><!--T:234--><br />
Creating a Plasma Widget in Ruby</translate>]]<br />
:<translate><!--T:235--><br />
Tutorial that shows how to create your first Plasma Applet using the Ruby language.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Developing_Qt4_Applications_using_Qt_Designer_and_Ruby_on_Kubuntu|<translate><!--T:236--><br />
Developing Qt4 Applications using Qt Designer and Ruby on Kubuntu</translate>]]<br />
:<translate><!--T:237--><br />
Tutorial that shows how to design a simple User Interface in Qt Designer and then use the resulting widget in a Qt Ruby application we build from scratch.</translate><br />
;[[Special:myLanguage/Development/Languages/Ruby/Ruby-Qt/KDE_Book|<translate><!--T:238--><br />
Ruby-Qt/KDE Book]]<br />
:There is also an approach to create an Ruby-Qt/KDE Book under a free license. The content will be created in this wiki.<br />
<br />
=== Shell === <!--T:239--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Shell_Scripting_with_KDE_Dialogs|<translate><!--T:240--><br />
Shell Scripting with KDE dialogs</translate>]] ([http://developer.kde.org/documentation/tutorials/kdialog/t1.html <translate><!--T:241--><br />
Original Link</translate>]) <br />
:<translate><!--T:242--><br />
Tutorial by [mailto:bradh@frogmouth.net Brad Hards] that describes how to use KDE dialogs in shell scripts with kdialog. It is presented as an example based tutorial.<br />
<br />
== Graphics Programming == <!--T:243--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Graphics/Performance|<translate><!--T:244--><br />
QPainter Perfomance</translate>]]<br />
:<translate><!--T:245--><br />
Hints on avoiding common mistakes leading to poor performance when using QPainter<br />
<br />
== Using the KDE Games Libraries == <!--T:246--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Games/KStandardGameAction|<translate> <!--T:247--><br />
KStandardGameAction</translate>]]<br />
:<translate><!--T:248--><br />
Using libkdegames to make your game fit the kdegames standard</translate><br />
;[[Special:myLanguage/Development/Tutorials/Games/Highscores| <translate><!--T:249--><br />
Highscores</translate>]]<br />
:<translate><!--T:250--><br />
Implementing a simple highscore table into your game</translate><br />
;[[Special:myLanguage/Development/Tutorials/Games/Theme Selector|<translate> <!--T:251--><br />
Theme Selector</translate>]]<br />
:<translate><!--T:252--><br />
Using the libkdegames theme selection dialog</translate><br />
;[[Special:myLanguage/Development/Tutorials/Games/Palapeli Patterns|<translate> <!--T:253--><br />
Palapeli Slicers</translate>]]<br />
:<translate><!--T:254--><br />
Creating a slicer plugin for Palapeli<br />
<br />
=== KGLEngine === <!--T:255--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Games/kglengine/kglengine-simpleBox|<translate> <!--T:256--><br />
Installation and your first KGLItem</translate>]]<br />
:<translate><!--T:257--><br />
start your first kglengine application</translate><br />
;[[Special:myLanguage/Development/Tutorials/Games/KGLEngine2d| kglpong]]<br />
:<translate><!--T:258--><br />
Now use our knowledge to make a pong</translate><br />
<br />
== Using the KDE PIM Libraries ==<br />
<br />
;[[Special:myLanguage/Development/Tutorials/PIM/ical|<translate> <!--T:259--><br />
iCalendar functionality</translate>]]<br />
:<translate><!--T:260--><br />
Using kcal to manage iCalendar files</translate><br />
<br />
<translate>== Other tutorials == <!--T:261--><br />
<br />
=== 2D Plotting (KPlotWidget) === <!--T:262--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/KPlotWidget|<translate><!--T:263--><br />
Using the KDE data-plotting widget</translate>]]<br />
:<translate><!--T:264--><br />
This tutorial introduces KPlotWidget, which is used for 2-D data plotting. It includes information on simple usage of the widget (including adding and modifying data sets, and customizing the plot axes and labels), and advanced customization (including extending the widget through sub-classing).<br />
<br />
=== Spelling and Grammar Checking (Sonnet) === <!--T:265--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Sonnet/SonnetTutorial|<translate><!--T:266--><br />
Adding spell-checking or grammar-checking to KDE applications</translate>]]<br />
:<translate><!--T:267--><br />
This tutorial introduces Sonnet and how one may use it to add language correction to your KDE application. Sonnet's auxiliary features shall be described in a separate tutorial.<br />
<br />
=== Pixmap cache (KPixmapCache) === <!--T:268--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/KPixmapCache|<translate><!--T:269--><br />
Using the KDE pixmap cache</translate>]]<br />
:<translate><!--T:270--><br />
This tutorial shows how to use KPixmapCache to cache e.g. pixmaps generated from SVGs or some data.<br />
<br />
=== Using MarbleWidget (Marble) === <!--T:271--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/MarbleWidget|<translate><!--T:272--><br />
Using MarbleWidget</translate>]]<br />
:<translate><!--T:273--><br />
This short tutorial describes how to use the MarbleWidget in your project<br />
<br />
=== Using local SCM for KDE development === <!--T:274--><br />
</translate><br />
;[[Special:myLanguage/Development/Git|<translate><!--T:275--><br />
Using Git to develop for KDE</translate>]]<br />
:<translate><!--T:276--><br />
Here you find how to use Git to develop for KDE<br />
<br />
=== Kwin effect tutorial (blog) === <!--T:277--><br />
<br />
<!--T:278--><br />
;[http://blog.martin-graesslin.com/blog/?p=258 blog by Martin Graesslin]<br />
:This tutorial guides you through the development of a simple KWin effect<br />
<br />
=== Implementing KSysGuard sensors and adding them === <!--T:279--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Sensors|<translate><!--T:280--><br />
Sensors Tutorial</translate>]]<br />
:<translate><!--T:281--><br />
This tutorial shows how to write and KSysGuard sensor and connect it to the systray. </translate><br />
Runners<br />
<br />
<translate><br />
=== Porting an application from KSystemTrayIcon to KStatusNotifierItem === <!--T:282--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/PortToKStatusNotifierItem|<translate><!--T:283--><br />
Porting from KSystemTrayIcon to KStatusNotifierItem</translate>]]<br />
:<translate><!--T:284--><br />
This tutorials shows how to port an application using KSystemTrayIcon to KStatusNotifierItem<br />
<br />
=== Using the KDE Wallet API for safe storage === <!--T:285--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/KWallet|<translate><!--T:286--><br />
KWallet</translate>]]<br />
:<translate><!--T:287--><br />
"Brief introduction to the KWallet API which can be used for storing all kinds of sensitive information."<br />
<br />
===How to edit a wiki with Libmediawiki === <!--T:288--><br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/Libmediawiki|<translate><!--T:289--><br />
Libmediawiki</translate>]]<br />
:<translate><!--T:290--><br />
This tutorial present how to edit a wiki with Libmediawiki.<br />
<br />
== KDE2 and KDE3 Materials == <!--T:291--><br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/KWallet|<translate><!--T:292--><br />
KWallet]]</translate><br />
;[[Special:myLanguage/Development/Tutorials/KDE4 Porting Guide|<translate><!--T:293--><br />
Porting Your Application from KDE 3 to KDE 4</translate>]]<br />
:<translate><!--T:294--><br />
These tutorials cover topics related to the migration from KDE 3 to KDE 4.</translate><br />
;[[Special:myLanguage/Development/Tutorials/KDE3|<translate><!--T:295--><br />
KDE3 Tutorials</translate>]]<br />
:<translate><!--T:296--><br />
These tutorials cover topics related to KDE3.</translate><br />
;[[Special:myLanguage/Development/Tutorials/KDE2|<translate><!--T:297--><br />
KDE2 Tutorials</translate>]]<br />
:<translate><!--T:298--><br />
These tutorials cover topics related to KDE2.<br />
<br />
<!--T:299--><br />
[[Category:KDE4]]<br />
[[Category:Tutorials]]<br />
</translate></div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials&diff=71590Development/Tutorials2012-05-08T21:40:57Z<p>Frederik.gladhorn: /* Basics of KDE 4 Programming */</p>
<hr />
<div><languages /><br />
<translate><br />
<!--T:1--><br />
{{Template:I18n/Language Navigation Bar|Development/Tutorials}}<br />
<br />
<!--T:2--><br />
Tutorials are the fastest way of finding out what KDE will do for you, and how to do it. Here is a list of currently available tutorials '''for KDE4'''. Material for KDE3 and KDE2 is available on the bottom of this page.<br />
<br />
== Basics of KDE 4 Programming == <!--T:3--><br />
<br />
<!--T:4--><br />
Are you interested in writing applications with KDE 4? This tutorial series is aimed at those completely new to KDE programming.<br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/First program|<translate><!--T:5--><br />
Hello World</translate>]]<br />
:<translate><!--T:6--><br />
An introduction to the very basics of KDE4 programming</translate><br />
;[[Special:myLanguage/Development/Tutorials/Using KXmlGuiWindow|<translate><!--T:7--><br />
Creating the Main Window</translate>]]<br />
:<translate><!--T:8--><br />
This tutorial shows you the magic of an application's most important thing: The main window.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Using KActions|<translate><!--T:9--><br />
Using KActions</translate>]]<br />
:<translate><!--T:10--><br />
How to add actions to the menus and toolbars. Based on the MainWindow tutorial.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Physical_Simulation|<translate><!--T:11--><br />
Physical Simulation</translate>]]<br />
:<translate><!--T:12--><br />
How to perform a physical simulation: animation and diagram</translate><br />
;[[Special:myLanguage/Development/Tutorials/Saving and loading|<translate><!--T:13--><br />
Saving and Loading</translate>]]<br />
:<translate><!--T:14--><br />
Introduces the KIO library while adding loading and saving support to our application.</translate><br />
;[[Special:myLanguage/Development/Tutorials/SqLite|<translate><!--T:15--><br />
Using SqLite databases and QtSq</translate>l]]<br />
:<translate><!--T:16--><br />
Integrated databases without the need for a database server</translate><br />
;[[Special:myLanguage/Development/Tutorials/KCmdLineArgs|<translate><!--T:17--><br />
Command line arguments</translate>]]<br />
:<translate><!--T:18--><br />
Adds the ability to specify which file to open from the command line to our text editor.</translate><br />
;[[Special:myLanguage/Development/Tutorials/CMake|<translate><!--T:19--><br />
Introduction to CMake</translate>]]<br />
:<translate><!--T:20--><br />
How to use the CMake build system used by KDE4.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Common Programming Mistakes|<translate><!--T:21--><br />
Common Programming Mistakes</translate>]]<br />
:<translate><!--T:22--><br />
Various common mistakes made while developing Qt and KDE applications and how to avoid them.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Debugging Linker Errors|<translate><!--T:23--><br />
Debugging Linker Errors</translate>]]<br />
:<translate><!--T:24--><br />
How to understand and debug errors from the linker, at compile time.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Using Qt Creator|<translate><!--T:25--><br />
Using Qt Creator to develop your KDE program</translate>]]<br />
:<translate><!--T:26--><br />
How to use Qt Creator as an [http://en.wikipedia.org/wiki/Integrated_development_environment IDE] to develop KDE programs</translate><br />
;[[Special:myLanguage/Development/Tutorials/Creating Libraries|<translate><!--T:27--><br />
Creating Libraries to share code</translate>]]<br />
:<translate><!--T:28--><br />
How to add the library to the buildsystem and how to prepare the source code.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Session_Management|<translate><!--T:29--><br />
Session Management</translate>]]<br />
:<translate><!--T:30--><br />
Make your application aware of X sessions</translate><br />
;[[Special:myLanguage/Development/Tutorial/Icons|<translate><!--T:31--><br />
Icons</translate>]]<br />
:<translate><!--T:32--><br />
Deliver your application with icons that are automatically installed to the right places. Based on the [[Development/Tutorials/Using_KActions|Kaction Tutorial]].</translate><br />
;[[Special:myLanguage/Development/Tutorials/Desktop_File|<translate><!--T:33--><br />
Desktop File</translate>]]<br />
:<translate><!--T:34--><br />
Let your application show up in the K menu and in application menus. Based on the Icons Tutorial.<br />
[[Development/Tutorials/Building_An_Existing_Application|Building an Existing KDE Application]].<br />
If you want to improve an existing application, you can usually build and install it easily. This tutorial shows how to build an application in a way that doesn't interfere with your system. If you do not need to modify kdelibs this may be the easiest way to get started with development.<br />
<br />
== Testing And Debugging == <!--T:35--><br />
<br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/Debugging|<translate><!--T:36--><br />
Debugging your application</translate>]]<br />
:<translate><!--T:37--><br />
Tips, tools and techniques to apply when debugging your KDE application</translate><br />
;[[Special:myLanguage/Development/Tutorials/Unittests|<translate><!--T:38--><br />
Writing Unittests for Qt4 and KDE4 with QTestLib</translate>]] ([http://developer.kde.org/documentation/tutorials/writingunittests/writingunittests.html <translate><!--T:39--><br />
Original link</translate>])<br />
:<translate><!--T:40--><br />
Tutorial by [mailto:bradh@frogmouth.net Brad Hards] that describes how to write unit tests using the QTestLib framework. It is presented as an example based tutorial, and is still under development.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Code_Checking|<translate><!--T:41--><br />
Semi-automatic ways to detect code errors</translate>]]<br />
<translate><!--T:42--><br />
:Techniques you can use to detect errors in KDE code<br />
<br />
== Managing Configuration Data With KConfig == <!--T:43--><br />
<br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/KConfig|<translate><!--T:44--><br />
Introduction To KConfig</translate>]]<br />
:<translate><!--T:45--><br />
An overview of the KConfig classes and how to use them in your application code</translate><br />
;[[Special:myLanguage/Development/Tutorials/Using KConfig XT|<translate><!--T:46--><br />
Using KConfig XT</translate>]]<br />
:<translate><!--T:47--><br />
Tutorial on how to efficiently use the KConfig XT framework.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Updating KConfig Files|<translate><!--T:48--><br />
Updating KConfig Files</translate>]]<br />
:<translate><!--T:49--><br />
Tutorial on how to write an update script to keep changes in your application's config file format in sync with the user's already existing config file<br />
<br />
== Services: Applications and Plugins == <!--T:50--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Services/Introduction|<translate><!--T:51--><br />
Introduction to the Services Framework]]<br />
:An overview of the services framework in KDE and what it provides the application developer. Covers the system configuration cache (SyCoCa), the source data files and what the indexed information can be used for.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Services/Traders|<translate><!--T:52--><br />
Finding Services Using Trader Queries</translate>]]<br />
:<translate><!--T:53--><br />
How to find services, such as plugins or mimetypes, that are indexed in the SyCoCa using Trader Query Syntax</translate><br />
;[[Special:myLanguage/Development/Tutorials/Services/Plugins|<translate><!--T:54--><br />
Creating and Loading Plugins Using KService]]<br />
:Learn how to define custom plugin types, find installed plugins (including 3rd party plugins) and load them in an easy and portable fashion using KService.<br />
<br />
== Localization == <!--T:55--><br />
<br />
<!--T:56--><br />
See also [[Special:myLanguage/Localization|Localization portal]].<br />
</translate><br />
;[[Development/Tutorials/Localization/Unicode|<translate><!--T:57--><br />
Introduction To Unicode]]<br />
:An introduction to what Unicode is as well as how to handle Unicode data in KDE applications.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n|<translate><!--T:58--><br />
Writing Applications With Localization In Mind</translate>]]<br />
:<translate><!--T:59--><br />
This tutorial covers what localization is, why it's important and how to ensure your application is ready to be localized. A must read for all application developers.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n Mistakes|<translate><!--T:60--><br />
Avoiding Common Localization Pitfalls</translate>]]<br />
:<translate><!--T:61--><br />
There are several common mistakes that prevent applications from being properly localized. Find out what they are and how to easily avoid them in this tutorial.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/Building KDE's l10n Module|<translate><!--T:62--><br />
Building KDE's Localization Module</translate>]]<br />
:<translate><!--T:63--><br />
Building and installing language support from KDE's localization (l10n) module is a good idea for those working on applications in the main KDE repository. Doing so will allow you to test your application in another language and spot problem areas. Learn how to do just that in this tutorial.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n Build Systems|<translate><!--T:64--><br />
Incorporating i18n Into the Build System</translate>]]<br />
:<translate><!--T:65--><br />
Once your application is ready to be localized, the next step is to ensure that translation files are built automatically and kept up to date. This tutorial covers the necessary CMakeFiles.txt additions as well the process of distributing the resulting message catalogs with your application.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n Challenges|<translate><!--T:66--><br />
Common i18n Challenges and Solutions</translate>]]<br />
:<translate><!--T:67--><br />
This tutorial covers challenges that you may eventually run into such as translating handbooks and other data that exists outside of the source code, merging and handling obsolete .po files, dealing with freezes, coding in languages other than English and creating independent releases of or moving applications between KDE modules.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n_Semantics|<translate><!--T:68--><br />
Semantic Markup of Messages</translate>]]<br />
:<translate><!--T:69--><br />
To ensure consistent presentation and more meaningful representations of messages in applications, semantic markup can be applied to messages marked for translation using the KUIT system. This tutorial describes how this system works.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Localization/i18n Krazy|<translate><!--T:70--><br />
Automated i18n Code Checking</translate>]]<br />
:<translate><!--T:71--><br />
The Krazy code checker scans KDE's code and reports common i18n mistakes.<br />
<br />
== Documentation == <!--T:72--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/API_Documentation|<translate><!--T:73--><br />
API Documentation</translate>]]<br />
:<translate><!--T:74--><br />
This tutorial explains how to document your APIs properly.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Man_Pages|<translate><!--T:75--><br />
Man Pages</translate>]]<br />
:<translate><!--T:76--><br />
Writing and Generating Reference Manual Pages.<br />
;Source Code</translate><br />
: http://quickgit.kde.org<br />
: http://websvn.kde.org<br />
<br />
== Accessibility ==<br />
<br />
;[[Special:myLanguage/Development/Tutorials/Accessibility|<translate><!--T:77--><br />
Accessibility Overview</translate>]]<br />
:<translate><!--T:78--><br />
A list of accessibility tutorials and general information.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Accessibility/Checklist|<translate><!--T:79--><br />
Accessibility Checklist</translate>]]<br />
:<translate><!--T:80--><br />
What to look for in your application to make it accessible for as many people as possible.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Accessibility/Screen_Reader_Setup|<translate><!--T:81--><br />
Screen Reader</translate>]]<br />
:<translate><!--T:82--><br />
This tutorial will explain some details about using screen readers with KDE applications.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Text-To-Speech|<translate><!--T:83--><br />
Text-To-Speech</translate>]]<br />
:<translate><!--T:84--><br />
How to utilize Jovie text-to-speech service in your application.<br />
<br />
== Application Automation and Scripting == <!--T:85--><br />
<br />
=== D-Bus === <!--T:86--><br />
</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Introduction|<translate><!--T:87--><br />
Introduction to D-Bus</translate>]]<br />
:<translate><!--T:88--><br />
A straight-forward introduction to the core concepts in D-Bus from an application developer's perspective, this tutorial covers what D-Bus is and how it can be used by applications.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Accessing Interfaces|<translate><!--T:89--><br />
Accessing D-Bus Interfaces</translate>]]<br />
:<translate><!--T:90--><br />
A step-by-step guide to calling D-Bus methods and connecting to D-Bus signals using QtDBus.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Intermediate_D-Bus|<translate><!--T:91--><br />
Intermediate D-Bus</translate>]]<br />
:<translate><!--T:92--><br />
Tips to make use of QtDBus when faced with problematic real-world interfaces.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Creating Interfaces|<translate><!--T:93--><br />
Creating D-Bus Interfaces</translate>]]<br />
:<translate><!--T:94--><br />
Learn how to expose functionality in your application by creating and using custom D-Bus interfaces. Covers generating the XML descriptions, instantiating interfaces at run time and setting up the build system with CMake.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/CustomTypes|<translate><!--T:95--><br />
Using Custom Types with D-Bus</translate>]]<br />
:<translate> <!--T:96--><br />
Learn how to use your own types in classes exported on D-Bus. Covers marhaling and unmarshaling of objects, the integration of custom types into XML descriptions and registering the custom types with the Qt Meta Object system.</translate><br />
; [[Special:myLanguage/Development/Tutorials/D-Bus/Autostart Services|<translate><!--T:97--><br />
D-Bus Autostart Services</translate>]]<br />
:<translate><!--T:98--><br />
Turn your application into a D-Bus autostart service with this tutorial. This D-Bus feature, also known as "D-Bus service activation", will ensure that even when your application isn't running that D-Bus calls made to it will work by relying on the D-Bus daemon itself to start your app if and when needed.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Porting_to_D-Bus|<translate><!--T:99--><br />
Porting from DCOP to D-Bus</translate>]]<br />
:<translate> <!--T:100--><br />
Port your applications from DCOP to D-Bus with this handy guide.<br />
<br />
=== Konqueror === <!--T:101--><br />
</translate><br />
; [[Special:myLanguage/Development/Tutorials/Creating Konqueror Service Menus|<translate><!--T:102--><br />
Creating Konqueror Service Menus</translate>]]<br />
:<translate><!--T:103--><br />
This tutorial shows you how to create mimetype-specific actions in Konqueror's context menu (aka "servicemenus").</translate><br />
<br />
=== Kross ===<br />
<br />
; [[Special:myLanguage/Development/Tutorials/Kross/Introduction|<translate><!--T:104--><br />
Introduction to Kross</translate>]]<br />
:<translate><!--T:105--><br />
An introduction to the Kross Scripting Framework.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Hello_World|<translate><!--T:106--><br />
Hello World</translate>]]<br />
:<translate><!--T:107--><br />
A first application with working kross code.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Call_Functions_in_Kross|<translate><!--T:108--><br />
Calling Functions in Kross</translate>]]<br />
:<translate><!--T:109--><br />
Simple demonstration of calling scripting functions</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Connecting_Signals_and_slots_in_Kross|<translate><!--T:110--><br />
Connecting Signals and Slots in Kross</translate>]]<br />
:<translate><!--T:111--><br />
Simple demonstration of connecting object signals with script slots</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Scripts-as-Plugins|<translate><!--T:112--><br />
Scripts as Plugins with Kross</translate>]]<br />
:<translate><!--T:113--><br />
This tutorial provides a step-by-step introduction how to integrate scripts as plugins into a KDE application.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/Script-Actions|<translate><!--T:114--><br />
Placing script actions in your application menus </translate>]]<br />
:<translate><!--T:115--><br />
Simple demonstration on how to extend you application menus to execute script files.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Kross/ActionCollections|<translate><!--T:116--><br />
How to use an ActionCollection ]</translate>]<br />
:<translate><!--T:117--><br />
A small Tutorial on How to use Kross::ActionCollections.<br />
{{:KOffice/Plugin Tutorials}}<br />
<br />
=== SuperKaramba === <!--T:118--><br />
</translate><br />
<br />
; [[Special:myLanguage/Development/Tutorials/SuperKaramba|<translate><!--T:119--><br />
SuperKaramba Tutorial</translate>]]<br />
:<translate><!--T:120--><br />
This tutorial provides an overview of SuperKaramba, theme files and scripting with Python, Ruby and JavaScript.<br />
<br />
=== System Activity === <!--T:121--><br />
</translate><br />
<br />
: [[Special:myLanguage/Development/Tutorials/SystemActivity/Scripting|<translate><!--T:122--><br />
Writing script actions for the process's context menu</translate>]]<br />
:<translate><!--T:123--><br />
This tutorial shows how to add a context menu action to show custom information about a process.<br />
<br />
=== KWin === <!--T:124--><br />
</translate><br />
<br />
: [[Special:myLanguage/Development/Tutorials/KWin/Scripting<translate><!--T:125--><br />
|KWin Scripting Tutorial</translate>]]<br />
:<translate><!--T:126--><br />
This tutorial shows how to write a useful script for KWin.<br />
<br />
== Plugins and KParts == <!--T:127--><br />
</translate><br />
<br />
; [[Special:myLanguage/Development/Tutorials/Using KParts|<translate><!--T:128--><br />
Using KParts</translate>]]<br />
:<translate><!--T:129--><br />
A kPart is a plugin that you can just load into your application. For example, it is easy to integrate an editor (the katePart) or a console (the konsolePart) into your application's window.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Writing kontact plugins|<translate><!--T:130--><br />
Writing kontact plugins</translate>]]<br />
:<translate><!--T:131--><br />
Kontact plugins are KParts. This tutorial describes how you can write one.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Writing Qt Designer Plugins|<translate><!--T:132--><br />
Writing Qt Designer Plugins</translate>]]<br />
<translate><!--T:133--><br />
:Add your widgets to Qt Designer and thus make them usable in UI files.<br />
; [[Special:myLanguage/Development/Tutorials/KCM_HowTo|KCM HowTo]]<br />
:KCM are plugins which are loaded by System Settings to display configuration elements. They can also be used within an application.<br />
<br />
== Search and Metadata == <!--T:134--><br />
<br />
=== Strigi === <!--T:135--><br />
</translate><br />
<br />
; [[Special:myLanguage/Development/Tutorials/Writing file analyzers|<translate><!--T:136--><br />
Writing file analyzers</translate>]]<br />
:<translate>File analyzers extract data from files to display in the file dialogs and file managers. The data gathered this way is also used to search for files. KDE4 allows the use of multiple analyzers per file type. This tutorial describes how you can write new analyzers.<br />
=== [http://nepomuk.kde.org Nepomuk] === <!--T:137--><br />
<br />
<!--T:138--><br />
See [[Special:myLanguage/Development/Tutorials/Metadata/Nepomuk|Nepomuk tutorials]].<br />
<br />
<br />
== Hardware Awareness (Solid) == <!--T:139--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Solid/Introduction|<translate><!--T:140--><br />
Introduction to Solid</translate>]]<br />
:<translate><!--T:141--><br />
An introduction to the Solid effort in general and it library in particular.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Solid/Device_Discovery|<translate><!--T:142--><br />
Listing Devices</translate>]]<br />
:<translate><!--T:143--><br />
How to use the Solid core library to discover the hardware and interact with the system.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Solid/Network_Management|<translate><!--T:144--><br />
Accessing Network Information</translate>]]<br />
:<translate><!--T:145--><br />
How to use the Solid system to get information about the network</translate><br />
;[[Special:myLanguage/Development/Tutorials/Solid/Device_Actions|<translate><!--T:146--><br />
Creating a Device Action</translate>]]<br />
:<translate><!--T:147--><br />
When your application is interested in registering actions with the system for removable hardware<br />
<br />
== Authorization and Privilege escalation (KAuth) == <!--T:148--><br />
</translate><br />
<br />
; [[Special:myLanguage/Development/Tutorials/KAuth/KAuth_Basics|<translate><!--T:149--><br />
KAuth Basics</translate>]]<br />
:<translate><!--T:150--><br />
An overview of concepts and basic knowledge required to understand and use KAuth effectively</translate><br />
; [[Special:myLanguage/Development/Tutorials/KAuth/KAuth_Actions|<translate><!--T:151--><br />
Using KAuth actions in your application</translate>]]<br />
:<translate><!--T:152--><br />
How to execute KAuth actions in your application, and how to integrate them tightly into your UI</translate><br />
; [[Special:myLanguage/Development/Tutorials/KAuth/Helper_HowTo|<translate><!--T:153--><br />
Creating a KAuth helper to perform a privileged action</translate>]]<br />
:<translate><!--T:154--><br />
You will learn how to use KAuth's helpers and escalation facilities, and how to seamlessly make a privileged and non privileged portion of your application interact</translate><br />
; [[Special:myLanguage/Development/Tutorials/KAuth/KCM_HowTo|<translate><!--T:155--><br />
Creating a KCM requiring authorization upon saving</translate>]]<br />
:<translate><!--T:156--><br />
Learn how to use the high level KCModule API to create KCModules handling authorization, and its UI integration, on their own<br />
<br />
== Multimedia (Phonon) == <!--T:157--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Phonon/Introduction|<translate><!--T:158--><br />
Phonon</translate>]]<br />
:<translate><!--T:159--><br />
The ;[[Special:myLanguage/Development/Tutorials/Phonon/Introduction|Introduction to Phonon]] tells how to compile and run the code. If you like to work in Python, try [[Development/Tutorials/Phonon/Introduction/Python|this version]] of the same tutorial</translate><br />
;[[Special:myLanguage/Development/Tutorials/Phonon/Backends|<translate><!--T:160--><br />
Writing Backends</translate>]]<br />
:<translate><!--T:161--><br />
How to start creating a new backend for the multimedia API</translate><br />
<translate><!--T:162--><br />
;Resources</translate><br />
<translate><!--T:163--><br />
:Please have a look at the [http://api.kde.org/kdesupport-api/kdesupport-apidocs/phonon-git/html/ online documentation] for information on the Phonon API. If you prefer using Qt Assistant or Qt Creator you can also use our [http://mts.ms/phonon-4.4.2.qch offline documentation].<br />
<br />
== Plasma == <!--T:164--><br />
</translate><br />
<br />
See [[Special:myLanguage/Development/Tutorials/Plasma|<translate><!--T:165--><br />
Plasma tutorials</translate>]].<br />
<br />
<translate><br />
== Personal Information Management (Akonadi) == <!--T:166--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Akonadi/Application|<translate><!--T:167--><br />
Using Akonadi in Applications</translate>]]<br />
:<translate><!--T:168--><br />
Displaying and modifying data provided by Akonadi</translate><br />
;[[Special:myLanguage/Development/Tutorials/Akonadi/Resources|<translate><!--T:169--><br />
Developing Akonadi Resources</translate>]]<br />
:<translate><!--T:170--><br />
Akonadi Resources are agent programs which transport PIM data between Akonadi and a backend (files, servers, etc)</translate><br />
;[[Special:myLanguage/Development/Tutorials/Akonadi/SerializerPlugin|<translate><!--T:171--><br />
Using custom data types with Akonadi</translate>]]<br />
:<translate><!--T:172--><br />
Akonadi can handle arbitrary data as item payloads through the use of a plugin based serialization framework</translate><br />
;[[Special:myLanguage/Development/AkonadiPorting|<translate><!--T:173--><br />
Porting Applications which use KResource API</translate>]]<br />
:<translate><!--T:174--><br />
Applications using KDE's now deprecated KResource APIs, e.g. KABC or KCal, need to be ported to use their Akonadi equivalents<br />
<br />
== Kate / Kwrite == <!--T:175--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Kate/KTextEditor Plugins|<translate><!--T:176--><br />
Getting started with KTextEditor plugins</translate>]]<br />
:<translate><!--T:177--><br />
Creating your first KTextEditor plugin</translate><br />
;[[Special:myLanguage/Development/Tutorials/Kate/KTextEditor_Plugins_Advanced|<translate><!--T:178--><br />
Developing a plugin with configuration dialog</translate>]]<br />
:<translate><!--T:179--><br />
Adding a configuration dialog to the Time & Date example</translate><br />
;[[Special:myLanguage/Development/Tutorials/Kate/KTextEditor_Example|<translate><!--T:180--><br />
A small Editor</translate>]]<br />
:<translate><!--T:181--><br />
Create a small application using KTextEditor<br />
<br />
== KDevelop == <!--T:182--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/KDevelop-PG-Qt_Introduction|<translate><!--T:183--><br />
KDevelop-PG-Qt Introduction</translate>]]<br />
:<translate><!--T:184--><br />
Information on the KDevelop parser generator, useful for language plugins.<br />
<br />
==Printing== <!--T:185--><br />
<br />
<!--T:186--><br />
KDE mostly uses the [http://doc.qt.nokia.com/latest/printing.html Qt Printing infrastructure].<br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Printing Hello World|<translate><!--T:187--><br />
Hello World</translate>]]<br />
:<translate><!--T:188--><br />
Introduction to the KDE printing system<br />
<br />
== kioslaves == <!--T:189--><br />
</translate><br />
<br />
* [[Special:myLanguage/Development/Tutorials/KIO Slaves/Using KIO Slaves in your Program|<translate><!--T:190--><br />
Using kioslaves in your Program</translate>]]<br />
* [[Special:myLanguage/Development/Tutorials/KIO Slaves/Hello World|<translate><!--T:191--><br />
Creating a Hello-World kioslave</translate>]]<br />
<translate><br />
== Collaboration == <!--T:192--><br />
<br />
=== Open Collaboration Services (libattica) === <!--T:193--><br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/Collaboration/Attica/Introduction|<translate><!--T:194--><br />
Introduction to Attica</translate>]]<br />
:<translate><!--T:195--><br />
In this tutorial a simple widget showing information about a Person on the server is created.<br />
<br />
=== Get Hot New Stuff === <!--T:196--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Collaboration/HotNewStuff/Introduction|<translate><!--T:197--><br />
Get Hot New Stuff 3 - Download</translate>]] <br />
:<translate><!--T:198--><br />
How to use KHotNewStuff3 in your application.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Collaboration/HotNewStuff/Updates|<translate><!--T:199--><br />
Get Hot New Stuff 3 - Checking for Updates</translate>]] <br />
:<translate><!--T:200--><br />
How to check whether updates for installed stuff are available without showing the dialog/widget.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Collaboration/HotNewStuff/Upload|<translate><!--T:201--><br />
Get Hot New Stuff 3 - Upload</translate>]] <br />
:<translate><!--T:202--><br />
How to add an upload dialog to your application.<br />
<br />
<!--T:203--><br />
Old links for KNS2 and KNS1 content:<br><br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/K Hot New Stuff2|<translate><!--T:204--><br />
Introduction to Get Hot New Stuff 2</translate>]] <br />
:<translate><!--T:205--><br />
A short tutorial about how to use KHotNewStuff2 in your application. Deprecated, use version 3 </translate><br />
;[[Special:myLanguage/Development/Tutorials/Introduction to Get Hot New Stuff|<translate><!--T:206--><br />
Introduction to Get Hot New Stuff</translate>]] <br />
:<translate><!--T:207--><br />
An introduction to the developer-friendly network update system that allows KDE applications to fetch new application data at runtime in a user friendly manner.</translate><br />
;[[Special:myLanguage/Development/Tutorials/KNewStuffSecure|<translate><!--T:208--><br />
KNewStuff Secure</translate>]] ([http://developer.kde.org/documentation/tutorials/knewstuffsecure/index.html <translate><!--T:209--><br />
Original Link</translate>]) <br />
:<translate><!--T:210--><br />
Tutorial showing how to share resources in a secured way (KDE 3.4 and later). By András Mantia &lt;amantia@kde.org&gt;.<br />
<br />
== Goya == <!--T:211--><br />
</translate><br />
; [[Special:myLanguage/Development/Tutorials/Introduction to Goya usage|<translate><!--T:212--><br />
Introduction to Goya usage</translate>]]<br />
:<translate><!--T:213--><br />
An introduction for the Goya subsystem usage, which allows you to easily add widgets to your itemviews and connect their signals to your code, as they were real widgets.</translate><br />
; [[Special:myLanguage/Development/Tutorials/Introduction to Goya usage 2|<translate><!--T:214--><br />
Introduction to Goya usage (part 2)</translate>]]<br />
:<translate><!--T:215--><br />
The second part of the tutorial, with a slightly more complex example than the first part.<br />
<br />
== Other programming languages == <!--T:216--><br />
<br />
=== Python === <!--T:217--><br />
</translate><br />
;[http://www.learningpython.com/2008/09/20/an-introduction-to-pyqt/ <translate><!--T:218--><br />
An Introduction to PyQt</translate>]<br />
:<translate><!--T:219--><br />
Starting off</translate><br />
;[http://lateral.netmanagers.com.ar/stories/BBS47.html<translate> <!--T:220--><br />
PyQt by Example</translate>]<br />
:<translate><!--T:221--><br />
Another introduction to PyQt</translate><br />
;[[Special:myLanguage/Development/Languages/Python/PyKDE_WebKit_Tutorial|<translate><!--T:222--><br />
PyKDE WebKit Tutorial</translate>]]<br />
:<translate><!--T:223--><br />
A simple web browser application in PyKDE</translate><br />
;[[Special:myLanguage/Development/Tutorials/Python introduction to signals and slots|<translate><!--T:224--><br />
101 Introduction to signals and slots</translate>]]<br />
:<translate><!--T:225--><br />
A simple introduction to Qt's signal and slot architecture.</translate><br />
;[[Special:myLanguage/Development/Languages/Python/PyKDE_DBus_Tutorial|<translate><!--T:226--><br />
PyKDE DBus Tutorial</translate>]]<br />
:<translate><!--T:227--><br />
An introduction to DBus communication using PyKDE</translate><br />
;[[Special:myLanguage/Development/Languages/Python/PyKDE_Knotify_Tutorial|<translate><!--T:228--><br />
PyKDE KNotify Tutorial]]<br />
:An introduction to Knotify (Notifications and KJobs) using PyKDE<br />
<br />
=== Ruby === <!--T:229--><br />
</translate><br />
<br />
;[http://developer.kde.org/language-bindings/ruby/kde3tutorial/index.html <translate><!--T:230--><br />
KDE Ruby Korundum tutorial</translate>]<br />
:<translate><!--T:231--><br />
A ruby version of Antonio Larrosa Jim&eacute;nez's KDE tutorial by Richard Dale. See the [[Development/Languages/Ruby|Ruby Developers Corner]] for Qt tutorials and other info.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Qt4_Ruby_Tutorial|<translate><!--T:232--><br />
Qt4 Ruby Tutorial</translate>]]<br />
:<translate><!--T:233--><br />
Nokia's fabulous introductory tutorial to Qt, translated to Ruby.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Plasma/RubyApplet|<translate><!--T:234--><br />
Creating a Plasma Widget in Ruby</translate>]]<br />
:<translate><!--T:235--><br />
Tutorial that shows how to create your first Plasma Applet using the Ruby language.</translate><br />
;[[Special:myLanguage/Development/Tutorials/Developing_Qt4_Applications_using_Qt_Designer_and_Ruby_on_Kubuntu|<translate><!--T:236--><br />
Developing Qt4 Applications using Qt Designer and Ruby on Kubuntu</translate>]]<br />
:<translate><!--T:237--><br />
Tutorial that shows how to design a simple User Interface in Qt Designer and then use the resulting widget in a Qt Ruby application we build from scratch.</translate><br />
;[[Special:myLanguage/Development/Languages/Ruby/Ruby-Qt/KDE_Book|<translate><!--T:238--><br />
Ruby-Qt/KDE Book]]<br />
:There is also an approach to create an Ruby-Qt/KDE Book under a free license. The content will be created in this wiki.<br />
<br />
=== Shell === <!--T:239--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Shell_Scripting_with_KDE_Dialogs|<translate><!--T:240--><br />
Shell Scripting with KDE dialogs</translate>]] ([http://developer.kde.org/documentation/tutorials/kdialog/t1.html <translate><!--T:241--><br />
Original Link</translate>]) <br />
:<translate><!--T:242--><br />
Tutorial by [mailto:bradh@frogmouth.net Brad Hards] that describes how to use KDE dialogs in shell scripts with kdialog. It is presented as an example based tutorial.<br />
<br />
== Graphics Programming == <!--T:243--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Graphics/Performance|<translate><!--T:244--><br />
QPainter Perfomance</translate>]]<br />
:<translate><!--T:245--><br />
Hints on avoiding common mistakes leading to poor performance when using QPainter<br />
<br />
== Using the KDE Games Libraries == <!--T:246--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Games/KStandardGameAction|<translate> <!--T:247--><br />
KStandardGameAction</translate>]]<br />
:<translate><!--T:248--><br />
Using libkdegames to make your game fit the kdegames standard</translate><br />
;[[Special:myLanguage/Development/Tutorials/Games/Highscores| <translate><!--T:249--><br />
Highscores</translate>]]<br />
:<translate><!--T:250--><br />
Implementing a simple highscore table into your game</translate><br />
;[[Special:myLanguage/Development/Tutorials/Games/Theme Selector|<translate> <!--T:251--><br />
Theme Selector</translate>]]<br />
:<translate><!--T:252--><br />
Using the libkdegames theme selection dialog</translate><br />
;[[Special:myLanguage/Development/Tutorials/Games/Palapeli Patterns|<translate> <!--T:253--><br />
Palapeli Slicers</translate>]]<br />
:<translate><!--T:254--><br />
Creating a slicer plugin for Palapeli<br />
<br />
=== KGLEngine === <!--T:255--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Games/kglengine/kglengine-simpleBox|<translate> <!--T:256--><br />
Installation and your first KGLItem</translate>]]<br />
:<translate><!--T:257--><br />
start your first kglengine application</translate><br />
;[[Special:myLanguage/Development/Tutorials/Games/KGLEngine2d| kglpong]]<br />
:<translate><!--T:258--><br />
Now use our knowledge to make a pong</translate><br />
<br />
== Using the KDE PIM Libraries ==<br />
<br />
;[[Special:myLanguage/Development/Tutorials/PIM/ical|<translate> <!--T:259--><br />
iCalendar functionality</translate>]]<br />
:<translate><!--T:260--><br />
Using kcal to manage iCalendar files</translate><br />
<br />
<translate>== Other tutorials == <!--T:261--><br />
<br />
=== 2D Plotting (KPlotWidget) === <!--T:262--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/KPlotWidget|<translate><!--T:263--><br />
Using the KDE data-plotting widget</translate>]]<br />
:<translate><!--T:264--><br />
This tutorial introduces KPlotWidget, which is used for 2-D data plotting. It includes information on simple usage of the widget (including adding and modifying data sets, and customizing the plot axes and labels), and advanced customization (including extending the widget through sub-classing).<br />
<br />
=== Spelling and Grammar Checking (Sonnet) === <!--T:265--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Sonnet/SonnetTutorial|<translate><!--T:266--><br />
Adding spell-checking or grammar-checking to KDE applications</translate>]]<br />
:<translate><!--T:267--><br />
This tutorial introduces Sonnet and how one may use it to add language correction to your KDE application. Sonnet's auxiliary features shall be described in a separate tutorial.<br />
<br />
=== Pixmap cache (KPixmapCache) === <!--T:268--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/KPixmapCache|<translate><!--T:269--><br />
Using the KDE pixmap cache</translate>]]<br />
:<translate><!--T:270--><br />
This tutorial shows how to use KPixmapCache to cache e.g. pixmaps generated from SVGs or some data.<br />
<br />
=== Using MarbleWidget (Marble) === <!--T:271--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/MarbleWidget|<translate><!--T:272--><br />
Using MarbleWidget</translate>]]<br />
:<translate><!--T:273--><br />
This short tutorial describes how to use the MarbleWidget in your project<br />
<br />
=== Using local SCM for KDE development === <!--T:274--><br />
</translate><br />
;[[Special:myLanguage/Development/Git|<translate><!--T:275--><br />
Using Git to develop for KDE</translate>]]<br />
:<translate><!--T:276--><br />
Here you find how to use Git to develop for KDE<br />
<br />
=== Kwin effect tutorial (blog) === <!--T:277--><br />
<br />
<!--T:278--><br />
;[http://blog.martin-graesslin.com/blog/?p=258 blog by Martin Graesslin]<br />
:This tutorial guides you through the development of a simple KWin effect<br />
<br />
=== Implementing KSysGuard sensors and adding them === <!--T:279--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/Sensors|<translate><!--T:280--><br />
Sensors Tutorial</translate>]]<br />
:<translate><!--T:281--><br />
This tutorial shows how to write and KSysGuard sensor and connect it to the systray. </translate><br />
Runners<br />
<br />
<translate><br />
=== Porting an application from KSystemTrayIcon to KStatusNotifierItem === <!--T:282--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/PortToKStatusNotifierItem|<translate><!--T:283--><br />
Porting from KSystemTrayIcon to KStatusNotifierItem</translate>]]<br />
:<translate><!--T:284--><br />
This tutorials shows how to port an application using KSystemTrayIcon to KStatusNotifierItem<br />
<br />
=== Using the KDE Wallet API for safe storage === <!--T:285--><br />
</translate><br />
<br />
;[[Special:myLanguage/Development/Tutorials/KWallet|<translate><!--T:286--><br />
KWallet</translate>]]<br />
:<translate><!--T:287--><br />
"Brief introduction to the KWallet API which can be used for storing all kinds of sensitive information."<br />
<br />
===How to edit a wiki with Libmediawiki === <!--T:288--><br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/Libmediawiki|<translate><!--T:289--><br />
Libmediawiki</translate>]]<br />
:<translate><!--T:290--><br />
This tutorial present how to edit a wiki with Libmediawiki.<br />
<br />
== KDE2 and KDE3 Materials == <!--T:291--><br />
</translate><br />
;[[Special:myLanguage/Development/Tutorials/KWallet|<translate><!--T:292--><br />
KWallet]]</translate><br />
;[[Special:myLanguage/Development/Tutorials/KDE4 Porting Guide|<translate><!--T:293--><br />
Porting Your Application from KDE 3 to KDE 4</translate>]]<br />
:<translate><!--T:294--><br />
These tutorials cover topics related to the migration from KDE 3 to KDE 4.</translate><br />
;[[Special:myLanguage/Development/Tutorials/KDE3|<translate><!--T:295--><br />
KDE3 Tutorials</translate>]]<br />
:<translate><!--T:296--><br />
These tutorials cover topics related to KDE3.</translate><br />
;[[Special:myLanguage/Development/Tutorials/KDE2|<translate><!--T:297--><br />
KDE2 Tutorials</translate>]]<br />
:<translate><!--T:298--><br />
These tutorials cover topics related to KDE2.<br />
<br />
<!--T:299--><br />
[[Category:KDE4]]<br />
[[Category:Tutorials]]<br />
</translate></div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Accessibility/Screen_Reader_Setup&diff=69101Development/Tutorials/Accessibility/Screen Reader Setup2012-02-19T17:36:26Z<p>Frederik.gladhorn: /* How to test at-spi2 with Qt */</p>
<hr />
<div>= Screen Readers =<br />
At the time of writing KDE is not fully accessible to screen readers. While there is good progress, for now it is recommended to use a Gnome desktop and run KDE applications integrated there.<br />
Gnome comes with Orca as screen reader, so much of this page will be dealing with how to set up KDE applications to be read by Orca.<br />
<br />
== QAccessible ==<br />
<br />
[http://doc.qt.nokia.com/4.7/accessible.html QAccessible] is the Qt Accessible framework. Each Qt/KDE application supports QAccessible out of the box.<br />
<br />
You need to call "export QT_ACCESSIBILITY=1" before you start the application that should be made accessible. Once the application is started and QT_ACCESSIBILITY set, then the application will load all installed accessibility-plugins (such as the Qt AT-SPI and KAccessible plugins) to provide accessibility-services.<br />
<br />
== Qt AT-SPI ==<br />
<br />
[http://gitorious.org/qt-at-spi qt-at-spi] is a QAccessibleBridgePlugin that bridges the QAccessible API’s to the AT-SPI 2 protocol enabling Qt applications to be used with Orca, Accerciser, and GOK.<br />
<br />
For a brief overview of how atk/at-spi accessibility works on linux platforms, take a look at [http://a11y.org/atspi http://a11y.org/atspi].<br />
<br />
=== Setup a test environment ===<br />
In order to set up a test environment to help improve qt-at-spi (or at-spi itself) You'll need a few things. Orca can be installed from your distribution, as can accerciser, however accerciser will need to be run in a particular way to work with at-spi2 as I'll mention later. You'll also need at-spi2-core and at-spi2-atk to test gtk applications. You'll also need pyatspi2. The simplest way to get these is to clone them from the following git urls:<br />
<br />
git://git.gnome.org/at-spi2-core<br />
git://git.gnome.org/at-spi2-atk<br />
git://git.gnome.org/pyatspi2<br />
<br />
Then proceed to build them by running <br />
<br />
./autogen.sh --disable-relocate<br />
make<br />
make install <br />
(or sudo make install if your user doesn't have write privileges to /usr/local)<br />
<br />
=== How to test at-spi2 with gtk ===<br />
Once these are installed, you can then test at-spi2 by running gcalctool with a few environment variables set. As mentioned on the [http://a11y.org/dbus at-spi dbus site] under "Instructions for Testing" you'll need some environment variables set. <br />
<br />
To switch to AT-SPI 2, you should set two gconf variables:<br />
gconftool-2 --set /desktop/gnome/interface/at-spi-dbus --type bool true<br />
gconftool-2 --set /desktop/gnome/interface/at-spi-corba --type bool false<br />
<br />
<br />
I use a file called ~/.a11ybashrc with the following contents:<br />
<br />
export GTK_PATH=/usr/local/lib/gtk-2.0/<br />
export PYTHONPATH=/usr/local/lib/python2.6/site-packages/<br />
export QT_ACCESSIBILITY=1<br />
export GTK_MODULES=gail:atk-bridge<br />
<br />
then I just source ~/.a11ybashrc to set up my shell for testing accessibility.<br />
<br />
Then to test just run gcalctool with gcalctool & from that shell. You should see at-spi2-registryd in your process table once gcalctool has started. If not you are likely still using at-spi instead of at-spi2. You can use d-feet or qdbusviewer, or just qdbus to inspect the dbus interface of the registry and the accessible methods of the application at this point. You should also be able to run orca and hear the text of the calculator tool at this point.<br />
<br />
=== How to test at-spi2 with Qt ===<br />
Once you have a gtk app running correctly with orca and/or accerciser you are ready to try qt-at-spi. In order to do so, just clone the repo from <br />
git://gitorious.org/qt-at-spi/qt-at-spi.git<br />
Then run<br />
qmake<br />
make<br />
make install<br />
<br />
Note that some distributions still have the Qt 3 qmake in which case you might need to use qmake-qt4.<br />
<br />
There is a handy calculator in qt-at-spi under the test folder that can be used to test qt's at-spi plugin with. Make sure QT_ACCESSIBILITY is set in your environment and run<br />
test/test<br />
from the source folder of qt-at-spi. You should see some console message about the bridge initializing. You'll also see the calculator's dbus path in the org.a11y.atspi.Registry GetChildren output.<br />
<br />
== KAccessible ==<br />
<br />
[http://websvn.kde.org/trunk/KDE/kdeaccessibility/kaccessible/ kaccessible] implements a QAccessibleBridgePlugin to provide accessibility services like focus tracking and a screenreader.<br />
<br />
Once you called "export QT_ACCESSIBILITY=1" and then started the application that should be made accessible the kaccessible icon should display in the icon system tray. Once the kaccessible bridge was loaded it will register a dbus service.<br />
<br />
This kaccessible dbus service is used by kmagnifier and the KWin's zooming plugin to enable focus tracking in a application.<br />
<br />
You can enable the screenreader (that uses speech dispatcher for text-to-speech atm) by 1. starting speech.dispatcher with "/etc/init.d/speech-dispatcher start" and 2. right-clicking the icon system tray and have "enable screenreader" checked.<br />
<br />
<br />
<br />
== Yet another set of instructions for the same ==<br />
<br />
1 Get Orca to work in general - just grab the gnome-orca package that should <br />
be in pretty much any distro and try it with some gtk app. Test that it reacts <br />
to focus changes.<br />
2 Make sure it's using dbus. That means having libatspi 2.0 (package name may <br />
vary, see also the settings here: <br />
http://labs.qt.nokia.com/2011/08/23/accessibility-on-linux/)<br />
3 Have Qt 4.8 and the qt-at-spi bridge.<br />
4 export QT_ACCESSIBILITY=1 (this is needed for Qt 4, fixed in Qt 5)<br />
5 Run the KDE/Qt application you want to test with the Qt version for which <br />
you have the bridge installed. (This works even with Qt built separately in <br />
the home directory and the bridge installed there.)</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Accessibility/Screen_Reader_Setup&diff=69099Development/Tutorials/Accessibility/Screen Reader Setup2012-02-19T16:38:45Z<p>Frederik.gladhorn: /* How to test at-spi2 with Qt */</p>
<hr />
<div>= Screen Readers =<br />
At the time of writing KDE is not fully accessible to screen readers. While there is good progress, for now it is recommended to use a Gnome desktop and run KDE applications integrated there.<br />
Gnome comes with Orca as screen reader, so much of this page will be dealing with how to set up KDE applications to be read by Orca.<br />
<br />
== QAccessible ==<br />
<br />
[http://doc.qt.nokia.com/4.7/accessible.html QAccessible] is the Qt Accessible framework. Each Qt/KDE application supports QAccessible out of the box.<br />
<br />
You need to call "export QT_ACCESSIBILITY=1" before you start the application that should be made accessible. Once the application is started and QT_ACCESSIBILITY set, then the application will load all installed accessibility-plugins (such as the Qt AT-SPI and KAccessible plugins) to provide accessibility-services.<br />
<br />
== Qt AT-SPI ==<br />
<br />
[http://gitorious.org/qt-at-spi qt-at-spi] is a QAccessibleBridgePlugin that bridges the QAccessible API’s to the AT-SPI 2 protocol enabling Qt applications to be used with Orca, Accerciser, and GOK.<br />
<br />
For a brief overview of how atk/at-spi accessibility works on linux platforms, take a look at [http://a11y.org/atspi http://a11y.org/atspi].<br />
<br />
=== Setup a test environment ===<br />
In order to set up a test environment to help improve qt-at-spi (or at-spi itself) You'll need a few things. Orca can be installed from your distribution, as can accerciser, however accerciser will need to be run in a particular way to work with at-spi2 as I'll mention later. You'll also need at-spi2-core and at-spi2-atk to test gtk applications. You'll also need pyatspi2. The simplest way to get these is to clone them from the following git urls:<br />
<br />
git://git.gnome.org/at-spi2-core<br />
git://git.gnome.org/at-spi2-atk<br />
git://git.gnome.org/pyatspi2<br />
<br />
Then proceed to build them by running <br />
<br />
./autogen.sh --disable-relocate<br />
make<br />
make install <br />
(or sudo make install if your user doesn't have write privileges to /usr/local)<br />
<br />
=== How to test at-spi2 with gtk ===<br />
Once these are installed, you can then test at-spi2 by running gcalctool with a few environment variables set. As mentioned on the [http://a11y.org/dbus at-spi dbus site] under "Instructions for Testing" you'll need some environment variables set. <br />
<br />
To switch to AT-SPI 2, you should set two gconf variables:<br />
gconftool-2 --set /desktop/gnome/interface/at-spi-dbus --type bool true<br />
gconftool-2 --set /desktop/gnome/interface/at-spi-corba --type bool false<br />
<br />
<br />
I use a file called ~/.a11ybashrc with the following contents:<br />
<br />
export GTK_PATH=/usr/local/lib/gtk-2.0/<br />
export PYTHONPATH=/usr/local/lib/python2.6/site-packages/<br />
export QT_ACCESSIBILITY=1<br />
export GTK_MODULES=gail:atk-bridge<br />
<br />
then I just source ~/.a11ybashrc to set up my shell for testing accessibility.<br />
<br />
Then to test just run gcalctool with gcalctool & from that shell. You should see at-spi2-registryd in your process table once gcalctool has started. If not you are likely still using at-spi instead of at-spi2. You can use d-feet or qdbusviewer, or just qdbus to inspect the dbus interface of the registry and the accessible methods of the application at this point. You should also be able to run orca and hear the text of the calculator tool at this point.<br />
<br />
=== How to test at-spi2 with Qt ===<br />
Once you have a gtk app running correctly with orca and/or accerciser you are ready to try qt-at-spi. In order to do so, just clone the repo from <br />
git://gitorious.org/qt-at-spi/qt-at-spi.git<br />
Then run<br />
qmake<br />
make<br />
make install<br />
<br />
There is a handy calculator in qt-at-spi under the test folder that can be used to test qt's at-spi plugin with. Make sure QT_ACCESSIBILITY is set in your environment and run<br />
test/test<br />
from the source folder of qt-at-spi. You should see some console message about the bridge initializing. You'll also see the calculator's dbus path in the org.a11y.atspi.Registry GetChildren output.<br />
<br />
== KAccessible ==<br />
<br />
[http://websvn.kde.org/trunk/KDE/kdeaccessibility/kaccessible/ kaccessible] implements a QAccessibleBridgePlugin to provide accessibility services like focus tracking and a screenreader.<br />
<br />
Once you called "export QT_ACCESSIBILITY=1" and then started the application that should be made accessible the kaccessible icon should display in the icon system tray. Once the kaccessible bridge was loaded it will register a dbus service.<br />
<br />
This kaccessible dbus service is used by kmagnifier and the KWin's zooming plugin to enable focus tracking in a application.<br />
<br />
You can enable the screenreader (that uses speech dispatcher for text-to-speech atm) by 1. starting speech.dispatcher with "/etc/init.d/speech-dispatcher start" and 2. right-clicking the icon system tray and have "enable screenreader" checked.<br />
<br />
<br />
<br />
== Yet another set of instructions for the same ==<br />
<br />
1 Get Orca to work in general - just grab the gnome-orca package that should <br />
be in pretty much any distro and try it with some gtk app. Test that it reacts <br />
to focus changes.<br />
2 Make sure it's using dbus. That means having libatspi 2.0 (package name may <br />
vary, see also the settings here: <br />
http://labs.qt.nokia.com/2011/08/23/accessibility-on-linux/)<br />
3 Have Qt 4.8 and the qt-at-spi bridge.<br />
4 export QT_ACCESSIBILITY=1 (this is needed for Qt 4, fixed in Qt 5)<br />
5 Run the KDE/Qt application you want to test with the Qt version for which <br />
you have the bridge installed. (This works even with Qt built separately in <br />
the home directory and the bridge installed there.)</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Accessibility&diff=68310Development/Tutorials/Accessibility2012-01-21T00:52:43Z<p>Frederik.gladhorn: /* Screen Reader */</p>
<hr />
<div>= Introduction =<br />
Below is a list of tutorials for KDE accessibility improvements.<br />
<br />
== Screen Reader ==<br />
;[http://userbase.kde.org/Accessibility Accessibility Documentation for Users on userbase.kde.org]<br />
:''Explains how to get started with screen readers as a user.''<br />
<br />
;[[Development/Tutorials/Accessibility/Checklist|Accessibility Checklist]]<br />
:''What to look for in your application to make it accessible for as many people as possible.''<br />
<br />
;[[Development/Tutorials/Accessibility/Screen_Reader_Setup|Screen Reader]]<br />
:''This tutorial will explain some details about using screen readers with KDE applications.''<br />
A screen reader is an application that uses speech synthesis to allow users with visual impairments to use a computer.<br />
<br />
== Jovie ==<br />
[http://websvn.kde.org/trunk/KDE/kdeaccessibility/jovie/ Jovie] is a subsystem within the KDE desktop for conversion of text to audible speech.<br />
<br />
;[[Development/Tutorials/Text-To-Speech|Text-To-Speech]]<br />
:''How to utilize Jovie text-to-speech service in your application.''<br />
<br />
<br />
== Simon ==<br />
<br />
[http://simon-listens.org/ Simon] is an open-source speech recognition program and replaces the mouse and keyboard.</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Accessibility&diff=68309Development/Tutorials/Accessibility2012-01-21T00:45:49Z<p>Frederik.gladhorn: /* Screen Reader */</p>
<hr />
<div>= Introduction =<br />
Below is a list of tutorials for KDE accessibility improvements.<br />
<br />
== Screen Reader ==<br />
;[http://userbase.kde.org/Accessibility|Accessibility Documentation for Users on userbase.kde.org]<br />
:''Explains how to get started with screen readers as a user.''<br />
<br />
;[[Development/Tutorials/Accessibility/Checklist|Accessibility Checklist]]<br />
:''What to look for in your application to make it accessible for as many people as possible.''<br />
<br />
;[[Development/Tutorials/Accessibility/Screen_Reader_Setup|Screen Reader]]<br />
:''This tutorial will explain some details about using screen readers with KDE applications.''<br />
A screen reader is an application that uses speech synthesis to allow users with visual impairments to use a computer.<br />
<br />
== Jovie ==<br />
[http://websvn.kde.org/trunk/KDE/kdeaccessibility/jovie/ Jovie] is a subsystem within the KDE desktop for conversion of text to audible speech.<br />
<br />
;[[Development/Tutorials/Text-To-Speech|Text-To-Speech]]<br />
:''How to utilize Jovie text-to-speech service in your application.''<br />
<br />
<br />
== Simon ==<br />
<br />
[http://simon-listens.org/ Simon] is an open-source speech recognition program and replaces the mouse and keyboard.</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Accessibility&diff=68308Development/Tutorials/Accessibility2012-01-21T00:45:28Z<p>Frederik.gladhorn: /* Screen Reader */</p>
<hr />
<div>= Introduction =<br />
Below is a list of tutorials for KDE accessibility improvements.<br />
<br />
== Screen Reader ==<br />
;[http://userbase.kde.org/Accessibility|Accessibility Documentation for Users]<br />
:''Explains how to get started with screen readers as a user.''<br />
<br />
;[[Development/Tutorials/Accessibility/Checklist|Accessibility Checklist]]<br />
:''What to look for in your application to make it accessible for as many people as possible.''<br />
<br />
;[[Development/Tutorials/Accessibility/Screen_Reader_Setup|Screen Reader]]<br />
:''This tutorial will explain some details about using screen readers with KDE applications.''<br />
A screen reader is an application that uses speech synthesis to allow users with visual impairments to use a computer.<br />
<br />
== Jovie ==<br />
[http://websvn.kde.org/trunk/KDE/kdeaccessibility/jovie/ Jovie] is a subsystem within the KDE desktop for conversion of text to audible speech.<br />
<br />
;[[Development/Tutorials/Text-To-Speech|Text-To-Speech]]<br />
:''How to utilize Jovie text-to-speech service in your application.''<br />
<br />
<br />
== Simon ==<br />
<br />
[http://simon-listens.org/ Simon] is an open-source speech recognition program and replaces the mouse and keyboard.</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Accessibility&diff=68307Development/Tutorials/Accessibility2012-01-21T00:38:28Z<p>Frederik.gladhorn: </p>
<hr />
<div>= Introduction =<br />
Below is a list of tutorials for KDE accessibility improvements.<br />
<br />
== Screen Reader ==<br />
<br />
;[[Development/Tutorials/Accessibility|Accessibility Overview]]<br />
:''A list of accessibility tutorials and general information.''<br />
<br />
;[[Development/Tutorials/Accessibility/Checklist|Accessibility Checklist]]<br />
:''What to look for in your application to make it accessible for as many people as possible.''<br />
<br />
;[[Development/Tutorials/Accessibility/Screen_Reader_Setup|Screen Reader]]<br />
:''This tutorial will explain some details about using screen readers with KDE applications.''<br />
A screen reader is an application that uses speech synthesis to allow users with visual impairments to use a computer.<br />
<br />
== Jovie ==<br />
[http://websvn.kde.org/trunk/KDE/kdeaccessibility/jovie/ Jovie] is a subsystem within the KDE desktop for conversion of text to audible speech.<br />
<br />
;[[Development/Tutorials/Text-To-Speech|Text-To-Speech]]<br />
:''How to utilize Jovie text-to-speech service in your application.''<br />
<br />
<br />
== Simon ==<br />
<br />
[http://simon-listens.org/ Simon] is an open-source speech recognition program and replaces the mouse and keyboard.</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Accessibility/Checklist&diff=68306Development/Tutorials/Accessibility/Checklist2012-01-21T00:34:52Z<p>Frederik.gladhorn: /* Complex Widgets */</p>
<hr />
<div>= Introduction =<br />
<br />
== Fonts and Colors ==<br />
Many users have some deficiencies when it comes to seeing. This doesn't always mean that they are blind. For some people it is enough when fonts are clear and the color scheme can be adjusted.<br />
This is something every application should do in any case, so here is the list:<br />
* Follow the user interface guidelines! This will get you quite far.<br />
* Check that '''color scheme''' changes apply<br />
** Try switching to a dark color scheme and see that your application is still usable<br />
* Test changing the '''font''' size<br />
** Switch to different fonts and see that they apply<br />
** Increase the font size and make sure that the application layout still works<br />
<br />
== Keyboard ==<br />
When you have problems seeing, the mouse is quite hard to use. The keyboard is a lot more reliable. Therefor it is important that applications can be used with the keyboard. For some users, using a mouse is difficult because of motor skill issues.<br />
Making applications keyboard accessible benefits everyone, since it allows us to use shortcuts to use the applications more efficiently.<br />
<br />
* Try to operate your application with the TAB key<br />
** Make sure that the tab order is correct (or fix it in Qt Designer or the code)<br />
* Start your application and do a common task without using the mouse<br />
** Note where you had trouble and think about possible improvements in the UI or keyboard shortcuts that are missing<br />
<br />
== Screen Reader ==<br />
<br />
As a sighted person you will probably never fully understand how users use screen readers. You will most likely not become proficient and efficient in their use. Nonetheless there is a lot you can help to make applications accessible to screen reader users. We refer to screen readers and other assistive technology often as AT.<br />
<br />
;[[Development/Tutorials/Accessibility/Screen_Reader_Setup|Setup Screen Readers with KDE]]<br />
:Gives detailed setup instructions for screen readers.<br />
<br />
=== Testing ===<br />
This section gives a quick intro what to look for when testing an application with a screen reader.<br />
<br />
<br />
Once you have an application running with the screen reader:<br />
Make sure Orca says something intelligible for all elements. When it reads a <br />
gui element it should say the label and type, eg: "File, Menu" or "OK, <br />
Button".<br />
When you have a button that does not have a label, maybe because it shows a <br />
picture only, that's something to fix. Try navigating the more troublesome <br />
elements - comboboxes and lists and such. Trees need a bit of love in the <br />
bridge still.<br />
<br />
=== Fixing missing information ===<br />
Once you found a bug it's usually quite easy to fix. This section explains how to go about improving applications.<br />
<br />
For many things there are usually easy fixes involving no advanced programming skills but just fixing some details.<br />
<br />
For this tutorial we assume that you are dealing with a QWidget that is seen by the AT but does for example give not enough information.<br />
<br />
There are two important properties that every QWidget has: an "Accessible Name" and an "Accessible Description".<br />
The name is short, for example the label on a button. It should always <br />
be short. The description on the other hand is the more verbose "this button <br />
does foo and then bar". Qt will try hard to return something for the name. In case of a button, usually the text on the button is returned. But if your button has text that makes only sense when seeing the arrangement of buttons, or only has an image as label, you need to help the AT read the button.<br />
If you don't, it will only say the type of the widget, "Button" is not a very helpful information.<br />
<br />
==== Fixing Accessible Name and Description ====<br />
Fire up Qt designer if the app uses .ui files. You'll find the properties and <br />
can type the name/description right in. After saving the file, rebuild and install the application. You are done, submit a patch to fix the ui file.<br />
<br />
If the widget is created in the code, just need to find where.<br />
Once you found the widget, usually where it's created, add some code to it:<br />
button->setAccessibleName(i18n("Open"));<br />
button->setAccessibleDescription(i18n("Opens a file dialog to select a new foo"));<br />
Send your patch.<br />
<br />
Sometimes you also want to override the label for a different reason. One of my test apps was the calculator example from Qt. It has a memory recall button labelled "MR". Orca will insist on this being the "Mister" button, unless told otherwise.<br />
<br />
==== Complex Widgets ====<br />
For some widgets the above is not enough. You will have to create QAccessibleInterfaces for widgets that you create yourself.<br />
For example Kate has an interface for its text editing area.<br />
Sometimes you need to inherit QAccessibleTextInterface or QAccessibleValueInterface in order to make the widgets properly accessible.<br />
Refer to the Qt documentation how to do this.<br />
<br />
==== QGraphicsView ====<br />
Currently there is no support for accessibility in QGraphicsView.<br />
<br />
==== Qt Quick (QML) ====<br />
For Qt Quick with Qt 4.x there is no solution for accessibility.<br />
For Qt 5, refer to the documentation on how to create accessible QML applications. The concepts are generally the same as for QWidget based applications.</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Accessibility/Checklist&diff=68305Development/Tutorials/Accessibility/Checklist2012-01-21T00:32:41Z<p>Frederik.gladhorn: /* Fixing Accessible Name and Description */</p>
<hr />
<div>= Introduction =<br />
<br />
== Fonts and Colors ==<br />
Many users have some deficiencies when it comes to seeing. This doesn't always mean that they are blind. For some people it is enough when fonts are clear and the color scheme can be adjusted.<br />
This is something every application should do in any case, so here is the list:<br />
* Follow the user interface guidelines! This will get you quite far.<br />
* Check that '''color scheme''' changes apply<br />
** Try switching to a dark color scheme and see that your application is still usable<br />
* Test changing the '''font''' size<br />
** Switch to different fonts and see that they apply<br />
** Increase the font size and make sure that the application layout still works<br />
<br />
== Keyboard ==<br />
When you have problems seeing, the mouse is quite hard to use. The keyboard is a lot more reliable. Therefor it is important that applications can be used with the keyboard. For some users, using a mouse is difficult because of motor skill issues.<br />
Making applications keyboard accessible benefits everyone, since it allows us to use shortcuts to use the applications more efficiently.<br />
<br />
* Try to operate your application with the TAB key<br />
** Make sure that the tab order is correct (or fix it in Qt Designer or the code)<br />
* Start your application and do a common task without using the mouse<br />
** Note where you had trouble and think about possible improvements in the UI or keyboard shortcuts that are missing<br />
<br />
== Screen Reader ==<br />
<br />
As a sighted person you will probably never fully understand how users use screen readers. You will most likely not become proficient and efficient in their use. Nonetheless there is a lot you can help to make applications accessible to screen reader users. We refer to screen readers and other assistive technology often as AT.<br />
<br />
;[[Development/Tutorials/Accessibility/Screen_Reader_Setup|Setup Screen Readers with KDE]]<br />
:Gives detailed setup instructions for screen readers.<br />
<br />
=== Testing ===<br />
This section gives a quick intro what to look for when testing an application with a screen reader.<br />
<br />
<br />
Once you have an application running with the screen reader:<br />
Make sure Orca says something intelligible for all elements. When it reads a <br />
gui element it should say the label and type, eg: "File, Menu" or "OK, <br />
Button".<br />
When you have a button that does not have a label, maybe because it shows a <br />
picture only, that's something to fix. Try navigating the more troublesome <br />
elements - comboboxes and lists and such. Trees need a bit of love in the <br />
bridge still.<br />
<br />
=== Fixing missing information ===<br />
Once you found a bug it's usually quite easy to fix. This section explains how to go about improving applications.<br />
<br />
For many things there are usually easy fixes involving no advanced programming skills but just fixing some details.<br />
<br />
For this tutorial we assume that you are dealing with a QWidget that is seen by the AT but does for example give not enough information.<br />
<br />
There are two important properties that every QWidget has: an "Accessible Name" and an "Accessible Description".<br />
The name is short, for example the label on a button. It should always <br />
be short. The description on the other hand is the more verbose "this button <br />
does foo and then bar". Qt will try hard to return something for the name. In case of a button, usually the text on the button is returned. But if your button has text that makes only sense when seeing the arrangement of buttons, or only has an image as label, you need to help the AT read the button.<br />
If you don't, it will only say the type of the widget, "Button" is not a very helpful information.<br />
<br />
==== Fixing Accessible Name and Description ====<br />
Fire up Qt designer if the app uses .ui files. You'll find the properties and <br />
can type the name/description right in. After saving the file, rebuild and install the application. You are done, submit a patch to fix the ui file.<br />
<br />
If the widget is created in the code, just need to find where.<br />
Once you found the widget, usually where it's created, add some code to it:<br />
button->setAccessibleName(i18n("Open"));<br />
button->setAccessibleDescription(i18n("Opens a file dialog to select a new foo"));<br />
Send your patch.<br />
<br />
Sometimes you also want to override the label for a different reason. One of my test apps was the calculator example from Qt. It has a memory recall button labelled "MR". Orca will insist on this being the "Mister" button, unless told otherwise.<br />
<br />
==== Complex Widgets ====<br />
For some widgets the above is not enough. You will have to create QAccessibleInterfaces for widgets that you create yourself.<br />
For example Kate has an interface for its text editing area.<br />
Sometimes you need to inherit QAccessibleTextInterface or QAccessibleValueInterface in order to make the widgets properly accessible.<br />
Refer to the Qt documentation how to do this.</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Accessibility/Checklist&diff=68304Development/Tutorials/Accessibility/Checklist2012-01-21T00:29:31Z<p>Frederik.gladhorn: /* Screen Reader */</p>
<hr />
<div>= Introduction =<br />
<br />
== Fonts and Colors ==<br />
Many users have some deficiencies when it comes to seeing. This doesn't always mean that they are blind. For some people it is enough when fonts are clear and the color scheme can be adjusted.<br />
This is something every application should do in any case, so here is the list:<br />
* Follow the user interface guidelines! This will get you quite far.<br />
* Check that '''color scheme''' changes apply<br />
** Try switching to a dark color scheme and see that your application is still usable<br />
* Test changing the '''font''' size<br />
** Switch to different fonts and see that they apply<br />
** Increase the font size and make sure that the application layout still works<br />
<br />
== Keyboard ==<br />
When you have problems seeing, the mouse is quite hard to use. The keyboard is a lot more reliable. Therefor it is important that applications can be used with the keyboard. For some users, using a mouse is difficult because of motor skill issues.<br />
Making applications keyboard accessible benefits everyone, since it allows us to use shortcuts to use the applications more efficiently.<br />
<br />
* Try to operate your application with the TAB key<br />
** Make sure that the tab order is correct (or fix it in Qt Designer or the code)<br />
* Start your application and do a common task without using the mouse<br />
** Note where you had trouble and think about possible improvements in the UI or keyboard shortcuts that are missing<br />
<br />
== Screen Reader ==<br />
<br />
As a sighted person you will probably never fully understand how users use screen readers. You will most likely not become proficient and efficient in their use. Nonetheless there is a lot you can help to make applications accessible to screen reader users. We refer to screen readers and other assistive technology often as AT.<br />
<br />
;[[Development/Tutorials/Accessibility/Screen_Reader_Setup|Setup Screen Readers with KDE]]<br />
:Gives detailed setup instructions for screen readers.<br />
<br />
=== Testing ===<br />
This section gives a quick intro what to look for when testing an application with a screen reader.<br />
<br />
<br />
Once you have an application running with the screen reader:<br />
Make sure Orca says something intelligible for all elements. When it reads a <br />
gui element it should say the label and type, eg: "File, Menu" or "OK, <br />
Button".<br />
When you have a button that does not have a label, maybe because it shows a <br />
picture only, that's something to fix. Try navigating the more troublesome <br />
elements - comboboxes and lists and such. Trees need a bit of love in the <br />
bridge still.<br />
<br />
=== Fixing missing information ===<br />
Once you found a bug it's usually quite easy to fix. This section explains how to go about improving applications.<br />
<br />
For many things there are usually easy fixes involving no advanced programming skills but just fixing some details.<br />
<br />
For this tutorial we assume that you are dealing with a QWidget that is seen by the AT but does for example give not enough information.<br />
<br />
There are two important properties that every QWidget has: an "Accessible Name" and an "Accessible Description".<br />
The name is short, for example the label on a button. It should always <br />
be short. The description on the other hand is the more verbose "this button <br />
does foo and then bar". Qt will try hard to return something for the name. In case of a button, usually the text on the button is returned. But if your button has text that makes only sense when seeing the arrangement of buttons, or only has an image as label, you need to help the AT read the button.<br />
If you don't, it will only say the type of the widget, "Button" is not a very helpful information.<br />
<br />
==== Fixing Accessible Name and Description ====<br />
Fire up Qt designer if the app uses .ui files. You'll find the properties and <br />
can type the name/description right in. After saving the file, rebuild and install the application. You are done, submit a patch to fix the ui file.<br />
<br />
If the widget is created in the code, just need to find where.<br />
Once you found the widget, usually where it's created, add some code to it:<br />
button->setAccessibleName(i18n("Open"));<br />
button->setAccessibleDescription(i18n("Opens a file dialog to select a new foo"));<br />
Send your patch.<br />
<br />
Sometimes you also want to override the label for a different reason. One of my test apps was the calculator example from Qt. It has a memory recall button labelled "MR". Orca will insist on this being the "Mister" button, unless told otherwise.</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Accessibility/Screen_Reader_Setup&diff=68303Development/Tutorials/Accessibility/Screen Reader Setup2012-01-21T00:19:17Z<p>Frederik.gladhorn: /* QAccessible */</p>
<hr />
<div>= Screen Readers =<br />
At the time of writing KDE is not fully accessible to screen readers. While there is good progress, for now it is recommended to use a Gnome desktop and run KDE applications integrated there.<br />
Gnome comes with Orca as screen reader, so much of this page will be dealing with how to set up KDE applications to be read by Orca.<br />
<br />
== QAccessible ==<br />
<br />
[http://doc.qt.nokia.com/4.7/accessible.html QAccessible] is the Qt Accessible framework. Each Qt/KDE application supports QAccessible out of the box.<br />
<br />
You need to call "export QT_ACCESSIBILITY=1" before you start the application that should be made accessible. Once the application is started and QT_ACCESSIBILITY set, then the application will load all installed accessibility-plugins (such as the Qt AT-SPI and KAccessible plugins) to provide accessibility-services.<br />
<br />
== Qt AT-SPI ==<br />
<br />
[http://gitorious.org/qt-at-spi qt-at-spi] is a QAccessibleBridgePlugin that bridges the QAccessible API’s to the AT-SPI 2 protocol enabling Qt applications to be used with Orca, Accerciser, and GOK.<br />
<br />
For a brief overview of how atk/at-spi accessibility works on linux platforms, take a look at [http://a11y.org/atspi http://a11y.org/atspi].<br />
<br />
=== Setup a test environment ===<br />
In order to set up a test environment to help improve qt-at-spi (or at-spi itself) You'll need a few things. Orca can be installed from your distribution, as can accerciser, however accerciser will need to be run in a particular way to work with at-spi2 as I'll mention later. You'll also need at-spi2-core and at-spi2-atk to test gtk applications. You'll also need pyatspi2. The simplest way to get these is to clone them from the following git urls:<br />
<br />
git://git.gnome.org/at-spi2-core<br />
git://git.gnome.org/at-spi2-atk<br />
git://git.gnome.org/pyatspi2<br />
<br />
Then proceed to build them by running <br />
<br />
./autogen.sh --disable-relocate<br />
make<br />
make install <br />
(or sudo make install if your user doesn't have write privileges to /usr/local)<br />
<br />
=== How to test at-spi2 with gtk ===<br />
Once these are installed, you can then test at-spi2 by running gcalctool with a few environment variables set. As mentioned on the [http://a11y.org/dbus at-spi dbus site] under "Instructions for Testing" you'll need some environment variables set. <br />
<br />
To switch to AT-SPI 2, you should set two gconf variables:<br />
gconftool-2 --set /desktop/gnome/interface/at-spi-dbus --type bool true<br />
gconftool-2 --set /desktop/gnome/interface/at-spi-corba --type bool false<br />
<br />
<br />
I use a file called ~/.a11ybashrc with the following contents:<br />
<br />
export GTK_PATH=/usr/local/lib/gtk-2.0/<br />
export PYTHONPATH=/usr/local/lib/python2.6/site-packages/<br />
export QT_ACCESSIBILITY=1<br />
export GTK_MODULES=gail:atk-bridge<br />
<br />
then I just source ~/.a11ybashrc to set up my shell for testing accessibility.<br />
<br />
Then to test just run gcalctool with gcalctool & from that shell. You should see at-spi2-registryd in your process table once gcalctool has started. If not you are likely still using at-spi instead of at-spi2. You can use d-feet or qdbusviewer, or just qdbus to inspect the dbus interface of the registry and the accessible methods of the application at this point. You should also be able to run orca and hear the text of the calculator tool at this point.<br />
<br />
=== How to test at-spi2 with Qt ===<br />
Once you have a gtk app running correctly with orca and/or accerciser you are ready to try qt-at-spi. In order to do so, just clone the repo from <br />
git://gitorious.org/qt-at-spi<br />
Then run<br />
qmake<br />
make<br />
make install<br />
<br />
There is a handy calculator in qt-at-spi under the test folder that can be used to test qt's at-spi plugin with. Make sure QT_ACCESSIBILITY is set in your environment and run<br />
test/test<br />
from the source folder of qt-at-spi. You should see some console message about the bridge initializing. You'll also see the calculator's dbus path in the org.a11y.atspi.Registry GetChildren output.<br />
<br />
== KAccessible ==<br />
<br />
[http://websvn.kde.org/trunk/KDE/kdeaccessibility/kaccessible/ kaccessible] implements a QAccessibleBridgePlugin to provide accessibility services like focus tracking and a screenreader.<br />
<br />
Once you called "export QT_ACCESSIBILITY=1" and then started the application that should be made accessible the kaccessible icon should display in the icon system tray. Once the kaccessible bridge was loaded it will register a dbus service.<br />
<br />
This kaccessible dbus service is used by kmagnifier and the KWin's zooming plugin to enable focus tracking in a application.<br />
<br />
You can enable the screenreader (that uses speech dispatcher for text-to-speech atm) by 1. starting speech.dispatcher with "/etc/init.d/speech-dispatcher start" and 2. right-clicking the icon system tray and have "enable screenreader" checked.<br />
<br />
<br />
<br />
== Yet another set of instructions for the same ==<br />
<br />
1 Get Orca to work in general - just grab the gnome-orca package that should <br />
be in pretty much any distro and try it with some gtk app. Test that it reacts <br />
to focus changes.<br />
2 Make sure it's using dbus. That means having libatspi 2.0 (package name may <br />
vary, see also the settings here: <br />
http://labs.qt.nokia.com/2011/08/23/accessibility-on-linux/)<br />
3 Have Qt 4.8 and the qt-at-spi bridge.<br />
4 export QT_ACCESSIBILITY=1 (this is needed for Qt 4, fixed in Qt 5)<br />
5 Run the KDE/Qt application you want to test with the Qt version for which <br />
you have the bridge installed. (This works even with Qt built separately in <br />
the home directory and the bridge installed there.)</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Accessibility/Screen_Reader_Setup&diff=68302Development/Tutorials/Accessibility/Screen Reader Setup2012-01-21T00:17:20Z<p>Frederik.gladhorn: /* KAccessible */</p>
<hr />
<div>== QAccessible ==<br />
<br />
[http://doc.qt.nokia.com/4.7/accessible.html QAccessible] is the Qt Accessible framework. Each Qt/KDE application supports QAccessible out of the box.<br />
<br />
You need to call "export QT_ACCESSIBILITY=1" before you start the application that should be made accessible. Once the application is started and QT_ACCESSIBILITY set, then the application will load all installed accessibility-plugins (such as the Qt AT-SPI and KAccessible plugins) to provide accessibility-services.<br />
<br />
== Qt AT-SPI ==<br />
<br />
[http://gitorious.org/qt-at-spi qt-at-spi] is a QAccessibleBridgePlugin that bridges the QAccessible API’s to the AT-SPI 2 protocol enabling Qt applications to be used with Orca, Accerciser, and GOK.<br />
<br />
For a brief overview of how atk/at-spi accessibility works on linux platforms, take a look at [http://a11y.org/atspi http://a11y.org/atspi].<br />
<br />
=== Setup a test environment ===<br />
In order to set up a test environment to help improve qt-at-spi (or at-spi itself) You'll need a few things. Orca can be installed from your distribution, as can accerciser, however accerciser will need to be run in a particular way to work with at-spi2 as I'll mention later. You'll also need at-spi2-core and at-spi2-atk to test gtk applications. You'll also need pyatspi2. The simplest way to get these is to clone them from the following git urls:<br />
<br />
git://git.gnome.org/at-spi2-core<br />
git://git.gnome.org/at-spi2-atk<br />
git://git.gnome.org/pyatspi2<br />
<br />
Then proceed to build them by running <br />
<br />
./autogen.sh --disable-relocate<br />
make<br />
make install <br />
(or sudo make install if your user doesn't have write privileges to /usr/local)<br />
<br />
=== How to test at-spi2 with gtk ===<br />
Once these are installed, you can then test at-spi2 by running gcalctool with a few environment variables set. As mentioned on the [http://a11y.org/dbus at-spi dbus site] under "Instructions for Testing" you'll need some environment variables set. <br />
<br />
To switch to AT-SPI 2, you should set two gconf variables:<br />
gconftool-2 --set /desktop/gnome/interface/at-spi-dbus --type bool true<br />
gconftool-2 --set /desktop/gnome/interface/at-spi-corba --type bool false<br />
<br />
<br />
I use a file called ~/.a11ybashrc with the following contents:<br />
<br />
export GTK_PATH=/usr/local/lib/gtk-2.0/<br />
export PYTHONPATH=/usr/local/lib/python2.6/site-packages/<br />
export QT_ACCESSIBILITY=1<br />
export GTK_MODULES=gail:atk-bridge<br />
<br />
then I just source ~/.a11ybashrc to set up my shell for testing accessibility.<br />
<br />
Then to test just run gcalctool with gcalctool & from that shell. You should see at-spi2-registryd in your process table once gcalctool has started. If not you are likely still using at-spi instead of at-spi2. You can use d-feet or qdbusviewer, or just qdbus to inspect the dbus interface of the registry and the accessible methods of the application at this point. You should also be able to run orca and hear the text of the calculator tool at this point.<br />
<br />
=== How to test at-spi2 with Qt ===<br />
Once you have a gtk app running correctly with orca and/or accerciser you are ready to try qt-at-spi. In order to do so, just clone the repo from <br />
git://gitorious.org/qt-at-spi<br />
Then run<br />
qmake<br />
make<br />
make install<br />
<br />
There is a handy calculator in qt-at-spi under the test folder that can be used to test qt's at-spi plugin with. Make sure QT_ACCESSIBILITY is set in your environment and run<br />
test/test<br />
from the source folder of qt-at-spi. You should see some console message about the bridge initializing. You'll also see the calculator's dbus path in the org.a11y.atspi.Registry GetChildren output.<br />
<br />
== KAccessible ==<br />
<br />
[http://websvn.kde.org/trunk/KDE/kdeaccessibility/kaccessible/ kaccessible] implements a QAccessibleBridgePlugin to provide accessibility services like focus tracking and a screenreader.<br />
<br />
Once you called "export QT_ACCESSIBILITY=1" and then started the application that should be made accessible the kaccessible icon should display in the icon system tray. Once the kaccessible bridge was loaded it will register a dbus service.<br />
<br />
This kaccessible dbus service is used by kmagnifier and the KWin's zooming plugin to enable focus tracking in a application.<br />
<br />
You can enable the screenreader (that uses speech dispatcher for text-to-speech atm) by 1. starting speech.dispatcher with "/etc/init.d/speech-dispatcher start" and 2. right-clicking the icon system tray and have "enable screenreader" checked.<br />
<br />
<br />
<br />
== Yet another set of instructions for the same ==<br />
<br />
1 Get Orca to work in general - just grab the gnome-orca package that should <br />
be in pretty much any distro and try it with some gtk app. Test that it reacts <br />
to focus changes.<br />
2 Make sure it's using dbus. That means having libatspi 2.0 (package name may <br />
vary, see also the settings here: <br />
http://labs.qt.nokia.com/2011/08/23/accessibility-on-linux/)<br />
3 Have Qt 4.8 and the qt-at-spi bridge.<br />
4 export QT_ACCESSIBILITY=1 (this is needed for Qt 4, fixed in Qt 5)<br />
5 Run the KDE/Qt application you want to test with the Qt version for which <br />
you have the bridge installed. (This works even with Qt built separately in <br />
the home directory and the bridge installed there.)</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Accessibility/Checklist&diff=68301Development/Tutorials/Accessibility/Checklist2012-01-21T00:11:49Z<p>Frederik.gladhorn: /* Screen Reader */</p>
<hr />
<div>= Introduction =<br />
<br />
== Fonts and Colors ==<br />
Many users have some deficiencies when it comes to seeing. This doesn't always mean that they are blind. For some people it is enough when fonts are clear and the color scheme can be adjusted.<br />
This is something every application should do in any case, so here is the list:<br />
* Follow the user interface guidelines! This will get you quite far.<br />
* Check that '''color scheme''' changes apply<br />
** Try switching to a dark color scheme and see that your application is still usable<br />
* Test changing the '''font''' size<br />
** Switch to different fonts and see that they apply<br />
** Increase the font size and make sure that the application layout still works<br />
<br />
== Keyboard ==<br />
When you have problems seeing, the mouse is quite hard to use. The keyboard is a lot more reliable. Therefor it is important that applications can be used with the keyboard. For some users, using a mouse is difficult because of motor skill issues.<br />
Making applications keyboard accessible benefits everyone, since it allows us to use shortcuts to use the applications more efficiently.<br />
<br />
* Try to operate your application with the TAB key<br />
** Make sure that the tab order is correct (or fix it in Qt Designer or the code)<br />
* Start your application and do a common task without using the mouse<br />
** Note where you had trouble and think about possible improvements in the UI or keyboard shortcuts that are missing<br />
<br />
== Screen Reader ==<br />
<br />
;[[Development/Tutorials/Accessibility/Screen_Reader_Setup|Setup Screen Readers with KDE]]<br />
:Gives detailed setup instructions for screen readers.<br />
<br />
More advanced would be the usage of assistive technology. I think we need to <br />
learn from people with actual need of these technologies in order to get a <br />
good grasp of the issues. I can try to write down some issues I know about.<br />
<br />
1 Get Orca to work in general - just grab the gnome-orca package that should <br />
be in pretty much any distro and try it with some gtk app. Test that it reacts <br />
to focus changes.<br />
2 Make sure it's using dbus. That means having libatspi 2.0 (package name may <br />
vary, see also the settings here: <br />
http://labs.qt.nokia.com/2011/08/23/accessibility-on-linux/)<br />
3 Have Qt 4.8 and the qt-at-spi bridge.<br />
4 export QT_ACCESSIBILITY=1 (this is needed for Qt 4, fixed in Qt 5)<br />
5 Run the KDE/Qt application you want to test with the Qt version for which <br />
you have the bridge installed. (This works even with Qt built separately in <br />
the home directory and the bridge installed there.)<br />
<br />
Once you have an application running with the screen reader:<br />
Make sure Orca says something intelligible for all elements. When it reads a <br />
gui element it should say the label and type, eg: "File, Menu" or "OK, <br />
Button".<br />
When you have a button that does not have a label, maybe because it shows a <br />
picture only, that's something to fix. Try navigating the more troublesome <br />
elements - comboboxes and lists and such. Trees need a bit of love in the <br />
bridge still.<br />
<br />
Apart from the bridge probably still lacking features and having a few bugs, I <br />
think now it's mostly time to fix up the small missing bits.<br />
<br />
Fixing stuff: the good news is that it's really easy usually, no heavy C++ <br />
skills required.<br />
There are two important properties that every QWidget has: AccessibleName and <br />
AccessibleDescription.<br />
The name is a short label, for example the label on a button. It should always <br />
be short. The description on the other hand is the more verbose "this button <br />
does foo and then bar".<br />
Fire up Qt designer if the app uses .ui files, you'll find the properties and <br />
can type the name/description right in.<br />
If the widget is managed in code, just find the right place and set them:<br />
button->setAccessibleName(i18n("Open"));<br />
button->setAccessibleDescription(i18n("Opens a file dialog to select a new <br />
foo"));<br />
<br />
Sometimes you also want to override the label for a different reason. One of my <br />
test apps was the calculator example from Qt. It has a memory recall button <br />
labelled "MR". Orca will insist on this being the "Mister" button, unless told <br />
otherwise. Of course I couldn't fix that one since it made me smile every <br />
single time ;)<br />
<br />
I bet there's more, but this is a beginning. In the end it would be great to <br />
build up a bit of a community that starts using these applications on a <br />
regular basis.<br />
<br />
Should we gather these and extend them on some wiki? I'd love to have some <br />
accessibility testing going on some time in the future.</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Accessibility/Checklist&diff=68300Development/Tutorials/Accessibility/Checklist2012-01-21T00:07:26Z<p>Frederik.gladhorn: /* Fonts and Colors */</p>
<hr />
<div>= Introduction =<br />
<br />
== Fonts and Colors ==<br />
Many users have some deficiencies when it comes to seeing. This doesn't always mean that they are blind. For some people it is enough when fonts are clear and the color scheme can be adjusted.<br />
This is something every application should do in any case, so here is the list:<br />
* Follow the user interface guidelines! This will get you quite far.<br />
* Check that '''color scheme''' changes apply<br />
** Try switching to a dark color scheme and see that your application is still usable<br />
* Test changing the '''font''' size<br />
** Switch to different fonts and see that they apply<br />
** Increase the font size and make sure that the application layout still works<br />
<br />
== Keyboard ==<br />
When you have problems seeing, the mouse is quite hard to use. The keyboard is a lot more reliable. Therefor it is important that applications can be used with the keyboard. For some users, using a mouse is difficult because of motor skill issues.<br />
Making applications keyboard accessible benefits everyone, since it allows us to use shortcuts to use the applications more efficiently.<br />
<br />
* Try to operate your application with the TAB key<br />
** Make sure that the tab order is correct (or fix it in Qt Designer or the code)<br />
* Start your application and do a common task without using the mouse<br />
** Note where you had trouble and think about possible improvements in the UI or keyboard shortcuts that are missing<br />
<br />
== Screen Reader ==<br />
More advanced would be the usage of assistive technology. I think we need to <br />
learn from people with actual need of these technologies in order to get a <br />
good grasp of the issues. I can try to write down some issues I know about.<br />
<br />
1 Get Orca to work in general - just grab the gnome-orca package that should <br />
be in pretty much any distro and try it with some gtk app. Test that it reacts <br />
to focus changes.<br />
2 Make sure it's using dbus. That means having libatspi 2.0 (package name may <br />
vary, see also the settings here: <br />
http://labs.qt.nokia.com/2011/08/23/accessibility-on-linux/)<br />
3 Have Qt 4.8 and the qt-at-spi bridge.<br />
4 export QT_ACCESSIBILITY=1 (this is needed for Qt 4, fixed in Qt 5)<br />
5 Run the KDE/Qt application you want to test with the Qt version for which <br />
you have the bridge installed. (This works even with Qt built separately in <br />
the home directory and the bridge installed there.)<br />
<br />
Once you have an application running with the screen reader:<br />
Make sure Orca says something intelligible for all elements. When it reads a <br />
gui element it should say the label and type, eg: "File, Menu" or "OK, <br />
Button".<br />
When you have a button that does not have a label, maybe because it shows a <br />
picture only, that's something to fix. Try navigating the more troublesome <br />
elements - comboboxes and lists and such. Trees need a bit of love in the <br />
bridge still.<br />
<br />
Apart from the bridge probably still lacking features and having a few bugs, I <br />
think now it's mostly time to fix up the small missing bits.<br />
<br />
Fixing stuff: the good news is that it's really easy usually, no heavy C++ <br />
skills required.<br />
There are two important properties that every QWidget has: AccessibleName and <br />
AccessibleDescription.<br />
The name is a short label, for example the label on a button. It should always <br />
be short. The description on the other hand is the more verbose "this button <br />
does foo and then bar".<br />
Fire up Qt designer if the app uses .ui files, you'll find the properties and <br />
can type the name/description right in.<br />
If the widget is managed in code, just find the right place and set them:<br />
button->setAccessibleName(i18n("Open"));<br />
button->setAccessibleDescription(i18n("Opens a file dialog to select a new <br />
foo"));<br />
<br />
Sometimes you also want to override the label for a different reason. One of my <br />
test apps was the calculator example from Qt. It has a memory recall button <br />
labelled "MR". Orca will insist on this being the "Mister" button, unless told <br />
otherwise. Of course I couldn't fix that one since it made me smile every <br />
single time ;)<br />
<br />
I bet there's more, but this is a beginning. In the end it would be great to <br />
build up a bit of a community that starts using these applications on a <br />
regular basis.<br />
<br />
Should we gather these and extend them on some wiki? I'd love to have some <br />
accessibility testing going on some time in the future.</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Accessibility/Checklist&diff=68299Development/Tutorials/Accessibility/Checklist2012-01-20T23:55:05Z<p>Frederik.gladhorn: Created page with "= Introduction = == Fonts and Colors == There are some general points that I'll rehash without thinking about it too much, these should be known: - The usual HIG apply: make su..."</p>
<hr />
<div>= Introduction =<br />
<br />
== Fonts and Colors ==<br />
There are some general points that I'll rehash without thinking about it too <br />
much, these should be known:<br />
- The usual HIG apply: make sure that the application is keyboard accessible <br />
(try seeing if the tab key gets you through all widgets in a sensible order) <br />
is quite important.<br />
(Using a mouse is more troublesome when you can't see where you're pointing <br />
than moving a focus for example, different kinds of motorical issues etc...)<br />
<br />
- Check for color scheme compliance and font settings taking effect.<br />
<br />
== Screen Reader ==<br />
More advanced would be the usage of assistive technology. I think we need to <br />
learn from people with actual need of these technologies in order to get a <br />
good grasp of the issues. I can try to write down some issues I know about.<br />
<br />
1 Get Orca to work in general - just grab the gnome-orca package that should <br />
be in pretty much any distro and try it with some gtk app. Test that it reacts <br />
to focus changes.<br />
2 Make sure it's using dbus. That means having libatspi 2.0 (package name may <br />
vary, see also the settings here: <br />
http://labs.qt.nokia.com/2011/08/23/accessibility-on-linux/)<br />
3 Have Qt 4.8 and the qt-at-spi bridge.<br />
4 export QT_ACCESSIBILITY=1 (this is needed for Qt 4, fixed in Qt 5)<br />
5 Run the KDE/Qt application you want to test with the Qt version for which <br />
you have the bridge installed. (This works even with Qt built separately in <br />
the home directory and the bridge installed there.)<br />
<br />
Once you have an application running with the screen reader:<br />
Make sure Orca says something intelligible for all elements. When it reads a <br />
gui element it should say the label and type, eg: "File, Menu" or "OK, <br />
Button".<br />
When you have a button that does not have a label, maybe because it shows a <br />
picture only, that's something to fix. Try navigating the more troublesome <br />
elements - comboboxes and lists and such. Trees need a bit of love in the <br />
bridge still.<br />
<br />
Apart from the bridge probably still lacking features and having a few bugs, I <br />
think now it's mostly time to fix up the small missing bits.<br />
<br />
Fixing stuff: the good news is that it's really easy usually, no heavy C++ <br />
skills required.<br />
There are two important properties that every QWidget has: AccessibleName and <br />
AccessibleDescription.<br />
The name is a short label, for example the label on a button. It should always <br />
be short. The description on the other hand is the more verbose "this button <br />
does foo and then bar".<br />
Fire up Qt designer if the app uses .ui files, you'll find the properties and <br />
can type the name/description right in.<br />
If the widget is managed in code, just find the right place and set them:<br />
button->setAccessibleName(i18n("Open"));<br />
button->setAccessibleDescription(i18n("Opens a file dialog to select a new <br />
foo"));<br />
<br />
Sometimes you also want to override the label for a different reason. One of my <br />
test apps was the calculator example from Qt. It has a memory recall button <br />
labelled "MR". Orca will insist on this being the "Mister" button, unless told <br />
otherwise. Of course I couldn't fix that one since it made me smile every <br />
single time ;)<br />
<br />
I bet there's more, but this is a beginning. In the end it would be great to <br />
build up a bit of a community that starts using these applications on a <br />
regular basis.<br />
<br />
Should we gather these and extend them on some wiki? I'd love to have some <br />
accessibility testing going on some time in the future.</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Accessibility&diff=68298Development/Tutorials/Accessibility2012-01-20T23:51:39Z<p>Frederik.gladhorn: </p>
<hr />
<div>== Screen Reader ==<br />
<br />
A screen reader is an application that uses speech synthesis to allow users with visual impairments to use a computer.<br />
<br />
Read the [[Development/Tutorials/Accessibility/Screen_Reader_Setup|Screen Reader Setup page]] for more details.<br />
<br />
<br />
== Jovie ==<br />
<br />
[http://websvn.kde.org/trunk/KDE/kdeaccessibility/jovie/ Jovie] is a subsystem within the KDE desktop for conversion of text to audible speech.<br />
<br />
See also the [http://techbase.kde.org/Development/Tutorials/Text-To-Speech Text-To-Speech tutorial].<br />
<br />
== Simon ==<br />
<br />
[http://simon-listens.org/ Simon] is an open-source speech recognition program and replaces the mouse and keyboard.</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Accessibility/Screen_Reader_Setup&diff=68297Development/Tutorials/Accessibility/Screen Reader Setup2012-01-20T23:48:49Z<p>Frederik.gladhorn: Created page with "== QAccessible == [http://doc.qt.nokia.com/4.7/accessible.html QAccessible] is the Qt Accessible framework. Each Qt/KDE application supports QAccessible out of the box. You nee..."</p>
<hr />
<div>== QAccessible ==<br />
<br />
[http://doc.qt.nokia.com/4.7/accessible.html QAccessible] is the Qt Accessible framework. Each Qt/KDE application supports QAccessible out of the box.<br />
<br />
You need to call "export QT_ACCESSIBILITY=1" before you start the application that should be made accessible. Once the application is started and QT_ACCESSIBILITY set, then the application will load all installed accessibility-plugins (such as the Qt AT-SPI and KAccessible plugins) to provide accessibility-services.<br />
<br />
== Qt AT-SPI ==<br />
<br />
[http://gitorious.org/qt-at-spi qt-at-spi] is a QAccessibleBridgePlugin that bridges the QAccessible API’s to the AT-SPI 2 protocol enabling Qt applications to be used with Orca, Accerciser, and GOK.<br />
<br />
For a brief overview of how atk/at-spi accessibility works on linux platforms, take a look at [http://a11y.org/atspi http://a11y.org/atspi].<br />
<br />
=== Setup a test environment ===<br />
In order to set up a test environment to help improve qt-at-spi (or at-spi itself) You'll need a few things. Orca can be installed from your distribution, as can accerciser, however accerciser will need to be run in a particular way to work with at-spi2 as I'll mention later. You'll also need at-spi2-core and at-spi2-atk to test gtk applications. You'll also need pyatspi2. The simplest way to get these is to clone them from the following git urls:<br />
<br />
git://git.gnome.org/at-spi2-core<br />
git://git.gnome.org/at-spi2-atk<br />
git://git.gnome.org/pyatspi2<br />
<br />
Then proceed to build them by running <br />
<br />
./autogen.sh --disable-relocate<br />
make<br />
make install <br />
(or sudo make install if your user doesn't have write privileges to /usr/local)<br />
<br />
=== How to test at-spi2 with gtk ===<br />
Once these are installed, you can then test at-spi2 by running gcalctool with a few environment variables set. As mentioned on the [http://a11y.org/dbus at-spi dbus site] under "Instructions for Testing" you'll need some environment variables set. <br />
<br />
To switch to AT-SPI 2, you should set two gconf variables:<br />
gconftool-2 --set /desktop/gnome/interface/at-spi-dbus --type bool true<br />
gconftool-2 --set /desktop/gnome/interface/at-spi-corba --type bool false<br />
<br />
<br />
I use a file called ~/.a11ybashrc with the following contents:<br />
<br />
export GTK_PATH=/usr/local/lib/gtk-2.0/<br />
export PYTHONPATH=/usr/local/lib/python2.6/site-packages/<br />
export QT_ACCESSIBILITY=1<br />
export GTK_MODULES=gail:atk-bridge<br />
<br />
then I just source ~/.a11ybashrc to set up my shell for testing accessibility.<br />
<br />
Then to test just run gcalctool with gcalctool & from that shell. You should see at-spi2-registryd in your process table once gcalctool has started. If not you are likely still using at-spi instead of at-spi2. You can use d-feet or qdbusviewer, or just qdbus to inspect the dbus interface of the registry and the accessible methods of the application at this point. You should also be able to run orca and hear the text of the calculator tool at this point.<br />
<br />
=== How to test at-spi2 with Qt ===<br />
Once you have a gtk app running correctly with orca and/or accerciser you are ready to try qt-at-spi. In order to do so, just clone the repo from <br />
git://gitorious.org/qt-at-spi<br />
Then run<br />
qmake<br />
make<br />
make install<br />
<br />
There is a handy calculator in qt-at-spi under the test folder that can be used to test qt's at-spi plugin with. Make sure QT_ACCESSIBILITY is set in your environment and run<br />
test/test<br />
from the source folder of qt-at-spi. You should see some console message about the bridge initializing. You'll also see the calculator's dbus path in the org.a11y.atspi.Registry GetChildren output.<br />
<br />
== KAccessible ==<br />
<br />
[http://websvn.kde.org/trunk/KDE/kdeaccessibility/kaccessible/ kaccessible] implements a QAccessibleBridgePlugin to provide accessibility services like focus tracking and a screenreader.<br />
<br />
Once you called "export QT_ACCESSIBILITY=1" and then started the application that should be made accessible the kaccessible icon should display in the icon system tray. Once the kaccessible bridge was loaded it will register a dbus service.<br />
<br />
This kaccessible dbus service is used by kmagnifier and the KWin's zooming plugin to enable focus tracking in a application.<br />
<br />
You can enable the screenreader (that uses speech dispatcher for text-to-speech atm) by 1. starting speech.dispatcher with "/etc/init.d/speech-dispatcher start" and 2. right-clicking the icon system tray and have "enable screenreader" checked.</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials&diff=68296Development/Tutorials2012-01-20T23:47:58Z<p>Frederik.gladhorn: /* Accessibility */</p>
<hr />
<div>{{Template:I18n/Language Navigation Bar|Development/Tutorials}}<br />
<br />
Tutorials are the fastest way of finding out what KDE will do for you, and how to do it. Here is a list of currently available tutorials '''for KDE4'''. Material for KDE3 and KDE2 is available on the bottom of this page.<br />
<br />
== Basics of KDE 4 Programming ==<br />
Are you interested in writing applications with KDE 4? This tutorial series is aimed at those completely new to KDE programming.<br />
;[[Development/Tutorials/First program|Hello World]]<br />
:''An introduction to the very basics of KDE4 programming''<br />
<br />
;[[Development/Tutorials/Using KXmlGuiWindow|Creating the Main Window]]<br />
:''This tutorial shows you the magic of an application's most important thing: The main window.''<br />
<br />
;[[Development/Tutorials/Using KActions|Using KActions]]<br />
:''How to add actions to the menus and toolbars.'' Based on the MainWindow tutorial.<br />
<br />
;[[Development/Tutorials/Saving and loading|Saving and Loading]]<br />
:''Introduces the KIO library while adding loading and saving support to our application.''<br />
<br />
;[[Development/Tutorials/SqLite|Using SqLite databases and QtSql]]<br />
: integrated databases without the need for a database server<br />
<br />
;[[Development/Tutorials/KCmdLineArgs|Command line arguments]]<br />
:''Adds the ability to specify which file to open from the command line to our text editor.''<br />
<br />
;[[Development/Tutorials/CMake|Introduction to CMake]]<br />
:''How to use the CMake build system used by KDE4.''<br />
<br />
;[[Development/Tutorials/Common Programming Mistakes|Common Programming Mistakes]]<br />
:''Various common mistakes made while developing Qt and KDE applications and how to avoid them.''<br />
<br />
;[[Development/Tutorials/Debugging Linker Errors|Debugging Linker Errors]]<br />
:''How to understand and debug errors from the linker, at compile time.''<br />
<br />
;[[Development/Tutorials/Using Qt Creator|Using Qt Creator to develop your KDE program]]<br />
:''How to use Qt Creator as an [http://en.wikipedia.org/wiki/Integrated_development_environment IDE] to develop KDE programs''<br />
<br />
;[[Development/Tutorials/Creating Libraries|Creating Libraries to share code]]<br />
:''How to add the library to the buildsystem and how to prepare the source code.''<br />
<br />
;[[Development/Tutorials/Session_Management|Session Management]]<br />
:''Make your application aware of X sessions''<br />
<br />
;[[Development/Tutorial/Icons|Icons]]<br />
:''Deliver your application with icons that are automatically installed to the right places''. Based on the [[Development/Tutorials/Using_KActions|Kaction Tutorial]].<br />
<br />
;[[Development/Tutorials/Desktop_File|Desktop File]]<br />
:''Let your application show up in the K menu and in application menus''. Based on the Icons Tutorial.<br />
<br />
== Testing And Debugging ==<br />
<br />
;[[Development/Tutorials/Debugging|Debugging your application]]<br />
:''Tips, tools and techniques to apply when debugging your KDE application''<br />
<br />
;[[Development/Tutorials/Unittests|Writing Unittests for Qt4 and KDE4 with QTestLib]] ([http://developer.kde.org/documentation/tutorials/writingunittests/writingunittests.html Original link])<br />
:''Tutorial by [mailto:bradh@frogmouth.net Brad Hards] that describes how to write unit tests using the QTestLib framework. It is presented as an example based tutorial, and is still under development.''<br />
<br />
;[[Development/Tutorials/Code_Checking|Semi-automatic ways to detect code errors]]<br />
:''Techniques you can use to detect errors in KDE code''<br />
<br />
== Managing Configuration Data With KConfig ==<br />
;[[Development/Tutorials/KConfig|Introduction To KConfig]]<br />
:''An overview of the KConfig classes and how to use them in your application code''<br />
<br />
;[[Development/Tutorials/Using KConfig XT|Using KConfig XT]]<br />
:''Tutorial on how to efficiently use the KConfig XT framework.''<br />
<br />
;[[Development/Tutorials/Updating KConfig Files|Updating KConfig Files]]<br />
:''Tutorial on how to write an update script to keep changes in your application's config file format in sync with the user's already existing config file''<br />
<br />
== Services: Applications and Plugins ==<br />
;[[Development/Tutorials/Services/Introduction|Introduction to the Services Framework]]<br />
:''An overview of the services framework in KDE and what it provides the application developer. Covers the system configuration cache (SyCoCa), the source data files and what the indexed information can be used for.''<br />
<br />
;[[Development/Tutorials/Services/Traders|Finding Services Using Trader Queries]]<br />
:''How to find services, such as plugins or mimetypes, that are indexed in the SyCoCa using Trader Query Syntax''<br />
<br />
;[[Development/Tutorials/Services/Plugins|Creating and Loading Plugins Using KService]]<br />
:''Learn how to define custom plugin types, find installed plugins (including 3rd party plugins) and load them in an easy and portable fashion using KService.''<br />
<br />
== Localization ==<br />
See also [[Localization|Localization portal]].<br />
<br />
;[[Development/Tutorials/Localization/Unicode|Introduction To Unicode]]<br />
:''An introduction to what Unicode is as well as how to handle Unicode data in KDE applications.''<br />
<br />
; [[Development/Tutorials/Localization/i18n|Writing Applications With Localization In Mind]]<br />
:''This tutorial covers what localization is, why it's important and how to ensure your application is ready to be localized. A must read for all application developers.''<br />
<br />
; [[Development/Tutorials/Localization/i18n Mistakes|Avoiding Common Localization Pitfalls]]<br />
:''There are several common mistakes that prevent applications from being properly localized. Find out what they are and how to easily avoid them in this tutorial.''<br />
<br />
; [[Development/Tutorials/Localization/Building KDE's l10n Module|Building KDE's Localization Module]]<br />
:''Building and installing language support from KDE's localization (l10n) module is a good idea for those working on applications in the main KDE repository. Doing so will allow you to test your application in another language and spot problem areas. Learn how to do just that in this tutorial.''<br />
<br />
; [[Development/Tutorials/Localization/i18n Build Systems|Incorporating i18n Into the Build System]]<br />
:''Once your application is ready to be localized, the next step is to ensure that translation files are built automatically and kept up to date. This tutorial covers the necessary CMakeFiles.txt additions as well the process of distributing the resulting message catalogs with your application.''<br />
<br />
; [[Development/Tutorials/Localization/i18n Challenges|Common i18n Challenges and Solutions]]<br />
:''This tutorial covers challenges that you may eventually run into such as translating handbooks and other data that exists outside of the source code, merging and handling obsolete .po files, dealing with freezes, coding in languages other than English and creating independent releases of or moving applications between KDE modules.''<br />
<br />
; [[Development/Tutorials/Localization/i18n_Semantics|Semantic Markup of Messages]]<br />
:''To ensure consistent presentation and more meaningful representations of messages in applications, semantic markup can be applied to messages marked for translation using the KUIT system. This tutorial describes how this system works.''<br />
<br />
; [[Development/Tutorials/Localization/i18n Krazy|Automated i18n Code Checking]]<br />
:''The Krazy code checker scans KDE's code and reports common i18n mistakes.''<br />
<br />
== Documentation ==<br />
<br />
;[[Development/Tutorials/API_Documentation|API Documentation]]<br />
:''This tutorial explains how to document your APIs properly.''<br />
<br />
;[[Development/Tutorials/Man_Pages|Man Pages]]<br />
:''Writing and Generating Reference Manual Pages.''<br />
<br />
;Source Code<br />
: http://gitweb.kde.org<br />
: http://websvn.kde.org<br />
<br />
== Accessibility ==<br />
<br />
;[[Development/Tutorials/Accessibility|Accessibility Overview]]<br />
:''A list of accessibility tutorials and general information.''<br />
<br />
;[[Development/Tutorials/Accessibility/Checklist|Accessibility Checklist]]<br />
:''What to look for in your application to make it accessible for as many people as possible.''<br />
<br />
;[[Development/Tutorials/Accessibility/Screen_Reader_Setup|Screen Reader]]<br />
:''This tutorial will explain some details about using screen readers with KDE applications.''<br />
<br />
;[[Development/Tutorials/Text-To-Speech|Text-To-Speech]]<br />
:''How to utilize Jovie text-to-speech service in your application.''<br />
<br />
== Application Automation and Scripting ==<br />
<br />
=== D-Bus ===<br />
; [[Development/Tutorials/D-Bus/Introduction|Introduction to D-Bus]]<br />
:''A straight-forward introduction to the core concepts in D-Bus from an application developer's perspective, this tutorial covers what D-Bus is and how it can be used by applications.''<br />
; [[Development/Tutorials/D-Bus/Accessing Interfaces|Accessing D-Bus Interfaces]]<br />
:''A step-by-step guide to calling D-Bus methods and connecting to D-Bus signals using QtDBus.''<br />
; [[Development/Tutorials/D-Bus/Intermediate_D-Bus|Intermediate D-Bus]]<br />
:''Tips to make use of QtDBus when faced with problematic real-world interfaces.''<br />
; [[Development/Tutorials/D-Bus/Creating Interfaces|Creating D-Bus Interfaces]]<br />
:''Learn how to expose functionality in your application by creating and using custom D-Bus interfaces. Covers generating the XML descriptions, instantiating interfaces at run time and setting up the build system with CMake.''<br />
; [[Development/Tutorials/D-Bus/CustomTypes|Using Custom Types with D-Bus]]: ''Learn how to use your own types in classes exported on D-Bus. Covers marhaling and unmarshaling of objects, the integration of custom types into XML descriptions and registering the custom types with the Qt Meta Object system.''<br />
; [[Development/Tutorials/D-Bus/Autostart Services|D-Bus Autostart Services]]<br />
:''Turn your application into a D-Bus autostart service with this tutorial. This D-Bus feature, also known as "D-Bus service activation", will ensure that even when your application isn't running that D-Bus calls made to it will work by relying on the D-Bus daemon itself to start your app if and when needed.''<br />
; [[Development/Tutorials/Porting_to_D-Bus|Porting from DCOP to D-Bus]]<br />
: ''Port your applications from DCOP to D-Bus with this handy guide.''<br />
<br />
=== Konqueror ===<br />
; [[Development/Tutorials/Creating Konqueror Service Menus|Creating Konqueror Service Menus]]<br />
:''This tutorial shows you how to create mimetype-specific actions in Konqueror's context menu (aka "servicemenus").''<br />
<br />
=== Kross ===<br />
; [[Development/Tutorials/Kross/Introduction|Introduction to Kross]]<br />
:''An introduction to the Kross Scripting Framework.''<br />
<br />
; [[Development/Tutorials/Kross/Hello_World|Hello World]]<br />
:''A first application with working kross code.''<br />
<br />
; [[Development/Tutorials/Kross/Call_Functions_in_Kross|Calling Functions in Kross]]<br />
:''Simple demonstration of calling scripting functions''<br />
<br />
; [[Development/Tutorials/Kross/Connecting_Signals_and_slots_in_Kross|Connecting Signals and Slots in Kross]]<br />
:''Simple demonstration of connecting object signals with script slots''<br />
<br />
; [[Development/Tutorials/Kross/Scripts-as-Plugins|Scripts as Plugins with Kross]]<br />
:''This tutorial provides a step-by-step introduction how to integrate scripts as plugins into a KDE application.''<br />
<br />
; [[Development/Tutorials/Kross/Script-Actions|Placing script actions in your application menus ]]<br />
:''Simple demonstration on how to extend you application menus to execute script files.''<br />
<br />
; [[Development/Tutorials/Kross/ActionCollections|How to use an ActionCollection ]]<br />
:''A small Tutorial on How to use Kross::ActionCollections.''<br />
{{:KOffice/Plugin Tutorials}}<br />
<br />
=== SuperKaramba ===<br />
; [[Development/Tutorials/SuperKaramba|SuperKaramba Tutorial]]<br />
:''This tutorial provides an overview of SuperKaramba, theme files and scripting with Python, Ruby and JavaScript.''<br />
<br />
=== System Activity ===<br />
<br />
: [[Development/Tutorials/SystemActivity/Scripting|Writing script actions for the process's context menu]]<br />
:''This tutorial shows how to add a context menu action to show custom information about a process.<br />
<br />
=== KWin ===<br />
: [[Development/Tutorials/KWin/Scripting|KWin Scripting Tutorial]]<br />
:''This tutorial shows how to write a useful script for KWin.<br />
<br />
== Plugins and KParts ==<br />
<br />
; [[Development/Tutorials/Using KParts|Using KParts]]:''A kPart is a plugin that you can just load into your application. For example, it is easy to integrate an editor (the katePart) or a console (the konsolePart) into your application's window.''<br />
<br />
; [[Development/Tutorials/Writing kontact plugins|Writing kontact plugins]]:''Kontact plugins are KParts. This tutorial describes how you can write one.''<br />
<br />
; [[Development/Tutorials/Writing Qt Designer Plugins|Writing Qt Designer Plugins]]:''Add your widgets to Qt Designer and thus make them usable in UI files.''<br />
<br />
== Search and Metadata ==<br />
<br />
=== Strigi ===<br />
<br />
; [[Development/Tutorials/Writing file analyzers|Writing file analyzers]]<br />
:''File analyzers extract data from files to display in the file dialogs and file managers. The data gathered this way is also used to search for files. KDE4 allows the use of multiple analyzers per file type. This tutorial describes how you can write new analyzers.''<br />
<br />
=== [http://nepomuk.kde.org Nepomuk] ===<br />
<br />
See [[Development/Tutorials/Metadata/Nepomuk|Nepomuk tutorials]].<br />
<br />
<br />
== Hardware Awareness (Solid) ==<br />
<br />
;[[Development/Tutorials/Solid/Introduction|Introduction to Solid]]<br />
:''An introduction to the Solid effort in general and it library in particular.''<br />
<br />
;[[Development/Tutorials/Solid/Device_Discovery|Listing Devices]]<br />
:''How to use the Solid core library to discover the hardware and interact with the system.''<br />
<br />
;[[Development/Tutorials/Solid/Network_Management|Accessing Network Information]]<br />
:''How to use the Solid system to get information about the network''<br />
<br />
;[[Development/Tutorials/Solid/Device_Actions|Creating a Device Action]]<br />
:''When your application is interested in registering actions with the system for removable hardware''<br />
<br />
== Authorization and Privilege escalation (KAuth) ==<br />
; [[Development/Tutorials/KAuth/KAuth_Basics|KAuth Basics]]<br />
:''An overview of concepts and basic knowledge required to understand and use KAuth effectively''<br />
; [[Development/Tutorials/KAuth/KAuth_Actions|Using KAuth actions in your application]]<br />
:''How to execute KAuth actions in your application, and how to integrate them tightly into your UI''<br />
; [[Development/Tutorials/KAuth/Helper_HowTo|Creating a KAuth helper to perform a privileged action]]<br />
:''You will learn how to use KAuth's helpers and escalation facilities, and how to seamlessly make a privileged and non privileged portion of your application interact''<br />
; [[Development/Tutorials/KAuth/KCM_HowTo|Creating a KCM requiring authorization upon saving]]<br />
:''Learn how to use the high level KCModule API to create KCModules handling authorization, and its UI integration, on their own''<br />
<br />
== Multimedia (Phonon) ==<br />
<br />
;[[Development/Tutorials/Phonon/Introduction|Phonon]]<br />
:''How to start with the multimedia API''<br />
<br />
:''How to compile and use Phonon and its GStreamer backend on Linux using Qt 4.3.x''<br />
::''This article gives you a quick brief of how you can use checkout, compile Phonon and its GStreamer backend on GNU/Linux with just Qt 4.3.x. Towards the end, the article also describes how a developer can make use of Phonon to create simple audio and video players. You can read the article [http://www.vcreatelogic.com/oss/docs/CompilingPhononOnLinux.pdf here]. You can download the editable OpenDocumentText file from [http://www.prashanthudupa.com/phonon/CompilingPhononOnLinux.odt here].''<br />
<br />
;[[Development/Tutorials/Phonon/Backends|Writing Backends]]<br />
:''How to start creating a new backend for the multimedia API''<br />
<br />
;Resources<br />
:''Please have a look at the [http://api.kde.org/kdesupport-api/kdesupport-apidocs/phonon-git/html/ online documentation] for information on the Phonon API. If you prefer using Qt Assistant or Qt Creator you can also use our [http://mts.ms/phonon-4.4.2.qch offline documentation].''<br />
<br />
== Plasma ==<br />
<br />
See [[Development/Tutorials/Plasma|Plasma tutorials]].<br />
<br />
<br />
<br />
== Personal Information Management (Akonadi) ==<br />
<br />
;[[Development/Tutorials/Akonadi/Application|Using Akonadi in Applications]]<br />
:''Displaying and modifying data provided by Akonadi''<br />
<br />
;[[Development/Tutorials/Akonadi/Resources|Developing Akonadi Resources]]<br />
:''Akonadi Resources are agent programs which transport PIM data between Akonadi and a backend (files, servers, etc)''<br />
<br />
;[[Development/Tutorials/Akonadi/SerializerPlugin|Using custom data types with Akonadi]]<br />
:''Akonadi can handle arbitrary data as item payloads through the use of a plugin based serialization framework''<br />
<br />
;[[Development/AkonadiPorting|Porting Applications which use KResource API]]<br />
:''Applications using KDE's now deprecated KResource APIs, e.g. KABC or KCal, need to be ported to use their Akonadi equivalents''<br />
<br />
== Kate / Kwrite ==<br />
<br />
;[[Development/Tutorials/Kate/KTextEditor Plugins|Getting started with KTextEditor plugins]]<br />
:''Creating your first KTextEditor plugin''<br />
<br />
;[[Development/Tutorials/Kate/KTextEditor_Plugins_Advanced|Developing a plugin with configuration dialog]]<br />
:''Adding a configuration dialog to the Time & Date example''<br />
<br />
;[[Development/Tutorials/Kate/KTextEditor_Example|A small Editor]]<br />
:''Create a small application using KTextEditor''<br />
<br />
== KDevelop ==<br />
<br />
;[[Development/KDevelop-PG-Qt_Introduction|KDevelop-PG-Qt Introduction]]<br />
:''Information on the KDevelop parser generator, useful for language plugins.''<br />
<br />
==Printing==<br />
<br />
KDE mostly uses the [http://doc.qt.nokia.com/latest/printing.html Qt Printing infrastructure].<br />
<br />
;[[Development/Tutorials/Printing Hello World|Hello World]]<br />
:''Introduction to the KDE printing system''<br />
<br />
== kioslaves ==<br />
* [[Development/Tutorials/KIO Slaves/Using KIO Slaves in your Program|Using kioslaves in your Program]]<br />
* [[Development/Tutorials/KIO Slaves/Hello World|Creating a Hello-World kioslave]]<br />
<br />
== Collaboration ==<br />
<br />
=== Open Collaboration Services (libattica) ===<br />
<br />
;[[Development/Tutorials/Collaboration/Attica/Introduction|Introduction to Attica]]<br />
:''In this tutorial a simple widget showing information about a Person on the server is created.''<br />
<br />
=== Get Hot New Stuff ===<br />
<br />
;[[Development/Tutorials/Collaboration/HotNewStuff/Introduction|Get Hot New Stuff 3 - Download]] <br />
:''How to use KHotNewStuff3 in your application.''<br><br />
<br />
;[[Development/Tutorials/Collaboration/HotNewStuff/Updates|Get Hot New Stuff 3 - Checking for Updates]] <br />
:''How to check if updates for installed stuff are available without showing the dialog/widget.''<br><br />
<br />
;[[Development/Tutorials/Collaboration/HotNewStuff/Upload|Get Hot New Stuff 3 - Upload]] <br />
:''How to add an upload dialog to your application.''<br><br />
<br />
Old links for KNS2 and KNS1 content:<br><br />
<br />
;[[Development/Tutorials/K Hot New Stuff2|Introduction to Get Hot New Stuff 2]] <br />
:''A short tutorial about how to use KHotNewStuff2 in your application. Deprecated, use version 3'' <br />
;[[Development/Tutorials/Introduction to Get Hot New Stuff|Introduction to Get Hot New Stuff]] <br />
:''An introduction to the developer-friendly network update system that allows KDE applications to fetch new application data at runtime in a user friendly manner.''<br />
<br />
;[[Development/Tutorials/KNewStuffSecure|KNewStuff Secure]] ([http://developer.kde.org/documentation/tutorials/knewstuffsecure/index.html Original Link]) <br />
:''Tutorial showing how to share resources in a secured way (KDE 3.4 and later).'' By András Mantia &lt;amantia@kde.org&gt;.<br />
<br />
== Goya ==<br />
; [[Development/Tutorials/Introduction to Goya usage|Introduction to Goya usage]]<br />
:''An introduction for the Goya subsystem usage, which allows you to easily add widgets to your itemviews and connect their signals to your code, as they were real widgets.''<br />
<br />
; [[Development/Tutorials/Introduction to Goya usage 2|Introduction to Goya usage (part 2)]]<br />
:''The second part of the tutorial, with a slightly more complex example than the first part.''<br />
<br />
== Other programming languages ==<br />
<br />
=== Python ===<br />
<br />
;[http://www.learningpython.com/2008/09/20/an-introduction-to-pyqt/ An Introduction to PyQt]<br />
:''Starting off''<br />
<br />
;[http://lateral.netmanagers.com.ar/stories/BBS47.html PyQt by Example]<br />
:''Another introduction to PyQt''<br />
<br />
;[[Development/Languages/Python/PyKDE_WebKit_Tutorial|PyKDE WebKit Tutorial]]<br />
:''A simple web browser application in PyKDE''<br />
<br />
;[[Development/Tutorials/Python introduction to signals and slots|101 Introduction to signals and slots]]<br />
:''A simple introduction to Qt's signal and slot architecture.''<br />
<br />
;[[Development/Languages/Python/PyKDE_DBus_Tutorial|PyKDE DBus Tutorial]]<br />
:''An introduction to DBus communication using PyKDE''<br />
<br />
;[[Development/Languages/Python/PyKDE_Knotify_Tutorial|PyKDE KNotify Tutorial]]<br />
:''An introduction to Knotify (Notifications and KJobs) using PyKDE''<br />
<br />
=== Ruby ===<br />
<br />
;[http://developer.kde.org/language-bindings/ruby/kde3tutorial/index.html KDE Ruby Korundum tutorial]<br />
:''A ruby version of Antonio Larrosa Jim&eacute;nez's KDE tutorial by Richard Dale. See the [[Development/Languages/Ruby|Ruby Developers Corner]] for Qt tutorials and other info.''<br />
<br />
;[[Development/Tutorials/Qt4_Ruby_Tutorial|Qt4 Ruby Tutorial]]<br />
:''Nokia's fabulous introductory tutorial to Qt, translated to Ruby.''<br />
<br />
;[[Development/Tutorials/Plasma/RubyApplet|Creating a Plasma Widget in Ruby]]<br />
:''Tutorial that shows how to create your first Plasma Applet using the Ruby language.''<br />
<br />
;[[Development/Tutorials/Developing_Qt4_Applications_using_Qt_Designer_and_Ruby_on_Kubuntu|Developing Qt4 Applications using Qt Designer and Ruby on Kubuntu]]<br />
:''Tutorial that shows how to design a simple User Interface in Qt Designer and then use the resulting widget in a Qt Ruby application we build from scratch.''<br />
<br />
;[[Development/Languages/Ruby/Ruby-Qt/KDE_Book|Ruby-Qt/KDE Book]]<br />
:''There is also an approach to create an Ruby-Qt/KDE Book under a free license. The content will be created in this wiki.''<br />
<br />
=== Shell ===<br />
<br />
;[[Development/Tutorials/Shell_Scripting_with_KDE_Dialogs|Shell Scripting with KDE dialogs]] ([http://developer.kde.org/documentation/tutorials/kdialog/t1.html Original Link]) <br />
:''Tutorial by [mailto:bradh@frogmouth.net Brad Hards] that describes how to use KDE dialogs in shell scripts with kdialog. It is presented as an example based tutorial.''<br />
<br />
== Graphics Programming ==<br />
<br />
;[[Development/Tutorials/Graphics/Performance|QPainter Perfomance]]<br />
:''Hints on avoiding common mistakes leading to poor performance when using QPainter''<br />
<br />
== Using the KDE Games Libraries ==<br />
;[[Development/Tutorials/Games/KStandardGameAction| KStandardGameAction]]<br />
:''Using libkdegames to make your game fit the kdegames standard''<br />
;[[Development/Tutorials/Games/Highscores| Highscores]]<br />
:''Implementing a simple highscore table into your game''<br />
;[[Development/Tutorials/Games/Theme Selector| Theme Selector]]<br />
:''Using the libkdegames theme selection dialog''<br />
;[[Development/Tutorials/Games/Palapeli Patterns| Palapeli Slicers]]<br />
:''Creating a slicer plugin for Palapeli''<br />
<br />
=== KGLEngine ===<br />
;[[Development/Tutorials/Games/kglengine/kglengine-simpleBox| installation and your first KGLItem]]<br />
:''start your first kglengine application''<br />
;[[Development/Tutorials/Games/KGLEngine2d| kglpong]]<br />
:''Now use our knowledge to make a pong''<br />
<br />
== Using the KDE PIM Libraries ==<br />
;[[Development/Tutorials/PIM/ical| iCalendar functionality]]<br />
:''Using kcal to manage iCalendar files''<br />
<br />
== Other tutorials ==<br />
<br />
=== 2D Plotting (KPlotWidget) ===<br />
;[[Development/Tutorials/KPlotWidget|Using the KDE data-plotting widget]]<br />
:''This tutorial introduces KPlotWidget, which is used for 2-D data plotting. It includes information on simple usage of the widget (including adding and modifying data sets, and customizing the plot axes and labels), and advanced customization (including extending the widget through sub-classing).''<br />
<br />
=== Spelling and Grammar Checking (Sonnet) ===<br />
;[[Development/Tutorials/Sonnet/SonnetTutorial|Adding spell-checking or grammar-checking to KDE applications]]<br />
:''This tutorial introduces Sonnet and how one may use it to add language correction to your KDE application. Sonnet's auxiliary features shall be described in a separate tutorial.''<br />
<br />
=== Pixmap cache (KPixmapCache) ===<br />
;[[Development/Tutorials/KPixmapCache|Using the KDE pixmap cache]]<br />
:''This tutorial shows how to use KPixmapCache to cache e.g. pixmaps generated from SVGs or some data.''<br />
<br />
=== Using MarbleWidget (Marble) ===<br />
;[[Development/Tutorials/MarbleWidget|Using MarbleWidget]]<br />
:''This short tutorial describes how to use the MarbleWidget in your project''<br />
<br />
=== Using local SCM for KDE development ===<br />
;[[Development/Git|Using Git to develop for KDE]]<br />
:''Here you find how to use Git to develop for KDE''<br />
<br />
=== Kwin effect tutorial (blog) ===<br />
;[http://blog.martin-graesslin.com/blog/?p=258 blog by Martin Graesslin]<br />
:''This tutorial guides you through the development of a simple KWin effect''<br />
<br />
=== Implementing KSysGuard sensors and adding them ===<br />
;[[Development/Tutorials/Sensors]]<br />
:''This tutorial shows how to write and KSysGuard sensor and connect it to the systray.''<br />
Runners<br />
<br />
=== Porting an application from KSystemTrayIcon to KStatusNotifierItem ===<br />
;[[Development/Tutorials/PortToKStatusNotifierItem]]<br />
:''This tutorials shows how to port an application using KSystemTrayIcon to KStatusNotifierItem''<br />
<br />
=== Using the KDE Wallet API for safe storage ===<br />
;[[Development/Tutorials/KWallet]]<br />
:"Brief introduction to the KWallet API which can be used for storing all kinds of sensitive information."<br />
<br />
===How to edit a wiki with Libmediawiki ===<br />
;[[Development/Tutorials/Libmediawiki]]<br />
:''This tutorial present how to edit a wiki with Libmediawiki.''<br />
<br />
== KDE2 and KDE3 Materials ==<br />
;[[Development/Tutorials/KDE4 Porting Guide|Porting Your Application from KDE 3 to KDE 4]]<br />
:''These tutorials cover topics related to the migration from KDE 3 to KDE 4.''<br />
<br />
;[[Development/Tutorials/KDE3|KDE3 Tutorials]]<br />
:''These tutorials cover topics related to KDE3.''<br />
<br />
;[[Development/Tutorials/KDE2|KDE2 Tutorials]]<br />
:''These tutorials cover topics related to KDE2.''<br />
<br />
[[Category:KDE4]]</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Schedules/KDE4/4.8_Feature_Plan&diff=68271Schedules/KDE4/4.8 Feature Plan2012-01-16T16:31:57Z<p>Frederik.gladhorn: /* kdegames */</p>
<hr />
<div>This is a list of planned features for the SC 4.8 release. <br />
<br />
See also: <br />
<br />
*[[Schedules/KDE4/4.8 Release Schedule]] <br />
*[[Schedules/KDE4/4.8 Release Goals]] <br />
*[[Schedules/KDE4/4.7 Feature Plan]] (previous major release)<br />
<br />
<br> Legend: <br />
<br />
*todo =&gt; not started yet <br />
*in-progress =&gt; started, but not completed yet <br />
*done =&gt; completed<br />
<br />
__TOC__ <br />
<br />
<br><br />
<br />
= kdelibs =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureDone|Kate Part|Line modification system|dhaumann@kde.org|Dominik Haumann}}<br />
{{FeatureDone|Kate Part|Modeline Editor|dhaumann@kde.org|Dominik Haumann}}<br />
{{FeatureDone|Kate Part|Reliable code folding|adrian.lungu89@gmail.com|Adrian Lungu}}<br />
{{FeatureDone|Kate Part|Improved vi input mode|svatoslav1@gmail.com|Svyatoslav Kuzmich}}<br />
{{FeatureInProgress|KIO|PreviewJob supports URLs|sebas@kde.org|Sebastian Kügler}}<br />
{{FeatureInProgress|kdeui|KSecretsService API addition|kde@rusu.info|Valentin Rusu}}<br />
{{FeatureInProgress|kdeui/util|Connect KWallet class to KSecretsService client API|kde@rusu.info|Valentin Rusu}}<br />
{{FeatureInProgress|kcookiejar|New domain specific cookie policy based on patch provided in bug#54300|adawit@kde.org|Dawit A.}} <br />
|}<br />
<br><br />
<br />
= kde-runtime =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureInProgress|ksecretsserviced|KSecretsService daemon implementing the freedesktop.org secrets API. KDE applications will want to use the related kdelibs API (see below)|kde@rusu.info|Valentin Rusu}}<br />
<br />
{{FeatureInProgress|DrKonqi|Better duplicate detection|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureInProgress|KIO Thumbnails|webthumbnails plugin|sebas@kde.org|Sebastian Kügler}}<br />
{{FeatureInProgress|DrKonqi|Scripting support|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureInProgress|Plasma|Plasma QML QtComponents|mart@kde.org|Marco Martin}}<br />
|}<br />
<br><br />
<br />
= kde-workspace =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|KWin|Activity switcher|wstephenson@kde.org|Will Stephenson}}<br />
{{FeatureTodo|Plasma|Activity UI improvements|wstephenson@kde.org|Will Stephenson}}<br />
{{FeatureInProgress|KWin|Take over screensaver/locking management from KRunner|alex.merry@kdemail.net|Alex Merry}}<br />
{{FeatureDone|KCM|make mouse cursor size configurable (http://git.reviewboard.kde.org/r/101701/)|SommerLuk@gmail.com|Lukas Sommer}}<br />
{{FeatureDone|powerdevil|Remove Desktop Effects Management|drf@kde.org|Dario Freddi}}<br />
{{FeatureDone|powerdevil|Allow static profiles only|drf@kde.org|Dario Freddi}}<br />
{{FeatureDone|powerdevil|Allow activity interaction|drf@kde.org|Dario Freddi}}<br />
{{FeatureDone|Plasma|Add MPRIS2 support to nowplaying|alex.merry@kdemail.net|Alex Merry}}<br />
{{FeatureInProgress|Plasma|Allow task grouping on the taskbar to work together with kwin window tabbing|akreuzkamp@web.de|Anton Kreuzkamp}}<br />
{{FeatureInProgress|Plasma|Merge the QML version of the device notifier|mart@kde.org|Marco Martin}}<br />
{{FeatureInProgress|Plasma|Merge the QML version of the battery applet|mart@kde.org|Marco Martin}}<br />
{{FeatureDone|KWin|QML based Window switcher (Tabbox)|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureInProgress|KWin|Texture Rectangle ARB support in Shaders|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureInProgress|KWin|No Compositor restart on screen change|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureInProgress|KWin|Initial Wayland support|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureDone|KWin|Support for thumbnails in QML|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureDone|KWin|Add AnimationEffect class|thomas.luebking@gmail.com|Thomas Lübking}}<br />
{{FeatureInProgress|KWin|Option to prefer the mouse position over the focus chain|thomas.luebking@gmail.com|Thomas Lübking}}<br />
{{FeatureDone|KWin|More cleanup in the window rules kcm|thomas.luebking@gmail.com|Thomas Lübking}}<br />
{{FeatureInProgress|KWin|Trade 1 frame lag for deterministic framerate|thomas.luebking@gmail.com|Thomas Lübking}}<br />
{{FeatureInProgress|KWin|Improved resizing of windows with thin or no borders|fredrik@kde.org|Fredrik Höglund}}<br />
{{FeatureInProgress|KWin|Move Workspace's compositing functionality to own class Compositor|a.arlt@stud.uni-heidelberg.de|Arthur Arlt}}<br />
{{FeatureInProgress|KWin|Introduce class DecorationPaintRedirector for decoration handling when Compositing is active|a.arlt@stud.uni-heidelberg.de|Arthur Arlt}}<br />
{{FeatureInProgress|Screenlocker|New Screenlocker and daemon|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureDone|Plasma|Merge IconTask's taskmanager changes|craig@kde.org|Craig Drummond}}<br />
{{FeatureDone|KCM|Allow flag and label in keyboard layout indicator|arysin@gmail.com|Andriy Rysin}}<br />
{{FeatureInProgress|KSplash|QML based ksplash|mart@kde.org|Marco Martin/Ivan Čukić}}<br />
|}<br />
<br><br />
<br />
= kde-baseapps =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureDone|Dolphin|Implement new view-engine for Dolphin 2.0 (see http://ppenz.blogspot.com/2011/08/introducing-dolphin-20.html and http://ppenz.blogspot.com/2012/01/dolphin-20-status-update.html)|peter.penz19@gmail.com|Peter Penz}}<br />
{{FeatureTodo|Dolphin|Implement support for back/forward mouse buttons (Postponed to 4.9)|sebasti@n-doerner.de|Sebastian Dörner}}<br />
{{FeatureDone|Kate|Search & Replace in files plugin|kare.sars@iki.fi|Kåre Särs}}<br />
{{FeatureInProgress|Kate|Make GDB target selection behave like the build plugin |kare.sars@iki.fi|Kåre Särs}}<br />
{{FeatureInProgress|Kate|Add convenience options for remote debugging|kare.sars@iki.fi|Kåre Särs}}<br />
{{FeatureDone|Settings|Improve proxy configuration dialog|adawit@kde.org|Dawit Alemayehu}}<br />
|}<br />
<br><br />
<br />
= kdeedu =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureInProgress|KTouch|New organisation of keyboard and lecture files according to languages|peter.ruethemann@gmail.com|Rüthemann Peter}}<br />
{{FeatureInProgress|KTouch|New organisation of menu system: Training, Statistic, Settings|peter.ruethemann@gmail.com|Rüthemann Peter}}<br />
{{FeatureTodo|KTouch|End of lecture statistics|peter.ruethemann@gmail.com|Rüthemann Peter}}<br />
{{FeatureDone|Rocs|Alignment Actions to minimize crossing graph edges|cola@uni-paderborn.de|Andreas Cord-Landwehr}}<br />
{{FeatureTodo|Rocs|Project Files to combine graphs and algorithms|cola@uni-paderborn.de|Andreas Cord-Landwehr}}<br />
{{FeatureDone|Rocs|Context menu for graph scene|cola@uni-paderborn.de|Andreas Cord-Landwehr}}<br />
{{FeatureDone|Rocs|Resurrect import-/export-features|cola@uni-paderborn.de|Andreas Cord-Landwehr}}<br />
{{FeatureDone|Rocs|User Interface Cleanup|cola@uni-paderborn.de|Andreas Cord-Landwehr}}<br />
{{FeatureDone|Cantor|Add Qalculate backend|matteo@agostinelli.me|Matteo Agostinelli}}<br />
{{FeatureDone|Cantor|Add Scilab backend|filipe@kde.org|Filipe Saraiva}}<br />
{{FeatureDone|Marble|Marble Runner plugins for Parsing files|tgridel@freedotfr|Thibaut Gridel}}<br />
{{FeatureDone|Marble|(GSoC) OSM file rendering|oblaukhov.konstantin@gmail.com|Konstantin Oblaukhov}}<br />
{{FeatureDone|Marble|Marble Graphics Scene (Performance of Vector Drawing)|oblaukhov.konstantin@gmail.com|Konstantin Oblaukhov}}<br />
{{FeatureDone|Marble|Gps Info Plugin|tgridel@freedotfr|Thibaut Gridel}}<br />
{{FeatureDone|Marble|Improve LatLonEdit to allow input as Radian and DM|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureInProgress|Marble|Marble Touch (GSoC, Marble on MeeGo/N9)|earthwings@gentoo.org|Daniel Marth, Dennis Nienhüser}}<br />
{{FeatureDone|Marble|Routing API|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureInProgress|Marble|Adjustable Map Orientation (Rotation in Screen Plane)|bbeschow@cs.tu-berlin.de|Bernhard Beschow}}<br />
{{FeatureDone|Marble|Speedometer Plugin|bbeschow@cs.tu-berlin.de|Bernhard Beschow}}<br />
{{FeatureDone|Marble|Plasma Runner for geo coords and Marble bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureDone|Marble|Make bookmark editor support editing the lonlat coordinates|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureDone|Marble|Fix GeoDataCoordinates parsing from a QString|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureDone|Marble|OsmNominatim improved display|tgridel@freedorfr|Thibaut Gridel}}<br />
{{FeatureTodo|Marble|Create New Marble About Dialog|rahn@kde.org|Torsten Rahn}}<br />
{{FeatureTodo|Marble|Add Float Item Management|rahn@kde.org|Torsten Rahn}}<br />
{{FeatureTodo|Marble|New Search|rahn@kde.org|Torsten Rahn}}<br />
{{FeatureInProgress|Marble|Make API more QML-friendly|bbeschow@cs.tu-berlin.de|Bernhard Beschow}}<br />
{{FeatureDone|KTurtle|Add modulo command|nielsslot@gmaildotcom|Niels Slot}}<br />
{{FeatureDone|KGeography|Merge stuff from the cherry_field branch|aacid@kde.org|Albert Astals Cid}}<br />
|}<br />
<br><br />
<br />
= kdegames=<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureDone|Libkdegames|Improve graphics performance in all games by standardizing on the use of Qt Raster Graphics.|stefan.majewsky@googlemail.com|Stefan Majewsky}}<br />
{{FeatureDone|KSudoku|Add a new generator and solver to KSudoku, based on published algorithms. This will provide a full range of puzzle difficulties, rather than mainly easy puzzles, and will address bug 217925 and its duplicates 228614 and 237262 (now nearly two years old).|iandw.au@gmail.com|Ian Wadham}}<br />
{{FeatureDone|KSudoku|Re-implement the puzzle-symmetry feature.|iandw.au@gmail.com|Ian Wadham}}<br />
{{FeatureDone|KSudoku|Re-order the puzzle types on the welcome screen. Use KDE Games Difficulty combo-box instead of a slider. Save user's choices of puzzle between sessions. Do minor tidy-ups of the user interface.|iandw.au@gmail.com|Ian Wadham}}<br />
{{FeatureDone|KGoldrunner|Add the championship level "Gold Rush" game, with Traditional rules, contributed by Gabriel Miltschitzky.|iandw.au@gmail.com|Ian Wadham}}<br />
{{FeatureDone|KGoldrunner|Add the championship level "Jail Break" game, with KGoldrunner rules, contributed by Gabriel Miltschitzky.|iandw.au@gmail.com|Ian Wadham}}<br />
{{FeatureDone|KiGo|Fix drawing of lines, making sure all lines have the same width.|gladhorn@kde.org|Frederik Gladhorn}}<br />
{{FeatureDone|KiGo|Add a new plain theme.|gladhorn@kde.org|Frederik Gladhorn}}|}<br />
<br><br />
<br />
= kdegraphics=<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureInProgress|Okular|Reset Form Action support|aacid@kde.org|Albert Astals Cid}}<br />
{{FeatureDone|Okular|Viewer Mode & Interface.|michel.ludwig@kdemail.net|Michel Ludwig}}<br />
{{FeatureDone|Okular|Table selection tool improvements|aacid@kde.org|Albert Astals Cid}}<br />
{{FeatureInProgress|Gwenview|Animated image transitions|agateau@kde.org|Aurélien Gâteau}}<br />
|}<br />
<br><br />
<br />
= kdemultimedia =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureTodo|JuK|MPRIS2 support|alex.merry@kdemail.net|Alex Merry}}<br />
|}<br />
<br><br />
<br />
= kdenetwork=<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureInProgress|KGet|Better interaction for torrents if they are seeding and other downloads stopped because of that|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureInProgress|KGet|Class that handles deleting files|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureInProgress|Kopete|Akonadi History Plugin |roideuniverse@gmail.com|Kaushik Saurabh}}<br />
|}<br />
<br><br />
<br />
= kdepim =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureTodo<br />
|attachment:/ kio-slave<br />
|Implement kio-slave to access (email) attachments in Akonadi<br />
|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
<br />
{{FeatureInProgress|KAlarm|Port to Akonadi|djarvie@kde.org|David Jarvie}}<br />
<br />
{{FeatureTodo<br />
|sieve: implement wizard<br />
|Implement wizard to help user to create sieve script<br />
|montel@kde.org|Montel Laurent}}<br />
<br />
{{FeatureDone<br />
|HTML Replies<br />
|Give messagecomposer (especially for KMail) the ability to compose replies in HTML<br />
|nyblom@kde.org|Torgny Nyblom}}<br />
<br />
{{FeatureInProgress|KMail import|KMail1 setup import instead of migration|krammer@kde.org|Kevin Krammer}}<br />
<br />
{{FeatureInProgress|Agent control workspace integration|Monitoring and control of Akonadi agents through Plasma workspace facilitites|krammer@kde.org|Kevin Krammer}}<br />
<br />
|}<br />
<br />
<br><br />
<br />
= kdeplasma-addons =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureInProgress|Kimpanel|Port kimpanel to DataEngine based one|wengxt@gmail.com|Xuetian Weng}}<br />
{{FeatureDone|IconTasks|Import IconTasks|craig@kde.org|Craig Drummond}}<br />
|}<br />
<br><br />
<br />
= kdesdk =<br />
<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureDone|Okteta|Add Flags Datatype to structures tool|alex.richardson@gmx.de|Alex Richardson}}<br />
{{FeatureDone|dolphin-plugins|Mercurial plugin for Dolphin|vishesh3y@gmail.com|Vishesh Yadav}}<br />
{{FeatureDone|KCachegrind|Upgrade interface to Callgrind (use callgrind_control instead of writing a command file, for > VG 3.7.x)|Josef.Weidendorfer@gmx.de|Josef Weidendorfer}} <br />
{{FeatureDone|Umbrello|Add code import wizard|andi.fischer@hispeed.ch|Andi Fischer}}<br />
|}<br />
<br />
<br><br />
<br />
= kdeutils=<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureDone|ark|Allow Ark to be used as a KPart again|rakuco@FreeBSD.org|Raphael Kubo da Costa}}<br />
{{FeatureInProgress|ksecrets|A suite of tools related to the KSecretsService infrastructure|kde@rusu.info|Valentin Rusu}}<br />
|}<br />
<br></div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Schedules/KDE4/4.8_Feature_Plan&diff=68270Schedules/KDE4/4.8 Feature Plan2012-01-16T16:30:12Z<p>Frederik.gladhorn: /* kdegames */</p>
<hr />
<div>This is a list of planned features for the SC 4.8 release. <br />
<br />
See also: <br />
<br />
*[[Schedules/KDE4/4.8 Release Schedule]] <br />
*[[Schedules/KDE4/4.8 Release Goals]] <br />
*[[Schedules/KDE4/4.7 Feature Plan]] (previous major release)<br />
<br />
<br> Legend: <br />
<br />
*todo =&gt; not started yet <br />
*in-progress =&gt; started, but not completed yet <br />
*done =&gt; completed<br />
<br />
__TOC__ <br />
<br />
<br><br />
<br />
= kdelibs =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureDone|Kate Part|Line modification system|dhaumann@kde.org|Dominik Haumann}}<br />
{{FeatureDone|Kate Part|Modeline Editor|dhaumann@kde.org|Dominik Haumann}}<br />
{{FeatureDone|Kate Part|Reliable code folding|adrian.lungu89@gmail.com|Adrian Lungu}}<br />
{{FeatureDone|Kate Part|Improved vi input mode|svatoslav1@gmail.com|Svyatoslav Kuzmich}}<br />
{{FeatureInProgress|KIO|PreviewJob supports URLs|sebas@kde.org|Sebastian Kügler}}<br />
{{FeatureInProgress|kdeui|KSecretsService API addition|kde@rusu.info|Valentin Rusu}}<br />
{{FeatureInProgress|kdeui/util|Connect KWallet class to KSecretsService client API|kde@rusu.info|Valentin Rusu}}<br />
{{FeatureInProgress|kcookiejar|New domain specific cookie policy based on patch provided in bug#54300|adawit@kde.org|Dawit A.}} <br />
|}<br />
<br><br />
<br />
= kde-runtime =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureInProgress|ksecretsserviced|KSecretsService daemon implementing the freedesktop.org secrets API. KDE applications will want to use the related kdelibs API (see below)|kde@rusu.info|Valentin Rusu}}<br />
<br />
{{FeatureInProgress|DrKonqi|Better duplicate detection|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureInProgress|KIO Thumbnails|webthumbnails plugin|sebas@kde.org|Sebastian Kügler}}<br />
{{FeatureInProgress|DrKonqi|Scripting support|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureInProgress|Plasma|Plasma QML QtComponents|mart@kde.org|Marco Martin}}<br />
|}<br />
<br><br />
<br />
= kde-workspace =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|KWin|Activity switcher|wstephenson@kde.org|Will Stephenson}}<br />
{{FeatureTodo|Plasma|Activity UI improvements|wstephenson@kde.org|Will Stephenson}}<br />
{{FeatureInProgress|KWin|Take over screensaver/locking management from KRunner|alex.merry@kdemail.net|Alex Merry}}<br />
{{FeatureDone|KCM|make mouse cursor size configurable (http://git.reviewboard.kde.org/r/101701/)|SommerLuk@gmail.com|Lukas Sommer}}<br />
{{FeatureDone|powerdevil|Remove Desktop Effects Management|drf@kde.org|Dario Freddi}}<br />
{{FeatureDone|powerdevil|Allow static profiles only|drf@kde.org|Dario Freddi}}<br />
{{FeatureDone|powerdevil|Allow activity interaction|drf@kde.org|Dario Freddi}}<br />
{{FeatureDone|Plasma|Add MPRIS2 support to nowplaying|alex.merry@kdemail.net|Alex Merry}}<br />
{{FeatureInProgress|Plasma|Allow task grouping on the taskbar to work together with kwin window tabbing|akreuzkamp@web.de|Anton Kreuzkamp}}<br />
{{FeatureInProgress|Plasma|Merge the QML version of the device notifier|mart@kde.org|Marco Martin}}<br />
{{FeatureInProgress|Plasma|Merge the QML version of the battery applet|mart@kde.org|Marco Martin}}<br />
{{FeatureDone|KWin|QML based Window switcher (Tabbox)|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureInProgress|KWin|Texture Rectangle ARB support in Shaders|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureInProgress|KWin|No Compositor restart on screen change|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureInProgress|KWin|Initial Wayland support|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureDone|KWin|Support for thumbnails in QML|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureDone|KWin|Add AnimationEffect class|thomas.luebking@gmail.com|Thomas Lübking}}<br />
{{FeatureInProgress|KWin|Option to prefer the mouse position over the focus chain|thomas.luebking@gmail.com|Thomas Lübking}}<br />
{{FeatureDone|KWin|More cleanup in the window rules kcm|thomas.luebking@gmail.com|Thomas Lübking}}<br />
{{FeatureInProgress|KWin|Trade 1 frame lag for deterministic framerate|thomas.luebking@gmail.com|Thomas Lübking}}<br />
{{FeatureInProgress|KWin|Improved resizing of windows with thin or no borders|fredrik@kde.org|Fredrik Höglund}}<br />
{{FeatureInProgress|KWin|Move Workspace's compositing functionality to own class Compositor|a.arlt@stud.uni-heidelberg.de|Arthur Arlt}}<br />
{{FeatureInProgress|KWin|Introduce class DecorationPaintRedirector for decoration handling when Compositing is active|a.arlt@stud.uni-heidelberg.de|Arthur Arlt}}<br />
{{FeatureInProgress|Screenlocker|New Screenlocker and daemon|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureDone|Plasma|Merge IconTask's taskmanager changes|craig@kde.org|Craig Drummond}}<br />
{{FeatureDone|KCM|Allow flag and label in keyboard layout indicator|arysin@gmail.com|Andriy Rysin}}<br />
{{FeatureInProgress|KSplash|QML based ksplash|mart@kde.org|Marco Martin/Ivan Čukić}}<br />
|}<br />
<br><br />
<br />
= kde-baseapps =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureDone|Dolphin|Implement new view-engine for Dolphin 2.0 (see http://ppenz.blogspot.com/2011/08/introducing-dolphin-20.html and http://ppenz.blogspot.com/2012/01/dolphin-20-status-update.html)|peter.penz19@gmail.com|Peter Penz}}<br />
{{FeatureTodo|Dolphin|Implement support for back/forward mouse buttons (Postponed to 4.9)|sebasti@n-doerner.de|Sebastian Dörner}}<br />
{{FeatureDone|Kate|Search & Replace in files plugin|kare.sars@iki.fi|Kåre Särs}}<br />
{{FeatureInProgress|Kate|Make GDB target selection behave like the build plugin |kare.sars@iki.fi|Kåre Särs}}<br />
{{FeatureInProgress|Kate|Add convenience options for remote debugging|kare.sars@iki.fi|Kåre Särs}}<br />
{{FeatureDone|Settings|Improve proxy configuration dialog|adawit@kde.org|Dawit Alemayehu}}<br />
|}<br />
<br><br />
<br />
= kdeedu =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureInProgress|KTouch|New organisation of keyboard and lecture files according to languages|peter.ruethemann@gmail.com|Rüthemann Peter}}<br />
{{FeatureInProgress|KTouch|New organisation of menu system: Training, Statistic, Settings|peter.ruethemann@gmail.com|Rüthemann Peter}}<br />
{{FeatureTodo|KTouch|End of lecture statistics|peter.ruethemann@gmail.com|Rüthemann Peter}}<br />
{{FeatureDone|Rocs|Alignment Actions to minimize crossing graph edges|cola@uni-paderborn.de|Andreas Cord-Landwehr}}<br />
{{FeatureTodo|Rocs|Project Files to combine graphs and algorithms|cola@uni-paderborn.de|Andreas Cord-Landwehr}}<br />
{{FeatureDone|Rocs|Context menu for graph scene|cola@uni-paderborn.de|Andreas Cord-Landwehr}}<br />
{{FeatureDone|Rocs|Resurrect import-/export-features|cola@uni-paderborn.de|Andreas Cord-Landwehr}}<br />
{{FeatureDone|Rocs|User Interface Cleanup|cola@uni-paderborn.de|Andreas Cord-Landwehr}}<br />
{{FeatureDone|Cantor|Add Qalculate backend|matteo@agostinelli.me|Matteo Agostinelli}}<br />
{{FeatureDone|Cantor|Add Scilab backend|filipe@kde.org|Filipe Saraiva}}<br />
{{FeatureDone|Marble|Marble Runner plugins for Parsing files|tgridel@freedotfr|Thibaut Gridel}}<br />
{{FeatureDone|Marble|(GSoC) OSM file rendering|oblaukhov.konstantin@gmail.com|Konstantin Oblaukhov}}<br />
{{FeatureDone|Marble|Marble Graphics Scene (Performance of Vector Drawing)|oblaukhov.konstantin@gmail.com|Konstantin Oblaukhov}}<br />
{{FeatureDone|Marble|Gps Info Plugin|tgridel@freedotfr|Thibaut Gridel}}<br />
{{FeatureDone|Marble|Improve LatLonEdit to allow input as Radian and DM|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureInProgress|Marble|Marble Touch (GSoC, Marble on MeeGo/N9)|earthwings@gentoo.org|Daniel Marth, Dennis Nienhüser}}<br />
{{FeatureDone|Marble|Routing API|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureInProgress|Marble|Adjustable Map Orientation (Rotation in Screen Plane)|bbeschow@cs.tu-berlin.de|Bernhard Beschow}}<br />
{{FeatureDone|Marble|Speedometer Plugin|bbeschow@cs.tu-berlin.de|Bernhard Beschow}}<br />
{{FeatureDone|Marble|Plasma Runner for geo coords and Marble bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureDone|Marble|Make bookmark editor support editing the lonlat coordinates|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureDone|Marble|Fix GeoDataCoordinates parsing from a QString|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureDone|Marble|OsmNominatim improved display|tgridel@freedorfr|Thibaut Gridel}}<br />
{{FeatureTodo|Marble|Create New Marble About Dialog|rahn@kde.org|Torsten Rahn}}<br />
{{FeatureTodo|Marble|Add Float Item Management|rahn@kde.org|Torsten Rahn}}<br />
{{FeatureTodo|Marble|New Search|rahn@kde.org|Torsten Rahn}}<br />
{{FeatureInProgress|Marble|Make API more QML-friendly|bbeschow@cs.tu-berlin.de|Bernhard Beschow}}<br />
{{FeatureDone|KTurtle|Add modulo command|nielsslot@gmaildotcom|Niels Slot}}<br />
{{FeatureDone|KGeography|Merge stuff from the cherry_field branch|aacid@kde.org|Albert Astals Cid}}<br />
|}<br />
<br><br />
<br />
= kdegames=<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureDone|Libkdegames|Improve graphics performance in all games by standardizing on the use of Qt Raster Graphics.|stefan.majewsky@googlemail.com|Stefan Majewsky}}<br />
{{FeatureDone|KSudoku|Add a new generator and solver to KSudoku, based on published algorithms. This will provide a full range of puzzle difficulties, rather than mainly easy puzzles, and will address bug 217925 and its duplicates 228614 and 237262 (now nearly two years old).|iandw.au@gmail.com|Ian Wadham}}<br />
{{FeatureDone|KSudoku|Re-implement the puzzle-symmetry feature.|iandw.au@gmail.com|Ian Wadham}}<br />
{{FeatureDone|KSudoku|Re-order the puzzle types on the welcome screen. Use KDE Games Difficulty combo-box instead of a slider. Save user's choices of puzzle between sessions. Do minor tidy-ups of the user interface.|iandw.au@gmail.com|Ian Wadham}}<br />
{{FeatureDone|KGoldrunner|Add the championship level "Gold Rush" game, with Traditional rules, contributed by Gabriel Miltschitzky.|iandw.au@gmail.com|Ian Wadham}}<br />
{{FeatureDone|KGoldrunner|Add the championship level "Jail Break" game, with KGoldrunner rules, contributed by Gabriel Miltschitzky.|iandw.au@gmail.com|Ian Wadham}}<br />
{{FeatureDone|KiGo|Add a new plain theme.|gladhorn@kde.org|Frederik Gladhorn}}|}<br />
<br><br />
<br />
= kdegraphics=<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureInProgress|Okular|Reset Form Action support|aacid@kde.org|Albert Astals Cid}}<br />
{{FeatureDone|Okular|Viewer Mode & Interface.|michel.ludwig@kdemail.net|Michel Ludwig}}<br />
{{FeatureDone|Okular|Table selection tool improvements|aacid@kde.org|Albert Astals Cid}}<br />
{{FeatureInProgress|Gwenview|Animated image transitions|agateau@kde.org|Aurélien Gâteau}}<br />
|}<br />
<br><br />
<br />
= kdemultimedia =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureTodo|JuK|MPRIS2 support|alex.merry@kdemail.net|Alex Merry}}<br />
|}<br />
<br><br />
<br />
= kdenetwork=<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureInProgress|KGet|Better interaction for torrents if they are seeding and other downloads stopped because of that|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureInProgress|KGet|Class that handles deleting files|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureInProgress|Kopete|Akonadi History Plugin |roideuniverse@gmail.com|Kaushik Saurabh}}<br />
|}<br />
<br><br />
<br />
= kdepim =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureTodo<br />
|attachment:/ kio-slave<br />
|Implement kio-slave to access (email) attachments in Akonadi<br />
|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
<br />
{{FeatureInProgress|KAlarm|Port to Akonadi|djarvie@kde.org|David Jarvie}}<br />
<br />
{{FeatureTodo<br />
|sieve: implement wizard<br />
|Implement wizard to help user to create sieve script<br />
|montel@kde.org|Montel Laurent}}<br />
<br />
{{FeatureDone<br />
|HTML Replies<br />
|Give messagecomposer (especially for KMail) the ability to compose replies in HTML<br />
|nyblom@kde.org|Torgny Nyblom}}<br />
<br />
{{FeatureInProgress|KMail import|KMail1 setup import instead of migration|krammer@kde.org|Kevin Krammer}}<br />
<br />
{{FeatureInProgress|Agent control workspace integration|Monitoring and control of Akonadi agents through Plasma workspace facilitites|krammer@kde.org|Kevin Krammer}}<br />
<br />
|}<br />
<br />
<br><br />
<br />
= kdeplasma-addons =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureInProgress|Kimpanel|Port kimpanel to DataEngine based one|wengxt@gmail.com|Xuetian Weng}}<br />
{{FeatureDone|IconTasks|Import IconTasks|craig@kde.org|Craig Drummond}}<br />
|}<br />
<br><br />
<br />
= kdesdk =<br />
<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureDone|Okteta|Add Flags Datatype to structures tool|alex.richardson@gmx.de|Alex Richardson}}<br />
{{FeatureDone|dolphin-plugins|Mercurial plugin for Dolphin|vishesh3y@gmail.com|Vishesh Yadav}}<br />
{{FeatureDone|KCachegrind|Upgrade interface to Callgrind (use callgrind_control instead of writing a command file, for > VG 3.7.x)|Josef.Weidendorfer@gmx.de|Josef Weidendorfer}} <br />
{{FeatureDone|Umbrello|Add code import wizard|andi.fischer@hispeed.ch|Andi Fischer}}<br />
|}<br />
<br />
<br><br />
<br />
= kdeutils=<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureDone|ark|Allow Ark to be used as a KPart again|rakuco@FreeBSD.org|Raphael Kubo da Costa}}<br />
{{FeatureInProgress|ksecrets|A suite of tools related to the KSecretsService infrastructure|kde@rusu.info|Valentin Rusu}}<br />
|}<br />
<br></div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Schedules/KDE4/4.8_Feature_Plan&diff=68269Schedules/KDE4/4.8 Feature Plan2012-01-16T16:29:45Z<p>Frederik.gladhorn: /* kdegames */</p>
<hr />
<div>This is a list of planned features for the SC 4.8 release. <br />
<br />
See also: <br />
<br />
*[[Schedules/KDE4/4.8 Release Schedule]] <br />
*[[Schedules/KDE4/4.8 Release Goals]] <br />
*[[Schedules/KDE4/4.7 Feature Plan]] (previous major release)<br />
<br />
<br> Legend: <br />
<br />
*todo =&gt; not started yet <br />
*in-progress =&gt; started, but not completed yet <br />
*done =&gt; completed<br />
<br />
__TOC__ <br />
<br />
<br><br />
<br />
= kdelibs =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureDone|Kate Part|Line modification system|dhaumann@kde.org|Dominik Haumann}}<br />
{{FeatureDone|Kate Part|Modeline Editor|dhaumann@kde.org|Dominik Haumann}}<br />
{{FeatureDone|Kate Part|Reliable code folding|adrian.lungu89@gmail.com|Adrian Lungu}}<br />
{{FeatureDone|Kate Part|Improved vi input mode|svatoslav1@gmail.com|Svyatoslav Kuzmich}}<br />
{{FeatureInProgress|KIO|PreviewJob supports URLs|sebas@kde.org|Sebastian Kügler}}<br />
{{FeatureInProgress|kdeui|KSecretsService API addition|kde@rusu.info|Valentin Rusu}}<br />
{{FeatureInProgress|kdeui/util|Connect KWallet class to KSecretsService client API|kde@rusu.info|Valentin Rusu}}<br />
{{FeatureInProgress|kcookiejar|New domain specific cookie policy based on patch provided in bug#54300|adawit@kde.org|Dawit A.}} <br />
|}<br />
<br><br />
<br />
= kde-runtime =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureInProgress|ksecretsserviced|KSecretsService daemon implementing the freedesktop.org secrets API. KDE applications will want to use the related kdelibs API (see below)|kde@rusu.info|Valentin Rusu}}<br />
<br />
{{FeatureInProgress|DrKonqi|Better duplicate detection|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureInProgress|KIO Thumbnails|webthumbnails plugin|sebas@kde.org|Sebastian Kügler}}<br />
{{FeatureInProgress|DrKonqi|Scripting support|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureInProgress|Plasma|Plasma QML QtComponents|mart@kde.org|Marco Martin}}<br />
|}<br />
<br><br />
<br />
= kde-workspace =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|KWin|Activity switcher|wstephenson@kde.org|Will Stephenson}}<br />
{{FeatureTodo|Plasma|Activity UI improvements|wstephenson@kde.org|Will Stephenson}}<br />
{{FeatureInProgress|KWin|Take over screensaver/locking management from KRunner|alex.merry@kdemail.net|Alex Merry}}<br />
{{FeatureDone|KCM|make mouse cursor size configurable (http://git.reviewboard.kde.org/r/101701/)|SommerLuk@gmail.com|Lukas Sommer}}<br />
{{FeatureDone|powerdevil|Remove Desktop Effects Management|drf@kde.org|Dario Freddi}}<br />
{{FeatureDone|powerdevil|Allow static profiles only|drf@kde.org|Dario Freddi}}<br />
{{FeatureDone|powerdevil|Allow activity interaction|drf@kde.org|Dario Freddi}}<br />
{{FeatureDone|Plasma|Add MPRIS2 support to nowplaying|alex.merry@kdemail.net|Alex Merry}}<br />
{{FeatureInProgress|Plasma|Allow task grouping on the taskbar to work together with kwin window tabbing|akreuzkamp@web.de|Anton Kreuzkamp}}<br />
{{FeatureInProgress|Plasma|Merge the QML version of the device notifier|mart@kde.org|Marco Martin}}<br />
{{FeatureInProgress|Plasma|Merge the QML version of the battery applet|mart@kde.org|Marco Martin}}<br />
{{FeatureDone|KWin|QML based Window switcher (Tabbox)|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureInProgress|KWin|Texture Rectangle ARB support in Shaders|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureInProgress|KWin|No Compositor restart on screen change|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureInProgress|KWin|Initial Wayland support|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureDone|KWin|Support for thumbnails in QML|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureDone|KWin|Add AnimationEffect class|thomas.luebking@gmail.com|Thomas Lübking}}<br />
{{FeatureInProgress|KWin|Option to prefer the mouse position over the focus chain|thomas.luebking@gmail.com|Thomas Lübking}}<br />
{{FeatureDone|KWin|More cleanup in the window rules kcm|thomas.luebking@gmail.com|Thomas Lübking}}<br />
{{FeatureInProgress|KWin|Trade 1 frame lag for deterministic framerate|thomas.luebking@gmail.com|Thomas Lübking}}<br />
{{FeatureInProgress|KWin|Improved resizing of windows with thin or no borders|fredrik@kde.org|Fredrik Höglund}}<br />
{{FeatureInProgress|KWin|Move Workspace's compositing functionality to own class Compositor|a.arlt@stud.uni-heidelberg.de|Arthur Arlt}}<br />
{{FeatureInProgress|KWin|Introduce class DecorationPaintRedirector for decoration handling when Compositing is active|a.arlt@stud.uni-heidelberg.de|Arthur Arlt}}<br />
{{FeatureInProgress|Screenlocker|New Screenlocker and daemon|mgraesslin@kde.org|Martin Gräßlin}}<br />
{{FeatureDone|Plasma|Merge IconTask's taskmanager changes|craig@kde.org|Craig Drummond}}<br />
{{FeatureDone|KCM|Allow flag and label in keyboard layout indicator|arysin@gmail.com|Andriy Rysin}}<br />
{{FeatureInProgress|KSplash|QML based ksplash|mart@kde.org|Marco Martin/Ivan Čukić}}<br />
|}<br />
<br><br />
<br />
= kde-baseapps =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureDone|Dolphin|Implement new view-engine for Dolphin 2.0 (see http://ppenz.blogspot.com/2011/08/introducing-dolphin-20.html and http://ppenz.blogspot.com/2012/01/dolphin-20-status-update.html)|peter.penz19@gmail.com|Peter Penz}}<br />
{{FeatureTodo|Dolphin|Implement support for back/forward mouse buttons (Postponed to 4.9)|sebasti@n-doerner.de|Sebastian Dörner}}<br />
{{FeatureDone|Kate|Search & Replace in files plugin|kare.sars@iki.fi|Kåre Särs}}<br />
{{FeatureInProgress|Kate|Make GDB target selection behave like the build plugin |kare.sars@iki.fi|Kåre Särs}}<br />
{{FeatureInProgress|Kate|Add convenience options for remote debugging|kare.sars@iki.fi|Kåre Särs}}<br />
{{FeatureDone|Settings|Improve proxy configuration dialog|adawit@kde.org|Dawit Alemayehu}}<br />
|}<br />
<br><br />
<br />
= kdeedu =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureInProgress|KTouch|New organisation of keyboard and lecture files according to languages|peter.ruethemann@gmail.com|Rüthemann Peter}}<br />
{{FeatureInProgress|KTouch|New organisation of menu system: Training, Statistic, Settings|peter.ruethemann@gmail.com|Rüthemann Peter}}<br />
{{FeatureTodo|KTouch|End of lecture statistics|peter.ruethemann@gmail.com|Rüthemann Peter}}<br />
{{FeatureDone|Rocs|Alignment Actions to minimize crossing graph edges|cola@uni-paderborn.de|Andreas Cord-Landwehr}}<br />
{{FeatureTodo|Rocs|Project Files to combine graphs and algorithms|cola@uni-paderborn.de|Andreas Cord-Landwehr}}<br />
{{FeatureDone|Rocs|Context menu for graph scene|cola@uni-paderborn.de|Andreas Cord-Landwehr}}<br />
{{FeatureDone|Rocs|Resurrect import-/export-features|cola@uni-paderborn.de|Andreas Cord-Landwehr}}<br />
{{FeatureDone|Rocs|User Interface Cleanup|cola@uni-paderborn.de|Andreas Cord-Landwehr}}<br />
{{FeatureDone|Cantor|Add Qalculate backend|matteo@agostinelli.me|Matteo Agostinelli}}<br />
{{FeatureDone|Cantor|Add Scilab backend|filipe@kde.org|Filipe Saraiva}}<br />
{{FeatureDone|Marble|Marble Runner plugins for Parsing files|tgridel@freedotfr|Thibaut Gridel}}<br />
{{FeatureDone|Marble|(GSoC) OSM file rendering|oblaukhov.konstantin@gmail.com|Konstantin Oblaukhov}}<br />
{{FeatureDone|Marble|Marble Graphics Scene (Performance of Vector Drawing)|oblaukhov.konstantin@gmail.com|Konstantin Oblaukhov}}<br />
{{FeatureDone|Marble|Gps Info Plugin|tgridel@freedotfr|Thibaut Gridel}}<br />
{{FeatureDone|Marble|Improve LatLonEdit to allow input as Radian and DM|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureInProgress|Marble|Marble Touch (GSoC, Marble on MeeGo/N9)|earthwings@gentoo.org|Daniel Marth, Dennis Nienhüser}}<br />
{{FeatureDone|Marble|Routing API|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureInProgress|Marble|Adjustable Map Orientation (Rotation in Screen Plane)|bbeschow@cs.tu-berlin.de|Bernhard Beschow}}<br />
{{FeatureDone|Marble|Speedometer Plugin|bbeschow@cs.tu-berlin.de|Bernhard Beschow}}<br />
{{FeatureDone|Marble|Plasma Runner for geo coords and Marble bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureDone|Marble|Make bookmark editor support editing the lonlat coordinates|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureDone|Marble|Fix GeoDataCoordinates parsing from a QString|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureDone|Marble|OsmNominatim improved display|tgridel@freedorfr|Thibaut Gridel}}<br />
{{FeatureTodo|Marble|Create New Marble About Dialog|rahn@kde.org|Torsten Rahn}}<br />
{{FeatureTodo|Marble|Add Float Item Management|rahn@kde.org|Torsten Rahn}}<br />
{{FeatureTodo|Marble|New Search|rahn@kde.org|Torsten Rahn}}<br />
{{FeatureInProgress|Marble|Make API more QML-friendly|bbeschow@cs.tu-berlin.de|Bernhard Beschow}}<br />
{{FeatureDone|KTurtle|Add modulo command|nielsslot@gmaildotcom|Niels Slot}}<br />
{{FeatureDone|KGeography|Merge stuff from the cherry_field branch|aacid@kde.org|Albert Astals Cid}}<br />
|}<br />
<br><br />
<br />
= kdegames=<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureDone|Libkdegames|Improve graphics performance in all games by standardizing on the use of Qt Raster Graphics.|stefan.majewsky@googlemail.com|Stefan Majewsky}}<br />
{{FeatureDone|KSudoku|Add a new generator and solver to KSudoku, based on published algorithms. This will provide a full range of puzzle difficulties, rather than mainly easy puzzles, and will address bug 217925 and its duplicates 228614 and 237262 (now nearly two years old).|iandw.au@gmail.com|Ian Wadham}}<br />
{{FeatureDone|KSudoku|Re-implement the puzzle-symmetry feature.|iandw.au@gmail.com|Ian Wadham}}<br />
{{FeatureDone|KSudoku|Re-order the puzzle types on the welcome screen. Use KDE Games Difficulty combo-box instead of a slider. Save user's choices of puzzle between sessions. Do minor tidy-ups of the user interface.|iandw.au@gmail.com|Ian Wadham}}<br />
{{FeatureDone|KGoldrunner|Add the championship level "Gold Rush" game, with Traditional rules, contributed by Gabriel Miltschitzky.|iandw.au@gmail.com|Ian Wadham}}<br />
{{FeatureDone|KGoldrunner|Add the championship level "Jail Break" game, with KGoldrunner rules, contributed by Gabriel Miltschitzky.|iandw.au@gmail.com|Ian Wadham}}|}<br />
{{FeatureDone|KiGo|Add a new plain theme.|gladhorn@kde.org|Frederik Gladhorn}}|}<br />
<br><br />
<br />
= kdegraphics=<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureInProgress|Okular|Reset Form Action support|aacid@kde.org|Albert Astals Cid}}<br />
{{FeatureDone|Okular|Viewer Mode & Interface.|michel.ludwig@kdemail.net|Michel Ludwig}}<br />
{{FeatureDone|Okular|Table selection tool improvements|aacid@kde.org|Albert Astals Cid}}<br />
{{FeatureInProgress|Gwenview|Animated image transitions|agateau@kde.org|Aurélien Gâteau}}<br />
|}<br />
<br><br />
<br />
= kdemultimedia =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureTodo|JuK|MPRIS2 support|alex.merry@kdemail.net|Alex Merry}}<br />
|}<br />
<br><br />
<br />
= kdenetwork=<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureInProgress|KGet|Better interaction for torrents if they are seeding and other downloads stopped because of that|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureInProgress|KGet|Class that handles deleting files|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureInProgress|Kopete|Akonadi History Plugin |roideuniverse@gmail.com|Kaushik Saurabh}}<br />
|}<br />
<br><br />
<br />
= kdepim =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureTodo<br />
|attachment:/ kio-slave<br />
|Implement kio-slave to access (email) attachments in Akonadi<br />
|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
<br />
{{FeatureInProgress|KAlarm|Port to Akonadi|djarvie@kde.org|David Jarvie}}<br />
<br />
{{FeatureTodo<br />
|sieve: implement wizard<br />
|Implement wizard to help user to create sieve script<br />
|montel@kde.org|Montel Laurent}}<br />
<br />
{{FeatureDone<br />
|HTML Replies<br />
|Give messagecomposer (especially for KMail) the ability to compose replies in HTML<br />
|nyblom@kde.org|Torgny Nyblom}}<br />
<br />
{{FeatureInProgress|KMail import|KMail1 setup import instead of migration|krammer@kde.org|Kevin Krammer}}<br />
<br />
{{FeatureInProgress|Agent control workspace integration|Monitoring and control of Akonadi agents through Plasma workspace facilitites|krammer@kde.org|Kevin Krammer}}<br />
<br />
|}<br />
<br />
<br><br />
<br />
= kdeplasma-addons =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
<br />
{{FeatureInProgress|Kimpanel|Port kimpanel to DataEngine based one|wengxt@gmail.com|Xuetian Weng}}<br />
{{FeatureDone|IconTasks|Import IconTasks|craig@kde.org|Craig Drummond}}<br />
|}<br />
<br><br />
<br />
= kdesdk =<br />
<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureDone|Okteta|Add Flags Datatype to structures tool|alex.richardson@gmx.de|Alex Richardson}}<br />
{{FeatureDone|dolphin-plugins|Mercurial plugin for Dolphin|vishesh3y@gmail.com|Vishesh Yadav}}<br />
{{FeatureDone|KCachegrind|Upgrade interface to Callgrind (use callgrind_control instead of writing a command file, for > VG 3.7.x)|Josef.Weidendorfer@gmx.de|Josef Weidendorfer}} <br />
{{FeatureDone|Umbrello|Add code import wizard|andi.fischer@hispeed.ch|Andi Fischer}}<br />
|}<br />
<br />
<br><br />
<br />
= kdeutils=<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureDone|ark|Allow Ark to be used as a KPart again|rakuco@FreeBSD.org|Raphael Kubo da Costa}}<br />
{{FeatureInProgress|ksecrets|A suite of tools related to the KSecretsService infrastructure|kde@rusu.info|Valentin Rusu}}<br />
|}<br />
<br></div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=User:Frederik.gladhorn/atspi-scratch&diff=61137User:Frederik.gladhorn/atspi-scratch2011-07-01T17:54:53Z<p>Frederik.gladhorn: /* Stuff we Mustn't Forget */</p>
<hr />
<div>= Introduction =<br />
This guide is for implementors of ATK and AT-SPI 2.<br />
It should say how to describe the user interface through the use of the AT-SPI Accessibility APIs.<br />
Having consistent representations of widgets makes the implementation of assisitive technology much easier.<br />
<br />
ATK and AT-SPI should be identical to large parts. Especially roles and enums should be the same, so this guide applies to both.<br />
<br />
The aim is to have a defined structure where applicable. For example an editable Combo Box should have a list or table and an editable text as children.<br />
<br />
In addition the expected signals such as accessible-name changed should be documented so that it is clear which signals to emit.<br />
<br />
= States =<br />
Accessible objects always have a set of states.<br />
For each widget below it is mentioned which states should be implemented.<br />
Over AT-SPI2 the states are split into two 32 bit uints. (yes, it's that horrible).<br />
<br />
FIXME link to states list<br />
<br />
ATSPI States (from at-spi2-core/atspi/atspi-constants.c)<br />
<br />
* ATSPI_STATE_INVALID: <br />
* ATSPI_STATE_ACTIVE: Indicates a window is currently the active window, or is an active subelement within a container or table <br />
* ATSPI_STATE_ARMED: Indicates that the object is armed <br />
* ATSPI_STATE_BUSY: Indicates the current object is busy, i.e. onscreen representation is in the process of changing, or the object is temporarily unavailable for interaction due to activity already in progress. <br />
* ATSPI_STATE_CHECKED: Indicates this object is currently checked <br />
* ATSPI_STATE_COLLAPSED: Indicates this object is collapsed <br />
* ATSPI_STATE_DEFUNCT: Indicates that this object no longer has a valid backing widget (for instance, if its peer object has been destroyed) <br />
* ATSPI_STATE_EDITABLE: Indicates the user can change the contents of this object <br />
* ATSPI_STATE_ENABLED: Indicates that this object is enabled, i.e. that it currently reflects some application state. Objects that are "greyed out" may lack this state, and may lack the STATE_SENSITIVE if direct user interaction cannot cause them to acquire STATE_ENABLED. @see STATE_SENSITIVE. <br />
* ATSPI_STATE_EXPANDABLE: Indicates this object allows progressive disclosure of its children <br />
* ATSPI_STATE_EXPANDED: Indicates this object its expanded <br />
* ATSPI_STATE_FOCUSABLE: Indicates this object can accept keyboard focus, which means all events resulting from typing on the keyboard will normally be passed to it when it has focus <br />
* ATSPI_STATE_FOCUSED: Indicates this object currently has the keyboard focus <br />
* ATSPI_STATE_HAS_TOOLTIP: Indicates that the object has an associated tooltip <br />
* ATSPI_STATE_HORIZONTAL: Indicates the orientation of thsi object is horizontal <br />
* ATSPI_STATE_ICONIFIED: Indicates this object is minimized and is represented only by an icon <br />
* ATSPI_STATE_MODAL: Indicates something must be done with this object before the user can interact with an object in a different window. <br />
* ATSPI_STATE_MULTI_LINE: Indicates this (text) object can contain multiple lines of text <br />
* ATSPI_STATE_MULTISELECTABLE: Indicates this object allows more than one of its children to be selected at the same time, or in the case of text objects, that the object supports non-contiguous text selections. <br />
* ATSPI_STATE_OPAQUE: Indicates this object paints every pixel within its rectangular region. It also indicates an alpha value of unity, if it supports alpha blending. <br />
* ATSPI_STATE_PRESSED: Indicates this object is currently pressed <br />
* ATSPI_STATE_RESIZABLE: Indicates the size of this object's size is not fixed <br />
* ATSPI_STATE_SELECTABLE: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that can be selected. <br />
* ATSPI_STATE_SELECTED: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that has been selected. <br />
* ATSPI_STATE_SENSITIVE: Indicates this object is sensitive, e.g. to user interaction. STATE_SENSITIVE usually accompanies STATE_ENABLED for user-actionable controls, but may be found in the absence of STATE_ENABLED if the current visible state of the control is "disconnected" from the application state. In such cases, direct user interaction can often result in the object gaining STATE_SENSITIVE, for instance if a user makes an explicit selection using an object whose current state is ambiguous or undefined. @see STATE_ENABLED, STATE_INDETERMINATE. <br />
* ATSPI_STATE_SHOWING: Indicates this object, the object's parent, the object's parent's parent, and so on, are all 'shown' to the end-user, i.e. subject to "exposure" if blocking or obscuring objects do not interpose between this object and the top of the window stack. <br />
* ATSPI_STATE_SINGLE_LINE: Indicates this (text) object can contain only a single line of text <br />
* ATSPI_STATE_STALE: Indicates that the information returned for this object may no longer be synchronized with the application state. This can occur if the object has STATE_TRANSIENT, and can also occur towards the end of the object peer's lifecycle. <br />
* ATSPI_STATE_TRANSIENT: Indicates this object is transient <br />
* ATSPI_STATE_VERTICAL: Indicates the orientation of this object is vertical; for example this state may appear on such objects as scrollbars, text objects (with vertical text flow), separators, etc. <br />
* ATSPI_STATE_VISIBLE: Indicates this object is visible, e.g. has been explicitly marked for exposure to the user. STATE_VISIBLE is no guarantee that the object is actually unobscured on the screen, only that it is 'potentially' visible, barring obstruction, being scrolled or clipped out of the field of view, or having an ancestor container that has not yet made visible. A widget is potentially onscreen if it has both STATE_VISIBLE and STATE_SHOWING. The absence of STATE_VISIBLE and STATE_SHOWING is semantically equivalent to saying that an object is 'hidden'. <br />
* ATSPI_STATE_MANAGES_DESCENDANTS: Indicates that "active-descendant-changed" event is sent when children become 'active' (i.e. are selected or navigated to onscreen). Used to prevent need to enumerate all children in very large containers, like tables. The presence of STATE_MANAGES_DESCENDANTS is an indication to the client. that the children should not, and need not, be enumerated by the client. Objects implementing this state are expected to provide relevant state notifications to listening clients, for instance notifications of visibility changes and activation of their contained child objects, without the client having previously requested references to those children. <br />
* ATSPI_STATE_INDETERMINATE: Indicates that a check box or other boolean indicator is in a state other than checked or not checked. This usually means that the boolean value reflected or controlled by the object does not apply consistently to the entire current context. For example, a checkbox for the "Bold" attribute of text may have STATE_INDETERMINATE if the currently selected text contains a mixture of weight attributes. In many cases interacting with a STATE_INDETERMINATE object will cause the context's corresponding boolean attribute to be homogenized, whereupon the object will lose STATE_INDETERMINATE and a corresponding state-changed event will be fired. <br />
* ATSPI_STATE_REQUIRED: Indicates that user interaction with this object is 'required' from the user, for instance before completing the processing of a form. <br />
* ATSPI_STATE_TRUNCATED: Indicates that an object's onscreen content is truncated, e.g. a text value in a spreadsheet cell. <br />
* ATSPI_STATE_ANIMATED: Indicates this object's visual representation is dynamic, not static. This state may be applied to an object during an animated 'effect' and be removed from the object once its visual representation becomes static. some applications, notably content viewers, may not be able to detect all kinds of animated content. Therefore the absence of this state should not be taken as definitive evidence that the object's visual representation is static; this state is advisory. <br />
* ATSPI_STATE_INVALID_ENTRY: This object has indicated an error condition due to failure of input validation. For instance, a form control may acquire this state in response to invalid or malformed user input. <br />
* ATSPI_STATE_SUPPORTS_AUTOCOMPLETION: This state indicates that the object in question implements some form of &#168;typeahead&#168; or pre-selection behavior whereby entering the first character of one or more sub-elements causes those elements to scroll into view or become selected. Subsequent character input may narrow the selection further as long as one or more sub-elements match the string. This state is normally only useful and encountered on objects that implement Selection. In some cases the typeahead behavior may result in full or partial &#168;completion&#168; of the data in the input field, in which case these input events may trigger text-changed events from the source. <br />
* ATSPI_STATE_SELECTABLE_TEXT: This state indicates that the object in question supports text selection. It should only be exposed on objects which implement the Text interface, in order to distinguish this state from STATE_SELECTABLE, which infers that the object in question is a selectable child of an object which implements Selection. While similar, text selection and subelement selection are distinct operations. <br />
* ATSPI_STATE_IS_DEFAULT: This state indicates that the object in question is the 'default' interaction object in a dialog, i.e. the one that gets activated if the user presses "Enter" when the dialog is initially posted. <br />
* ATSPI_STATE_VISITED: This state indicates that the object (typically a hyperlink) has already been activated or invoked, with the result that some backing data has been downloaded or rendered. <br />
* ATSPI_STATE_LAST_DEFINED: This value of the enumeration should not be used as a parameter, it indicates the number of items in the StateType enumeration. <br />
<br />
<br />
<br />
Some states are valid for all widgets:<br />
* Visible?<br />
<br />
<br />
----<br />
= Roles =<br />
* ATSPI_ROLE_INVALID: A Role indicating an error condition, such as uninitialized Role data. <br />
* ATSPI_ROLE_ACCELERATOR_LABEL: Object is a label indicating the keyboard accelerators for the parent <br />
* ATSPI_ROLE_ALERT: Object is used to alert the user about something <br />
* ATSPI_ROLE_ANIMATION: Object contains a dynamic or moving image of some kind <br />
* ATSPI_ROLE_ARROW: Object is a 2d directional indicator <br />
* ATSPI_ROLE_CALENDAR: Object contains one or more dates, usually arranged into a 2d list <br />
* ATSPI_ROLE_CANVAS: Object that can be drawn into and is used to trap events <br />
* ATSPI_ROLE_CHECK_BOX: A choice that can be checked or unchecked and provides a separate indicator for the current state. <br />
* ATSPI_ROLE_CHECK_MENU_ITEM: A menu item that behaves like a check box (see ROLE_CHECK_BOX) <br />
* ATSPI_ROLE_COLOR_CHOOSER: A specialized dialog that lets the user choose a color. <br />
* ATSPI_ROLE_COLUMN_HEADER: The header for a column of data <br />
* ATSPI_ROLE_COMBO_BOX: A list of choices the user can select from <br />
* ATSPI_ROLE_DATE_EDITOR: An object which allows entry of a date <br />
* ATSPI_ROLE_DESKTOP_ICON: An inconifed internal frame within a DESKTOP_PANE <br />
* ATSPI_ROLE_DESKTOP_FRAME: A pane that supports internal frames and iconified versions of those internal frames. <br />
* ATSPI_ROLE_DIAL: An object that allows a value to be changed via rotating a visual element, or which displays a value via such a rotating element. <br />
* ATSPI_ROLE_DIALOG: A top level window with title bar and a border <br />
* ATSPI_ROLE_DIRECTORY_PANE: A pane that allows the user to navigate through and select the contents of a directory <br />
* ATSPI_ROLE_DRAWING_AREA: A specialized dialog that displays the files in the directory and lets the user select a file, browse a different directory, or specify a filename. <br />
* ATSPI_ROLE_FILE_CHOOSER: An object used for drawing custom user interface elements. <br />
* ATSPI_ROLE_FILLER: A object that fills up space in a user interface <br />
* ATSPI_ROLE_FOCUS_TRAVERSABLE: Don't use, reserved for future use. <br />
* ATSPI_ROLE_FONT_CHOOSER: Allows selection of a display font <br />
* ATSPI_ROLE_FRAME: A top level window with a title bar, border, menubar, etc. <br />
* ATSPI_ROLE_GLASS_PANE: A pane that is guaranteed to be painted on top of all panes beneath it <br />
* ATSPI_ROLE_HTML_CONTAINER: A document container for HTML, whose children represent the document content. <br />
* ATSPI_ROLE_ICON: A small fixed size picture, typically used to decorate components <br />
* ATSPI_ROLE_IMAGE: An image, typically static. <br />
* ATSPI_ROLE_INTERNAL_FRAME: A frame-like object that is clipped by a desktop pane. <br />
* ATSPI_ROLE_LABEL: An object used to present an icon or short string in an interface <br />
* ATSPI_ROLE_LAYERED_PANE: A specialized pane that allows its children to be drawn in layers, providing a form of stacking order. <br />
* ATSPI_ROLE_LIST: An object that presents a list of objects to the user and allows the user to select one or more of them. <br />
* ATSPI_ROLE_LIST_ITEM: An object that represents an element of a list. <br />
* ATSPI_ROLE_MENU: An object usually found inside a menu bar that contains a list of actions the user can choose from. <br />
* ATSPI_ROLE_MENU_BAR: An object usually drawn at the top of the primary dialog box of an application that contains a list of menus the user can choose from. <br />
* ATSPI_ROLE_MENU_ITEM: An object usually contained in a menu that presents an action the user can choose. <br />
* ATSPI_ROLE_OPTION_PANE: A specialized pane whose primary use is inside a DIALOG <br />
* ATSPI_ROLE_PAGE_TAB: An object that is a child of a page tab list <br />
* ATSPI_ROLE_PAGE_TAB_LIST: An object that presents a series of panels (or page tabs), one at a time, through some mechanism provided by the object. <br />
* ATSPI_ROLE_PANEL: A generic container that is often used to group objects. <br />
* ATSPI_ROLE_PASSWORD_TEXT: A text object uses for passwords, or other places where the text content is not shown visibly to the user. <br />
* ATSPI_ROLE_POPUP_MENU: A temporary window that is usually used to offer the user a list of choices, and then hides when the user selects one of those choices. <br />
* ATSPI_ROLE_PROGRESS_BAR: An object used to indicate how much of a task has been completed. <br />
* ATSPI_ROLE_PUSH_BUTTON: An object the user can manipulate to tell the application to do something. <br />
* ATSPI_ROLE_RADIO_BUTTON: A specialized check box that will cause other radio buttons in the same group to become uncghecked when this one is checked. <br />
* ATSPI_ROLE_RADIO_MENU_ITEM: Object is both a menu item and a "radio button" (see ROLE_RADIO_BUTTON) <br />
* ATSPI_ROLE_ROOT_PANE: A specialized pane that has a glass pane and a layered pane as its children. <br />
* ATSPI_ROLE_ROW_HEADER: The header for a row of data <br />
* ATSPI_ROLE_SCROLL_BAR: An object usually used to allow a user to incrementally view a large amount of data by moving the bounds of a viewport along a one-dimensional axis. <br />
* ATSPI_ROLE_SCROLL_PANE: An object that allows a user to incrementally view a large amount of information. ROLE_SCROLL_PANE objects are usually accompanied by ROLE_SCROLL_BAR controllers, on which the RELATION_CONTROLLER_FOR and RELATION_CONTROLLED_BY reciprocal relations are set; \see Accessibility::RelationSet. <br />
* ATSPI_ROLE_SEPARATOR: An object usually contained in a menu to provide a visible and logical separation of the contents in a menu. <br />
* ATSPI_ROLE_SLIDER: An object that allows the user to select from a bounded range <br />
* ATSPI_ROLE_SPIN_BUTTON: An object which allows one of a set of choices to be selected, and which displays the current choice. Unlike ROLE_SCROLL_BAR, ROLE_SLIDER objects need not control 'viewport'-like objects. <br />
* ATSPI_ROLE_SPLIT_PANE: A specialized panel that presents two other panels at the same time. <br />
* ATSPI_ROLE_STATUS_BAR: Object displays non-quantitative status information (c.f. ROLE_PROGRESS_BAR) <br />
* ATSPI_ROLE_TABLE: An object used to repesent information in terms of rows and columns. <br />
* ATSPI_ROLE_TABLE_CELL: A 'cell' or discrete child within a Table. \note Table cells need not have ROLE_TABLE_CELL, other RoleType values are valid as well. <br />
* ATSPI_ROLE_TABLE_COLUMN_HEADER: An object which labels a particular column in a Table. <br />
* ATSPI_ROLE_TABLE_ROW_HEADER: An object which labels a particular row in a Table. Table rows and columns may also be labelled via the RELATION_LABEL_FOR/RELATION_LABELLED_BY relationships; see Accessibility.RelationSet. <br />
* ATSPI_ROLE_TEAROFF_MENU_ITEM: Object allows menu to be removed from menubar and shown in its own window. <br />
* ATSPI_ROLE_TERMINAL: An object that emulates a terminal <br />
* ATSPI_ROLE_TEXT: An object that presents text to the user, of nonspecific type. <br />
* ATSPI_ROLE_TOGGLE_BUTTON: A specialized push button that can be checked or unchecked, but does not procide a separate indicator for the current state. <br />
* ATSPI_ROLE_TOOL_BAR: A bar or palette usually composed of push buttons or toggle buttons <br />
* ATSPI_ROLE_TOOL_TIP: An object that provides information about another object <br />
* ATSPI_ROLE_TREE: An object used to repsent hierarchical information to the user. <br />
* ATSPI_ROLE_TREE_TABLE: An object that presents both tabular and hierarchical info to the user <br />
* ATSPI_ROLE_UNKNOWN: The object contains some Accessible information, but its role is not known. <br />
* ATSPI_ROLE_VIEWPORT: An object usually used in a scroll pane, or to otherwise clip a larger object or content renderer to a specific onscreen viewport. <br />
* ATSPI_ROLE_WINDOW: A &#168;top level window&#168; with no title or border. <br />
* ATSPI_ROLE_EXTENDED: means that the role for this item is known, but not included in the core enumeration <br />
* ATSPI_ROLE_HEADER: An object that serves as a document header. <br />
* ATSPI_ROLE_FOOTER: An object that serves as a document footer. <br />
* ATSPI_ROLE_PARAGRAPH: An object which is contains a single paragraph of text content. See also ROLE_TEXT. <br />
* ATSPI_ROLE_RULER: An object which describes margins and tab stops, etc. for text objects which it controls (should have CONTROLLER_FOR relation to such). <br />
* ATSPI_ROLE_APPLICATION: An object corresponding to the toplevel accessible of an application, which may contain ROLE_FRAME objects or other accessible objects. Children of AccessibleDesktop objects are generally ROLE_APPLICATION objects. <br />
* ATSPI_ROLE_AUTOCOMPLETE: The object is a dialog or list containing items for insertion into an entry widget, for instance a list of words for completion of a text entry. <br />
* ATSPI_ROLE_EDITBAR: The object is an editable text object in a toolbar. <br />
* ATSPI_ROLE_EMBEDDED: The object is an embedded component container. This role is a "grouping" hint that the contained objects share a context which is different from the container in which this accessible is embedded. In particular, it is used for some kinds of document embedding, and for embedding of out-of-process component, "panel applets", etc. <br />
* ATSPI_ROLE_ENTRY: The object is a component whose textual content may be entered or modified by the user, provided STATE_EDITABLE is present. A readonly ROLE_ENTRY object (i.e. where STATE_EDITABLE is not present) implies a read-only 'text field' in a form, as opposed to a title, label, or caption. <br />
* ATSPI_ROLE_CHART: The object is a graphical depiction of quantitative data. It may contain multiple subelements whose attributes and/or description may be queried to obtain both the quantitative data and information about how the data is being presented. The LABELLED_BY relation is particularly important in interpreting objects of this type, as is the accessible-description property. See ROLE_CAPTION <br />
* ATSPI_ROLE_CAPTION: The object contains descriptive information, usually textual, about another user interface element such as a table, chart, or image. <br />
* ATSPI_ROLE_DOCUMENT_FRAME: The object is a visual frame or container which contains a view of document content. Document frames may occur within another Document instance, in which case the second document may be said to be embedded in the containing instance. HTML frames are often ROLE_DOCUMENT_FRAME. Either this object, or a singleton descendant, should implement the Document interface. <br />
* ATSPI_ROLE_HEADING: The object serves as a heading for content which follows it in a document. The 'heading level' of the heading, if availabe, may be obtained by querying the object's attributes. <br />
* ATSPI_ROLE_PAGE: The object is a containing instance which encapsulates a page of information. ROLE_PAGE is used in documents and content which support a paginated navigation model. <br />
* ATSPI_ROLE_SECTION: The object is a containing instance of document content which constitutes a particular 'logical' section of the document. The type of content within a section, and the nature of the section division itself, may be obtained by querying the object's attributes. Sections may be nested. <br />
* ATSPI_ROLE_REDUNDANT_OBJECT: The object is redundant with another object in the hierarchy, and is exposed for purely technical reasons. Objects of this role should be ignored by clients, if they are encountered at all. <br />
* ATSPI_ROLE_FORM: The object is a containing instance of document content which has within it components with which the user can interact in order to input information; i.e. the object is a container for pushbuttons, comboboxes, text input fields, and other 'GUI' components. ROLE_FORM should not, in general, be used for toplevel GUI containers or dialogs, but should be reserved for 'GUI' containers which occur within document content, for instance within Web documents, presentations, or text documents. Unlike other GUI containers and dialogs which occur inside application instances, ROLE_FORM containers' components are associated with the current document, rather than the current foreground application or viewer instance. <br />
* ATSPI_ROLE_LINK: The object is a hypertext anchor, i.e. a "link" in a hypertext document. Such objects are distinct from 'inline' content which may also use the Hypertext/Hyperlink interfaces to indicate the range/location within a text object where an inline or embedded object lies. <br />
* ATSPI_ROLE_INPUT_METHOD_WINDOW: The object is a window or similar viewport which is used to allow composition or input of a 'complex character', in other words it is an "input method window." <br />
* ATSPI_ROLE_LAST_DEFINED: Not a valid role, used for finding end of enumeration. <br />
----<br />
<br />
= Events =<br />
== Focus ==<br />
One of the most important events is the focus change.<br />
FIXME document here what needs to happen when focus changes.<br />
<br />
----<br />
<br />
= Objects and their Properties =<br />
<br />
* Add AtkObject, AtkRoles, Names, Descriptions and the like<br />
* Talk about when to include versus when to omit or "fold in" (e.g. button whose child is a label, filler, etc.)<br />
<br />
''Matthias: I would really like to get some clarification about signals, when to emit them, what their expected semantics are, etc. E.g: do I emit 'visible-data-changed' when a label gains a mnemonic underline ?''<br />
----<br />
<br />
= Interfaces =<br />
''Note from JD: For now, I'm including the Documentation along with a Do's and Don'ts. Those ultimately might need to be merged. For now, having them both makes it more obvious to me what we should be questioning, docs we might need to go back and update, etc., etc.''<br />
<br />
Most accessible objects are expected to implement a variety of interfaces based on the purpose served by the backing toolkit widget, along with the ways users can interact with that widget.<br />
<br />
== AtkAction ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should be implemented by instances of AtkObject classes with which the user can interact directly, i.e. buttons, checkboxes, scrollbars, e.g. components which are not "passive" providers of UI information.<br />
<br />
Exceptions: when the user interaction is already covered by another appropriate interface such as AtkEditableText (insert/delete test, etc.) or AtkValue (set value) then these actions should not be exposed by [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] as well.<br />
<br />
Also note that the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] API is limited in that parameters may not be passed to the object being activated; thus the action must be self-contained and specifiable via only a single "verb". Concrete examples include "press", "release", "click" for buttons, "drag" (meaning initiate drag) and "drop" for drag sources and drop targets, etc.<br />
<br />
Though most UI interactions on components should be invocable via keyboard as well as mouse, there will generally be a close mapping between "mouse actions" that are possible on a component and the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkActions]]. Where mouse and keyboard actions are redundant in effect, [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should expose only one action rather than exposing redundant actions if possible. By convention we have been using "mouse centric" terminology for [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] names.<br />
<br />
''Note from Matthias: Should point out here that actions have keybindings associated with them. What are those good for, anyway ?''<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
* TODO: There was some discussion in #a11y with Benjamin and Joanie regarding the 'exception' above. We need to decide if it is good to have this "It's an AtkAction unless it happens to be an interface and then, well, it's not" situation. Surely that is confusing to implementors. Should Actiony things always be actions?<br />
* TODO: The verdict on press/release versus just click for buttons is still out.<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkComponent ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] should be implemented by most if not all UI elements with an actual on-screen presence, i.e. components which can be said to have a screen-coordinate bounding box. Virtually all widgets will need to have [[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] implementations provided for their corresponding AtkObject class. In short, only UI elements which are *not* GUI elements will omit this ATK interface.<br />
<br />
A possible exception might be textual information with a transparent background, in which case text glyph bounding box information is provided by [[http://developer.gnome.org/atk/unstable/AtkTextt.html|AtkText]].<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkDocument ==<br />
=== Description from the Documentation ===<br />
The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should be supported by any object whose content is a representation or view of a document. The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should appear on the toplevel container for the document content; however [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] instances may be nested (i.e. an [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] may be a descendant of another [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]]) in those cases where one document contains "embedded content" which can reasonably be considered a document in its own right.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkHypertext and AtkHyperlinkImpl ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkHypertext.html|AtkHypertext]] is an interface used for objects which implement linking between multiple resource or content locations, or multiple 'markers' within a single document. A Hypertext instance is associated with one or more Hyperlinks, which are associated with particular offsets within the Hypertext's included content. While this interface is derived from Text, there is no requirement that Hypertext instances have textual content; they may implement Image as well, and Hyperlinks need not have non-zero text offsets.<br />
<br />
[[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] allows AtkObjects to refer to their associated AtkHyperlink instance, if one exists. [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] differs from AtkHyperlink in that [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] is an interface, whereas AtkHyperlink is a object type. The [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] interface allows a client to query an AtkObject for the availability of an associated AtkHyperlink instance, and obtain that instance. It is thus particularly useful in cases where embedded content or inline content within a text object is present, since the embedding text object implements [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]] and the inline/embedded objects are exposed as children which implement [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]], in addition to their being obtainable via [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]]:getLink followed by AtkHyperlink:getObject.<br />
<br />
=== How Assistive Technologies Use These Interfaces ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
<br />
''Matthias: I have used the hyperlink classes in the accessible implementation for GtkLinkButton, and I'd love to know if my implementation is using these classes as intended.''<br />
<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkImage ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] should be implemented by AtkObject subtypes on behalf of components which display image/pixmap information onscreen, and which provide information (other than just widget borders, etc.) via that image content. For instance, icons, buttons with icons, toolbar elements, and image viewing panes typically should implement [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]].<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] primarily provides two types of information: coordinate information (useful for screen review mode of screenreaders, and for use by onscreen magnifiers), and descriptive information. The descriptive information is provided for alternative, text-only presentation of the most significant information present in the image.<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkSelection ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] should be implemented by UI components with children which are exposed by atk_object_ref_child and atk_object_get_n_children, if the use of the parent UI component ordinarily involves selection of one or more of the objects corresponding to those AtkObject children - for example, selectable lists.<br />
<br />
Note that other types of "selection" (for instance text selection) are accomplished a other ATK interfaces - [[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] is limited to the selection/deselection of children.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkTable ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] should be implemented by components which present elements ordered via rows and columns. It may also be used to present tree-structured information if the nodes of the trees can be said to contain multiple "columns". Individual elements of an [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are typically referred to as "cells", and these cells are exposed by [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] as child AtkObjects of the [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]]. Both row/column and child-index-based access to these children is provided.<br />
<br />
Children of [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are frequently "lightweight" objects, that is, they may not have backing widgets in the host UI toolkit. They are therefore often transient.<br />
<br />
Since tables are often very complex, [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] includes provision for offering simplified summary information, as well as row and column headers and captions. Headers and captions are AtkObjects which may implement other interfaces ([[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]], etc.) as appropriate. [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] summaries may themselves be (simplified) [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]], etc.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkText ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] should be implemented by AtkObjects on behalf of widgets that have text content which is either attributed or otherwise non-trivial. AtkObjects whose text content is simple, unattributed, and very brief may expose that content via atk_object_get_name instead; however if the text is editable, multi-line, typically longer than three or four words, attributed, selectable, or if the object already uses the 'name' ATK property for other information, the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface should be used to expose the text content. In the case of editable text content, AtkEditableText (a subtype of the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface) should be implemented instead.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] provides not only traversal facilities and change notification for text content, but also caret tracking and glyph bounding box calculations. Note that the text strings are exposed as UTF-8, and are therefore potentially multi-byte, and caret-to-byte offset mapping makes no assumptions about the character length; also bounding box glyph-to-offset mapping may be complex for languages which use ligatures.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] should be implemented by UI components which contain text which the user can edit, via the AtkObject corresponding to that component (see AtkObject).<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is a subclass of [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], and as such, an object which implements [[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is by definition an [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] implementor as well.<br />
=== How Assistive Technologies Use These Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
As a general rule, only implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for widgets which:<br />
* Are text the user can interact with by doing things such as: arrowing amongst characters, selecting, copying, etc., OR<br />
* Present a substantial message and/or have significant, important-to-convey formatting attributes<br />
Thus you DO want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* Documents and any other place the text contents can be changed by the user.<br />
* Labels serving as static text (e.g. in a message box).<br />
You do NOT want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* The displayed text/label of buttons (instead set the AtkObject's name to reflect the text)<br />
* The displayed/functional value of widgets implementing AtkValue (instead set the AtkObject's description to reflect the text)<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkValue ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] should be implemented for components which either display a value from a bounded range, or which allow the user to specify a value from a bounded range, or both. For instance, most sliders and range controls, as well as dials, should have AtkObject representations which implement [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] on the component's behalf. [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValues]] may be read-only, in which case attempts to alter the value return FALSE to indicate failure.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
----<br />
<br />
= Relations =<br />
<br />
Add the AtkRelation types here<br />
<br />
----<br />
<br />
<br />
<br />
= Widgets =<br />
Two main properties of widgets are Name and Description.<br />
The name reflects the primary text for the widget: The text of a label, the text on a button.<br />
The description gives additional information: A button labeled "OK" could have the description "Accepts the dialog". FIXME more sensible example?<br />
<br />
== Label ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Button ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Line Edit ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Menu ==<br />
This is the menu bar of an application - File, Edit etc.<br />
<br />
* '''menu bar'''<br />
* '''menu*'''<br />
* '''menu*''' can contain more menu and menu item<br />
* '''menu item*'''<br />
<br />
There is one '''menu bar''' as root element, it has any number of '''menu''' as children.<br />
'''menu''' can have '''menu''' and '''menu item''' as children.<br />
'''menu item''' does not have children.<br />
<br />
<br />
<br />
== List ==<br />
* '''list'''<br />
* '''list item*'''<br />
<br />
A list has only one column. It contains items.<br />
<br />
'''States''': STATE_MANAGES_DESCENDANTS<br />
<br />
'''Events''': FIXME: what do we need? active descendant and more black magic<br />
<br />
'''Interfaces''': Table<br />
<br />
== Table ==<br />
<br />
current state in gtk: it would be difficult to provide row objects<br />
<br />
* '''table'''<br />
* '''table column header'''<br />
* '''table cell''' sometimes gtk has image+text in one cell. it represents that as two child objects of type '''table cell'''<br />
<br />
Web: firefox usually has rows, but sometimes it can happen that rows are not present (like html role presentation or css hidden)<br />
<br />
* '''table'''<br />
* '''table row''' the first row only contains headers<br />
* '''table row header''' once for the top-left header<br />
* '''table column header*''' as many as columns<br />
* '''table row*''' <br />
* '''table row header[0-1]''' for the left header<br />
* '''table cell*''' as many as columns, can be less if cell-span > 1 <br />
should headers be mandatory? should it be '''table header row''' for the first row?<br />
<br />
IA2: all cells are children of the table object. there are no row objects. like gtk.<br />
<br />
<br />
One big concern was notifications about selection changes. It would be great to get notified for things such as row selected. There are two ways to tackle this:<br />
in the first approach (gtk) we could define a signal: rows-selected() and rows-deselected or somesuch<br />
in the second approach with rows, the row object could be sent as selected. this has the downside that there is no way to do the same for columns. it is less flexible.<br />
IA2 has functions to get selected rows/columns<br />
<br />
<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''':<br />
<br />
== Trees ==<br />
The reason for the variety of trees that are possible is mostly that ARIA has very flexible tree definitions. The web implementators will simply expose that.<br />
<br />
<br />
Tree has exactly one column. For trees with more than one column the '''tree table''' has to be used.<br />
<br />
Tree items can contain a grouping element. In the grouping element it can have other items.<br />
<br />
=== Tree 1: define hierarchy through relations and group positions ===<br />
* '''tree'''<br />
* '''tree item''' with relations and group positions that define hierarchy<br />
* '''tree item'''<br />
* ...<br />
<br />
This tree works with add/remove tree items when they get expanded/collapsed.<br />
<br />
=== Tree 2: real hierarchy ===<br />
The items are arranged as children.<br />
<br />
* '''tree'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item*'''<br />
<br />
<br />
* '''tree'''<br />
* '''tree item group'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item group'''<br />
* '''tree item*'''<br />
<br />
No need for add/remove for expanding/collapsing of sub items.<br />
<br />
<br />
=== Tree 3: Tree Table ===<br />
Tree tables can not be hierarchical.<br />
'''tree table''' can have more than one column<br />
<br />
* '''tree table''' <br />
* '''tree table cell*'''<br />
<br />
* '''tree table'''<br />
* '''tree table row*'''<br />
* '''tree table cell*'''<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''':<br />
<br />
== Scroll Bars ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Combo Box ==<br />
* ATSPI_ROLE_COMBO_BOX is the root element<br />
* ATSPI_ROLE_TABLE see table. Usually this is a flat list of items.<br />
* ATSPI_ROLE_TEXT [optional] is present when the combo box is editable.<br />
<br />
The Accessible Name of the '''combo box''' accessible is the current text that is displayed. This text can be typed by the user or one of the selected items.<br />
<br />
'''States''': Focused, Editable<br />
<br />
'''Events''': Focus<br />
<br />
'''Interfaces''': None required<br />
<br />
The name of the ATSPI_ROLE_COMBO_BOX should always reflect the current text.<br />
FIXME: what should combo box send when the current item/text changed?<br />
<br />
<br />
== Foo Bar Template ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Stuff we Mustn't Forget ==<br />
(But are not sure where all to put it yet.)<br />
<br />
* "Hint text" - Gtk+ has it as an AtkObject attribute ('placeholder-text').<br />
* Window management stuff - what happens when a window gains focus etc<br />
* Registry - give an overview what it is, why and how clients and servers register to it.]\<br />
* Relations <br />
* make sure to mention them with the widgets that most likely need them (labelled-by for line edit)<br />
* document what they are in general<br />
<br />
this is a test to add another item. is it a diff?</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=User:Frederik.gladhorn/atspi-scratch&diff=61136User:Frederik.gladhorn/atspi-scratch2011-07-01T11:52:22Z<p>Frederik.gladhorn: </p>
<hr />
<div>= Introduction =<br />
This guide is for implementors of ATK and AT-SPI 2.<br />
It should say how to describe the user interface through the use of the AT-SPI Accessibility APIs.<br />
Having consistent representations of widgets makes the implementation of assisitive technology much easier.<br />
<br />
ATK and AT-SPI should be identical to large parts. Especially roles and enums should be the same, so this guide applies to both.<br />
<br />
The aim is to have a defined structure where applicable. For example an editable Combo Box should have a list or table and an editable text as children.<br />
<br />
In addition the expected signals such as accessible-name changed should be documented so that it is clear which signals to emit.<br />
<br />
= States =<br />
Accessible objects always have a set of states.<br />
For each widget below it is mentioned which states should be implemented.<br />
Over AT-SPI2 the states are split into two 32 bit uints. (yes, it's that horrible).<br />
<br />
FIXME link to states list<br />
<br />
ATSPI States (from at-spi2-core/atspi/atspi-constants.c)<br />
<br />
* ATSPI_STATE_INVALID: <br />
* ATSPI_STATE_ACTIVE: Indicates a window is currently the active window, or is an active subelement within a container or table <br />
* ATSPI_STATE_ARMED: Indicates that the object is armed <br />
* ATSPI_STATE_BUSY: Indicates the current object is busy, i.e. onscreen representation is in the process of changing, or the object is temporarily unavailable for interaction due to activity already in progress. <br />
* ATSPI_STATE_CHECKED: Indicates this object is currently checked <br />
* ATSPI_STATE_COLLAPSED: Indicates this object is collapsed <br />
* ATSPI_STATE_DEFUNCT: Indicates that this object no longer has a valid backing widget (for instance, if its peer object has been destroyed) <br />
* ATSPI_STATE_EDITABLE: Indicates the user can change the contents of this object <br />
* ATSPI_STATE_ENABLED: Indicates that this object is enabled, i.e. that it currently reflects some application state. Objects that are "greyed out" may lack this state, and may lack the STATE_SENSITIVE if direct user interaction cannot cause them to acquire STATE_ENABLED. @see STATE_SENSITIVE. <br />
* ATSPI_STATE_EXPANDABLE: Indicates this object allows progressive disclosure of its children <br />
* ATSPI_STATE_EXPANDED: Indicates this object its expanded <br />
* ATSPI_STATE_FOCUSABLE: Indicates this object can accept keyboard focus, which means all events resulting from typing on the keyboard will normally be passed to it when it has focus <br />
* ATSPI_STATE_FOCUSED: Indicates this object currently has the keyboard focus <br />
* ATSPI_STATE_HAS_TOOLTIP: Indicates that the object has an associated tooltip <br />
* ATSPI_STATE_HORIZONTAL: Indicates the orientation of thsi object is horizontal <br />
* ATSPI_STATE_ICONIFIED: Indicates this object is minimized and is represented only by an icon <br />
* ATSPI_STATE_MODAL: Indicates something must be done with this object before the user can interact with an object in a different window. <br />
* ATSPI_STATE_MULTI_LINE: Indicates this (text) object can contain multiple lines of text <br />
* ATSPI_STATE_MULTISELECTABLE: Indicates this object allows more than one of its children to be selected at the same time, or in the case of text objects, that the object supports non-contiguous text selections. <br />
* ATSPI_STATE_OPAQUE: Indicates this object paints every pixel within its rectangular region. It also indicates an alpha value of unity, if it supports alpha blending. <br />
* ATSPI_STATE_PRESSED: Indicates this object is currently pressed <br />
* ATSPI_STATE_RESIZABLE: Indicates the size of this object's size is not fixed <br />
* ATSPI_STATE_SELECTABLE: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that can be selected. <br />
* ATSPI_STATE_SELECTED: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that has been selected. <br />
* ATSPI_STATE_SENSITIVE: Indicates this object is sensitive, e.g. to user interaction. STATE_SENSITIVE usually accompanies STATE_ENABLED for user-actionable controls, but may be found in the absence of STATE_ENABLED if the current visible state of the control is "disconnected" from the application state. In such cases, direct user interaction can often result in the object gaining STATE_SENSITIVE, for instance if a user makes an explicit selection using an object whose current state is ambiguous or undefined. @see STATE_ENABLED, STATE_INDETERMINATE. <br />
* ATSPI_STATE_SHOWING: Indicates this object, the object's parent, the object's parent's parent, and so on, are all 'shown' to the end-user, i.e. subject to "exposure" if blocking or obscuring objects do not interpose between this object and the top of the window stack. <br />
* ATSPI_STATE_SINGLE_LINE: Indicates this (text) object can contain only a single line of text <br />
* ATSPI_STATE_STALE: Indicates that the information returned for this object may no longer be synchronized with the application state. This can occur if the object has STATE_TRANSIENT, and can also occur towards the end of the object peer's lifecycle. <br />
* ATSPI_STATE_TRANSIENT: Indicates this object is transient <br />
* ATSPI_STATE_VERTICAL: Indicates the orientation of this object is vertical; for example this state may appear on such objects as scrollbars, text objects (with vertical text flow), separators, etc. <br />
* ATSPI_STATE_VISIBLE: Indicates this object is visible, e.g. has been explicitly marked for exposure to the user. STATE_VISIBLE is no guarantee that the object is actually unobscured on the screen, only that it is 'potentially' visible, barring obstruction, being scrolled or clipped out of the field of view, or having an ancestor container that has not yet made visible. A widget is potentially onscreen if it has both STATE_VISIBLE and STATE_SHOWING. The absence of STATE_VISIBLE and STATE_SHOWING is semantically equivalent to saying that an object is 'hidden'. <br />
* ATSPI_STATE_MANAGES_DESCENDANTS: Indicates that "active-descendant-changed" event is sent when children become 'active' (i.e. are selected or navigated to onscreen). Used to prevent need to enumerate all children in very large containers, like tables. The presence of STATE_MANAGES_DESCENDANTS is an indication to the client. that the children should not, and need not, be enumerated by the client. Objects implementing this state are expected to provide relevant state notifications to listening clients, for instance notifications of visibility changes and activation of their contained child objects, without the client having previously requested references to those children. <br />
* ATSPI_STATE_INDETERMINATE: Indicates that a check box or other boolean indicator is in a state other than checked or not checked. This usually means that the boolean value reflected or controlled by the object does not apply consistently to the entire current context. For example, a checkbox for the "Bold" attribute of text may have STATE_INDETERMINATE if the currently selected text contains a mixture of weight attributes. In many cases interacting with a STATE_INDETERMINATE object will cause the context's corresponding boolean attribute to be homogenized, whereupon the object will lose STATE_INDETERMINATE and a corresponding state-changed event will be fired. <br />
* ATSPI_STATE_REQUIRED: Indicates that user interaction with this object is 'required' from the user, for instance before completing the processing of a form. <br />
* ATSPI_STATE_TRUNCATED: Indicates that an object's onscreen content is truncated, e.g. a text value in a spreadsheet cell. <br />
* ATSPI_STATE_ANIMATED: Indicates this object's visual representation is dynamic, not static. This state may be applied to an object during an animated 'effect' and be removed from the object once its visual representation becomes static. some applications, notably content viewers, may not be able to detect all kinds of animated content. Therefore the absence of this state should not be taken as definitive evidence that the object's visual representation is static; this state is advisory. <br />
* ATSPI_STATE_INVALID_ENTRY: This object has indicated an error condition due to failure of input validation. For instance, a form control may acquire this state in response to invalid or malformed user input. <br />
* ATSPI_STATE_SUPPORTS_AUTOCOMPLETION: This state indicates that the object in question implements some form of &#168;typeahead&#168; or pre-selection behavior whereby entering the first character of one or more sub-elements causes those elements to scroll into view or become selected. Subsequent character input may narrow the selection further as long as one or more sub-elements match the string. This state is normally only useful and encountered on objects that implement Selection. In some cases the typeahead behavior may result in full or partial &#168;completion&#168; of the data in the input field, in which case these input events may trigger text-changed events from the source. <br />
* ATSPI_STATE_SELECTABLE_TEXT: This state indicates that the object in question supports text selection. It should only be exposed on objects which implement the Text interface, in order to distinguish this state from STATE_SELECTABLE, which infers that the object in question is a selectable child of an object which implements Selection. While similar, text selection and subelement selection are distinct operations. <br />
* ATSPI_STATE_IS_DEFAULT: This state indicates that the object in question is the 'default' interaction object in a dialog, i.e. the one that gets activated if the user presses "Enter" when the dialog is initially posted. <br />
* ATSPI_STATE_VISITED: This state indicates that the object (typically a hyperlink) has already been activated or invoked, with the result that some backing data has been downloaded or rendered. <br />
* ATSPI_STATE_LAST_DEFINED: This value of the enumeration should not be used as a parameter, it indicates the number of items in the StateType enumeration. <br />
<br />
<br />
<br />
Some states are valid for all widgets:<br />
* Visible?<br />
<br />
<br />
----<br />
= Roles =<br />
* ATSPI_ROLE_INVALID: A Role indicating an error condition, such as uninitialized Role data. <br />
* ATSPI_ROLE_ACCELERATOR_LABEL: Object is a label indicating the keyboard accelerators for the parent <br />
* ATSPI_ROLE_ALERT: Object is used to alert the user about something <br />
* ATSPI_ROLE_ANIMATION: Object contains a dynamic or moving image of some kind <br />
* ATSPI_ROLE_ARROW: Object is a 2d directional indicator <br />
* ATSPI_ROLE_CALENDAR: Object contains one or more dates, usually arranged into a 2d list <br />
* ATSPI_ROLE_CANVAS: Object that can be drawn into and is used to trap events <br />
* ATSPI_ROLE_CHECK_BOX: A choice that can be checked or unchecked and provides a separate indicator for the current state. <br />
* ATSPI_ROLE_CHECK_MENU_ITEM: A menu item that behaves like a check box (see ROLE_CHECK_BOX) <br />
* ATSPI_ROLE_COLOR_CHOOSER: A specialized dialog that lets the user choose a color. <br />
* ATSPI_ROLE_COLUMN_HEADER: The header for a column of data <br />
* ATSPI_ROLE_COMBO_BOX: A list of choices the user can select from <br />
* ATSPI_ROLE_DATE_EDITOR: An object which allows entry of a date <br />
* ATSPI_ROLE_DESKTOP_ICON: An inconifed internal frame within a DESKTOP_PANE <br />
* ATSPI_ROLE_DESKTOP_FRAME: A pane that supports internal frames and iconified versions of those internal frames. <br />
* ATSPI_ROLE_DIAL: An object that allows a value to be changed via rotating a visual element, or which displays a value via such a rotating element. <br />
* ATSPI_ROLE_DIALOG: A top level window with title bar and a border <br />
* ATSPI_ROLE_DIRECTORY_PANE: A pane that allows the user to navigate through and select the contents of a directory <br />
* ATSPI_ROLE_DRAWING_AREA: A specialized dialog that displays the files in the directory and lets the user select a file, browse a different directory, or specify a filename. <br />
* ATSPI_ROLE_FILE_CHOOSER: An object used for drawing custom user interface elements. <br />
* ATSPI_ROLE_FILLER: A object that fills up space in a user interface <br />
* ATSPI_ROLE_FOCUS_TRAVERSABLE: Don't use, reserved for future use. <br />
* ATSPI_ROLE_FONT_CHOOSER: Allows selection of a display font <br />
* ATSPI_ROLE_FRAME: A top level window with a title bar, border, menubar, etc. <br />
* ATSPI_ROLE_GLASS_PANE: A pane that is guaranteed to be painted on top of all panes beneath it <br />
* ATSPI_ROLE_HTML_CONTAINER: A document container for HTML, whose children represent the document content. <br />
* ATSPI_ROLE_ICON: A small fixed size picture, typically used to decorate components <br />
* ATSPI_ROLE_IMAGE: An image, typically static. <br />
* ATSPI_ROLE_INTERNAL_FRAME: A frame-like object that is clipped by a desktop pane. <br />
* ATSPI_ROLE_LABEL: An object used to present an icon or short string in an interface <br />
* ATSPI_ROLE_LAYERED_PANE: A specialized pane that allows its children to be drawn in layers, providing a form of stacking order. <br />
* ATSPI_ROLE_LIST: An object that presents a list of objects to the user and allows the user to select one or more of them. <br />
* ATSPI_ROLE_LIST_ITEM: An object that represents an element of a list. <br />
* ATSPI_ROLE_MENU: An object usually found inside a menu bar that contains a list of actions the user can choose from. <br />
* ATSPI_ROLE_MENU_BAR: An object usually drawn at the top of the primary dialog box of an application that contains a list of menus the user can choose from. <br />
* ATSPI_ROLE_MENU_ITEM: An object usually contained in a menu that presents an action the user can choose. <br />
* ATSPI_ROLE_OPTION_PANE: A specialized pane whose primary use is inside a DIALOG <br />
* ATSPI_ROLE_PAGE_TAB: An object that is a child of a page tab list <br />
* ATSPI_ROLE_PAGE_TAB_LIST: An object that presents a series of panels (or page tabs), one at a time, through some mechanism provided by the object. <br />
* ATSPI_ROLE_PANEL: A generic container that is often used to group objects. <br />
* ATSPI_ROLE_PASSWORD_TEXT: A text object uses for passwords, or other places where the text content is not shown visibly to the user. <br />
* ATSPI_ROLE_POPUP_MENU: A temporary window that is usually used to offer the user a list of choices, and then hides when the user selects one of those choices. <br />
* ATSPI_ROLE_PROGRESS_BAR: An object used to indicate how much of a task has been completed. <br />
* ATSPI_ROLE_PUSH_BUTTON: An object the user can manipulate to tell the application to do something. <br />
* ATSPI_ROLE_RADIO_BUTTON: A specialized check box that will cause other radio buttons in the same group to become uncghecked when this one is checked. <br />
* ATSPI_ROLE_RADIO_MENU_ITEM: Object is both a menu item and a "radio button" (see ROLE_RADIO_BUTTON) <br />
* ATSPI_ROLE_ROOT_PANE: A specialized pane that has a glass pane and a layered pane as its children. <br />
* ATSPI_ROLE_ROW_HEADER: The header for a row of data <br />
* ATSPI_ROLE_SCROLL_BAR: An object usually used to allow a user to incrementally view a large amount of data by moving the bounds of a viewport along a one-dimensional axis. <br />
* ATSPI_ROLE_SCROLL_PANE: An object that allows a user to incrementally view a large amount of information. ROLE_SCROLL_PANE objects are usually accompanied by ROLE_SCROLL_BAR controllers, on which the RELATION_CONTROLLER_FOR and RELATION_CONTROLLED_BY reciprocal relations are set; \see Accessibility::RelationSet. <br />
* ATSPI_ROLE_SEPARATOR: An object usually contained in a menu to provide a visible and logical separation of the contents in a menu. <br />
* ATSPI_ROLE_SLIDER: An object that allows the user to select from a bounded range <br />
* ATSPI_ROLE_SPIN_BUTTON: An object which allows one of a set of choices to be selected, and which displays the current choice. Unlike ROLE_SCROLL_BAR, ROLE_SLIDER objects need not control 'viewport'-like objects. <br />
* ATSPI_ROLE_SPLIT_PANE: A specialized panel that presents two other panels at the same time. <br />
* ATSPI_ROLE_STATUS_BAR: Object displays non-quantitative status information (c.f. ROLE_PROGRESS_BAR) <br />
* ATSPI_ROLE_TABLE: An object used to repesent information in terms of rows and columns. <br />
* ATSPI_ROLE_TABLE_CELL: A 'cell' or discrete child within a Table. \note Table cells need not have ROLE_TABLE_CELL, other RoleType values are valid as well. <br />
* ATSPI_ROLE_TABLE_COLUMN_HEADER: An object which labels a particular column in a Table. <br />
* ATSPI_ROLE_TABLE_ROW_HEADER: An object which labels a particular row in a Table. Table rows and columns may also be labelled via the RELATION_LABEL_FOR/RELATION_LABELLED_BY relationships; see Accessibility.RelationSet. <br />
* ATSPI_ROLE_TEAROFF_MENU_ITEM: Object allows menu to be removed from menubar and shown in its own window. <br />
* ATSPI_ROLE_TERMINAL: An object that emulates a terminal <br />
* ATSPI_ROLE_TEXT: An object that presents text to the user, of nonspecific type. <br />
* ATSPI_ROLE_TOGGLE_BUTTON: A specialized push button that can be checked or unchecked, but does not procide a separate indicator for the current state. <br />
* ATSPI_ROLE_TOOL_BAR: A bar or palette usually composed of push buttons or toggle buttons <br />
* ATSPI_ROLE_TOOL_TIP: An object that provides information about another object <br />
* ATSPI_ROLE_TREE: An object used to repsent hierarchical information to the user. <br />
* ATSPI_ROLE_TREE_TABLE: An object that presents both tabular and hierarchical info to the user <br />
* ATSPI_ROLE_UNKNOWN: The object contains some Accessible information, but its role is not known. <br />
* ATSPI_ROLE_VIEWPORT: An object usually used in a scroll pane, or to otherwise clip a larger object or content renderer to a specific onscreen viewport. <br />
* ATSPI_ROLE_WINDOW: A &#168;top level window&#168; with no title or border. <br />
* ATSPI_ROLE_EXTENDED: means that the role for this item is known, but not included in the core enumeration <br />
* ATSPI_ROLE_HEADER: An object that serves as a document header. <br />
* ATSPI_ROLE_FOOTER: An object that serves as a document footer. <br />
* ATSPI_ROLE_PARAGRAPH: An object which is contains a single paragraph of text content. See also ROLE_TEXT. <br />
* ATSPI_ROLE_RULER: An object which describes margins and tab stops, etc. for text objects which it controls (should have CONTROLLER_FOR relation to such). <br />
* ATSPI_ROLE_APPLICATION: An object corresponding to the toplevel accessible of an application, which may contain ROLE_FRAME objects or other accessible objects. Children of AccessibleDesktop objects are generally ROLE_APPLICATION objects. <br />
* ATSPI_ROLE_AUTOCOMPLETE: The object is a dialog or list containing items for insertion into an entry widget, for instance a list of words for completion of a text entry. <br />
* ATSPI_ROLE_EDITBAR: The object is an editable text object in a toolbar. <br />
* ATSPI_ROLE_EMBEDDED: The object is an embedded component container. This role is a "grouping" hint that the contained objects share a context which is different from the container in which this accessible is embedded. In particular, it is used for some kinds of document embedding, and for embedding of out-of-process component, "panel applets", etc. <br />
* ATSPI_ROLE_ENTRY: The object is a component whose textual content may be entered or modified by the user, provided STATE_EDITABLE is present. A readonly ROLE_ENTRY object (i.e. where STATE_EDITABLE is not present) implies a read-only 'text field' in a form, as opposed to a title, label, or caption. <br />
* ATSPI_ROLE_CHART: The object is a graphical depiction of quantitative data. It may contain multiple subelements whose attributes and/or description may be queried to obtain both the quantitative data and information about how the data is being presented. The LABELLED_BY relation is particularly important in interpreting objects of this type, as is the accessible-description property. See ROLE_CAPTION <br />
* ATSPI_ROLE_CAPTION: The object contains descriptive information, usually textual, about another user interface element such as a table, chart, or image. <br />
* ATSPI_ROLE_DOCUMENT_FRAME: The object is a visual frame or container which contains a view of document content. Document frames may occur within another Document instance, in which case the second document may be said to be embedded in the containing instance. HTML frames are often ROLE_DOCUMENT_FRAME. Either this object, or a singleton descendant, should implement the Document interface. <br />
* ATSPI_ROLE_HEADING: The object serves as a heading for content which follows it in a document. The 'heading level' of the heading, if availabe, may be obtained by querying the object's attributes. <br />
* ATSPI_ROLE_PAGE: The object is a containing instance which encapsulates a page of information. ROLE_PAGE is used in documents and content which support a paginated navigation model. <br />
* ATSPI_ROLE_SECTION: The object is a containing instance of document content which constitutes a particular 'logical' section of the document. The type of content within a section, and the nature of the section division itself, may be obtained by querying the object's attributes. Sections may be nested. <br />
* ATSPI_ROLE_REDUNDANT_OBJECT: The object is redundant with another object in the hierarchy, and is exposed for purely technical reasons. Objects of this role should be ignored by clients, if they are encountered at all. <br />
* ATSPI_ROLE_FORM: The object is a containing instance of document content which has within it components with which the user can interact in order to input information; i.e. the object is a container for pushbuttons, comboboxes, text input fields, and other 'GUI' components. ROLE_FORM should not, in general, be used for toplevel GUI containers or dialogs, but should be reserved for 'GUI' containers which occur within document content, for instance within Web documents, presentations, or text documents. Unlike other GUI containers and dialogs which occur inside application instances, ROLE_FORM containers' components are associated with the current document, rather than the current foreground application or viewer instance. <br />
* ATSPI_ROLE_LINK: The object is a hypertext anchor, i.e. a "link" in a hypertext document. Such objects are distinct from 'inline' content which may also use the Hypertext/Hyperlink interfaces to indicate the range/location within a text object where an inline or embedded object lies. <br />
* ATSPI_ROLE_INPUT_METHOD_WINDOW: The object is a window or similar viewport which is used to allow composition or input of a 'complex character', in other words it is an "input method window." <br />
* ATSPI_ROLE_LAST_DEFINED: Not a valid role, used for finding end of enumeration. <br />
----<br />
<br />
= Events =<br />
== Focus ==<br />
One of the most important events is the focus change.<br />
FIXME document here what needs to happen when focus changes.<br />
<br />
----<br />
<br />
= Objects and their Properties =<br />
<br />
* Add AtkObject, AtkRoles, Names, Descriptions and the like<br />
* Talk about when to include versus when to omit or "fold in" (e.g. button whose child is a label, filler, etc.)<br />
<br />
''Matthias: I would really like to get some clarification about signals, when to emit them, what their expected semantics are, etc. E.g: do I emit 'visible-data-changed' when a label gains a mnemonic underline ?''<br />
----<br />
<br />
= Interfaces =<br />
''Note from JD: For now, I'm including the Documentation along with a Do's and Don'ts. Those ultimately might need to be merged. For now, having them both makes it more obvious to me what we should be questioning, docs we might need to go back and update, etc., etc.''<br />
<br />
Most accessible objects are expected to implement a variety of interfaces based on the purpose served by the backing toolkit widget, along with the ways users can interact with that widget.<br />
<br />
== AtkAction ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should be implemented by instances of AtkObject classes with which the user can interact directly, i.e. buttons, checkboxes, scrollbars, e.g. components which are not "passive" providers of UI information.<br />
<br />
Exceptions: when the user interaction is already covered by another appropriate interface such as AtkEditableText (insert/delete test, etc.) or AtkValue (set value) then these actions should not be exposed by [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] as well.<br />
<br />
Also note that the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] API is limited in that parameters may not be passed to the object being activated; thus the action must be self-contained and specifiable via only a single "verb". Concrete examples include "press", "release", "click" for buttons, "drag" (meaning initiate drag) and "drop" for drag sources and drop targets, etc.<br />
<br />
Though most UI interactions on components should be invocable via keyboard as well as mouse, there will generally be a close mapping between "mouse actions" that are possible on a component and the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkActions]]. Where mouse and keyboard actions are redundant in effect, [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should expose only one action rather than exposing redundant actions if possible. By convention we have been using "mouse centric" terminology for [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] names.<br />
<br />
''Note from Matthias: Should point out here that actions have keybindings associated with them. What are those good for, anyway ?''<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
* TODO: There was some discussion in #a11y with Benjamin and Joanie regarding the 'exception' above. We need to decide if it is good to have this "It's an AtkAction unless it happens to be an interface and then, well, it's not" situation. Surely that is confusing to implementors. Should Actiony things always be actions?<br />
* TODO: The verdict on press/release versus just click for buttons is still out.<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkComponent ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] should be implemented by most if not all UI elements with an actual on-screen presence, i.e. components which can be said to have a screen-coordinate bounding box. Virtually all widgets will need to have [[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] implementations provided for their corresponding AtkObject class. In short, only UI elements which are *not* GUI elements will omit this ATK interface.<br />
<br />
A possible exception might be textual information with a transparent background, in which case text glyph bounding box information is provided by [[http://developer.gnome.org/atk/unstable/AtkTextt.html|AtkText]].<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkDocument ==<br />
=== Description from the Documentation ===<br />
The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should be supported by any object whose content is a representation or view of a document. The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should appear on the toplevel container for the document content; however [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] instances may be nested (i.e. an [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] may be a descendant of another [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]]) in those cases where one document contains "embedded content" which can reasonably be considered a document in its own right.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkHypertext and AtkHyperlinkImpl ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkHypertext.html|AtkHypertext]] is an interface used for objects which implement linking between multiple resource or content locations, or multiple 'markers' within a single document. A Hypertext instance is associated with one or more Hyperlinks, which are associated with particular offsets within the Hypertext's included content. While this interface is derived from Text, there is no requirement that Hypertext instances have textual content; they may implement Image as well, and Hyperlinks need not have non-zero text offsets.<br />
<br />
[[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] allows AtkObjects to refer to their associated AtkHyperlink instance, if one exists. [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] differs from AtkHyperlink in that [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] is an interface, whereas AtkHyperlink is a object type. The [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] interface allows a client to query an AtkObject for the availability of an associated AtkHyperlink instance, and obtain that instance. It is thus particularly useful in cases where embedded content or inline content within a text object is present, since the embedding text object implements [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]] and the inline/embedded objects are exposed as children which implement [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]], in addition to their being obtainable via [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]]:getLink followed by AtkHyperlink:getObject.<br />
<br />
=== How Assistive Technologies Use These Interfaces ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
<br />
''Matthias: I have used the hyperlink classes in the accessible implementation for GtkLinkButton, and I'd love to know if my implementation is using these classes as intended.''<br />
<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkImage ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] should be implemented by AtkObject subtypes on behalf of components which display image/pixmap information onscreen, and which provide information (other than just widget borders, etc.) via that image content. For instance, icons, buttons with icons, toolbar elements, and image viewing panes typically should implement [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]].<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] primarily provides two types of information: coordinate information (useful for screen review mode of screenreaders, and for use by onscreen magnifiers), and descriptive information. The descriptive information is provided for alternative, text-only presentation of the most significant information present in the image.<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkSelection ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] should be implemented by UI components with children which are exposed by atk_object_ref_child and atk_object_get_n_children, if the use of the parent UI component ordinarily involves selection of one or more of the objects corresponding to those AtkObject children - for example, selectable lists.<br />
<br />
Note that other types of "selection" (for instance text selection) are accomplished a other ATK interfaces - [[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] is limited to the selection/deselection of children.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkTable ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] should be implemented by components which present elements ordered via rows and columns. It may also be used to present tree-structured information if the nodes of the trees can be said to contain multiple "columns". Individual elements of an [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are typically referred to as "cells", and these cells are exposed by [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] as child AtkObjects of the [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]]. Both row/column and child-index-based access to these children is provided.<br />
<br />
Children of [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are frequently "lightweight" objects, that is, they may not have backing widgets in the host UI toolkit. They are therefore often transient.<br />
<br />
Since tables are often very complex, [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] includes provision for offering simplified summary information, as well as row and column headers and captions. Headers and captions are AtkObjects which may implement other interfaces ([[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]], etc.) as appropriate. [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] summaries may themselves be (simplified) [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]], etc.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkText ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] should be implemented by AtkObjects on behalf of widgets that have text content which is either attributed or otherwise non-trivial. AtkObjects whose text content is simple, unattributed, and very brief may expose that content via atk_object_get_name instead; however if the text is editable, multi-line, typically longer than three or four words, attributed, selectable, or if the object already uses the 'name' ATK property for other information, the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface should be used to expose the text content. In the case of editable text content, AtkEditableText (a subtype of the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface) should be implemented instead.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] provides not only traversal facilities and change notification for text content, but also caret tracking and glyph bounding box calculations. Note that the text strings are exposed as UTF-8, and are therefore potentially multi-byte, and caret-to-byte offset mapping makes no assumptions about the character length; also bounding box glyph-to-offset mapping may be complex for languages which use ligatures.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] should be implemented by UI components which contain text which the user can edit, via the AtkObject corresponding to that component (see AtkObject).<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is a subclass of [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], and as such, an object which implements [[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is by definition an [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] implementor as well.<br />
=== How Assistive Technologies Use These Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
As a general rule, only implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for widgets which:<br />
* Are text the user can interact with by doing things such as: arrowing amongst characters, selecting, copying, etc., OR<br />
* Present a substantial message and/or have significant, important-to-convey formatting attributes<br />
Thus you DO want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* Documents and any other place the text contents can be changed by the user.<br />
* Labels serving as static text (e.g. in a message box).<br />
You do NOT want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* The displayed text/label of buttons (instead set the AtkObject's name to reflect the text)<br />
* The displayed/functional value of widgets implementing AtkValue (instead set the AtkObject's description to reflect the text)<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkValue ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] should be implemented for components which either display a value from a bounded range, or which allow the user to specify a value from a bounded range, or both. For instance, most sliders and range controls, as well as dials, should have AtkObject representations which implement [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] on the component's behalf. [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValues]] may be read-only, in which case attempts to alter the value return FALSE to indicate failure.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
----<br />
<br />
= Relations =<br />
<br />
Add the AtkRelation types here<br />
<br />
----<br />
<br />
<br />
<br />
= Widgets =<br />
Two main properties of widgets are Name and Description.<br />
The name reflects the primary text for the widget: The text of a label, the text on a button.<br />
The description gives additional information: A button labeled "OK" could have the description "Accepts the dialog". FIXME more sensible example?<br />
<br />
== Label ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Button ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Line Edit ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Menu ==<br />
This is the menu bar of an application - File, Edit etc.<br />
<br />
* '''menu bar'''<br />
* '''menu*'''<br />
* '''menu*''' can contain more menu and menu item<br />
* '''menu item*'''<br />
<br />
There is one '''menu bar''' as root element, it has any number of '''menu''' as children.<br />
'''menu''' can have '''menu''' and '''menu item''' as children.<br />
'''menu item''' does not have children.<br />
<br />
<br />
<br />
== List ==<br />
* '''list'''<br />
* '''list item*'''<br />
<br />
A list has only one column. It contains items.<br />
<br />
'''States''': STATE_MANAGES_DESCENDANTS<br />
<br />
'''Events''': FIXME: what do we need? active descendant and more black magic<br />
<br />
'''Interfaces''': Table<br />
<br />
== Table ==<br />
<br />
current state in gtk: it would be difficult to provide row objects<br />
<br />
* '''table'''<br />
* '''table column header'''<br />
* '''table cell''' sometimes gtk has image+text in one cell. it represents that as two child objects of type '''table cell'''<br />
<br />
Web: firefox usually has rows, but sometimes it can happen that rows are not present (like html role presentation or css hidden)<br />
<br />
* '''table'''<br />
* '''table row''' the first row only contains headers<br />
* '''table row header''' once for the top-left header<br />
* '''table column header*''' as many as columns<br />
* '''table row*''' <br />
* '''table row header[0-1]''' for the left header<br />
* '''table cell*''' as many as columns, can be less if cell-span > 1 <br />
should headers be mandatory? should it be '''table header row''' for the first row?<br />
<br />
IA2: all cells are children of the table object. there are no row objects. like gtk.<br />
<br />
<br />
One big concern was notifications about selection changes. It would be great to get notified for things such as row selected. There are two ways to tackle this:<br />
in the first approach (gtk) we could define a signal: rows-selected() and rows-deselected or somesuch<br />
in the second approach with rows, the row object could be sent as selected. this has the downside that there is no way to do the same for columns. it is less flexible.<br />
IA2 has functions to get selected rows/columns<br />
<br />
<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''':<br />
<br />
== Trees ==<br />
The reason for the variety of trees that are possible is mostly that ARIA has very flexible tree definitions. The web implementators will simply expose that.<br />
<br />
<br />
Tree has exactly one column. For trees with more than one column the '''tree table''' has to be used.<br />
<br />
Tree items can contain a grouping element. In the grouping element it can have other items.<br />
<br />
=== Tree 1: define hierarchy through relations and group positions ===<br />
* '''tree'''<br />
* '''tree item''' with relations and group positions that define hierarchy<br />
* '''tree item'''<br />
* ...<br />
<br />
This tree works with add/remove tree items when they get expanded/collapsed.<br />
<br />
=== Tree 2: real hierarchy ===<br />
The items are arranged as children.<br />
<br />
* '''tree'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item*'''<br />
<br />
<br />
* '''tree'''<br />
* '''tree item group'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item group'''<br />
* '''tree item*'''<br />
<br />
No need for add/remove for expanding/collapsing of sub items.<br />
<br />
<br />
=== Tree 3: Tree Table ===<br />
Tree tables can not be hierarchical.<br />
'''tree table''' can have more than one column<br />
<br />
* '''tree table''' <br />
* '''tree table cell*'''<br />
<br />
* '''tree table'''<br />
* '''tree table row*'''<br />
* '''tree table cell*'''<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''':<br />
<br />
== Scroll Bars ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Combo Box ==<br />
* ATSPI_ROLE_COMBO_BOX is the root element<br />
* ATSPI_ROLE_TABLE see table. Usually this is a flat list of items.<br />
* ATSPI_ROLE_TEXT [optional] is present when the combo box is editable.<br />
<br />
The Accessible Name of the '''combo box''' accessible is the current text that is displayed. This text can be typed by the user or one of the selected items.<br />
<br />
'''States''': Focused, Editable<br />
<br />
'''Events''': Focus<br />
<br />
'''Interfaces''': None required<br />
<br />
The name of the ATSPI_ROLE_COMBO_BOX should always reflect the current text.<br />
FIXME: what should combo box send when the current item/text changed?<br />
<br />
<br />
== Foo Bar Template ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Stuff we Mustn't Forget ==<br />
(But are not sure where all to put it yet.)<br />
<br />
* "Hint text" - Gtk+ has it as an AtkObject attribute ('placeholder-text').<br />
* Window management stuff - what happens when a window gains focus etc<br />
* Registry - give an overview what it is, why and how clients and servers register to it.]\<br />
* Relations <br />
* make sure to mention them with the widgets that most likely need them (labelled-by for line edit)<br />
* document what they are in general</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=User:Frederik.gladhorn/atspi-scratch&diff=61135User:Frederik.gladhorn/atspi-scratch2011-07-01T11:47:05Z<p>Frederik.gladhorn: /* Tree 3: Tree Table */</p>
<hr />
<div>= GNOME Accessibility Team =<br />
= ATK/AT-SPI Best Practices Guide for Implementors =<br />
= DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT =<br />
<br />
= Introduction =<br />
This guide is for implementors of ATK and AT-SPI 2.<br />
It should say how to describe the user interface through the use of the AT-SPI Accessibility APIs.<br />
Having consistent representations of widgets makes the implementation of assisitive technology much easier.<br />
<br />
ATK and AT-SPI should be identical to large parts. Especially roles and enums should be the same, so this guide applies to both.<br />
<br />
The aim is to have a defined structure where applicable. For example an editable Combo Box should have a list or table and an editable text as children.<br />
<br />
In addition the expected signals such as accessible-name changed should be documented so that it is clear which signals to emit.<br />
<br />
= States =<br />
Accessible objects always have a set of states.<br />
For each widget below it is mentioned which states should be implemented.<br />
Over AT-SPI2 the states are split into two 32 bit uints. (yes, it's that horrible).<br />
<br />
FIXME link to states list<br />
<br />
ATSPI States (from at-spi2-core/atspi/atspi-constants.c)<br />
<br />
* ATSPI_STATE_INVALID: <br />
* ATSPI_STATE_ACTIVE: Indicates a window is currently the active window, or is an active subelement within a container or table <br />
* ATSPI_STATE_ARMED: Indicates that the object is armed <br />
* ATSPI_STATE_BUSY: Indicates the current object is busy, i.e. onscreen representation is in the process of changing, or the object is temporarily unavailable for interaction due to activity already in progress. <br />
* ATSPI_STATE_CHECKED: Indicates this object is currently checked <br />
* ATSPI_STATE_COLLAPSED: Indicates this object is collapsed <br />
* ATSPI_STATE_DEFUNCT: Indicates that this object no longer has a valid backing widget (for instance, if its peer object has been destroyed) <br />
* ATSPI_STATE_EDITABLE: Indicates the user can change the contents of this object <br />
* ATSPI_STATE_ENABLED: Indicates that this object is enabled, i.e. that it currently reflects some application state. Objects that are "greyed out" may lack this state, and may lack the STATE_SENSITIVE if direct user interaction cannot cause them to acquire STATE_ENABLED. @see STATE_SENSITIVE. <br />
* ATSPI_STATE_EXPANDABLE: Indicates this object allows progressive disclosure of its children <br />
* ATSPI_STATE_EXPANDED: Indicates this object its expanded <br />
* ATSPI_STATE_FOCUSABLE: Indicates this object can accept keyboard focus, which means all events resulting from typing on the keyboard will normally be passed to it when it has focus <br />
* ATSPI_STATE_FOCUSED: Indicates this object currently has the keyboard focus <br />
* ATSPI_STATE_HAS_TOOLTIP: Indicates that the object has an associated tooltip <br />
* ATSPI_STATE_HORIZONTAL: Indicates the orientation of thsi object is horizontal <br />
* ATSPI_STATE_ICONIFIED: Indicates this object is minimized and is represented only by an icon <br />
* ATSPI_STATE_MODAL: Indicates something must be done with this object before the user can interact with an object in a different window. <br />
* ATSPI_STATE_MULTI_LINE: Indicates this (text) object can contain multiple lines of text <br />
* ATSPI_STATE_MULTISELECTABLE: Indicates this object allows more than one of its children to be selected at the same time, or in the case of text objects, that the object supports non-contiguous text selections. <br />
* ATSPI_STATE_OPAQUE: Indicates this object paints every pixel within its rectangular region. It also indicates an alpha value of unity, if it supports alpha blending. <br />
* ATSPI_STATE_PRESSED: Indicates this object is currently pressed <br />
* ATSPI_STATE_RESIZABLE: Indicates the size of this object's size is not fixed <br />
* ATSPI_STATE_SELECTABLE: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that can be selected. <br />
* ATSPI_STATE_SELECTED: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that has been selected. <br />
* ATSPI_STATE_SENSITIVE: Indicates this object is sensitive, e.g. to user interaction. STATE_SENSITIVE usually accompanies STATE_ENABLED for user-actionable controls, but may be found in the absence of STATE_ENABLED if the current visible state of the control is "disconnected" from the application state. In such cases, direct user interaction can often result in the object gaining STATE_SENSITIVE, for instance if a user makes an explicit selection using an object whose current state is ambiguous or undefined. @see STATE_ENABLED, STATE_INDETERMINATE. <br />
* ATSPI_STATE_SHOWING: Indicates this object, the object's parent, the object's parent's parent, and so on, are all 'shown' to the end-user, i.e. subject to "exposure" if blocking or obscuring objects do not interpose between this object and the top of the window stack. <br />
* ATSPI_STATE_SINGLE_LINE: Indicates this (text) object can contain only a single line of text <br />
* ATSPI_STATE_STALE: Indicates that the information returned for this object may no longer be synchronized with the application state. This can occur if the object has STATE_TRANSIENT, and can also occur towards the end of the object peer's lifecycle. <br />
* ATSPI_STATE_TRANSIENT: Indicates this object is transient <br />
* ATSPI_STATE_VERTICAL: Indicates the orientation of this object is vertical; for example this state may appear on such objects as scrollbars, text objects (with vertical text flow), separators, etc. <br />
* ATSPI_STATE_VISIBLE: Indicates this object is visible, e.g. has been explicitly marked for exposure to the user. STATE_VISIBLE is no guarantee that the object is actually unobscured on the screen, only that it is 'potentially' visible, barring obstruction, being scrolled or clipped out of the field of view, or having an ancestor container that has not yet made visible. A widget is potentially onscreen if it has both STATE_VISIBLE and STATE_SHOWING. The absence of STATE_VISIBLE and STATE_SHOWING is semantically equivalent to saying that an object is 'hidden'. <br />
* ATSPI_STATE_MANAGES_DESCENDANTS: Indicates that "active-descendant-changed" event is sent when children become 'active' (i.e. are selected or navigated to onscreen). Used to prevent need to enumerate all children in very large containers, like tables. The presence of STATE_MANAGES_DESCENDANTS is an indication to the client. that the children should not, and need not, be enumerated by the client. Objects implementing this state are expected to provide relevant state notifications to listening clients, for instance notifications of visibility changes and activation of their contained child objects, without the client having previously requested references to those children. <br />
* ATSPI_STATE_INDETERMINATE: Indicates that a check box or other boolean indicator is in a state other than checked or not checked. This usually means that the boolean value reflected or controlled by the object does not apply consistently to the entire current context. For example, a checkbox for the "Bold" attribute of text may have STATE_INDETERMINATE if the currently selected text contains a mixture of weight attributes. In many cases interacting with a STATE_INDETERMINATE object will cause the context's corresponding boolean attribute to be homogenized, whereupon the object will lose STATE_INDETERMINATE and a corresponding state-changed event will be fired. <br />
* ATSPI_STATE_REQUIRED: Indicates that user interaction with this object is 'required' from the user, for instance before completing the processing of a form. <br />
* ATSPI_STATE_TRUNCATED: Indicates that an object's onscreen content is truncated, e.g. a text value in a spreadsheet cell. <br />
* ATSPI_STATE_ANIMATED: Indicates this object's visual representation is dynamic, not static. This state may be applied to an object during an animated 'effect' and be removed from the object once its visual representation becomes static. some applications, notably content viewers, may not be able to detect all kinds of animated content. Therefore the absence of this state should not be taken as definitive evidence that the object's visual representation is static; this state is advisory. <br />
* ATSPI_STATE_INVALID_ENTRY: This object has indicated an error condition due to failure of input validation. For instance, a form control may acquire this state in response to invalid or malformed user input. <br />
* ATSPI_STATE_SUPPORTS_AUTOCOMPLETION: This state indicates that the object in question implements some form of &#168;typeahead&#168; or pre-selection behavior whereby entering the first character of one or more sub-elements causes those elements to scroll into view or become selected. Subsequent character input may narrow the selection further as long as one or more sub-elements match the string. This state is normally only useful and encountered on objects that implement Selection. In some cases the typeahead behavior may result in full or partial &#168;completion&#168; of the data in the input field, in which case these input events may trigger text-changed events from the source. <br />
* ATSPI_STATE_SELECTABLE_TEXT: This state indicates that the object in question supports text selection. It should only be exposed on objects which implement the Text interface, in order to distinguish this state from STATE_SELECTABLE, which infers that the object in question is a selectable child of an object which implements Selection. While similar, text selection and subelement selection are distinct operations. <br />
* ATSPI_STATE_IS_DEFAULT: This state indicates that the object in question is the 'default' interaction object in a dialog, i.e. the one that gets activated if the user presses "Enter" when the dialog is initially posted. <br />
* ATSPI_STATE_VISITED: This state indicates that the object (typically a hyperlink) has already been activated or invoked, with the result that some backing data has been downloaded or rendered. <br />
* ATSPI_STATE_LAST_DEFINED: This value of the enumeration should not be used as a parameter, it indicates the number of items in the StateType enumeration. <br />
<br />
<br />
<br />
Some states are valid for all widgets:<br />
* Visible?<br />
<br />
<br />
----<br />
= Roles =<br />
* ATSPI_ROLE_INVALID: A Role indicating an error condition, such as uninitialized Role data. <br />
* ATSPI_ROLE_ACCELERATOR_LABEL: Object is a label indicating the keyboard accelerators for the parent <br />
* ATSPI_ROLE_ALERT: Object is used to alert the user about something <br />
* ATSPI_ROLE_ANIMATION: Object contains a dynamic or moving image of some kind <br />
* ATSPI_ROLE_ARROW: Object is a 2d directional indicator <br />
* ATSPI_ROLE_CALENDAR: Object contains one or more dates, usually arranged into a 2d list <br />
* ATSPI_ROLE_CANVAS: Object that can be drawn into and is used to trap events <br />
* ATSPI_ROLE_CHECK_BOX: A choice that can be checked or unchecked and provides a separate indicator for the current state. <br />
* ATSPI_ROLE_CHECK_MENU_ITEM: A menu item that behaves like a check box (see ROLE_CHECK_BOX) <br />
* ATSPI_ROLE_COLOR_CHOOSER: A specialized dialog that lets the user choose a color. <br />
* ATSPI_ROLE_COLUMN_HEADER: The header for a column of data <br />
* ATSPI_ROLE_COMBO_BOX: A list of choices the user can select from <br />
* ATSPI_ROLE_DATE_EDITOR: An object which allows entry of a date <br />
* ATSPI_ROLE_DESKTOP_ICON: An inconifed internal frame within a DESKTOP_PANE <br />
* ATSPI_ROLE_DESKTOP_FRAME: A pane that supports internal frames and iconified versions of those internal frames. <br />
* ATSPI_ROLE_DIAL: An object that allows a value to be changed via rotating a visual element, or which displays a value via such a rotating element. <br />
* ATSPI_ROLE_DIALOG: A top level window with title bar and a border <br />
* ATSPI_ROLE_DIRECTORY_PANE: A pane that allows the user to navigate through and select the contents of a directory <br />
* ATSPI_ROLE_DRAWING_AREA: A specialized dialog that displays the files in the directory and lets the user select a file, browse a different directory, or specify a filename. <br />
* ATSPI_ROLE_FILE_CHOOSER: An object used for drawing custom user interface elements. <br />
* ATSPI_ROLE_FILLER: A object that fills up space in a user interface <br />
* ATSPI_ROLE_FOCUS_TRAVERSABLE: Don't use, reserved for future use. <br />
* ATSPI_ROLE_FONT_CHOOSER: Allows selection of a display font <br />
* ATSPI_ROLE_FRAME: A top level window with a title bar, border, menubar, etc. <br />
* ATSPI_ROLE_GLASS_PANE: A pane that is guaranteed to be painted on top of all panes beneath it <br />
* ATSPI_ROLE_HTML_CONTAINER: A document container for HTML, whose children represent the document content. <br />
* ATSPI_ROLE_ICON: A small fixed size picture, typically used to decorate components <br />
* ATSPI_ROLE_IMAGE: An image, typically static. <br />
* ATSPI_ROLE_INTERNAL_FRAME: A frame-like object that is clipped by a desktop pane. <br />
* ATSPI_ROLE_LABEL: An object used to present an icon or short string in an interface <br />
* ATSPI_ROLE_LAYERED_PANE: A specialized pane that allows its children to be drawn in layers, providing a form of stacking order. <br />
* ATSPI_ROLE_LIST: An object that presents a list of objects to the user and allows the user to select one or more of them. <br />
* ATSPI_ROLE_LIST_ITEM: An object that represents an element of a list. <br />
* ATSPI_ROLE_MENU: An object usually found inside a menu bar that contains a list of actions the user can choose from. <br />
* ATSPI_ROLE_MENU_BAR: An object usually drawn at the top of the primary dialog box of an application that contains a list of menus the user can choose from. <br />
* ATSPI_ROLE_MENU_ITEM: An object usually contained in a menu that presents an action the user can choose. <br />
* ATSPI_ROLE_OPTION_PANE: A specialized pane whose primary use is inside a DIALOG <br />
* ATSPI_ROLE_PAGE_TAB: An object that is a child of a page tab list <br />
* ATSPI_ROLE_PAGE_TAB_LIST: An object that presents a series of panels (or page tabs), one at a time, through some mechanism provided by the object. <br />
* ATSPI_ROLE_PANEL: A generic container that is often used to group objects. <br />
* ATSPI_ROLE_PASSWORD_TEXT: A text object uses for passwords, or other places where the text content is not shown visibly to the user. <br />
* ATSPI_ROLE_POPUP_MENU: A temporary window that is usually used to offer the user a list of choices, and then hides when the user selects one of those choices. <br />
* ATSPI_ROLE_PROGRESS_BAR: An object used to indicate how much of a task has been completed. <br />
* ATSPI_ROLE_PUSH_BUTTON: An object the user can manipulate to tell the application to do something. <br />
* ATSPI_ROLE_RADIO_BUTTON: A specialized check box that will cause other radio buttons in the same group to become uncghecked when this one is checked. <br />
* ATSPI_ROLE_RADIO_MENU_ITEM: Object is both a menu item and a "radio button" (see ROLE_RADIO_BUTTON) <br />
* ATSPI_ROLE_ROOT_PANE: A specialized pane that has a glass pane and a layered pane as its children. <br />
* ATSPI_ROLE_ROW_HEADER: The header for a row of data <br />
* ATSPI_ROLE_SCROLL_BAR: An object usually used to allow a user to incrementally view a large amount of data by moving the bounds of a viewport along a one-dimensional axis. <br />
* ATSPI_ROLE_SCROLL_PANE: An object that allows a user to incrementally view a large amount of information. ROLE_SCROLL_PANE objects are usually accompanied by ROLE_SCROLL_BAR controllers, on which the RELATION_CONTROLLER_FOR and RELATION_CONTROLLED_BY reciprocal relations are set; \see Accessibility::RelationSet. <br />
* ATSPI_ROLE_SEPARATOR: An object usually contained in a menu to provide a visible and logical separation of the contents in a menu. <br />
* ATSPI_ROLE_SLIDER: An object that allows the user to select from a bounded range <br />
* ATSPI_ROLE_SPIN_BUTTON: An object which allows one of a set of choices to be selected, and which displays the current choice. Unlike ROLE_SCROLL_BAR, ROLE_SLIDER objects need not control 'viewport'-like objects. <br />
* ATSPI_ROLE_SPLIT_PANE: A specialized panel that presents two other panels at the same time. <br />
* ATSPI_ROLE_STATUS_BAR: Object displays non-quantitative status information (c.f. ROLE_PROGRESS_BAR) <br />
* ATSPI_ROLE_TABLE: An object used to repesent information in terms of rows and columns. <br />
* ATSPI_ROLE_TABLE_CELL: A 'cell' or discrete child within a Table. \note Table cells need not have ROLE_TABLE_CELL, other RoleType values are valid as well. <br />
* ATSPI_ROLE_TABLE_COLUMN_HEADER: An object which labels a particular column in a Table. <br />
* ATSPI_ROLE_TABLE_ROW_HEADER: An object which labels a particular row in a Table. Table rows and columns may also be labelled via the RELATION_LABEL_FOR/RELATION_LABELLED_BY relationships; see Accessibility.RelationSet. <br />
* ATSPI_ROLE_TEAROFF_MENU_ITEM: Object allows menu to be removed from menubar and shown in its own window. <br />
* ATSPI_ROLE_TERMINAL: An object that emulates a terminal <br />
* ATSPI_ROLE_TEXT: An object that presents text to the user, of nonspecific type. <br />
* ATSPI_ROLE_TOGGLE_BUTTON: A specialized push button that can be checked or unchecked, but does not procide a separate indicator for the current state. <br />
* ATSPI_ROLE_TOOL_BAR: A bar or palette usually composed of push buttons or toggle buttons <br />
* ATSPI_ROLE_TOOL_TIP: An object that provides information about another object <br />
* ATSPI_ROLE_TREE: An object used to repsent hierarchical information to the user. <br />
* ATSPI_ROLE_TREE_TABLE: An object that presents both tabular and hierarchical info to the user <br />
* ATSPI_ROLE_UNKNOWN: The object contains some Accessible information, but its role is not known. <br />
* ATSPI_ROLE_VIEWPORT: An object usually used in a scroll pane, or to otherwise clip a larger object or content renderer to a specific onscreen viewport. <br />
* ATSPI_ROLE_WINDOW: A &#168;top level window&#168; with no title or border. <br />
* ATSPI_ROLE_EXTENDED: means that the role for this item is known, but not included in the core enumeration <br />
* ATSPI_ROLE_HEADER: An object that serves as a document header. <br />
* ATSPI_ROLE_FOOTER: An object that serves as a document footer. <br />
* ATSPI_ROLE_PARAGRAPH: An object which is contains a single paragraph of text content. See also ROLE_TEXT. <br />
* ATSPI_ROLE_RULER: An object which describes margins and tab stops, etc. for text objects which it controls (should have CONTROLLER_FOR relation to such). <br />
* ATSPI_ROLE_APPLICATION: An object corresponding to the toplevel accessible of an application, which may contain ROLE_FRAME objects or other accessible objects. Children of AccessibleDesktop objects are generally ROLE_APPLICATION objects. <br />
* ATSPI_ROLE_AUTOCOMPLETE: The object is a dialog or list containing items for insertion into an entry widget, for instance a list of words for completion of a text entry. <br />
* ATSPI_ROLE_EDITBAR: The object is an editable text object in a toolbar. <br />
* ATSPI_ROLE_EMBEDDED: The object is an embedded component container. This role is a "grouping" hint that the contained objects share a context which is different from the container in which this accessible is embedded. In particular, it is used for some kinds of document embedding, and for embedding of out-of-process component, "panel applets", etc. <br />
* ATSPI_ROLE_ENTRY: The object is a component whose textual content may be entered or modified by the user, provided STATE_EDITABLE is present. A readonly ROLE_ENTRY object (i.e. where STATE_EDITABLE is not present) implies a read-only 'text field' in a form, as opposed to a title, label, or caption. <br />
* ATSPI_ROLE_CHART: The object is a graphical depiction of quantitative data. It may contain multiple subelements whose attributes and/or description may be queried to obtain both the quantitative data and information about how the data is being presented. The LABELLED_BY relation is particularly important in interpreting objects of this type, as is the accessible-description property. See ROLE_CAPTION <br />
* ATSPI_ROLE_CAPTION: The object contains descriptive information, usually textual, about another user interface element such as a table, chart, or image. <br />
* ATSPI_ROLE_DOCUMENT_FRAME: The object is a visual frame or container which contains a view of document content. Document frames may occur within another Document instance, in which case the second document may be said to be embedded in the containing instance. HTML frames are often ROLE_DOCUMENT_FRAME. Either this object, or a singleton descendant, should implement the Document interface. <br />
* ATSPI_ROLE_HEADING: The object serves as a heading for content which follows it in a document. The 'heading level' of the heading, if availabe, may be obtained by querying the object's attributes. <br />
* ATSPI_ROLE_PAGE: The object is a containing instance which encapsulates a page of information. ROLE_PAGE is used in documents and content which support a paginated navigation model. <br />
* ATSPI_ROLE_SECTION: The object is a containing instance of document content which constitutes a particular 'logical' section of the document. The type of content within a section, and the nature of the section division itself, may be obtained by querying the object's attributes. Sections may be nested. <br />
* ATSPI_ROLE_REDUNDANT_OBJECT: The object is redundant with another object in the hierarchy, and is exposed for purely technical reasons. Objects of this role should be ignored by clients, if they are encountered at all. <br />
* ATSPI_ROLE_FORM: The object is a containing instance of document content which has within it components with which the user can interact in order to input information; i.e. the object is a container for pushbuttons, comboboxes, text input fields, and other 'GUI' components. ROLE_FORM should not, in general, be used for toplevel GUI containers or dialogs, but should be reserved for 'GUI' containers which occur within document content, for instance within Web documents, presentations, or text documents. Unlike other GUI containers and dialogs which occur inside application instances, ROLE_FORM containers' components are associated with the current document, rather than the current foreground application or viewer instance. <br />
* ATSPI_ROLE_LINK: The object is a hypertext anchor, i.e. a "link" in a hypertext document. Such objects are distinct from 'inline' content which may also use the Hypertext/Hyperlink interfaces to indicate the range/location within a text object where an inline or embedded object lies. <br />
* ATSPI_ROLE_INPUT_METHOD_WINDOW: The object is a window or similar viewport which is used to allow composition or input of a 'complex character', in other words it is an "input method window." <br />
* ATSPI_ROLE_LAST_DEFINED: Not a valid role, used for finding end of enumeration. <br />
----<br />
<br />
= Events =<br />
== Focus ==<br />
One of the most important events is the focus change.<br />
FIXME document here what needs to happen when focus changes.<br />
<br />
----<br />
<br />
= Objects and their Properties =<br />
<br />
* Add AtkObject, AtkRoles, Names, Descriptions and the like<br />
* Talk about when to include versus when to omit or "fold in" (e.g. button whose child is a label, filler, etc.)<br />
<br />
''Matthias: I would really like to get some clarification about signals, when to emit them, what their expected semantics are, etc. E.g: do I emit 'visible-data-changed' when a label gains a mnemonic underline ?''<br />
----<br />
<br />
= Interfaces =<br />
''Note from JD: For now, I'm including the Documentation along with a Do's and Don'ts. Those ultimately might need to be merged. For now, having them both makes it more obvious to me what we should be questioning, docs we might need to go back and update, etc., etc.''<br />
<br />
Most accessible objects are expected to implement a variety of interfaces based on the purpose served by the backing toolkit widget, along with the ways users can interact with that widget.<br />
<br />
== AtkAction ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should be implemented by instances of AtkObject classes with which the user can interact directly, i.e. buttons, checkboxes, scrollbars, e.g. components which are not "passive" providers of UI information.<br />
<br />
Exceptions: when the user interaction is already covered by another appropriate interface such as AtkEditableText (insert/delete test, etc.) or AtkValue (set value) then these actions should not be exposed by [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] as well.<br />
<br />
Also note that the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] API is limited in that parameters may not be passed to the object being activated; thus the action must be self-contained and specifiable via only a single "verb". Concrete examples include "press", "release", "click" for buttons, "drag" (meaning initiate drag) and "drop" for drag sources and drop targets, etc.<br />
<br />
Though most UI interactions on components should be invocable via keyboard as well as mouse, there will generally be a close mapping between "mouse actions" that are possible on a component and the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkActions]]. Where mouse and keyboard actions are redundant in effect, [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should expose only one action rather than exposing redundant actions if possible. By convention we have been using "mouse centric" terminology for [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] names.<br />
<br />
''Note from Matthias: Should point out here that actions have keybindings associated with them. What are those good for, anyway ?''<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
* TODO: There was some discussion in #a11y with Benjamin and Joanie regarding the 'exception' above. We need to decide if it is good to have this "It's an AtkAction unless it happens to be an interface and then, well, it's not" situation. Surely that is confusing to implementors. Should Actiony things always be actions?<br />
* TODO: The verdict on press/release versus just click for buttons is still out.<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkComponent ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] should be implemented by most if not all UI elements with an actual on-screen presence, i.e. components which can be said to have a screen-coordinate bounding box. Virtually all widgets will need to have [[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] implementations provided for their corresponding AtkObject class. In short, only UI elements which are *not* GUI elements will omit this ATK interface.<br />
<br />
A possible exception might be textual information with a transparent background, in which case text glyph bounding box information is provided by [[http://developer.gnome.org/atk/unstable/AtkTextt.html|AtkText]].<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkDocument ==<br />
=== Description from the Documentation ===<br />
The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should be supported by any object whose content is a representation or view of a document. The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should appear on the toplevel container for the document content; however [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] instances may be nested (i.e. an [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] may be a descendant of another [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]]) in those cases where one document contains "embedded content" which can reasonably be considered a document in its own right.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkHypertext and AtkHyperlinkImpl ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkHypertext.html|AtkHypertext]] is an interface used for objects which implement linking between multiple resource or content locations, or multiple 'markers' within a single document. A Hypertext instance is associated with one or more Hyperlinks, which are associated with particular offsets within the Hypertext's included content. While this interface is derived from Text, there is no requirement that Hypertext instances have textual content; they may implement Image as well, and Hyperlinks need not have non-zero text offsets.<br />
<br />
[[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] allows AtkObjects to refer to their associated AtkHyperlink instance, if one exists. [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] differs from AtkHyperlink in that [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] is an interface, whereas AtkHyperlink is a object type. The [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] interface allows a client to query an AtkObject for the availability of an associated AtkHyperlink instance, and obtain that instance. It is thus particularly useful in cases where embedded content or inline content within a text object is present, since the embedding text object implements [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]] and the inline/embedded objects are exposed as children which implement [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]], in addition to their being obtainable via [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]]:getLink followed by AtkHyperlink:getObject.<br />
<br />
=== How Assistive Technologies Use These Interfaces ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
<br />
''Matthias: I have used the hyperlink classes in the accessible implementation for GtkLinkButton, and I'd love to know if my implementation is using these classes as intended.''<br />
<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkImage ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] should be implemented by AtkObject subtypes on behalf of components which display image/pixmap information onscreen, and which provide information (other than just widget borders, etc.) via that image content. For instance, icons, buttons with icons, toolbar elements, and image viewing panes typically should implement [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]].<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] primarily provides two types of information: coordinate information (useful for screen review mode of screenreaders, and for use by onscreen magnifiers), and descriptive information. The descriptive information is provided for alternative, text-only presentation of the most significant information present in the image.<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkSelection ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] should be implemented by UI components with children which are exposed by atk_object_ref_child and atk_object_get_n_children, if the use of the parent UI component ordinarily involves selection of one or more of the objects corresponding to those AtkObject children - for example, selectable lists.<br />
<br />
Note that other types of "selection" (for instance text selection) are accomplished a other ATK interfaces - [[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] is limited to the selection/deselection of children.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkTable ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] should be implemented by components which present elements ordered via rows and columns. It may also be used to present tree-structured information if the nodes of the trees can be said to contain multiple "columns". Individual elements of an [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are typically referred to as "cells", and these cells are exposed by [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] as child AtkObjects of the [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]]. Both row/column and child-index-based access to these children is provided.<br />
<br />
Children of [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are frequently "lightweight" objects, that is, they may not have backing widgets in the host UI toolkit. They are therefore often transient.<br />
<br />
Since tables are often very complex, [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] includes provision for offering simplified summary information, as well as row and column headers and captions. Headers and captions are AtkObjects which may implement other interfaces ([[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]], etc.) as appropriate. [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] summaries may themselves be (simplified) [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]], etc.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkText ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] should be implemented by AtkObjects on behalf of widgets that have text content which is either attributed or otherwise non-trivial. AtkObjects whose text content is simple, unattributed, and very brief may expose that content via atk_object_get_name instead; however if the text is editable, multi-line, typically longer than three or four words, attributed, selectable, or if the object already uses the 'name' ATK property for other information, the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface should be used to expose the text content. In the case of editable text content, AtkEditableText (a subtype of the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface) should be implemented instead.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] provides not only traversal facilities and change notification for text content, but also caret tracking and glyph bounding box calculations. Note that the text strings are exposed as UTF-8, and are therefore potentially multi-byte, and caret-to-byte offset mapping makes no assumptions about the character length; also bounding box glyph-to-offset mapping may be complex for languages which use ligatures.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] should be implemented by UI components which contain text which the user can edit, via the AtkObject corresponding to that component (see AtkObject).<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is a subclass of [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], and as such, an object which implements [[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is by definition an [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] implementor as well.<br />
=== How Assistive Technologies Use These Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
As a general rule, only implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for widgets which:<br />
* Are text the user can interact with by doing things such as: arrowing amongst characters, selecting, copying, etc., OR<br />
* Present a substantial message and/or have significant, important-to-convey formatting attributes<br />
Thus you DO want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* Documents and any other place the text contents can be changed by the user.<br />
* Labels serving as static text (e.g. in a message box).<br />
You do NOT want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* The displayed text/label of buttons (instead set the AtkObject's name to reflect the text)<br />
* The displayed/functional value of widgets implementing AtkValue (instead set the AtkObject's description to reflect the text)<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkValue ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] should be implemented for components which either display a value from a bounded range, or which allow the user to specify a value from a bounded range, or both. For instance, most sliders and range controls, as well as dials, should have AtkObject representations which implement [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] on the component's behalf. [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValues]] may be read-only, in which case attempts to alter the value return FALSE to indicate failure.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
----<br />
<br />
= Relations =<br />
<br />
Add the AtkRelation types here<br />
<br />
----<br />
<br />
<br />
<br />
= Widgets =<br />
Two main properties of widgets are Name and Description.<br />
The name reflects the primary text for the widget: The text of a label, the text on a button.<br />
The description gives additional information: A button labeled "OK" could have the description "Accepts the dialog". FIXME more sensible example?<br />
<br />
== Label ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Button ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Line Edit ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Menu ==<br />
This is the menu bar of an application - File, Edit etc.<br />
<br />
* '''menu bar'''<br />
* '''menu*'''<br />
* '''menu*''' can contain more menu and menu item<br />
* '''menu item*'''<br />
<br />
There is one '''menu bar''' as root element, it has any number of '''menu''' as children.<br />
'''menu''' can have '''menu''' and '''menu item''' as children.<br />
'''menu item''' does not have children.<br />
<br />
<br />
<br />
== List ==<br />
* '''list'''<br />
* '''list item*'''<br />
<br />
A list has only one column. It contains items.<br />
<br />
'''States''': STATE_MANAGES_DESCENDANTS<br />
<br />
'''Events''': FIXME: what do we need? active descendant and more black magic<br />
<br />
'''Interfaces''': Table<br />
<br />
== Table ==<br />
<br />
current state in gtk: it would be difficult to provide row objects<br />
<br />
* '''table'''<br />
* '''table column header'''<br />
* '''table cell''' sometimes gtk has image+text in one cell. it represents that as two child objects of type '''table cell'''<br />
<br />
Web: firefox usually has rows, but sometimes it can happen that rows are not present (like html role presentation or css hidden)<br />
<br />
* '''table'''<br />
* '''table row''' the first row only contains headers<br />
* '''table row header''' once for the top-left header<br />
* '''table column header*''' as many as columns<br />
* '''table row*''' <br />
* '''table row header[0-1]''' for the left header<br />
* '''table cell*''' as many as columns, can be less if cell-span > 1 <br />
should headers be mandatory? should it be '''table header row''' for the first row?<br />
<br />
IA2: all cells are children of the table object. there are no row objects. like gtk.<br />
<br />
<br />
One big concern was notifications about selection changes. It would be great to get notified for things such as row selected. There are two ways to tackle this:<br />
in the first approach (gtk) we could define a signal: rows-selected() and rows-deselected or somesuch<br />
in the second approach with rows, the row object could be sent as selected. this has the downside that there is no way to do the same for columns. it is less flexible.<br />
IA2 has functions to get selected rows/columns<br />
<br />
<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''':<br />
<br />
== Trees ==<br />
The reason for the variety of trees that are possible is mostly that ARIA has very flexible tree definitions. The web implementators will simply expose that.<br />
<br />
<br />
Tree has exactly one column. For trees with more than one column the '''tree table''' has to be used.<br />
<br />
Tree items can contain a grouping element. In the grouping element it can have other items.<br />
<br />
=== Tree 1: define hierarchy through relations and group positions ===<br />
* '''tree'''<br />
* '''tree item''' with relations and group positions that define hierarchy<br />
* '''tree item'''<br />
* ...<br />
<br />
This tree works with add/remove tree items when they get expanded/collapsed.<br />
<br />
=== Tree 2: real hierarchy ===<br />
The items are arranged as children.<br />
<br />
* '''tree'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item*'''<br />
<br />
<br />
* '''tree'''<br />
* '''tree item group'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item group'''<br />
* '''tree item*'''<br />
<br />
No need for add/remove for expanding/collapsing of sub items.<br />
<br />
<br />
=== Tree 3: Tree Table ===<br />
Tree tables can not be hierarchical.<br />
'''tree table''' can have more than one column<br />
<br />
* '''tree table''' <br />
* '''tree table cell*'''<br />
<br />
* '''tree table'''<br />
* '''tree table row*'''<br />
* '''tree table cell*'''<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''':<br />
<br />
== Scroll Bars ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Combo Box ==<br />
* ATSPI_ROLE_COMBO_BOX is the root element<br />
* ATSPI_ROLE_TABLE see table. Usually this is a flat list of items.<br />
* ATSPI_ROLE_TEXT [optional] is present when the combo box is editable.<br />
<br />
The Accessible Name of the '''combo box''' accessible is the current text that is displayed. This text can be typed by the user or one of the selected items.<br />
<br />
'''States''': Focused, Editable<br />
<br />
'''Events''': Focus<br />
<br />
'''Interfaces''': None required<br />
<br />
The name of the ATSPI_ROLE_COMBO_BOX should always reflect the current text.<br />
FIXME: what should combo box send when the current item/text changed?<br />
<br />
<br />
== Foo Bar Template ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Stuff we Mustn't Forget ==<br />
(But are not sure where all to put it yet.)<br />
<br />
* "Hint text" - Gtk+ has it as an AtkObject attribute ('placeholder-text').<br />
* Window management stuff - what happens when a window gains focus etc<br />
* Registry - give an overview what it is, why and how clients and servers register to it.]\<br />
* Relations <br />
* make sure to mention them with the widgets that most likely need them (labelled-by for line edit)<br />
* document what they are in general</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=User:Frederik.gladhorn/atspi-scratch&diff=61134User:Frederik.gladhorn/atspi-scratch2011-07-01T11:46:45Z<p>Frederik.gladhorn: /* Tree */</p>
<hr />
<div>= GNOME Accessibility Team =<br />
= ATK/AT-SPI Best Practices Guide for Implementors =<br />
= DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT =<br />
<br />
= Introduction =<br />
This guide is for implementors of ATK and AT-SPI 2.<br />
It should say how to describe the user interface through the use of the AT-SPI Accessibility APIs.<br />
Having consistent representations of widgets makes the implementation of assisitive technology much easier.<br />
<br />
ATK and AT-SPI should be identical to large parts. Especially roles and enums should be the same, so this guide applies to both.<br />
<br />
The aim is to have a defined structure where applicable. For example an editable Combo Box should have a list or table and an editable text as children.<br />
<br />
In addition the expected signals such as accessible-name changed should be documented so that it is clear which signals to emit.<br />
<br />
= States =<br />
Accessible objects always have a set of states.<br />
For each widget below it is mentioned which states should be implemented.<br />
Over AT-SPI2 the states are split into two 32 bit uints. (yes, it's that horrible).<br />
<br />
FIXME link to states list<br />
<br />
ATSPI States (from at-spi2-core/atspi/atspi-constants.c)<br />
<br />
* ATSPI_STATE_INVALID: <br />
* ATSPI_STATE_ACTIVE: Indicates a window is currently the active window, or is an active subelement within a container or table <br />
* ATSPI_STATE_ARMED: Indicates that the object is armed <br />
* ATSPI_STATE_BUSY: Indicates the current object is busy, i.e. onscreen representation is in the process of changing, or the object is temporarily unavailable for interaction due to activity already in progress. <br />
* ATSPI_STATE_CHECKED: Indicates this object is currently checked <br />
* ATSPI_STATE_COLLAPSED: Indicates this object is collapsed <br />
* ATSPI_STATE_DEFUNCT: Indicates that this object no longer has a valid backing widget (for instance, if its peer object has been destroyed) <br />
* ATSPI_STATE_EDITABLE: Indicates the user can change the contents of this object <br />
* ATSPI_STATE_ENABLED: Indicates that this object is enabled, i.e. that it currently reflects some application state. Objects that are "greyed out" may lack this state, and may lack the STATE_SENSITIVE if direct user interaction cannot cause them to acquire STATE_ENABLED. @see STATE_SENSITIVE. <br />
* ATSPI_STATE_EXPANDABLE: Indicates this object allows progressive disclosure of its children <br />
* ATSPI_STATE_EXPANDED: Indicates this object its expanded <br />
* ATSPI_STATE_FOCUSABLE: Indicates this object can accept keyboard focus, which means all events resulting from typing on the keyboard will normally be passed to it when it has focus <br />
* ATSPI_STATE_FOCUSED: Indicates this object currently has the keyboard focus <br />
* ATSPI_STATE_HAS_TOOLTIP: Indicates that the object has an associated tooltip <br />
* ATSPI_STATE_HORIZONTAL: Indicates the orientation of thsi object is horizontal <br />
* ATSPI_STATE_ICONIFIED: Indicates this object is minimized and is represented only by an icon <br />
* ATSPI_STATE_MODAL: Indicates something must be done with this object before the user can interact with an object in a different window. <br />
* ATSPI_STATE_MULTI_LINE: Indicates this (text) object can contain multiple lines of text <br />
* ATSPI_STATE_MULTISELECTABLE: Indicates this object allows more than one of its children to be selected at the same time, or in the case of text objects, that the object supports non-contiguous text selections. <br />
* ATSPI_STATE_OPAQUE: Indicates this object paints every pixel within its rectangular region. It also indicates an alpha value of unity, if it supports alpha blending. <br />
* ATSPI_STATE_PRESSED: Indicates this object is currently pressed <br />
* ATSPI_STATE_RESIZABLE: Indicates the size of this object's size is not fixed <br />
* ATSPI_STATE_SELECTABLE: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that can be selected. <br />
* ATSPI_STATE_SELECTED: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that has been selected. <br />
* ATSPI_STATE_SENSITIVE: Indicates this object is sensitive, e.g. to user interaction. STATE_SENSITIVE usually accompanies STATE_ENABLED for user-actionable controls, but may be found in the absence of STATE_ENABLED if the current visible state of the control is "disconnected" from the application state. In such cases, direct user interaction can often result in the object gaining STATE_SENSITIVE, for instance if a user makes an explicit selection using an object whose current state is ambiguous or undefined. @see STATE_ENABLED, STATE_INDETERMINATE. <br />
* ATSPI_STATE_SHOWING: Indicates this object, the object's parent, the object's parent's parent, and so on, are all 'shown' to the end-user, i.e. subject to "exposure" if blocking or obscuring objects do not interpose between this object and the top of the window stack. <br />
* ATSPI_STATE_SINGLE_LINE: Indicates this (text) object can contain only a single line of text <br />
* ATSPI_STATE_STALE: Indicates that the information returned for this object may no longer be synchronized with the application state. This can occur if the object has STATE_TRANSIENT, and can also occur towards the end of the object peer's lifecycle. <br />
* ATSPI_STATE_TRANSIENT: Indicates this object is transient <br />
* ATSPI_STATE_VERTICAL: Indicates the orientation of this object is vertical; for example this state may appear on such objects as scrollbars, text objects (with vertical text flow), separators, etc. <br />
* ATSPI_STATE_VISIBLE: Indicates this object is visible, e.g. has been explicitly marked for exposure to the user. STATE_VISIBLE is no guarantee that the object is actually unobscured on the screen, only that it is 'potentially' visible, barring obstruction, being scrolled or clipped out of the field of view, or having an ancestor container that has not yet made visible. A widget is potentially onscreen if it has both STATE_VISIBLE and STATE_SHOWING. The absence of STATE_VISIBLE and STATE_SHOWING is semantically equivalent to saying that an object is 'hidden'. <br />
* ATSPI_STATE_MANAGES_DESCENDANTS: Indicates that "active-descendant-changed" event is sent when children become 'active' (i.e. are selected or navigated to onscreen). Used to prevent need to enumerate all children in very large containers, like tables. The presence of STATE_MANAGES_DESCENDANTS is an indication to the client. that the children should not, and need not, be enumerated by the client. Objects implementing this state are expected to provide relevant state notifications to listening clients, for instance notifications of visibility changes and activation of their contained child objects, without the client having previously requested references to those children. <br />
* ATSPI_STATE_INDETERMINATE: Indicates that a check box or other boolean indicator is in a state other than checked or not checked. This usually means that the boolean value reflected or controlled by the object does not apply consistently to the entire current context. For example, a checkbox for the "Bold" attribute of text may have STATE_INDETERMINATE if the currently selected text contains a mixture of weight attributes. In many cases interacting with a STATE_INDETERMINATE object will cause the context's corresponding boolean attribute to be homogenized, whereupon the object will lose STATE_INDETERMINATE and a corresponding state-changed event will be fired. <br />
* ATSPI_STATE_REQUIRED: Indicates that user interaction with this object is 'required' from the user, for instance before completing the processing of a form. <br />
* ATSPI_STATE_TRUNCATED: Indicates that an object's onscreen content is truncated, e.g. a text value in a spreadsheet cell. <br />
* ATSPI_STATE_ANIMATED: Indicates this object's visual representation is dynamic, not static. This state may be applied to an object during an animated 'effect' and be removed from the object once its visual representation becomes static. some applications, notably content viewers, may not be able to detect all kinds of animated content. Therefore the absence of this state should not be taken as definitive evidence that the object's visual representation is static; this state is advisory. <br />
* ATSPI_STATE_INVALID_ENTRY: This object has indicated an error condition due to failure of input validation. For instance, a form control may acquire this state in response to invalid or malformed user input. <br />
* ATSPI_STATE_SUPPORTS_AUTOCOMPLETION: This state indicates that the object in question implements some form of &#168;typeahead&#168; or pre-selection behavior whereby entering the first character of one or more sub-elements causes those elements to scroll into view or become selected. Subsequent character input may narrow the selection further as long as one or more sub-elements match the string. This state is normally only useful and encountered on objects that implement Selection. In some cases the typeahead behavior may result in full or partial &#168;completion&#168; of the data in the input field, in which case these input events may trigger text-changed events from the source. <br />
* ATSPI_STATE_SELECTABLE_TEXT: This state indicates that the object in question supports text selection. It should only be exposed on objects which implement the Text interface, in order to distinguish this state from STATE_SELECTABLE, which infers that the object in question is a selectable child of an object which implements Selection. While similar, text selection and subelement selection are distinct operations. <br />
* ATSPI_STATE_IS_DEFAULT: This state indicates that the object in question is the 'default' interaction object in a dialog, i.e. the one that gets activated if the user presses "Enter" when the dialog is initially posted. <br />
* ATSPI_STATE_VISITED: This state indicates that the object (typically a hyperlink) has already been activated or invoked, with the result that some backing data has been downloaded or rendered. <br />
* ATSPI_STATE_LAST_DEFINED: This value of the enumeration should not be used as a parameter, it indicates the number of items in the StateType enumeration. <br />
<br />
<br />
<br />
Some states are valid for all widgets:<br />
* Visible?<br />
<br />
<br />
----<br />
= Roles =<br />
* ATSPI_ROLE_INVALID: A Role indicating an error condition, such as uninitialized Role data. <br />
* ATSPI_ROLE_ACCELERATOR_LABEL: Object is a label indicating the keyboard accelerators for the parent <br />
* ATSPI_ROLE_ALERT: Object is used to alert the user about something <br />
* ATSPI_ROLE_ANIMATION: Object contains a dynamic or moving image of some kind <br />
* ATSPI_ROLE_ARROW: Object is a 2d directional indicator <br />
* ATSPI_ROLE_CALENDAR: Object contains one or more dates, usually arranged into a 2d list <br />
* ATSPI_ROLE_CANVAS: Object that can be drawn into and is used to trap events <br />
* ATSPI_ROLE_CHECK_BOX: A choice that can be checked or unchecked and provides a separate indicator for the current state. <br />
* ATSPI_ROLE_CHECK_MENU_ITEM: A menu item that behaves like a check box (see ROLE_CHECK_BOX) <br />
* ATSPI_ROLE_COLOR_CHOOSER: A specialized dialog that lets the user choose a color. <br />
* ATSPI_ROLE_COLUMN_HEADER: The header for a column of data <br />
* ATSPI_ROLE_COMBO_BOX: A list of choices the user can select from <br />
* ATSPI_ROLE_DATE_EDITOR: An object which allows entry of a date <br />
* ATSPI_ROLE_DESKTOP_ICON: An inconifed internal frame within a DESKTOP_PANE <br />
* ATSPI_ROLE_DESKTOP_FRAME: A pane that supports internal frames and iconified versions of those internal frames. <br />
* ATSPI_ROLE_DIAL: An object that allows a value to be changed via rotating a visual element, or which displays a value via such a rotating element. <br />
* ATSPI_ROLE_DIALOG: A top level window with title bar and a border <br />
* ATSPI_ROLE_DIRECTORY_PANE: A pane that allows the user to navigate through and select the contents of a directory <br />
* ATSPI_ROLE_DRAWING_AREA: A specialized dialog that displays the files in the directory and lets the user select a file, browse a different directory, or specify a filename. <br />
* ATSPI_ROLE_FILE_CHOOSER: An object used for drawing custom user interface elements. <br />
* ATSPI_ROLE_FILLER: A object that fills up space in a user interface <br />
* ATSPI_ROLE_FOCUS_TRAVERSABLE: Don't use, reserved for future use. <br />
* ATSPI_ROLE_FONT_CHOOSER: Allows selection of a display font <br />
* ATSPI_ROLE_FRAME: A top level window with a title bar, border, menubar, etc. <br />
* ATSPI_ROLE_GLASS_PANE: A pane that is guaranteed to be painted on top of all panes beneath it <br />
* ATSPI_ROLE_HTML_CONTAINER: A document container for HTML, whose children represent the document content. <br />
* ATSPI_ROLE_ICON: A small fixed size picture, typically used to decorate components <br />
* ATSPI_ROLE_IMAGE: An image, typically static. <br />
* ATSPI_ROLE_INTERNAL_FRAME: A frame-like object that is clipped by a desktop pane. <br />
* ATSPI_ROLE_LABEL: An object used to present an icon or short string in an interface <br />
* ATSPI_ROLE_LAYERED_PANE: A specialized pane that allows its children to be drawn in layers, providing a form of stacking order. <br />
* ATSPI_ROLE_LIST: An object that presents a list of objects to the user and allows the user to select one or more of them. <br />
* ATSPI_ROLE_LIST_ITEM: An object that represents an element of a list. <br />
* ATSPI_ROLE_MENU: An object usually found inside a menu bar that contains a list of actions the user can choose from. <br />
* ATSPI_ROLE_MENU_BAR: An object usually drawn at the top of the primary dialog box of an application that contains a list of menus the user can choose from. <br />
* ATSPI_ROLE_MENU_ITEM: An object usually contained in a menu that presents an action the user can choose. <br />
* ATSPI_ROLE_OPTION_PANE: A specialized pane whose primary use is inside a DIALOG <br />
* ATSPI_ROLE_PAGE_TAB: An object that is a child of a page tab list <br />
* ATSPI_ROLE_PAGE_TAB_LIST: An object that presents a series of panels (or page tabs), one at a time, through some mechanism provided by the object. <br />
* ATSPI_ROLE_PANEL: A generic container that is often used to group objects. <br />
* ATSPI_ROLE_PASSWORD_TEXT: A text object uses for passwords, or other places where the text content is not shown visibly to the user. <br />
* ATSPI_ROLE_POPUP_MENU: A temporary window that is usually used to offer the user a list of choices, and then hides when the user selects one of those choices. <br />
* ATSPI_ROLE_PROGRESS_BAR: An object used to indicate how much of a task has been completed. <br />
* ATSPI_ROLE_PUSH_BUTTON: An object the user can manipulate to tell the application to do something. <br />
* ATSPI_ROLE_RADIO_BUTTON: A specialized check box that will cause other radio buttons in the same group to become uncghecked when this one is checked. <br />
* ATSPI_ROLE_RADIO_MENU_ITEM: Object is both a menu item and a "radio button" (see ROLE_RADIO_BUTTON) <br />
* ATSPI_ROLE_ROOT_PANE: A specialized pane that has a glass pane and a layered pane as its children. <br />
* ATSPI_ROLE_ROW_HEADER: The header for a row of data <br />
* ATSPI_ROLE_SCROLL_BAR: An object usually used to allow a user to incrementally view a large amount of data by moving the bounds of a viewport along a one-dimensional axis. <br />
* ATSPI_ROLE_SCROLL_PANE: An object that allows a user to incrementally view a large amount of information. ROLE_SCROLL_PANE objects are usually accompanied by ROLE_SCROLL_BAR controllers, on which the RELATION_CONTROLLER_FOR and RELATION_CONTROLLED_BY reciprocal relations are set; \see Accessibility::RelationSet. <br />
* ATSPI_ROLE_SEPARATOR: An object usually contained in a menu to provide a visible and logical separation of the contents in a menu. <br />
* ATSPI_ROLE_SLIDER: An object that allows the user to select from a bounded range <br />
* ATSPI_ROLE_SPIN_BUTTON: An object which allows one of a set of choices to be selected, and which displays the current choice. Unlike ROLE_SCROLL_BAR, ROLE_SLIDER objects need not control 'viewport'-like objects. <br />
* ATSPI_ROLE_SPLIT_PANE: A specialized panel that presents two other panels at the same time. <br />
* ATSPI_ROLE_STATUS_BAR: Object displays non-quantitative status information (c.f. ROLE_PROGRESS_BAR) <br />
* ATSPI_ROLE_TABLE: An object used to repesent information in terms of rows and columns. <br />
* ATSPI_ROLE_TABLE_CELL: A 'cell' or discrete child within a Table. \note Table cells need not have ROLE_TABLE_CELL, other RoleType values are valid as well. <br />
* ATSPI_ROLE_TABLE_COLUMN_HEADER: An object which labels a particular column in a Table. <br />
* ATSPI_ROLE_TABLE_ROW_HEADER: An object which labels a particular row in a Table. Table rows and columns may also be labelled via the RELATION_LABEL_FOR/RELATION_LABELLED_BY relationships; see Accessibility.RelationSet. <br />
* ATSPI_ROLE_TEAROFF_MENU_ITEM: Object allows menu to be removed from menubar and shown in its own window. <br />
* ATSPI_ROLE_TERMINAL: An object that emulates a terminal <br />
* ATSPI_ROLE_TEXT: An object that presents text to the user, of nonspecific type. <br />
* ATSPI_ROLE_TOGGLE_BUTTON: A specialized push button that can be checked or unchecked, but does not procide a separate indicator for the current state. <br />
* ATSPI_ROLE_TOOL_BAR: A bar or palette usually composed of push buttons or toggle buttons <br />
* ATSPI_ROLE_TOOL_TIP: An object that provides information about another object <br />
* ATSPI_ROLE_TREE: An object used to repsent hierarchical information to the user. <br />
* ATSPI_ROLE_TREE_TABLE: An object that presents both tabular and hierarchical info to the user <br />
* ATSPI_ROLE_UNKNOWN: The object contains some Accessible information, but its role is not known. <br />
* ATSPI_ROLE_VIEWPORT: An object usually used in a scroll pane, or to otherwise clip a larger object or content renderer to a specific onscreen viewport. <br />
* ATSPI_ROLE_WINDOW: A &#168;top level window&#168; with no title or border. <br />
* ATSPI_ROLE_EXTENDED: means that the role for this item is known, but not included in the core enumeration <br />
* ATSPI_ROLE_HEADER: An object that serves as a document header. <br />
* ATSPI_ROLE_FOOTER: An object that serves as a document footer. <br />
* ATSPI_ROLE_PARAGRAPH: An object which is contains a single paragraph of text content. See also ROLE_TEXT. <br />
* ATSPI_ROLE_RULER: An object which describes margins and tab stops, etc. for text objects which it controls (should have CONTROLLER_FOR relation to such). <br />
* ATSPI_ROLE_APPLICATION: An object corresponding to the toplevel accessible of an application, which may contain ROLE_FRAME objects or other accessible objects. Children of AccessibleDesktop objects are generally ROLE_APPLICATION objects. <br />
* ATSPI_ROLE_AUTOCOMPLETE: The object is a dialog or list containing items for insertion into an entry widget, for instance a list of words for completion of a text entry. <br />
* ATSPI_ROLE_EDITBAR: The object is an editable text object in a toolbar. <br />
* ATSPI_ROLE_EMBEDDED: The object is an embedded component container. This role is a "grouping" hint that the contained objects share a context which is different from the container in which this accessible is embedded. In particular, it is used for some kinds of document embedding, and for embedding of out-of-process component, "panel applets", etc. <br />
* ATSPI_ROLE_ENTRY: The object is a component whose textual content may be entered or modified by the user, provided STATE_EDITABLE is present. A readonly ROLE_ENTRY object (i.e. where STATE_EDITABLE is not present) implies a read-only 'text field' in a form, as opposed to a title, label, or caption. <br />
* ATSPI_ROLE_CHART: The object is a graphical depiction of quantitative data. It may contain multiple subelements whose attributes and/or description may be queried to obtain both the quantitative data and information about how the data is being presented. The LABELLED_BY relation is particularly important in interpreting objects of this type, as is the accessible-description property. See ROLE_CAPTION <br />
* ATSPI_ROLE_CAPTION: The object contains descriptive information, usually textual, about another user interface element such as a table, chart, or image. <br />
* ATSPI_ROLE_DOCUMENT_FRAME: The object is a visual frame or container which contains a view of document content. Document frames may occur within another Document instance, in which case the second document may be said to be embedded in the containing instance. HTML frames are often ROLE_DOCUMENT_FRAME. Either this object, or a singleton descendant, should implement the Document interface. <br />
* ATSPI_ROLE_HEADING: The object serves as a heading for content which follows it in a document. The 'heading level' of the heading, if availabe, may be obtained by querying the object's attributes. <br />
* ATSPI_ROLE_PAGE: The object is a containing instance which encapsulates a page of information. ROLE_PAGE is used in documents and content which support a paginated navigation model. <br />
* ATSPI_ROLE_SECTION: The object is a containing instance of document content which constitutes a particular 'logical' section of the document. The type of content within a section, and the nature of the section division itself, may be obtained by querying the object's attributes. Sections may be nested. <br />
* ATSPI_ROLE_REDUNDANT_OBJECT: The object is redundant with another object in the hierarchy, and is exposed for purely technical reasons. Objects of this role should be ignored by clients, if they are encountered at all. <br />
* ATSPI_ROLE_FORM: The object is a containing instance of document content which has within it components with which the user can interact in order to input information; i.e. the object is a container for pushbuttons, comboboxes, text input fields, and other 'GUI' components. ROLE_FORM should not, in general, be used for toplevel GUI containers or dialogs, but should be reserved for 'GUI' containers which occur within document content, for instance within Web documents, presentations, or text documents. Unlike other GUI containers and dialogs which occur inside application instances, ROLE_FORM containers' components are associated with the current document, rather than the current foreground application or viewer instance. <br />
* ATSPI_ROLE_LINK: The object is a hypertext anchor, i.e. a "link" in a hypertext document. Such objects are distinct from 'inline' content which may also use the Hypertext/Hyperlink interfaces to indicate the range/location within a text object where an inline or embedded object lies. <br />
* ATSPI_ROLE_INPUT_METHOD_WINDOW: The object is a window or similar viewport which is used to allow composition or input of a 'complex character', in other words it is an "input method window." <br />
* ATSPI_ROLE_LAST_DEFINED: Not a valid role, used for finding end of enumeration. <br />
----<br />
<br />
= Events =<br />
== Focus ==<br />
One of the most important events is the focus change.<br />
FIXME document here what needs to happen when focus changes.<br />
<br />
----<br />
<br />
= Objects and their Properties =<br />
<br />
* Add AtkObject, AtkRoles, Names, Descriptions and the like<br />
* Talk about when to include versus when to omit or "fold in" (e.g. button whose child is a label, filler, etc.)<br />
<br />
''Matthias: I would really like to get some clarification about signals, when to emit them, what their expected semantics are, etc. E.g: do I emit 'visible-data-changed' when a label gains a mnemonic underline ?''<br />
----<br />
<br />
= Interfaces =<br />
''Note from JD: For now, I'm including the Documentation along with a Do's and Don'ts. Those ultimately might need to be merged. For now, having them both makes it more obvious to me what we should be questioning, docs we might need to go back and update, etc., etc.''<br />
<br />
Most accessible objects are expected to implement a variety of interfaces based on the purpose served by the backing toolkit widget, along with the ways users can interact with that widget.<br />
<br />
== AtkAction ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should be implemented by instances of AtkObject classes with which the user can interact directly, i.e. buttons, checkboxes, scrollbars, e.g. components which are not "passive" providers of UI information.<br />
<br />
Exceptions: when the user interaction is already covered by another appropriate interface such as AtkEditableText (insert/delete test, etc.) or AtkValue (set value) then these actions should not be exposed by [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] as well.<br />
<br />
Also note that the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] API is limited in that parameters may not be passed to the object being activated; thus the action must be self-contained and specifiable via only a single "verb". Concrete examples include "press", "release", "click" for buttons, "drag" (meaning initiate drag) and "drop" for drag sources and drop targets, etc.<br />
<br />
Though most UI interactions on components should be invocable via keyboard as well as mouse, there will generally be a close mapping between "mouse actions" that are possible on a component and the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkActions]]. Where mouse and keyboard actions are redundant in effect, [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should expose only one action rather than exposing redundant actions if possible. By convention we have been using "mouse centric" terminology for [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] names.<br />
<br />
''Note from Matthias: Should point out here that actions have keybindings associated with them. What are those good for, anyway ?''<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
* TODO: There was some discussion in #a11y with Benjamin and Joanie regarding the 'exception' above. We need to decide if it is good to have this "It's an AtkAction unless it happens to be an interface and then, well, it's not" situation. Surely that is confusing to implementors. Should Actiony things always be actions?<br />
* TODO: The verdict on press/release versus just click for buttons is still out.<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkComponent ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] should be implemented by most if not all UI elements with an actual on-screen presence, i.e. components which can be said to have a screen-coordinate bounding box. Virtually all widgets will need to have [[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] implementations provided for their corresponding AtkObject class. In short, only UI elements which are *not* GUI elements will omit this ATK interface.<br />
<br />
A possible exception might be textual information with a transparent background, in which case text glyph bounding box information is provided by [[http://developer.gnome.org/atk/unstable/AtkTextt.html|AtkText]].<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkDocument ==<br />
=== Description from the Documentation ===<br />
The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should be supported by any object whose content is a representation or view of a document. The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should appear on the toplevel container for the document content; however [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] instances may be nested (i.e. an [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] may be a descendant of another [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]]) in those cases where one document contains "embedded content" which can reasonably be considered a document in its own right.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkHypertext and AtkHyperlinkImpl ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkHypertext.html|AtkHypertext]] is an interface used for objects which implement linking between multiple resource or content locations, or multiple 'markers' within a single document. A Hypertext instance is associated with one or more Hyperlinks, which are associated with particular offsets within the Hypertext's included content. While this interface is derived from Text, there is no requirement that Hypertext instances have textual content; they may implement Image as well, and Hyperlinks need not have non-zero text offsets.<br />
<br />
[[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] allows AtkObjects to refer to their associated AtkHyperlink instance, if one exists. [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] differs from AtkHyperlink in that [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] is an interface, whereas AtkHyperlink is a object type. The [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] interface allows a client to query an AtkObject for the availability of an associated AtkHyperlink instance, and obtain that instance. It is thus particularly useful in cases where embedded content or inline content within a text object is present, since the embedding text object implements [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]] and the inline/embedded objects are exposed as children which implement [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]], in addition to their being obtainable via [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]]:getLink followed by AtkHyperlink:getObject.<br />
<br />
=== How Assistive Technologies Use These Interfaces ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
<br />
''Matthias: I have used the hyperlink classes in the accessible implementation for GtkLinkButton, and I'd love to know if my implementation is using these classes as intended.''<br />
<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkImage ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] should be implemented by AtkObject subtypes on behalf of components which display image/pixmap information onscreen, and which provide information (other than just widget borders, etc.) via that image content. For instance, icons, buttons with icons, toolbar elements, and image viewing panes typically should implement [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]].<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] primarily provides two types of information: coordinate information (useful for screen review mode of screenreaders, and for use by onscreen magnifiers), and descriptive information. The descriptive information is provided for alternative, text-only presentation of the most significant information present in the image.<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkSelection ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] should be implemented by UI components with children which are exposed by atk_object_ref_child and atk_object_get_n_children, if the use of the parent UI component ordinarily involves selection of one or more of the objects corresponding to those AtkObject children - for example, selectable lists.<br />
<br />
Note that other types of "selection" (for instance text selection) are accomplished a other ATK interfaces - [[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] is limited to the selection/deselection of children.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkTable ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] should be implemented by components which present elements ordered via rows and columns. It may also be used to present tree-structured information if the nodes of the trees can be said to contain multiple "columns". Individual elements of an [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are typically referred to as "cells", and these cells are exposed by [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] as child AtkObjects of the [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]]. Both row/column and child-index-based access to these children is provided.<br />
<br />
Children of [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are frequently "lightweight" objects, that is, they may not have backing widgets in the host UI toolkit. They are therefore often transient.<br />
<br />
Since tables are often very complex, [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] includes provision for offering simplified summary information, as well as row and column headers and captions. Headers and captions are AtkObjects which may implement other interfaces ([[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]], etc.) as appropriate. [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] summaries may themselves be (simplified) [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]], etc.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkText ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] should be implemented by AtkObjects on behalf of widgets that have text content which is either attributed or otherwise non-trivial. AtkObjects whose text content is simple, unattributed, and very brief may expose that content via atk_object_get_name instead; however if the text is editable, multi-line, typically longer than three or four words, attributed, selectable, or if the object already uses the 'name' ATK property for other information, the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface should be used to expose the text content. In the case of editable text content, AtkEditableText (a subtype of the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface) should be implemented instead.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] provides not only traversal facilities and change notification for text content, but also caret tracking and glyph bounding box calculations. Note that the text strings are exposed as UTF-8, and are therefore potentially multi-byte, and caret-to-byte offset mapping makes no assumptions about the character length; also bounding box glyph-to-offset mapping may be complex for languages which use ligatures.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] should be implemented by UI components which contain text which the user can edit, via the AtkObject corresponding to that component (see AtkObject).<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is a subclass of [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], and as such, an object which implements [[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is by definition an [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] implementor as well.<br />
=== How Assistive Technologies Use These Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
As a general rule, only implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for widgets which:<br />
* Are text the user can interact with by doing things such as: arrowing amongst characters, selecting, copying, etc., OR<br />
* Present a substantial message and/or have significant, important-to-convey formatting attributes<br />
Thus you DO want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* Documents and any other place the text contents can be changed by the user.<br />
* Labels serving as static text (e.g. in a message box).<br />
You do NOT want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* The displayed text/label of buttons (instead set the AtkObject's name to reflect the text)<br />
* The displayed/functional value of widgets implementing AtkValue (instead set the AtkObject's description to reflect the text)<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkValue ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] should be implemented for components which either display a value from a bounded range, or which allow the user to specify a value from a bounded range, or both. For instance, most sliders and range controls, as well as dials, should have AtkObject representations which implement [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] on the component's behalf. [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValues]] may be read-only, in which case attempts to alter the value return FALSE to indicate failure.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
----<br />
<br />
= Relations =<br />
<br />
Add the AtkRelation types here<br />
<br />
----<br />
<br />
<br />
<br />
= Widgets =<br />
Two main properties of widgets are Name and Description.<br />
The name reflects the primary text for the widget: The text of a label, the text on a button.<br />
The description gives additional information: A button labeled "OK" could have the description "Accepts the dialog". FIXME more sensible example?<br />
<br />
== Label ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Button ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Line Edit ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Menu ==<br />
This is the menu bar of an application - File, Edit etc.<br />
<br />
* '''menu bar'''<br />
* '''menu*'''<br />
* '''menu*''' can contain more menu and menu item<br />
* '''menu item*'''<br />
<br />
There is one '''menu bar''' as root element, it has any number of '''menu''' as children.<br />
'''menu''' can have '''menu''' and '''menu item''' as children.<br />
'''menu item''' does not have children.<br />
<br />
<br />
<br />
== List ==<br />
* '''list'''<br />
* '''list item*'''<br />
<br />
A list has only one column. It contains items.<br />
<br />
'''States''': STATE_MANAGES_DESCENDANTS<br />
<br />
'''Events''': FIXME: what do we need? active descendant and more black magic<br />
<br />
'''Interfaces''': Table<br />
<br />
== Table ==<br />
<br />
current state in gtk: it would be difficult to provide row objects<br />
<br />
* '''table'''<br />
* '''table column header'''<br />
* '''table cell''' sometimes gtk has image+text in one cell. it represents that as two child objects of type '''table cell'''<br />
<br />
Web: firefox usually has rows, but sometimes it can happen that rows are not present (like html role presentation or css hidden)<br />
<br />
* '''table'''<br />
* '''table row''' the first row only contains headers<br />
* '''table row header''' once for the top-left header<br />
* '''table column header*''' as many as columns<br />
* '''table row*''' <br />
* '''table row header[0-1]''' for the left header<br />
* '''table cell*''' as many as columns, can be less if cell-span > 1 <br />
should headers be mandatory? should it be '''table header row''' for the first row?<br />
<br />
IA2: all cells are children of the table object. there are no row objects. like gtk.<br />
<br />
<br />
One big concern was notifications about selection changes. It would be great to get notified for things such as row selected. There are two ways to tackle this:<br />
in the first approach (gtk) we could define a signal: rows-selected() and rows-deselected or somesuch<br />
in the second approach with rows, the row object could be sent as selected. this has the downside that there is no way to do the same for columns. it is less flexible.<br />
IA2 has functions to get selected rows/columns<br />
<br />
<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''':<br />
<br />
== Trees ==<br />
The reason for the variety of trees that are possible is mostly that ARIA has very flexible tree definitions. The web implementators will simply expose that.<br />
<br />
<br />
Tree has exactly one column. For trees with more than one column the '''tree table''' has to be used.<br />
<br />
Tree items can contain a grouping element. In the grouping element it can have other items.<br />
<br />
=== Tree 1: define hierarchy through relations and group positions ===<br />
* '''tree'''<br />
* '''tree item''' with relations and group positions that define hierarchy<br />
* '''tree item'''<br />
* ...<br />
<br />
This tree works with add/remove tree items when they get expanded/collapsed.<br />
<br />
=== Tree 2: real hierarchy ===<br />
The items are arranged as children.<br />
<br />
* '''tree'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item*'''<br />
<br />
<br />
* '''tree'''<br />
* '''tree item group'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item group'''<br />
* '''tree item*'''<br />
<br />
No need for add/remove for expanding/collapsing of sub items.<br />
<br />
<br />
=== Tree 3: Tree Table ===<br />
Tree tables can not be hierarchical.<br />
'''tree table''' can have more than one column<br />
<br />
* '''tree table''' <br />
* '''tree table cell*'''<br />
<br />
* '''tree table'''<br />
* '''tree table row*'''<br />
* '''tree table cell*'''<br />
<br />
<br />
== Scroll Bars ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Combo Box ==<br />
* ATSPI_ROLE_COMBO_BOX is the root element<br />
* ATSPI_ROLE_TABLE see table. Usually this is a flat list of items.<br />
* ATSPI_ROLE_TEXT [optional] is present when the combo box is editable.<br />
<br />
The Accessible Name of the '''combo box''' accessible is the current text that is displayed. This text can be typed by the user or one of the selected items.<br />
<br />
'''States''': Focused, Editable<br />
<br />
'''Events''': Focus<br />
<br />
'''Interfaces''': None required<br />
<br />
The name of the ATSPI_ROLE_COMBO_BOX should always reflect the current text.<br />
FIXME: what should combo box send when the current item/text changed?<br />
<br />
<br />
== Foo Bar Template ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Stuff we Mustn't Forget ==<br />
(But are not sure where all to put it yet.)<br />
<br />
* "Hint text" - Gtk+ has it as an AtkObject attribute ('placeholder-text').<br />
* Window management stuff - what happens when a window gains focus etc<br />
* Registry - give an overview what it is, why and how clients and servers register to it.]\<br />
* Relations <br />
* make sure to mention them with the widgets that most likely need them (labelled-by for line edit)<br />
* document what they are in general</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=User:Frederik.gladhorn/atspi-scratch&diff=61133User:Frederik.gladhorn/atspi-scratch2011-07-01T11:46:32Z<p>Frederik.gladhorn: /* Table */</p>
<hr />
<div>= GNOME Accessibility Team =<br />
= ATK/AT-SPI Best Practices Guide for Implementors =<br />
= DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT =<br />
<br />
= Introduction =<br />
This guide is for implementors of ATK and AT-SPI 2.<br />
It should say how to describe the user interface through the use of the AT-SPI Accessibility APIs.<br />
Having consistent representations of widgets makes the implementation of assisitive technology much easier.<br />
<br />
ATK and AT-SPI should be identical to large parts. Especially roles and enums should be the same, so this guide applies to both.<br />
<br />
The aim is to have a defined structure where applicable. For example an editable Combo Box should have a list or table and an editable text as children.<br />
<br />
In addition the expected signals such as accessible-name changed should be documented so that it is clear which signals to emit.<br />
<br />
= States =<br />
Accessible objects always have a set of states.<br />
For each widget below it is mentioned which states should be implemented.<br />
Over AT-SPI2 the states are split into two 32 bit uints. (yes, it's that horrible).<br />
<br />
FIXME link to states list<br />
<br />
ATSPI States (from at-spi2-core/atspi/atspi-constants.c)<br />
<br />
* ATSPI_STATE_INVALID: <br />
* ATSPI_STATE_ACTIVE: Indicates a window is currently the active window, or is an active subelement within a container or table <br />
* ATSPI_STATE_ARMED: Indicates that the object is armed <br />
* ATSPI_STATE_BUSY: Indicates the current object is busy, i.e. onscreen representation is in the process of changing, or the object is temporarily unavailable for interaction due to activity already in progress. <br />
* ATSPI_STATE_CHECKED: Indicates this object is currently checked <br />
* ATSPI_STATE_COLLAPSED: Indicates this object is collapsed <br />
* ATSPI_STATE_DEFUNCT: Indicates that this object no longer has a valid backing widget (for instance, if its peer object has been destroyed) <br />
* ATSPI_STATE_EDITABLE: Indicates the user can change the contents of this object <br />
* ATSPI_STATE_ENABLED: Indicates that this object is enabled, i.e. that it currently reflects some application state. Objects that are "greyed out" may lack this state, and may lack the STATE_SENSITIVE if direct user interaction cannot cause them to acquire STATE_ENABLED. @see STATE_SENSITIVE. <br />
* ATSPI_STATE_EXPANDABLE: Indicates this object allows progressive disclosure of its children <br />
* ATSPI_STATE_EXPANDED: Indicates this object its expanded <br />
* ATSPI_STATE_FOCUSABLE: Indicates this object can accept keyboard focus, which means all events resulting from typing on the keyboard will normally be passed to it when it has focus <br />
* ATSPI_STATE_FOCUSED: Indicates this object currently has the keyboard focus <br />
* ATSPI_STATE_HAS_TOOLTIP: Indicates that the object has an associated tooltip <br />
* ATSPI_STATE_HORIZONTAL: Indicates the orientation of thsi object is horizontal <br />
* ATSPI_STATE_ICONIFIED: Indicates this object is minimized and is represented only by an icon <br />
* ATSPI_STATE_MODAL: Indicates something must be done with this object before the user can interact with an object in a different window. <br />
* ATSPI_STATE_MULTI_LINE: Indicates this (text) object can contain multiple lines of text <br />
* ATSPI_STATE_MULTISELECTABLE: Indicates this object allows more than one of its children to be selected at the same time, or in the case of text objects, that the object supports non-contiguous text selections. <br />
* ATSPI_STATE_OPAQUE: Indicates this object paints every pixel within its rectangular region. It also indicates an alpha value of unity, if it supports alpha blending. <br />
* ATSPI_STATE_PRESSED: Indicates this object is currently pressed <br />
* ATSPI_STATE_RESIZABLE: Indicates the size of this object's size is not fixed <br />
* ATSPI_STATE_SELECTABLE: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that can be selected. <br />
* ATSPI_STATE_SELECTED: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that has been selected. <br />
* ATSPI_STATE_SENSITIVE: Indicates this object is sensitive, e.g. to user interaction. STATE_SENSITIVE usually accompanies STATE_ENABLED for user-actionable controls, but may be found in the absence of STATE_ENABLED if the current visible state of the control is "disconnected" from the application state. In such cases, direct user interaction can often result in the object gaining STATE_SENSITIVE, for instance if a user makes an explicit selection using an object whose current state is ambiguous or undefined. @see STATE_ENABLED, STATE_INDETERMINATE. <br />
* ATSPI_STATE_SHOWING: Indicates this object, the object's parent, the object's parent's parent, and so on, are all 'shown' to the end-user, i.e. subject to "exposure" if blocking or obscuring objects do not interpose between this object and the top of the window stack. <br />
* ATSPI_STATE_SINGLE_LINE: Indicates this (text) object can contain only a single line of text <br />
* ATSPI_STATE_STALE: Indicates that the information returned for this object may no longer be synchronized with the application state. This can occur if the object has STATE_TRANSIENT, and can also occur towards the end of the object peer's lifecycle. <br />
* ATSPI_STATE_TRANSIENT: Indicates this object is transient <br />
* ATSPI_STATE_VERTICAL: Indicates the orientation of this object is vertical; for example this state may appear on such objects as scrollbars, text objects (with vertical text flow), separators, etc. <br />
* ATSPI_STATE_VISIBLE: Indicates this object is visible, e.g. has been explicitly marked for exposure to the user. STATE_VISIBLE is no guarantee that the object is actually unobscured on the screen, only that it is 'potentially' visible, barring obstruction, being scrolled or clipped out of the field of view, or having an ancestor container that has not yet made visible. A widget is potentially onscreen if it has both STATE_VISIBLE and STATE_SHOWING. The absence of STATE_VISIBLE and STATE_SHOWING is semantically equivalent to saying that an object is 'hidden'. <br />
* ATSPI_STATE_MANAGES_DESCENDANTS: Indicates that "active-descendant-changed" event is sent when children become 'active' (i.e. are selected or navigated to onscreen). Used to prevent need to enumerate all children in very large containers, like tables. The presence of STATE_MANAGES_DESCENDANTS is an indication to the client. that the children should not, and need not, be enumerated by the client. Objects implementing this state are expected to provide relevant state notifications to listening clients, for instance notifications of visibility changes and activation of their contained child objects, without the client having previously requested references to those children. <br />
* ATSPI_STATE_INDETERMINATE: Indicates that a check box or other boolean indicator is in a state other than checked or not checked. This usually means that the boolean value reflected or controlled by the object does not apply consistently to the entire current context. For example, a checkbox for the "Bold" attribute of text may have STATE_INDETERMINATE if the currently selected text contains a mixture of weight attributes. In many cases interacting with a STATE_INDETERMINATE object will cause the context's corresponding boolean attribute to be homogenized, whereupon the object will lose STATE_INDETERMINATE and a corresponding state-changed event will be fired. <br />
* ATSPI_STATE_REQUIRED: Indicates that user interaction with this object is 'required' from the user, for instance before completing the processing of a form. <br />
* ATSPI_STATE_TRUNCATED: Indicates that an object's onscreen content is truncated, e.g. a text value in a spreadsheet cell. <br />
* ATSPI_STATE_ANIMATED: Indicates this object's visual representation is dynamic, not static. This state may be applied to an object during an animated 'effect' and be removed from the object once its visual representation becomes static. some applications, notably content viewers, may not be able to detect all kinds of animated content. Therefore the absence of this state should not be taken as definitive evidence that the object's visual representation is static; this state is advisory. <br />
* ATSPI_STATE_INVALID_ENTRY: This object has indicated an error condition due to failure of input validation. For instance, a form control may acquire this state in response to invalid or malformed user input. <br />
* ATSPI_STATE_SUPPORTS_AUTOCOMPLETION: This state indicates that the object in question implements some form of &#168;typeahead&#168; or pre-selection behavior whereby entering the first character of one or more sub-elements causes those elements to scroll into view or become selected. Subsequent character input may narrow the selection further as long as one or more sub-elements match the string. This state is normally only useful and encountered on objects that implement Selection. In some cases the typeahead behavior may result in full or partial &#168;completion&#168; of the data in the input field, in which case these input events may trigger text-changed events from the source. <br />
* ATSPI_STATE_SELECTABLE_TEXT: This state indicates that the object in question supports text selection. It should only be exposed on objects which implement the Text interface, in order to distinguish this state from STATE_SELECTABLE, which infers that the object in question is a selectable child of an object which implements Selection. While similar, text selection and subelement selection are distinct operations. <br />
* ATSPI_STATE_IS_DEFAULT: This state indicates that the object in question is the 'default' interaction object in a dialog, i.e. the one that gets activated if the user presses "Enter" when the dialog is initially posted. <br />
* ATSPI_STATE_VISITED: This state indicates that the object (typically a hyperlink) has already been activated or invoked, with the result that some backing data has been downloaded or rendered. <br />
* ATSPI_STATE_LAST_DEFINED: This value of the enumeration should not be used as a parameter, it indicates the number of items in the StateType enumeration. <br />
<br />
<br />
<br />
Some states are valid for all widgets:<br />
* Visible?<br />
<br />
<br />
----<br />
= Roles =<br />
* ATSPI_ROLE_INVALID: A Role indicating an error condition, such as uninitialized Role data. <br />
* ATSPI_ROLE_ACCELERATOR_LABEL: Object is a label indicating the keyboard accelerators for the parent <br />
* ATSPI_ROLE_ALERT: Object is used to alert the user about something <br />
* ATSPI_ROLE_ANIMATION: Object contains a dynamic or moving image of some kind <br />
* ATSPI_ROLE_ARROW: Object is a 2d directional indicator <br />
* ATSPI_ROLE_CALENDAR: Object contains one or more dates, usually arranged into a 2d list <br />
* ATSPI_ROLE_CANVAS: Object that can be drawn into and is used to trap events <br />
* ATSPI_ROLE_CHECK_BOX: A choice that can be checked or unchecked and provides a separate indicator for the current state. <br />
* ATSPI_ROLE_CHECK_MENU_ITEM: A menu item that behaves like a check box (see ROLE_CHECK_BOX) <br />
* ATSPI_ROLE_COLOR_CHOOSER: A specialized dialog that lets the user choose a color. <br />
* ATSPI_ROLE_COLUMN_HEADER: The header for a column of data <br />
* ATSPI_ROLE_COMBO_BOX: A list of choices the user can select from <br />
* ATSPI_ROLE_DATE_EDITOR: An object which allows entry of a date <br />
* ATSPI_ROLE_DESKTOP_ICON: An inconifed internal frame within a DESKTOP_PANE <br />
* ATSPI_ROLE_DESKTOP_FRAME: A pane that supports internal frames and iconified versions of those internal frames. <br />
* ATSPI_ROLE_DIAL: An object that allows a value to be changed via rotating a visual element, or which displays a value via such a rotating element. <br />
* ATSPI_ROLE_DIALOG: A top level window with title bar and a border <br />
* ATSPI_ROLE_DIRECTORY_PANE: A pane that allows the user to navigate through and select the contents of a directory <br />
* ATSPI_ROLE_DRAWING_AREA: A specialized dialog that displays the files in the directory and lets the user select a file, browse a different directory, or specify a filename. <br />
* ATSPI_ROLE_FILE_CHOOSER: An object used for drawing custom user interface elements. <br />
* ATSPI_ROLE_FILLER: A object that fills up space in a user interface <br />
* ATSPI_ROLE_FOCUS_TRAVERSABLE: Don't use, reserved for future use. <br />
* ATSPI_ROLE_FONT_CHOOSER: Allows selection of a display font <br />
* ATSPI_ROLE_FRAME: A top level window with a title bar, border, menubar, etc. <br />
* ATSPI_ROLE_GLASS_PANE: A pane that is guaranteed to be painted on top of all panes beneath it <br />
* ATSPI_ROLE_HTML_CONTAINER: A document container for HTML, whose children represent the document content. <br />
* ATSPI_ROLE_ICON: A small fixed size picture, typically used to decorate components <br />
* ATSPI_ROLE_IMAGE: An image, typically static. <br />
* ATSPI_ROLE_INTERNAL_FRAME: A frame-like object that is clipped by a desktop pane. <br />
* ATSPI_ROLE_LABEL: An object used to present an icon or short string in an interface <br />
* ATSPI_ROLE_LAYERED_PANE: A specialized pane that allows its children to be drawn in layers, providing a form of stacking order. <br />
* ATSPI_ROLE_LIST: An object that presents a list of objects to the user and allows the user to select one or more of them. <br />
* ATSPI_ROLE_LIST_ITEM: An object that represents an element of a list. <br />
* ATSPI_ROLE_MENU: An object usually found inside a menu bar that contains a list of actions the user can choose from. <br />
* ATSPI_ROLE_MENU_BAR: An object usually drawn at the top of the primary dialog box of an application that contains a list of menus the user can choose from. <br />
* ATSPI_ROLE_MENU_ITEM: An object usually contained in a menu that presents an action the user can choose. <br />
* ATSPI_ROLE_OPTION_PANE: A specialized pane whose primary use is inside a DIALOG <br />
* ATSPI_ROLE_PAGE_TAB: An object that is a child of a page tab list <br />
* ATSPI_ROLE_PAGE_TAB_LIST: An object that presents a series of panels (or page tabs), one at a time, through some mechanism provided by the object. <br />
* ATSPI_ROLE_PANEL: A generic container that is often used to group objects. <br />
* ATSPI_ROLE_PASSWORD_TEXT: A text object uses for passwords, or other places where the text content is not shown visibly to the user. <br />
* ATSPI_ROLE_POPUP_MENU: A temporary window that is usually used to offer the user a list of choices, and then hides when the user selects one of those choices. <br />
* ATSPI_ROLE_PROGRESS_BAR: An object used to indicate how much of a task has been completed. <br />
* ATSPI_ROLE_PUSH_BUTTON: An object the user can manipulate to tell the application to do something. <br />
* ATSPI_ROLE_RADIO_BUTTON: A specialized check box that will cause other radio buttons in the same group to become uncghecked when this one is checked. <br />
* ATSPI_ROLE_RADIO_MENU_ITEM: Object is both a menu item and a "radio button" (see ROLE_RADIO_BUTTON) <br />
* ATSPI_ROLE_ROOT_PANE: A specialized pane that has a glass pane and a layered pane as its children. <br />
* ATSPI_ROLE_ROW_HEADER: The header for a row of data <br />
* ATSPI_ROLE_SCROLL_BAR: An object usually used to allow a user to incrementally view a large amount of data by moving the bounds of a viewport along a one-dimensional axis. <br />
* ATSPI_ROLE_SCROLL_PANE: An object that allows a user to incrementally view a large amount of information. ROLE_SCROLL_PANE objects are usually accompanied by ROLE_SCROLL_BAR controllers, on which the RELATION_CONTROLLER_FOR and RELATION_CONTROLLED_BY reciprocal relations are set; \see Accessibility::RelationSet. <br />
* ATSPI_ROLE_SEPARATOR: An object usually contained in a menu to provide a visible and logical separation of the contents in a menu. <br />
* ATSPI_ROLE_SLIDER: An object that allows the user to select from a bounded range <br />
* ATSPI_ROLE_SPIN_BUTTON: An object which allows one of a set of choices to be selected, and which displays the current choice. Unlike ROLE_SCROLL_BAR, ROLE_SLIDER objects need not control 'viewport'-like objects. <br />
* ATSPI_ROLE_SPLIT_PANE: A specialized panel that presents two other panels at the same time. <br />
* ATSPI_ROLE_STATUS_BAR: Object displays non-quantitative status information (c.f. ROLE_PROGRESS_BAR) <br />
* ATSPI_ROLE_TABLE: An object used to repesent information in terms of rows and columns. <br />
* ATSPI_ROLE_TABLE_CELL: A 'cell' or discrete child within a Table. \note Table cells need not have ROLE_TABLE_CELL, other RoleType values are valid as well. <br />
* ATSPI_ROLE_TABLE_COLUMN_HEADER: An object which labels a particular column in a Table. <br />
* ATSPI_ROLE_TABLE_ROW_HEADER: An object which labels a particular row in a Table. Table rows and columns may also be labelled via the RELATION_LABEL_FOR/RELATION_LABELLED_BY relationships; see Accessibility.RelationSet. <br />
* ATSPI_ROLE_TEAROFF_MENU_ITEM: Object allows menu to be removed from menubar and shown in its own window. <br />
* ATSPI_ROLE_TERMINAL: An object that emulates a terminal <br />
* ATSPI_ROLE_TEXT: An object that presents text to the user, of nonspecific type. <br />
* ATSPI_ROLE_TOGGLE_BUTTON: A specialized push button that can be checked or unchecked, but does not procide a separate indicator for the current state. <br />
* ATSPI_ROLE_TOOL_BAR: A bar or palette usually composed of push buttons or toggle buttons <br />
* ATSPI_ROLE_TOOL_TIP: An object that provides information about another object <br />
* ATSPI_ROLE_TREE: An object used to repsent hierarchical information to the user. <br />
* ATSPI_ROLE_TREE_TABLE: An object that presents both tabular and hierarchical info to the user <br />
* ATSPI_ROLE_UNKNOWN: The object contains some Accessible information, but its role is not known. <br />
* ATSPI_ROLE_VIEWPORT: An object usually used in a scroll pane, or to otherwise clip a larger object or content renderer to a specific onscreen viewport. <br />
* ATSPI_ROLE_WINDOW: A &#168;top level window&#168; with no title or border. <br />
* ATSPI_ROLE_EXTENDED: means that the role for this item is known, but not included in the core enumeration <br />
* ATSPI_ROLE_HEADER: An object that serves as a document header. <br />
* ATSPI_ROLE_FOOTER: An object that serves as a document footer. <br />
* ATSPI_ROLE_PARAGRAPH: An object which is contains a single paragraph of text content. See also ROLE_TEXT. <br />
* ATSPI_ROLE_RULER: An object which describes margins and tab stops, etc. for text objects which it controls (should have CONTROLLER_FOR relation to such). <br />
* ATSPI_ROLE_APPLICATION: An object corresponding to the toplevel accessible of an application, which may contain ROLE_FRAME objects or other accessible objects. Children of AccessibleDesktop objects are generally ROLE_APPLICATION objects. <br />
* ATSPI_ROLE_AUTOCOMPLETE: The object is a dialog or list containing items for insertion into an entry widget, for instance a list of words for completion of a text entry. <br />
* ATSPI_ROLE_EDITBAR: The object is an editable text object in a toolbar. <br />
* ATSPI_ROLE_EMBEDDED: The object is an embedded component container. This role is a "grouping" hint that the contained objects share a context which is different from the container in which this accessible is embedded. In particular, it is used for some kinds of document embedding, and for embedding of out-of-process component, "panel applets", etc. <br />
* ATSPI_ROLE_ENTRY: The object is a component whose textual content may be entered or modified by the user, provided STATE_EDITABLE is present. A readonly ROLE_ENTRY object (i.e. where STATE_EDITABLE is not present) implies a read-only 'text field' in a form, as opposed to a title, label, or caption. <br />
* ATSPI_ROLE_CHART: The object is a graphical depiction of quantitative data. It may contain multiple subelements whose attributes and/or description may be queried to obtain both the quantitative data and information about how the data is being presented. The LABELLED_BY relation is particularly important in interpreting objects of this type, as is the accessible-description property. See ROLE_CAPTION <br />
* ATSPI_ROLE_CAPTION: The object contains descriptive information, usually textual, about another user interface element such as a table, chart, or image. <br />
* ATSPI_ROLE_DOCUMENT_FRAME: The object is a visual frame or container which contains a view of document content. Document frames may occur within another Document instance, in which case the second document may be said to be embedded in the containing instance. HTML frames are often ROLE_DOCUMENT_FRAME. Either this object, or a singleton descendant, should implement the Document interface. <br />
* ATSPI_ROLE_HEADING: The object serves as a heading for content which follows it in a document. The 'heading level' of the heading, if availabe, may be obtained by querying the object's attributes. <br />
* ATSPI_ROLE_PAGE: The object is a containing instance which encapsulates a page of information. ROLE_PAGE is used in documents and content which support a paginated navigation model. <br />
* ATSPI_ROLE_SECTION: The object is a containing instance of document content which constitutes a particular 'logical' section of the document. The type of content within a section, and the nature of the section division itself, may be obtained by querying the object's attributes. Sections may be nested. <br />
* ATSPI_ROLE_REDUNDANT_OBJECT: The object is redundant with another object in the hierarchy, and is exposed for purely technical reasons. Objects of this role should be ignored by clients, if they are encountered at all. <br />
* ATSPI_ROLE_FORM: The object is a containing instance of document content which has within it components with which the user can interact in order to input information; i.e. the object is a container for pushbuttons, comboboxes, text input fields, and other 'GUI' components. ROLE_FORM should not, in general, be used for toplevel GUI containers or dialogs, but should be reserved for 'GUI' containers which occur within document content, for instance within Web documents, presentations, or text documents. Unlike other GUI containers and dialogs which occur inside application instances, ROLE_FORM containers' components are associated with the current document, rather than the current foreground application or viewer instance. <br />
* ATSPI_ROLE_LINK: The object is a hypertext anchor, i.e. a "link" in a hypertext document. Such objects are distinct from 'inline' content which may also use the Hypertext/Hyperlink interfaces to indicate the range/location within a text object where an inline or embedded object lies. <br />
* ATSPI_ROLE_INPUT_METHOD_WINDOW: The object is a window or similar viewport which is used to allow composition or input of a 'complex character', in other words it is an "input method window." <br />
* ATSPI_ROLE_LAST_DEFINED: Not a valid role, used for finding end of enumeration. <br />
----<br />
<br />
= Events =<br />
== Focus ==<br />
One of the most important events is the focus change.<br />
FIXME document here what needs to happen when focus changes.<br />
<br />
----<br />
<br />
= Objects and their Properties =<br />
<br />
* Add AtkObject, AtkRoles, Names, Descriptions and the like<br />
* Talk about when to include versus when to omit or "fold in" (e.g. button whose child is a label, filler, etc.)<br />
<br />
''Matthias: I would really like to get some clarification about signals, when to emit them, what their expected semantics are, etc. E.g: do I emit 'visible-data-changed' when a label gains a mnemonic underline ?''<br />
----<br />
<br />
= Interfaces =<br />
''Note from JD: For now, I'm including the Documentation along with a Do's and Don'ts. Those ultimately might need to be merged. For now, having them both makes it more obvious to me what we should be questioning, docs we might need to go back and update, etc., etc.''<br />
<br />
Most accessible objects are expected to implement a variety of interfaces based on the purpose served by the backing toolkit widget, along with the ways users can interact with that widget.<br />
<br />
== AtkAction ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should be implemented by instances of AtkObject classes with which the user can interact directly, i.e. buttons, checkboxes, scrollbars, e.g. components which are not "passive" providers of UI information.<br />
<br />
Exceptions: when the user interaction is already covered by another appropriate interface such as AtkEditableText (insert/delete test, etc.) or AtkValue (set value) then these actions should not be exposed by [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] as well.<br />
<br />
Also note that the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] API is limited in that parameters may not be passed to the object being activated; thus the action must be self-contained and specifiable via only a single "verb". Concrete examples include "press", "release", "click" for buttons, "drag" (meaning initiate drag) and "drop" for drag sources and drop targets, etc.<br />
<br />
Though most UI interactions on components should be invocable via keyboard as well as mouse, there will generally be a close mapping between "mouse actions" that are possible on a component and the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkActions]]. Where mouse and keyboard actions are redundant in effect, [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should expose only one action rather than exposing redundant actions if possible. By convention we have been using "mouse centric" terminology for [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] names.<br />
<br />
''Note from Matthias: Should point out here that actions have keybindings associated with them. What are those good for, anyway ?''<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
* TODO: There was some discussion in #a11y with Benjamin and Joanie regarding the 'exception' above. We need to decide if it is good to have this "It's an AtkAction unless it happens to be an interface and then, well, it's not" situation. Surely that is confusing to implementors. Should Actiony things always be actions?<br />
* TODO: The verdict on press/release versus just click for buttons is still out.<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkComponent ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] should be implemented by most if not all UI elements with an actual on-screen presence, i.e. components which can be said to have a screen-coordinate bounding box. Virtually all widgets will need to have [[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] implementations provided for their corresponding AtkObject class. In short, only UI elements which are *not* GUI elements will omit this ATK interface.<br />
<br />
A possible exception might be textual information with a transparent background, in which case text glyph bounding box information is provided by [[http://developer.gnome.org/atk/unstable/AtkTextt.html|AtkText]].<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkDocument ==<br />
=== Description from the Documentation ===<br />
The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should be supported by any object whose content is a representation or view of a document. The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should appear on the toplevel container for the document content; however [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] instances may be nested (i.e. an [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] may be a descendant of another [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]]) in those cases where one document contains "embedded content" which can reasonably be considered a document in its own right.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkHypertext and AtkHyperlinkImpl ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkHypertext.html|AtkHypertext]] is an interface used for objects which implement linking between multiple resource or content locations, or multiple 'markers' within a single document. A Hypertext instance is associated with one or more Hyperlinks, which are associated with particular offsets within the Hypertext's included content. While this interface is derived from Text, there is no requirement that Hypertext instances have textual content; they may implement Image as well, and Hyperlinks need not have non-zero text offsets.<br />
<br />
[[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] allows AtkObjects to refer to their associated AtkHyperlink instance, if one exists. [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] differs from AtkHyperlink in that [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] is an interface, whereas AtkHyperlink is a object type. The [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] interface allows a client to query an AtkObject for the availability of an associated AtkHyperlink instance, and obtain that instance. It is thus particularly useful in cases where embedded content or inline content within a text object is present, since the embedding text object implements [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]] and the inline/embedded objects are exposed as children which implement [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]], in addition to their being obtainable via [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]]:getLink followed by AtkHyperlink:getObject.<br />
<br />
=== How Assistive Technologies Use These Interfaces ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
<br />
''Matthias: I have used the hyperlink classes in the accessible implementation for GtkLinkButton, and I'd love to know if my implementation is using these classes as intended.''<br />
<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkImage ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] should be implemented by AtkObject subtypes on behalf of components which display image/pixmap information onscreen, and which provide information (other than just widget borders, etc.) via that image content. For instance, icons, buttons with icons, toolbar elements, and image viewing panes typically should implement [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]].<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] primarily provides two types of information: coordinate information (useful for screen review mode of screenreaders, and for use by onscreen magnifiers), and descriptive information. The descriptive information is provided for alternative, text-only presentation of the most significant information present in the image.<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkSelection ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] should be implemented by UI components with children which are exposed by atk_object_ref_child and atk_object_get_n_children, if the use of the parent UI component ordinarily involves selection of one or more of the objects corresponding to those AtkObject children - for example, selectable lists.<br />
<br />
Note that other types of "selection" (for instance text selection) are accomplished a other ATK interfaces - [[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] is limited to the selection/deselection of children.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkTable ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] should be implemented by components which present elements ordered via rows and columns. It may also be used to present tree-structured information if the nodes of the trees can be said to contain multiple "columns". Individual elements of an [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are typically referred to as "cells", and these cells are exposed by [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] as child AtkObjects of the [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]]. Both row/column and child-index-based access to these children is provided.<br />
<br />
Children of [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are frequently "lightweight" objects, that is, they may not have backing widgets in the host UI toolkit. They are therefore often transient.<br />
<br />
Since tables are often very complex, [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] includes provision for offering simplified summary information, as well as row and column headers and captions. Headers and captions are AtkObjects which may implement other interfaces ([[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]], etc.) as appropriate. [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] summaries may themselves be (simplified) [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]], etc.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkText ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] should be implemented by AtkObjects on behalf of widgets that have text content which is either attributed or otherwise non-trivial. AtkObjects whose text content is simple, unattributed, and very brief may expose that content via atk_object_get_name instead; however if the text is editable, multi-line, typically longer than three or four words, attributed, selectable, or if the object already uses the 'name' ATK property for other information, the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface should be used to expose the text content. In the case of editable text content, AtkEditableText (a subtype of the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface) should be implemented instead.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] provides not only traversal facilities and change notification for text content, but also caret tracking and glyph bounding box calculations. Note that the text strings are exposed as UTF-8, and are therefore potentially multi-byte, and caret-to-byte offset mapping makes no assumptions about the character length; also bounding box glyph-to-offset mapping may be complex for languages which use ligatures.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] should be implemented by UI components which contain text which the user can edit, via the AtkObject corresponding to that component (see AtkObject).<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is a subclass of [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], and as such, an object which implements [[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is by definition an [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] implementor as well.<br />
=== How Assistive Technologies Use These Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
As a general rule, only implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for widgets which:<br />
* Are text the user can interact with by doing things such as: arrowing amongst characters, selecting, copying, etc., OR<br />
* Present a substantial message and/or have significant, important-to-convey formatting attributes<br />
Thus you DO want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* Documents and any other place the text contents can be changed by the user.<br />
* Labels serving as static text (e.g. in a message box).<br />
You do NOT want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* The displayed text/label of buttons (instead set the AtkObject's name to reflect the text)<br />
* The displayed/functional value of widgets implementing AtkValue (instead set the AtkObject's description to reflect the text)<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkValue ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] should be implemented for components which either display a value from a bounded range, or which allow the user to specify a value from a bounded range, or both. For instance, most sliders and range controls, as well as dials, should have AtkObject representations which implement [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] on the component's behalf. [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValues]] may be read-only, in which case attempts to alter the value return FALSE to indicate failure.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
----<br />
<br />
= Relations =<br />
<br />
Add the AtkRelation types here<br />
<br />
----<br />
<br />
<br />
<br />
= Widgets =<br />
Two main properties of widgets are Name and Description.<br />
The name reflects the primary text for the widget: The text of a label, the text on a button.<br />
The description gives additional information: A button labeled "OK" could have the description "Accepts the dialog". FIXME more sensible example?<br />
<br />
== Label ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Button ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Line Edit ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Tree ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Menu ==<br />
This is the menu bar of an application - File, Edit etc.<br />
<br />
* '''menu bar'''<br />
* '''menu*'''<br />
* '''menu*''' can contain more menu and menu item<br />
* '''menu item*'''<br />
<br />
There is one '''menu bar''' as root element, it has any number of '''menu''' as children.<br />
'''menu''' can have '''menu''' and '''menu item''' as children.<br />
'''menu item''' does not have children.<br />
<br />
<br />
<br />
== List ==<br />
* '''list'''<br />
* '''list item*'''<br />
<br />
A list has only one column. It contains items.<br />
<br />
'''States''': STATE_MANAGES_DESCENDANTS<br />
<br />
'''Events''': FIXME: what do we need? active descendant and more black magic<br />
<br />
'''Interfaces''': Table<br />
<br />
== Table ==<br />
<br />
current state in gtk: it would be difficult to provide row objects<br />
<br />
* '''table'''<br />
* '''table column header'''<br />
* '''table cell''' sometimes gtk has image+text in one cell. it represents that as two child objects of type '''table cell'''<br />
<br />
Web: firefox usually has rows, but sometimes it can happen that rows are not present (like html role presentation or css hidden)<br />
<br />
* '''table'''<br />
* '''table row''' the first row only contains headers<br />
* '''table row header''' once for the top-left header<br />
* '''table column header*''' as many as columns<br />
* '''table row*''' <br />
* '''table row header[0-1]''' for the left header<br />
* '''table cell*''' as many as columns, can be less if cell-span > 1 <br />
should headers be mandatory? should it be '''table header row''' for the first row?<br />
<br />
IA2: all cells are children of the table object. there are no row objects. like gtk.<br />
<br />
<br />
One big concern was notifications about selection changes. It would be great to get notified for things such as row selected. There are two ways to tackle this:<br />
in the first approach (gtk) we could define a signal: rows-selected() and rows-deselected or somesuch<br />
in the second approach with rows, the row object could be sent as selected. this has the downside that there is no way to do the same for columns. it is less flexible.<br />
IA2 has functions to get selected rows/columns<br />
<br />
<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''':<br />
<br />
== Trees ==<br />
The reason for the variety of trees that are possible is mostly that ARIA has very flexible tree definitions. The web implementators will simply expose that.<br />
<br />
<br />
Tree has exactly one column. For trees with more than one column the '''tree table''' has to be used.<br />
<br />
Tree items can contain a grouping element. In the grouping element it can have other items.<br />
<br />
=== Tree 1: define hierarchy through relations and group positions ===<br />
* '''tree'''<br />
* '''tree item''' with relations and group positions that define hierarchy<br />
* '''tree item'''<br />
* ...<br />
<br />
This tree works with add/remove tree items when they get expanded/collapsed.<br />
<br />
=== Tree 2: real hierarchy ===<br />
The items are arranged as children.<br />
<br />
* '''tree'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item*'''<br />
<br />
<br />
* '''tree'''<br />
* '''tree item group'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item group'''<br />
* '''tree item*'''<br />
<br />
No need for add/remove for expanding/collapsing of sub items.<br />
<br />
<br />
=== Tree 3: Tree Table ===<br />
Tree tables can not be hierarchical.<br />
'''tree table''' can have more than one column<br />
<br />
* '''tree table''' <br />
* '''tree table cell*'''<br />
<br />
* '''tree table'''<br />
* '''tree table row*'''<br />
* '''tree table cell*'''<br />
<br />
<br />
== Scroll Bars ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Combo Box ==<br />
* ATSPI_ROLE_COMBO_BOX is the root element<br />
* ATSPI_ROLE_TABLE see table. Usually this is a flat list of items.<br />
* ATSPI_ROLE_TEXT [optional] is present when the combo box is editable.<br />
<br />
The Accessible Name of the '''combo box''' accessible is the current text that is displayed. This text can be typed by the user or one of the selected items.<br />
<br />
'''States''': Focused, Editable<br />
<br />
'''Events''': Focus<br />
<br />
'''Interfaces''': None required<br />
<br />
The name of the ATSPI_ROLE_COMBO_BOX should always reflect the current text.<br />
FIXME: what should combo box send when the current item/text changed?<br />
<br />
<br />
== Foo Bar Template ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Stuff we Mustn't Forget ==<br />
(But are not sure where all to put it yet.)<br />
<br />
* "Hint text" - Gtk+ has it as an AtkObject attribute ('placeholder-text').<br />
* Window management stuff - what happens when a window gains focus etc<br />
* Registry - give an overview what it is, why and how clients and servers register to it.]\<br />
* Relations <br />
* make sure to mention them with the widgets that most likely need them (labelled-by for line edit)<br />
* document what they are in general</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=User:Frederik.gladhorn/atspi-scratch&diff=61132User:Frederik.gladhorn/atspi-scratch2011-07-01T11:46:07Z<p>Frederik.gladhorn: /* Table */</p>
<hr />
<div>= GNOME Accessibility Team =<br />
= ATK/AT-SPI Best Practices Guide for Implementors =<br />
= DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT =<br />
<br />
= Introduction =<br />
This guide is for implementors of ATK and AT-SPI 2.<br />
It should say how to describe the user interface through the use of the AT-SPI Accessibility APIs.<br />
Having consistent representations of widgets makes the implementation of assisitive technology much easier.<br />
<br />
ATK and AT-SPI should be identical to large parts. Especially roles and enums should be the same, so this guide applies to both.<br />
<br />
The aim is to have a defined structure where applicable. For example an editable Combo Box should have a list or table and an editable text as children.<br />
<br />
In addition the expected signals such as accessible-name changed should be documented so that it is clear which signals to emit.<br />
<br />
= States =<br />
Accessible objects always have a set of states.<br />
For each widget below it is mentioned which states should be implemented.<br />
Over AT-SPI2 the states are split into two 32 bit uints. (yes, it's that horrible).<br />
<br />
FIXME link to states list<br />
<br />
ATSPI States (from at-spi2-core/atspi/atspi-constants.c)<br />
<br />
* ATSPI_STATE_INVALID: <br />
* ATSPI_STATE_ACTIVE: Indicates a window is currently the active window, or is an active subelement within a container or table <br />
* ATSPI_STATE_ARMED: Indicates that the object is armed <br />
* ATSPI_STATE_BUSY: Indicates the current object is busy, i.e. onscreen representation is in the process of changing, or the object is temporarily unavailable for interaction due to activity already in progress. <br />
* ATSPI_STATE_CHECKED: Indicates this object is currently checked <br />
* ATSPI_STATE_COLLAPSED: Indicates this object is collapsed <br />
* ATSPI_STATE_DEFUNCT: Indicates that this object no longer has a valid backing widget (for instance, if its peer object has been destroyed) <br />
* ATSPI_STATE_EDITABLE: Indicates the user can change the contents of this object <br />
* ATSPI_STATE_ENABLED: Indicates that this object is enabled, i.e. that it currently reflects some application state. Objects that are "greyed out" may lack this state, and may lack the STATE_SENSITIVE if direct user interaction cannot cause them to acquire STATE_ENABLED. @see STATE_SENSITIVE. <br />
* ATSPI_STATE_EXPANDABLE: Indicates this object allows progressive disclosure of its children <br />
* ATSPI_STATE_EXPANDED: Indicates this object its expanded <br />
* ATSPI_STATE_FOCUSABLE: Indicates this object can accept keyboard focus, which means all events resulting from typing on the keyboard will normally be passed to it when it has focus <br />
* ATSPI_STATE_FOCUSED: Indicates this object currently has the keyboard focus <br />
* ATSPI_STATE_HAS_TOOLTIP: Indicates that the object has an associated tooltip <br />
* ATSPI_STATE_HORIZONTAL: Indicates the orientation of thsi object is horizontal <br />
* ATSPI_STATE_ICONIFIED: Indicates this object is minimized and is represented only by an icon <br />
* ATSPI_STATE_MODAL: Indicates something must be done with this object before the user can interact with an object in a different window. <br />
* ATSPI_STATE_MULTI_LINE: Indicates this (text) object can contain multiple lines of text <br />
* ATSPI_STATE_MULTISELECTABLE: Indicates this object allows more than one of its children to be selected at the same time, or in the case of text objects, that the object supports non-contiguous text selections. <br />
* ATSPI_STATE_OPAQUE: Indicates this object paints every pixel within its rectangular region. It also indicates an alpha value of unity, if it supports alpha blending. <br />
* ATSPI_STATE_PRESSED: Indicates this object is currently pressed <br />
* ATSPI_STATE_RESIZABLE: Indicates the size of this object's size is not fixed <br />
* ATSPI_STATE_SELECTABLE: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that can be selected. <br />
* ATSPI_STATE_SELECTED: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that has been selected. <br />
* ATSPI_STATE_SENSITIVE: Indicates this object is sensitive, e.g. to user interaction. STATE_SENSITIVE usually accompanies STATE_ENABLED for user-actionable controls, but may be found in the absence of STATE_ENABLED if the current visible state of the control is "disconnected" from the application state. In such cases, direct user interaction can often result in the object gaining STATE_SENSITIVE, for instance if a user makes an explicit selection using an object whose current state is ambiguous or undefined. @see STATE_ENABLED, STATE_INDETERMINATE. <br />
* ATSPI_STATE_SHOWING: Indicates this object, the object's parent, the object's parent's parent, and so on, are all 'shown' to the end-user, i.e. subject to "exposure" if blocking or obscuring objects do not interpose between this object and the top of the window stack. <br />
* ATSPI_STATE_SINGLE_LINE: Indicates this (text) object can contain only a single line of text <br />
* ATSPI_STATE_STALE: Indicates that the information returned for this object may no longer be synchronized with the application state. This can occur if the object has STATE_TRANSIENT, and can also occur towards the end of the object peer's lifecycle. <br />
* ATSPI_STATE_TRANSIENT: Indicates this object is transient <br />
* ATSPI_STATE_VERTICAL: Indicates the orientation of this object is vertical; for example this state may appear on such objects as scrollbars, text objects (with vertical text flow), separators, etc. <br />
* ATSPI_STATE_VISIBLE: Indicates this object is visible, e.g. has been explicitly marked for exposure to the user. STATE_VISIBLE is no guarantee that the object is actually unobscured on the screen, only that it is 'potentially' visible, barring obstruction, being scrolled or clipped out of the field of view, or having an ancestor container that has not yet made visible. A widget is potentially onscreen if it has both STATE_VISIBLE and STATE_SHOWING. The absence of STATE_VISIBLE and STATE_SHOWING is semantically equivalent to saying that an object is 'hidden'. <br />
* ATSPI_STATE_MANAGES_DESCENDANTS: Indicates that "active-descendant-changed" event is sent when children become 'active' (i.e. are selected or navigated to onscreen). Used to prevent need to enumerate all children in very large containers, like tables. The presence of STATE_MANAGES_DESCENDANTS is an indication to the client. that the children should not, and need not, be enumerated by the client. Objects implementing this state are expected to provide relevant state notifications to listening clients, for instance notifications of visibility changes and activation of their contained child objects, without the client having previously requested references to those children. <br />
* ATSPI_STATE_INDETERMINATE: Indicates that a check box or other boolean indicator is in a state other than checked or not checked. This usually means that the boolean value reflected or controlled by the object does not apply consistently to the entire current context. For example, a checkbox for the "Bold" attribute of text may have STATE_INDETERMINATE if the currently selected text contains a mixture of weight attributes. In many cases interacting with a STATE_INDETERMINATE object will cause the context's corresponding boolean attribute to be homogenized, whereupon the object will lose STATE_INDETERMINATE and a corresponding state-changed event will be fired. <br />
* ATSPI_STATE_REQUIRED: Indicates that user interaction with this object is 'required' from the user, for instance before completing the processing of a form. <br />
* ATSPI_STATE_TRUNCATED: Indicates that an object's onscreen content is truncated, e.g. a text value in a spreadsheet cell. <br />
* ATSPI_STATE_ANIMATED: Indicates this object's visual representation is dynamic, not static. This state may be applied to an object during an animated 'effect' and be removed from the object once its visual representation becomes static. some applications, notably content viewers, may not be able to detect all kinds of animated content. Therefore the absence of this state should not be taken as definitive evidence that the object's visual representation is static; this state is advisory. <br />
* ATSPI_STATE_INVALID_ENTRY: This object has indicated an error condition due to failure of input validation. For instance, a form control may acquire this state in response to invalid or malformed user input. <br />
* ATSPI_STATE_SUPPORTS_AUTOCOMPLETION: This state indicates that the object in question implements some form of &#168;typeahead&#168; or pre-selection behavior whereby entering the first character of one or more sub-elements causes those elements to scroll into view or become selected. Subsequent character input may narrow the selection further as long as one or more sub-elements match the string. This state is normally only useful and encountered on objects that implement Selection. In some cases the typeahead behavior may result in full or partial &#168;completion&#168; of the data in the input field, in which case these input events may trigger text-changed events from the source. <br />
* ATSPI_STATE_SELECTABLE_TEXT: This state indicates that the object in question supports text selection. It should only be exposed on objects which implement the Text interface, in order to distinguish this state from STATE_SELECTABLE, which infers that the object in question is a selectable child of an object which implements Selection. While similar, text selection and subelement selection are distinct operations. <br />
* ATSPI_STATE_IS_DEFAULT: This state indicates that the object in question is the 'default' interaction object in a dialog, i.e. the one that gets activated if the user presses "Enter" when the dialog is initially posted. <br />
* ATSPI_STATE_VISITED: This state indicates that the object (typically a hyperlink) has already been activated or invoked, with the result that some backing data has been downloaded or rendered. <br />
* ATSPI_STATE_LAST_DEFINED: This value of the enumeration should not be used as a parameter, it indicates the number of items in the StateType enumeration. <br />
<br />
<br />
<br />
Some states are valid for all widgets:<br />
* Visible?<br />
<br />
<br />
----<br />
= Roles =<br />
* ATSPI_ROLE_INVALID: A Role indicating an error condition, such as uninitialized Role data. <br />
* ATSPI_ROLE_ACCELERATOR_LABEL: Object is a label indicating the keyboard accelerators for the parent <br />
* ATSPI_ROLE_ALERT: Object is used to alert the user about something <br />
* ATSPI_ROLE_ANIMATION: Object contains a dynamic or moving image of some kind <br />
* ATSPI_ROLE_ARROW: Object is a 2d directional indicator <br />
* ATSPI_ROLE_CALENDAR: Object contains one or more dates, usually arranged into a 2d list <br />
* ATSPI_ROLE_CANVAS: Object that can be drawn into and is used to trap events <br />
* ATSPI_ROLE_CHECK_BOX: A choice that can be checked or unchecked and provides a separate indicator for the current state. <br />
* ATSPI_ROLE_CHECK_MENU_ITEM: A menu item that behaves like a check box (see ROLE_CHECK_BOX) <br />
* ATSPI_ROLE_COLOR_CHOOSER: A specialized dialog that lets the user choose a color. <br />
* ATSPI_ROLE_COLUMN_HEADER: The header for a column of data <br />
* ATSPI_ROLE_COMBO_BOX: A list of choices the user can select from <br />
* ATSPI_ROLE_DATE_EDITOR: An object which allows entry of a date <br />
* ATSPI_ROLE_DESKTOP_ICON: An inconifed internal frame within a DESKTOP_PANE <br />
* ATSPI_ROLE_DESKTOP_FRAME: A pane that supports internal frames and iconified versions of those internal frames. <br />
* ATSPI_ROLE_DIAL: An object that allows a value to be changed via rotating a visual element, or which displays a value via such a rotating element. <br />
* ATSPI_ROLE_DIALOG: A top level window with title bar and a border <br />
* ATSPI_ROLE_DIRECTORY_PANE: A pane that allows the user to navigate through and select the contents of a directory <br />
* ATSPI_ROLE_DRAWING_AREA: A specialized dialog that displays the files in the directory and lets the user select a file, browse a different directory, or specify a filename. <br />
* ATSPI_ROLE_FILE_CHOOSER: An object used for drawing custom user interface elements. <br />
* ATSPI_ROLE_FILLER: A object that fills up space in a user interface <br />
* ATSPI_ROLE_FOCUS_TRAVERSABLE: Don't use, reserved for future use. <br />
* ATSPI_ROLE_FONT_CHOOSER: Allows selection of a display font <br />
* ATSPI_ROLE_FRAME: A top level window with a title bar, border, menubar, etc. <br />
* ATSPI_ROLE_GLASS_PANE: A pane that is guaranteed to be painted on top of all panes beneath it <br />
* ATSPI_ROLE_HTML_CONTAINER: A document container for HTML, whose children represent the document content. <br />
* ATSPI_ROLE_ICON: A small fixed size picture, typically used to decorate components <br />
* ATSPI_ROLE_IMAGE: An image, typically static. <br />
* ATSPI_ROLE_INTERNAL_FRAME: A frame-like object that is clipped by a desktop pane. <br />
* ATSPI_ROLE_LABEL: An object used to present an icon or short string in an interface <br />
* ATSPI_ROLE_LAYERED_PANE: A specialized pane that allows its children to be drawn in layers, providing a form of stacking order. <br />
* ATSPI_ROLE_LIST: An object that presents a list of objects to the user and allows the user to select one or more of them. <br />
* ATSPI_ROLE_LIST_ITEM: An object that represents an element of a list. <br />
* ATSPI_ROLE_MENU: An object usually found inside a menu bar that contains a list of actions the user can choose from. <br />
* ATSPI_ROLE_MENU_BAR: An object usually drawn at the top of the primary dialog box of an application that contains a list of menus the user can choose from. <br />
* ATSPI_ROLE_MENU_ITEM: An object usually contained in a menu that presents an action the user can choose. <br />
* ATSPI_ROLE_OPTION_PANE: A specialized pane whose primary use is inside a DIALOG <br />
* ATSPI_ROLE_PAGE_TAB: An object that is a child of a page tab list <br />
* ATSPI_ROLE_PAGE_TAB_LIST: An object that presents a series of panels (or page tabs), one at a time, through some mechanism provided by the object. <br />
* ATSPI_ROLE_PANEL: A generic container that is often used to group objects. <br />
* ATSPI_ROLE_PASSWORD_TEXT: A text object uses for passwords, or other places where the text content is not shown visibly to the user. <br />
* ATSPI_ROLE_POPUP_MENU: A temporary window that is usually used to offer the user a list of choices, and then hides when the user selects one of those choices. <br />
* ATSPI_ROLE_PROGRESS_BAR: An object used to indicate how much of a task has been completed. <br />
* ATSPI_ROLE_PUSH_BUTTON: An object the user can manipulate to tell the application to do something. <br />
* ATSPI_ROLE_RADIO_BUTTON: A specialized check box that will cause other radio buttons in the same group to become uncghecked when this one is checked. <br />
* ATSPI_ROLE_RADIO_MENU_ITEM: Object is both a menu item and a "radio button" (see ROLE_RADIO_BUTTON) <br />
* ATSPI_ROLE_ROOT_PANE: A specialized pane that has a glass pane and a layered pane as its children. <br />
* ATSPI_ROLE_ROW_HEADER: The header for a row of data <br />
* ATSPI_ROLE_SCROLL_BAR: An object usually used to allow a user to incrementally view a large amount of data by moving the bounds of a viewport along a one-dimensional axis. <br />
* ATSPI_ROLE_SCROLL_PANE: An object that allows a user to incrementally view a large amount of information. ROLE_SCROLL_PANE objects are usually accompanied by ROLE_SCROLL_BAR controllers, on which the RELATION_CONTROLLER_FOR and RELATION_CONTROLLED_BY reciprocal relations are set; \see Accessibility::RelationSet. <br />
* ATSPI_ROLE_SEPARATOR: An object usually contained in a menu to provide a visible and logical separation of the contents in a menu. <br />
* ATSPI_ROLE_SLIDER: An object that allows the user to select from a bounded range <br />
* ATSPI_ROLE_SPIN_BUTTON: An object which allows one of a set of choices to be selected, and which displays the current choice. Unlike ROLE_SCROLL_BAR, ROLE_SLIDER objects need not control 'viewport'-like objects. <br />
* ATSPI_ROLE_SPLIT_PANE: A specialized panel that presents two other panels at the same time. <br />
* ATSPI_ROLE_STATUS_BAR: Object displays non-quantitative status information (c.f. ROLE_PROGRESS_BAR) <br />
* ATSPI_ROLE_TABLE: An object used to repesent information in terms of rows and columns. <br />
* ATSPI_ROLE_TABLE_CELL: A 'cell' or discrete child within a Table. \note Table cells need not have ROLE_TABLE_CELL, other RoleType values are valid as well. <br />
* ATSPI_ROLE_TABLE_COLUMN_HEADER: An object which labels a particular column in a Table. <br />
* ATSPI_ROLE_TABLE_ROW_HEADER: An object which labels a particular row in a Table. Table rows and columns may also be labelled via the RELATION_LABEL_FOR/RELATION_LABELLED_BY relationships; see Accessibility.RelationSet. <br />
* ATSPI_ROLE_TEAROFF_MENU_ITEM: Object allows menu to be removed from menubar and shown in its own window. <br />
* ATSPI_ROLE_TERMINAL: An object that emulates a terminal <br />
* ATSPI_ROLE_TEXT: An object that presents text to the user, of nonspecific type. <br />
* ATSPI_ROLE_TOGGLE_BUTTON: A specialized push button that can be checked or unchecked, but does not procide a separate indicator for the current state. <br />
* ATSPI_ROLE_TOOL_BAR: A bar or palette usually composed of push buttons or toggle buttons <br />
* ATSPI_ROLE_TOOL_TIP: An object that provides information about another object <br />
* ATSPI_ROLE_TREE: An object used to repsent hierarchical information to the user. <br />
* ATSPI_ROLE_TREE_TABLE: An object that presents both tabular and hierarchical info to the user <br />
* ATSPI_ROLE_UNKNOWN: The object contains some Accessible information, but its role is not known. <br />
* ATSPI_ROLE_VIEWPORT: An object usually used in a scroll pane, or to otherwise clip a larger object or content renderer to a specific onscreen viewport. <br />
* ATSPI_ROLE_WINDOW: A &#168;top level window&#168; with no title or border. <br />
* ATSPI_ROLE_EXTENDED: means that the role for this item is known, but not included in the core enumeration <br />
* ATSPI_ROLE_HEADER: An object that serves as a document header. <br />
* ATSPI_ROLE_FOOTER: An object that serves as a document footer. <br />
* ATSPI_ROLE_PARAGRAPH: An object which is contains a single paragraph of text content. See also ROLE_TEXT. <br />
* ATSPI_ROLE_RULER: An object which describes margins and tab stops, etc. for text objects which it controls (should have CONTROLLER_FOR relation to such). <br />
* ATSPI_ROLE_APPLICATION: An object corresponding to the toplevel accessible of an application, which may contain ROLE_FRAME objects or other accessible objects. Children of AccessibleDesktop objects are generally ROLE_APPLICATION objects. <br />
* ATSPI_ROLE_AUTOCOMPLETE: The object is a dialog or list containing items for insertion into an entry widget, for instance a list of words for completion of a text entry. <br />
* ATSPI_ROLE_EDITBAR: The object is an editable text object in a toolbar. <br />
* ATSPI_ROLE_EMBEDDED: The object is an embedded component container. This role is a "grouping" hint that the contained objects share a context which is different from the container in which this accessible is embedded. In particular, it is used for some kinds of document embedding, and for embedding of out-of-process component, "panel applets", etc. <br />
* ATSPI_ROLE_ENTRY: The object is a component whose textual content may be entered or modified by the user, provided STATE_EDITABLE is present. A readonly ROLE_ENTRY object (i.e. where STATE_EDITABLE is not present) implies a read-only 'text field' in a form, as opposed to a title, label, or caption. <br />
* ATSPI_ROLE_CHART: The object is a graphical depiction of quantitative data. It may contain multiple subelements whose attributes and/or description may be queried to obtain both the quantitative data and information about how the data is being presented. The LABELLED_BY relation is particularly important in interpreting objects of this type, as is the accessible-description property. See ROLE_CAPTION <br />
* ATSPI_ROLE_CAPTION: The object contains descriptive information, usually textual, about another user interface element such as a table, chart, or image. <br />
* ATSPI_ROLE_DOCUMENT_FRAME: The object is a visual frame or container which contains a view of document content. Document frames may occur within another Document instance, in which case the second document may be said to be embedded in the containing instance. HTML frames are often ROLE_DOCUMENT_FRAME. Either this object, or a singleton descendant, should implement the Document interface. <br />
* ATSPI_ROLE_HEADING: The object serves as a heading for content which follows it in a document. The 'heading level' of the heading, if availabe, may be obtained by querying the object's attributes. <br />
* ATSPI_ROLE_PAGE: The object is a containing instance which encapsulates a page of information. ROLE_PAGE is used in documents and content which support a paginated navigation model. <br />
* ATSPI_ROLE_SECTION: The object is a containing instance of document content which constitutes a particular 'logical' section of the document. The type of content within a section, and the nature of the section division itself, may be obtained by querying the object's attributes. Sections may be nested. <br />
* ATSPI_ROLE_REDUNDANT_OBJECT: The object is redundant with another object in the hierarchy, and is exposed for purely technical reasons. Objects of this role should be ignored by clients, if they are encountered at all. <br />
* ATSPI_ROLE_FORM: The object is a containing instance of document content which has within it components with which the user can interact in order to input information; i.e. the object is a container for pushbuttons, comboboxes, text input fields, and other 'GUI' components. ROLE_FORM should not, in general, be used for toplevel GUI containers or dialogs, but should be reserved for 'GUI' containers which occur within document content, for instance within Web documents, presentations, or text documents. Unlike other GUI containers and dialogs which occur inside application instances, ROLE_FORM containers' components are associated with the current document, rather than the current foreground application or viewer instance. <br />
* ATSPI_ROLE_LINK: The object is a hypertext anchor, i.e. a "link" in a hypertext document. Such objects are distinct from 'inline' content which may also use the Hypertext/Hyperlink interfaces to indicate the range/location within a text object where an inline or embedded object lies. <br />
* ATSPI_ROLE_INPUT_METHOD_WINDOW: The object is a window or similar viewport which is used to allow composition or input of a 'complex character', in other words it is an "input method window." <br />
* ATSPI_ROLE_LAST_DEFINED: Not a valid role, used for finding end of enumeration. <br />
----<br />
<br />
= Events =<br />
== Focus ==<br />
One of the most important events is the focus change.<br />
FIXME document here what needs to happen when focus changes.<br />
<br />
----<br />
<br />
= Objects and their Properties =<br />
<br />
* Add AtkObject, AtkRoles, Names, Descriptions and the like<br />
* Talk about when to include versus when to omit or "fold in" (e.g. button whose child is a label, filler, etc.)<br />
<br />
''Matthias: I would really like to get some clarification about signals, when to emit them, what their expected semantics are, etc. E.g: do I emit 'visible-data-changed' when a label gains a mnemonic underline ?''<br />
----<br />
<br />
= Interfaces =<br />
''Note from JD: For now, I'm including the Documentation along with a Do's and Don'ts. Those ultimately might need to be merged. For now, having them both makes it more obvious to me what we should be questioning, docs we might need to go back and update, etc., etc.''<br />
<br />
Most accessible objects are expected to implement a variety of interfaces based on the purpose served by the backing toolkit widget, along with the ways users can interact with that widget.<br />
<br />
== AtkAction ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should be implemented by instances of AtkObject classes with which the user can interact directly, i.e. buttons, checkboxes, scrollbars, e.g. components which are not "passive" providers of UI information.<br />
<br />
Exceptions: when the user interaction is already covered by another appropriate interface such as AtkEditableText (insert/delete test, etc.) or AtkValue (set value) then these actions should not be exposed by [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] as well.<br />
<br />
Also note that the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] API is limited in that parameters may not be passed to the object being activated; thus the action must be self-contained and specifiable via only a single "verb". Concrete examples include "press", "release", "click" for buttons, "drag" (meaning initiate drag) and "drop" for drag sources and drop targets, etc.<br />
<br />
Though most UI interactions on components should be invocable via keyboard as well as mouse, there will generally be a close mapping between "mouse actions" that are possible on a component and the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkActions]]. Where mouse and keyboard actions are redundant in effect, [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should expose only one action rather than exposing redundant actions if possible. By convention we have been using "mouse centric" terminology for [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] names.<br />
<br />
''Note from Matthias: Should point out here that actions have keybindings associated with them. What are those good for, anyway ?''<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
* TODO: There was some discussion in #a11y with Benjamin and Joanie regarding the 'exception' above. We need to decide if it is good to have this "It's an AtkAction unless it happens to be an interface and then, well, it's not" situation. Surely that is confusing to implementors. Should Actiony things always be actions?<br />
* TODO: The verdict on press/release versus just click for buttons is still out.<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkComponent ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] should be implemented by most if not all UI elements with an actual on-screen presence, i.e. components which can be said to have a screen-coordinate bounding box. Virtually all widgets will need to have [[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] implementations provided for their corresponding AtkObject class. In short, only UI elements which are *not* GUI elements will omit this ATK interface.<br />
<br />
A possible exception might be textual information with a transparent background, in which case text glyph bounding box information is provided by [[http://developer.gnome.org/atk/unstable/AtkTextt.html|AtkText]].<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkDocument ==<br />
=== Description from the Documentation ===<br />
The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should be supported by any object whose content is a representation or view of a document. The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should appear on the toplevel container for the document content; however [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] instances may be nested (i.e. an [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] may be a descendant of another [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]]) in those cases where one document contains "embedded content" which can reasonably be considered a document in its own right.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkHypertext and AtkHyperlinkImpl ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkHypertext.html|AtkHypertext]] is an interface used for objects which implement linking between multiple resource or content locations, or multiple 'markers' within a single document. A Hypertext instance is associated with one or more Hyperlinks, which are associated with particular offsets within the Hypertext's included content. While this interface is derived from Text, there is no requirement that Hypertext instances have textual content; they may implement Image as well, and Hyperlinks need not have non-zero text offsets.<br />
<br />
[[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] allows AtkObjects to refer to their associated AtkHyperlink instance, if one exists. [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] differs from AtkHyperlink in that [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] is an interface, whereas AtkHyperlink is a object type. The [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] interface allows a client to query an AtkObject for the availability of an associated AtkHyperlink instance, and obtain that instance. It is thus particularly useful in cases where embedded content or inline content within a text object is present, since the embedding text object implements [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]] and the inline/embedded objects are exposed as children which implement [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]], in addition to their being obtainable via [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]]:getLink followed by AtkHyperlink:getObject.<br />
<br />
=== How Assistive Technologies Use These Interfaces ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
<br />
''Matthias: I have used the hyperlink classes in the accessible implementation for GtkLinkButton, and I'd love to know if my implementation is using these classes as intended.''<br />
<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkImage ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] should be implemented by AtkObject subtypes on behalf of components which display image/pixmap information onscreen, and which provide information (other than just widget borders, etc.) via that image content. For instance, icons, buttons with icons, toolbar elements, and image viewing panes typically should implement [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]].<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] primarily provides two types of information: coordinate information (useful for screen review mode of screenreaders, and for use by onscreen magnifiers), and descriptive information. The descriptive information is provided for alternative, text-only presentation of the most significant information present in the image.<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkSelection ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] should be implemented by UI components with children which are exposed by atk_object_ref_child and atk_object_get_n_children, if the use of the parent UI component ordinarily involves selection of one or more of the objects corresponding to those AtkObject children - for example, selectable lists.<br />
<br />
Note that other types of "selection" (for instance text selection) are accomplished a other ATK interfaces - [[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] is limited to the selection/deselection of children.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkTable ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] should be implemented by components which present elements ordered via rows and columns. It may also be used to present tree-structured information if the nodes of the trees can be said to contain multiple "columns". Individual elements of an [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are typically referred to as "cells", and these cells are exposed by [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] as child AtkObjects of the [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]]. Both row/column and child-index-based access to these children is provided.<br />
<br />
Children of [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are frequently "lightweight" objects, that is, they may not have backing widgets in the host UI toolkit. They are therefore often transient.<br />
<br />
Since tables are often very complex, [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] includes provision for offering simplified summary information, as well as row and column headers and captions. Headers and captions are AtkObjects which may implement other interfaces ([[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]], etc.) as appropriate. [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] summaries may themselves be (simplified) [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]], etc.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkText ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] should be implemented by AtkObjects on behalf of widgets that have text content which is either attributed or otherwise non-trivial. AtkObjects whose text content is simple, unattributed, and very brief may expose that content via atk_object_get_name instead; however if the text is editable, multi-line, typically longer than three or four words, attributed, selectable, or if the object already uses the 'name' ATK property for other information, the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface should be used to expose the text content. In the case of editable text content, AtkEditableText (a subtype of the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface) should be implemented instead.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] provides not only traversal facilities and change notification for text content, but also caret tracking and glyph bounding box calculations. Note that the text strings are exposed as UTF-8, and are therefore potentially multi-byte, and caret-to-byte offset mapping makes no assumptions about the character length; also bounding box glyph-to-offset mapping may be complex for languages which use ligatures.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] should be implemented by UI components which contain text which the user can edit, via the AtkObject corresponding to that component (see AtkObject).<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is a subclass of [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], and as such, an object which implements [[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is by definition an [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] implementor as well.<br />
=== How Assistive Technologies Use These Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
As a general rule, only implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for widgets which:<br />
* Are text the user can interact with by doing things such as: arrowing amongst characters, selecting, copying, etc., OR<br />
* Present a substantial message and/or have significant, important-to-convey formatting attributes<br />
Thus you DO want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* Documents and any other place the text contents can be changed by the user.<br />
* Labels serving as static text (e.g. in a message box).<br />
You do NOT want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* The displayed text/label of buttons (instead set the AtkObject's name to reflect the text)<br />
* The displayed/functional value of widgets implementing AtkValue (instead set the AtkObject's description to reflect the text)<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkValue ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] should be implemented for components which either display a value from a bounded range, or which allow the user to specify a value from a bounded range, or both. For instance, most sliders and range controls, as well as dials, should have AtkObject representations which implement [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] on the component's behalf. [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValues]] may be read-only, in which case attempts to alter the value return FALSE to indicate failure.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
----<br />
<br />
= Relations =<br />
<br />
Add the AtkRelation types here<br />
<br />
----<br />
<br />
<br />
<br />
= Widgets =<br />
Two main properties of widgets are Name and Description.<br />
The name reflects the primary text for the widget: The text of a label, the text on a button.<br />
The description gives additional information: A button labeled "OK" could have the description "Accepts the dialog". FIXME more sensible example?<br />
<br />
== Label ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Button ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Line Edit ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Tree ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Menu ==<br />
This is the menu bar of an application - File, Edit etc.<br />
<br />
* '''menu bar'''<br />
* '''menu*'''<br />
* '''menu*''' can contain more menu and menu item<br />
* '''menu item*'''<br />
<br />
There is one '''menu bar''' as root element, it has any number of '''menu''' as children.<br />
'''menu''' can have '''menu''' and '''menu item''' as children.<br />
'''menu item''' does not have children.<br />
<br />
<br />
<br />
== List ==<br />
* '''list'''<br />
* '''list item*'''<br />
<br />
A list has only one column. It contains items.<br />
<br />
'''States''': STATE_MANAGES_DESCENDANTS<br />
<br />
'''Events''': FIXME: what do we need? active descendant and more black magic<br />
<br />
'''Interfaces''': Table<br />
<br />
== Table ==<br />
<br />
current state in gtk: it would be difficult to provide row objects<br />
<br />
* '''table'''<br />
* '''table column header'''<br />
* '''table cell''' sometimes gtk has image+text in one cell. it represents that as two child objects of type '''table cell'''<br />
<br />
Web: firefox usually has rows, but sometimes it can happen that rows are not present (like html role presentation or css hidden)<br />
<br />
* '''table'''<br />
* '''table row''' the first row only contains headers<br />
* '''table row header''' once for the top-left header<br />
* '''table column header*''' as many as columns<br />
* '''table row*''' <br />
* '''table row header[0-1]''' for the left header<br />
* '''table cell*''' as many as columns, can be less if cell-span > 1 <br />
should headers be mandatory? should it be '''table header row''' for the first row?<br />
<br />
IA2: all cells are children of the table object. there are no row objects. like gtk.<br />
<br />
<br />
One big concern was notifications about selection changes. It would be great to get notified for things such as row selected. There are two ways to tackle this:<br />
in the first approach (gtk) we could define a signal: rows-selected() and rows-deselected or somesuch<br />
in the second approach with rows, the row object could be sent as selected. this has the downside that there is no way to do the same for columns. it is less flexible.<br />
IA2 has functions to get selected rows/columns<br />
<br />
<br />
== Trees ==<br />
The reason for the variety of trees that are possible is mostly that ARIA has very flexible tree definitions. The web implementators will simply expose that.<br />
<br />
<br />
Tree has exactly one column. For trees with more than one column the '''tree table''' has to be used.<br />
<br />
Tree items can contain a grouping element. In the grouping element it can have other items.<br />
<br />
=== Tree 1: define hierarchy through relations and group positions ===<br />
* '''tree'''<br />
* '''tree item''' with relations and group positions that define hierarchy<br />
* '''tree item'''<br />
* ...<br />
<br />
This tree works with add/remove tree items when they get expanded/collapsed.<br />
<br />
=== Tree 2: real hierarchy ===<br />
The items are arranged as children.<br />
<br />
* '''tree'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item*'''<br />
<br />
<br />
* '''tree'''<br />
* '''tree item group'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item group'''<br />
* '''tree item*'''<br />
<br />
No need for add/remove for expanding/collapsing of sub items.<br />
<br />
<br />
=== Tree 3: Tree Table ===<br />
Tree tables can not be hierarchical.<br />
'''tree table''' can have more than one column<br />
<br />
* '''tree table''' <br />
* '''tree table cell*'''<br />
<br />
* '''tree table'''<br />
* '''tree table row*'''<br />
* '''tree table cell*'''<br />
<br />
<br />
== Scroll Bars ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Combo Box ==<br />
* ATSPI_ROLE_COMBO_BOX is the root element<br />
* ATSPI_ROLE_TABLE see table. Usually this is a flat list of items.<br />
* ATSPI_ROLE_TEXT [optional] is present when the combo box is editable.<br />
<br />
The Accessible Name of the '''combo box''' accessible is the current text that is displayed. This text can be typed by the user or one of the selected items.<br />
<br />
'''States''': Focused, Editable<br />
<br />
'''Events''': Focus<br />
<br />
'''Interfaces''': None required<br />
<br />
The name of the ATSPI_ROLE_COMBO_BOX should always reflect the current text.<br />
FIXME: what should combo box send when the current item/text changed?<br />
<br />
<br />
== Foo Bar Template ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Stuff we Mustn't Forget ==<br />
(But are not sure where all to put it yet.)<br />
<br />
* "Hint text" - Gtk+ has it as an AtkObject attribute ('placeholder-text').<br />
* Window management stuff - what happens when a window gains focus etc<br />
* Registry - give an overview what it is, why and how clients and servers register to it.]\<br />
* Relations <br />
* make sure to mention them with the widgets that most likely need them (labelled-by for line edit)<br />
* document what they are in general</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=User:Frederik.gladhorn/atspi-scratch&diff=61131User:Frederik.gladhorn/atspi-scratch2011-07-01T11:45:50Z<p>Frederik.gladhorn: /* List */</p>
<hr />
<div>= GNOME Accessibility Team =<br />
= ATK/AT-SPI Best Practices Guide for Implementors =<br />
= DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT =<br />
<br />
= Introduction =<br />
This guide is for implementors of ATK and AT-SPI 2.<br />
It should say how to describe the user interface through the use of the AT-SPI Accessibility APIs.<br />
Having consistent representations of widgets makes the implementation of assisitive technology much easier.<br />
<br />
ATK and AT-SPI should be identical to large parts. Especially roles and enums should be the same, so this guide applies to both.<br />
<br />
The aim is to have a defined structure where applicable. For example an editable Combo Box should have a list or table and an editable text as children.<br />
<br />
In addition the expected signals such as accessible-name changed should be documented so that it is clear which signals to emit.<br />
<br />
= States =<br />
Accessible objects always have a set of states.<br />
For each widget below it is mentioned which states should be implemented.<br />
Over AT-SPI2 the states are split into two 32 bit uints. (yes, it's that horrible).<br />
<br />
FIXME link to states list<br />
<br />
ATSPI States (from at-spi2-core/atspi/atspi-constants.c)<br />
<br />
* ATSPI_STATE_INVALID: <br />
* ATSPI_STATE_ACTIVE: Indicates a window is currently the active window, or is an active subelement within a container or table <br />
* ATSPI_STATE_ARMED: Indicates that the object is armed <br />
* ATSPI_STATE_BUSY: Indicates the current object is busy, i.e. onscreen representation is in the process of changing, or the object is temporarily unavailable for interaction due to activity already in progress. <br />
* ATSPI_STATE_CHECKED: Indicates this object is currently checked <br />
* ATSPI_STATE_COLLAPSED: Indicates this object is collapsed <br />
* ATSPI_STATE_DEFUNCT: Indicates that this object no longer has a valid backing widget (for instance, if its peer object has been destroyed) <br />
* ATSPI_STATE_EDITABLE: Indicates the user can change the contents of this object <br />
* ATSPI_STATE_ENABLED: Indicates that this object is enabled, i.e. that it currently reflects some application state. Objects that are "greyed out" may lack this state, and may lack the STATE_SENSITIVE if direct user interaction cannot cause them to acquire STATE_ENABLED. @see STATE_SENSITIVE. <br />
* ATSPI_STATE_EXPANDABLE: Indicates this object allows progressive disclosure of its children <br />
* ATSPI_STATE_EXPANDED: Indicates this object its expanded <br />
* ATSPI_STATE_FOCUSABLE: Indicates this object can accept keyboard focus, which means all events resulting from typing on the keyboard will normally be passed to it when it has focus <br />
* ATSPI_STATE_FOCUSED: Indicates this object currently has the keyboard focus <br />
* ATSPI_STATE_HAS_TOOLTIP: Indicates that the object has an associated tooltip <br />
* ATSPI_STATE_HORIZONTAL: Indicates the orientation of thsi object is horizontal <br />
* ATSPI_STATE_ICONIFIED: Indicates this object is minimized and is represented only by an icon <br />
* ATSPI_STATE_MODAL: Indicates something must be done with this object before the user can interact with an object in a different window. <br />
* ATSPI_STATE_MULTI_LINE: Indicates this (text) object can contain multiple lines of text <br />
* ATSPI_STATE_MULTISELECTABLE: Indicates this object allows more than one of its children to be selected at the same time, or in the case of text objects, that the object supports non-contiguous text selections. <br />
* ATSPI_STATE_OPAQUE: Indicates this object paints every pixel within its rectangular region. It also indicates an alpha value of unity, if it supports alpha blending. <br />
* ATSPI_STATE_PRESSED: Indicates this object is currently pressed <br />
* ATSPI_STATE_RESIZABLE: Indicates the size of this object's size is not fixed <br />
* ATSPI_STATE_SELECTABLE: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that can be selected. <br />
* ATSPI_STATE_SELECTED: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that has been selected. <br />
* ATSPI_STATE_SENSITIVE: Indicates this object is sensitive, e.g. to user interaction. STATE_SENSITIVE usually accompanies STATE_ENABLED for user-actionable controls, but may be found in the absence of STATE_ENABLED if the current visible state of the control is "disconnected" from the application state. In such cases, direct user interaction can often result in the object gaining STATE_SENSITIVE, for instance if a user makes an explicit selection using an object whose current state is ambiguous or undefined. @see STATE_ENABLED, STATE_INDETERMINATE. <br />
* ATSPI_STATE_SHOWING: Indicates this object, the object's parent, the object's parent's parent, and so on, are all 'shown' to the end-user, i.e. subject to "exposure" if blocking or obscuring objects do not interpose between this object and the top of the window stack. <br />
* ATSPI_STATE_SINGLE_LINE: Indicates this (text) object can contain only a single line of text <br />
* ATSPI_STATE_STALE: Indicates that the information returned for this object may no longer be synchronized with the application state. This can occur if the object has STATE_TRANSIENT, and can also occur towards the end of the object peer's lifecycle. <br />
* ATSPI_STATE_TRANSIENT: Indicates this object is transient <br />
* ATSPI_STATE_VERTICAL: Indicates the orientation of this object is vertical; for example this state may appear on such objects as scrollbars, text objects (with vertical text flow), separators, etc. <br />
* ATSPI_STATE_VISIBLE: Indicates this object is visible, e.g. has been explicitly marked for exposure to the user. STATE_VISIBLE is no guarantee that the object is actually unobscured on the screen, only that it is 'potentially' visible, barring obstruction, being scrolled or clipped out of the field of view, or having an ancestor container that has not yet made visible. A widget is potentially onscreen if it has both STATE_VISIBLE and STATE_SHOWING. The absence of STATE_VISIBLE and STATE_SHOWING is semantically equivalent to saying that an object is 'hidden'. <br />
* ATSPI_STATE_MANAGES_DESCENDANTS: Indicates that "active-descendant-changed" event is sent when children become 'active' (i.e. are selected or navigated to onscreen). Used to prevent need to enumerate all children in very large containers, like tables. The presence of STATE_MANAGES_DESCENDANTS is an indication to the client. that the children should not, and need not, be enumerated by the client. Objects implementing this state are expected to provide relevant state notifications to listening clients, for instance notifications of visibility changes and activation of their contained child objects, without the client having previously requested references to those children. <br />
* ATSPI_STATE_INDETERMINATE: Indicates that a check box or other boolean indicator is in a state other than checked or not checked. This usually means that the boolean value reflected or controlled by the object does not apply consistently to the entire current context. For example, a checkbox for the "Bold" attribute of text may have STATE_INDETERMINATE if the currently selected text contains a mixture of weight attributes. In many cases interacting with a STATE_INDETERMINATE object will cause the context's corresponding boolean attribute to be homogenized, whereupon the object will lose STATE_INDETERMINATE and a corresponding state-changed event will be fired. <br />
* ATSPI_STATE_REQUIRED: Indicates that user interaction with this object is 'required' from the user, for instance before completing the processing of a form. <br />
* ATSPI_STATE_TRUNCATED: Indicates that an object's onscreen content is truncated, e.g. a text value in a spreadsheet cell. <br />
* ATSPI_STATE_ANIMATED: Indicates this object's visual representation is dynamic, not static. This state may be applied to an object during an animated 'effect' and be removed from the object once its visual representation becomes static. some applications, notably content viewers, may not be able to detect all kinds of animated content. Therefore the absence of this state should not be taken as definitive evidence that the object's visual representation is static; this state is advisory. <br />
* ATSPI_STATE_INVALID_ENTRY: This object has indicated an error condition due to failure of input validation. For instance, a form control may acquire this state in response to invalid or malformed user input. <br />
* ATSPI_STATE_SUPPORTS_AUTOCOMPLETION: This state indicates that the object in question implements some form of &#168;typeahead&#168; or pre-selection behavior whereby entering the first character of one or more sub-elements causes those elements to scroll into view or become selected. Subsequent character input may narrow the selection further as long as one or more sub-elements match the string. This state is normally only useful and encountered on objects that implement Selection. In some cases the typeahead behavior may result in full or partial &#168;completion&#168; of the data in the input field, in which case these input events may trigger text-changed events from the source. <br />
* ATSPI_STATE_SELECTABLE_TEXT: This state indicates that the object in question supports text selection. It should only be exposed on objects which implement the Text interface, in order to distinguish this state from STATE_SELECTABLE, which infers that the object in question is a selectable child of an object which implements Selection. While similar, text selection and subelement selection are distinct operations. <br />
* ATSPI_STATE_IS_DEFAULT: This state indicates that the object in question is the 'default' interaction object in a dialog, i.e. the one that gets activated if the user presses "Enter" when the dialog is initially posted. <br />
* ATSPI_STATE_VISITED: This state indicates that the object (typically a hyperlink) has already been activated or invoked, with the result that some backing data has been downloaded or rendered. <br />
* ATSPI_STATE_LAST_DEFINED: This value of the enumeration should not be used as a parameter, it indicates the number of items in the StateType enumeration. <br />
<br />
<br />
<br />
Some states are valid for all widgets:<br />
* Visible?<br />
<br />
<br />
----<br />
= Roles =<br />
* ATSPI_ROLE_INVALID: A Role indicating an error condition, such as uninitialized Role data. <br />
* ATSPI_ROLE_ACCELERATOR_LABEL: Object is a label indicating the keyboard accelerators for the parent <br />
* ATSPI_ROLE_ALERT: Object is used to alert the user about something <br />
* ATSPI_ROLE_ANIMATION: Object contains a dynamic or moving image of some kind <br />
* ATSPI_ROLE_ARROW: Object is a 2d directional indicator <br />
* ATSPI_ROLE_CALENDAR: Object contains one or more dates, usually arranged into a 2d list <br />
* ATSPI_ROLE_CANVAS: Object that can be drawn into and is used to trap events <br />
* ATSPI_ROLE_CHECK_BOX: A choice that can be checked or unchecked and provides a separate indicator for the current state. <br />
* ATSPI_ROLE_CHECK_MENU_ITEM: A menu item that behaves like a check box (see ROLE_CHECK_BOX) <br />
* ATSPI_ROLE_COLOR_CHOOSER: A specialized dialog that lets the user choose a color. <br />
* ATSPI_ROLE_COLUMN_HEADER: The header for a column of data <br />
* ATSPI_ROLE_COMBO_BOX: A list of choices the user can select from <br />
* ATSPI_ROLE_DATE_EDITOR: An object which allows entry of a date <br />
* ATSPI_ROLE_DESKTOP_ICON: An inconifed internal frame within a DESKTOP_PANE <br />
* ATSPI_ROLE_DESKTOP_FRAME: A pane that supports internal frames and iconified versions of those internal frames. <br />
* ATSPI_ROLE_DIAL: An object that allows a value to be changed via rotating a visual element, or which displays a value via such a rotating element. <br />
* ATSPI_ROLE_DIALOG: A top level window with title bar and a border <br />
* ATSPI_ROLE_DIRECTORY_PANE: A pane that allows the user to navigate through and select the contents of a directory <br />
* ATSPI_ROLE_DRAWING_AREA: A specialized dialog that displays the files in the directory and lets the user select a file, browse a different directory, or specify a filename. <br />
* ATSPI_ROLE_FILE_CHOOSER: An object used for drawing custom user interface elements. <br />
* ATSPI_ROLE_FILLER: A object that fills up space in a user interface <br />
* ATSPI_ROLE_FOCUS_TRAVERSABLE: Don't use, reserved for future use. <br />
* ATSPI_ROLE_FONT_CHOOSER: Allows selection of a display font <br />
* ATSPI_ROLE_FRAME: A top level window with a title bar, border, menubar, etc. <br />
* ATSPI_ROLE_GLASS_PANE: A pane that is guaranteed to be painted on top of all panes beneath it <br />
* ATSPI_ROLE_HTML_CONTAINER: A document container for HTML, whose children represent the document content. <br />
* ATSPI_ROLE_ICON: A small fixed size picture, typically used to decorate components <br />
* ATSPI_ROLE_IMAGE: An image, typically static. <br />
* ATSPI_ROLE_INTERNAL_FRAME: A frame-like object that is clipped by a desktop pane. <br />
* ATSPI_ROLE_LABEL: An object used to present an icon or short string in an interface <br />
* ATSPI_ROLE_LAYERED_PANE: A specialized pane that allows its children to be drawn in layers, providing a form of stacking order. <br />
* ATSPI_ROLE_LIST: An object that presents a list of objects to the user and allows the user to select one or more of them. <br />
* ATSPI_ROLE_LIST_ITEM: An object that represents an element of a list. <br />
* ATSPI_ROLE_MENU: An object usually found inside a menu bar that contains a list of actions the user can choose from. <br />
* ATSPI_ROLE_MENU_BAR: An object usually drawn at the top of the primary dialog box of an application that contains a list of menus the user can choose from. <br />
* ATSPI_ROLE_MENU_ITEM: An object usually contained in a menu that presents an action the user can choose. <br />
* ATSPI_ROLE_OPTION_PANE: A specialized pane whose primary use is inside a DIALOG <br />
* ATSPI_ROLE_PAGE_TAB: An object that is a child of a page tab list <br />
* ATSPI_ROLE_PAGE_TAB_LIST: An object that presents a series of panels (or page tabs), one at a time, through some mechanism provided by the object. <br />
* ATSPI_ROLE_PANEL: A generic container that is often used to group objects. <br />
* ATSPI_ROLE_PASSWORD_TEXT: A text object uses for passwords, or other places where the text content is not shown visibly to the user. <br />
* ATSPI_ROLE_POPUP_MENU: A temporary window that is usually used to offer the user a list of choices, and then hides when the user selects one of those choices. <br />
* ATSPI_ROLE_PROGRESS_BAR: An object used to indicate how much of a task has been completed. <br />
* ATSPI_ROLE_PUSH_BUTTON: An object the user can manipulate to tell the application to do something. <br />
* ATSPI_ROLE_RADIO_BUTTON: A specialized check box that will cause other radio buttons in the same group to become uncghecked when this one is checked. <br />
* ATSPI_ROLE_RADIO_MENU_ITEM: Object is both a menu item and a "radio button" (see ROLE_RADIO_BUTTON) <br />
* ATSPI_ROLE_ROOT_PANE: A specialized pane that has a glass pane and a layered pane as its children. <br />
* ATSPI_ROLE_ROW_HEADER: The header for a row of data <br />
* ATSPI_ROLE_SCROLL_BAR: An object usually used to allow a user to incrementally view a large amount of data by moving the bounds of a viewport along a one-dimensional axis. <br />
* ATSPI_ROLE_SCROLL_PANE: An object that allows a user to incrementally view a large amount of information. ROLE_SCROLL_PANE objects are usually accompanied by ROLE_SCROLL_BAR controllers, on which the RELATION_CONTROLLER_FOR and RELATION_CONTROLLED_BY reciprocal relations are set; \see Accessibility::RelationSet. <br />
* ATSPI_ROLE_SEPARATOR: An object usually contained in a menu to provide a visible and logical separation of the contents in a menu. <br />
* ATSPI_ROLE_SLIDER: An object that allows the user to select from a bounded range <br />
* ATSPI_ROLE_SPIN_BUTTON: An object which allows one of a set of choices to be selected, and which displays the current choice. Unlike ROLE_SCROLL_BAR, ROLE_SLIDER objects need not control 'viewport'-like objects. <br />
* ATSPI_ROLE_SPLIT_PANE: A specialized panel that presents two other panels at the same time. <br />
* ATSPI_ROLE_STATUS_BAR: Object displays non-quantitative status information (c.f. ROLE_PROGRESS_BAR) <br />
* ATSPI_ROLE_TABLE: An object used to repesent information in terms of rows and columns. <br />
* ATSPI_ROLE_TABLE_CELL: A 'cell' or discrete child within a Table. \note Table cells need not have ROLE_TABLE_CELL, other RoleType values are valid as well. <br />
* ATSPI_ROLE_TABLE_COLUMN_HEADER: An object which labels a particular column in a Table. <br />
* ATSPI_ROLE_TABLE_ROW_HEADER: An object which labels a particular row in a Table. Table rows and columns may also be labelled via the RELATION_LABEL_FOR/RELATION_LABELLED_BY relationships; see Accessibility.RelationSet. <br />
* ATSPI_ROLE_TEAROFF_MENU_ITEM: Object allows menu to be removed from menubar and shown in its own window. <br />
* ATSPI_ROLE_TERMINAL: An object that emulates a terminal <br />
* ATSPI_ROLE_TEXT: An object that presents text to the user, of nonspecific type. <br />
* ATSPI_ROLE_TOGGLE_BUTTON: A specialized push button that can be checked or unchecked, but does not procide a separate indicator for the current state. <br />
* ATSPI_ROLE_TOOL_BAR: A bar or palette usually composed of push buttons or toggle buttons <br />
* ATSPI_ROLE_TOOL_TIP: An object that provides information about another object <br />
* ATSPI_ROLE_TREE: An object used to repsent hierarchical information to the user. <br />
* ATSPI_ROLE_TREE_TABLE: An object that presents both tabular and hierarchical info to the user <br />
* ATSPI_ROLE_UNKNOWN: The object contains some Accessible information, but its role is not known. <br />
* ATSPI_ROLE_VIEWPORT: An object usually used in a scroll pane, or to otherwise clip a larger object or content renderer to a specific onscreen viewport. <br />
* ATSPI_ROLE_WINDOW: A &#168;top level window&#168; with no title or border. <br />
* ATSPI_ROLE_EXTENDED: means that the role for this item is known, but not included in the core enumeration <br />
* ATSPI_ROLE_HEADER: An object that serves as a document header. <br />
* ATSPI_ROLE_FOOTER: An object that serves as a document footer. <br />
* ATSPI_ROLE_PARAGRAPH: An object which is contains a single paragraph of text content. See also ROLE_TEXT. <br />
* ATSPI_ROLE_RULER: An object which describes margins and tab stops, etc. for text objects which it controls (should have CONTROLLER_FOR relation to such). <br />
* ATSPI_ROLE_APPLICATION: An object corresponding to the toplevel accessible of an application, which may contain ROLE_FRAME objects or other accessible objects. Children of AccessibleDesktop objects are generally ROLE_APPLICATION objects. <br />
* ATSPI_ROLE_AUTOCOMPLETE: The object is a dialog or list containing items for insertion into an entry widget, for instance a list of words for completion of a text entry. <br />
* ATSPI_ROLE_EDITBAR: The object is an editable text object in a toolbar. <br />
* ATSPI_ROLE_EMBEDDED: The object is an embedded component container. This role is a "grouping" hint that the contained objects share a context which is different from the container in which this accessible is embedded. In particular, it is used for some kinds of document embedding, and for embedding of out-of-process component, "panel applets", etc. <br />
* ATSPI_ROLE_ENTRY: The object is a component whose textual content may be entered or modified by the user, provided STATE_EDITABLE is present. A readonly ROLE_ENTRY object (i.e. where STATE_EDITABLE is not present) implies a read-only 'text field' in a form, as opposed to a title, label, or caption. <br />
* ATSPI_ROLE_CHART: The object is a graphical depiction of quantitative data. It may contain multiple subelements whose attributes and/or description may be queried to obtain both the quantitative data and information about how the data is being presented. The LABELLED_BY relation is particularly important in interpreting objects of this type, as is the accessible-description property. See ROLE_CAPTION <br />
* ATSPI_ROLE_CAPTION: The object contains descriptive information, usually textual, about another user interface element such as a table, chart, or image. <br />
* ATSPI_ROLE_DOCUMENT_FRAME: The object is a visual frame or container which contains a view of document content. Document frames may occur within another Document instance, in which case the second document may be said to be embedded in the containing instance. HTML frames are often ROLE_DOCUMENT_FRAME. Either this object, or a singleton descendant, should implement the Document interface. <br />
* ATSPI_ROLE_HEADING: The object serves as a heading for content which follows it in a document. The 'heading level' of the heading, if availabe, may be obtained by querying the object's attributes. <br />
* ATSPI_ROLE_PAGE: The object is a containing instance which encapsulates a page of information. ROLE_PAGE is used in documents and content which support a paginated navigation model. <br />
* ATSPI_ROLE_SECTION: The object is a containing instance of document content which constitutes a particular 'logical' section of the document. The type of content within a section, and the nature of the section division itself, may be obtained by querying the object's attributes. Sections may be nested. <br />
* ATSPI_ROLE_REDUNDANT_OBJECT: The object is redundant with another object in the hierarchy, and is exposed for purely technical reasons. Objects of this role should be ignored by clients, if they are encountered at all. <br />
* ATSPI_ROLE_FORM: The object is a containing instance of document content which has within it components with which the user can interact in order to input information; i.e. the object is a container for pushbuttons, comboboxes, text input fields, and other 'GUI' components. ROLE_FORM should not, in general, be used for toplevel GUI containers or dialogs, but should be reserved for 'GUI' containers which occur within document content, for instance within Web documents, presentations, or text documents. Unlike other GUI containers and dialogs which occur inside application instances, ROLE_FORM containers' components are associated with the current document, rather than the current foreground application or viewer instance. <br />
* ATSPI_ROLE_LINK: The object is a hypertext anchor, i.e. a "link" in a hypertext document. Such objects are distinct from 'inline' content which may also use the Hypertext/Hyperlink interfaces to indicate the range/location within a text object where an inline or embedded object lies. <br />
* ATSPI_ROLE_INPUT_METHOD_WINDOW: The object is a window or similar viewport which is used to allow composition or input of a 'complex character', in other words it is an "input method window." <br />
* ATSPI_ROLE_LAST_DEFINED: Not a valid role, used for finding end of enumeration. <br />
----<br />
<br />
= Events =<br />
== Focus ==<br />
One of the most important events is the focus change.<br />
FIXME document here what needs to happen when focus changes.<br />
<br />
----<br />
<br />
= Objects and their Properties =<br />
<br />
* Add AtkObject, AtkRoles, Names, Descriptions and the like<br />
* Talk about when to include versus when to omit or "fold in" (e.g. button whose child is a label, filler, etc.)<br />
<br />
''Matthias: I would really like to get some clarification about signals, when to emit them, what their expected semantics are, etc. E.g: do I emit 'visible-data-changed' when a label gains a mnemonic underline ?''<br />
----<br />
<br />
= Interfaces =<br />
''Note from JD: For now, I'm including the Documentation along with a Do's and Don'ts. Those ultimately might need to be merged. For now, having them both makes it more obvious to me what we should be questioning, docs we might need to go back and update, etc., etc.''<br />
<br />
Most accessible objects are expected to implement a variety of interfaces based on the purpose served by the backing toolkit widget, along with the ways users can interact with that widget.<br />
<br />
== AtkAction ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should be implemented by instances of AtkObject classes with which the user can interact directly, i.e. buttons, checkboxes, scrollbars, e.g. components which are not "passive" providers of UI information.<br />
<br />
Exceptions: when the user interaction is already covered by another appropriate interface such as AtkEditableText (insert/delete test, etc.) or AtkValue (set value) then these actions should not be exposed by [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] as well.<br />
<br />
Also note that the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] API is limited in that parameters may not be passed to the object being activated; thus the action must be self-contained and specifiable via only a single "verb". Concrete examples include "press", "release", "click" for buttons, "drag" (meaning initiate drag) and "drop" for drag sources and drop targets, etc.<br />
<br />
Though most UI interactions on components should be invocable via keyboard as well as mouse, there will generally be a close mapping between "mouse actions" that are possible on a component and the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkActions]]. Where mouse and keyboard actions are redundant in effect, [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should expose only one action rather than exposing redundant actions if possible. By convention we have been using "mouse centric" terminology for [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] names.<br />
<br />
''Note from Matthias: Should point out here that actions have keybindings associated with them. What are those good for, anyway ?''<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
* TODO: There was some discussion in #a11y with Benjamin and Joanie regarding the 'exception' above. We need to decide if it is good to have this "It's an AtkAction unless it happens to be an interface and then, well, it's not" situation. Surely that is confusing to implementors. Should Actiony things always be actions?<br />
* TODO: The verdict on press/release versus just click for buttons is still out.<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkComponent ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] should be implemented by most if not all UI elements with an actual on-screen presence, i.e. components which can be said to have a screen-coordinate bounding box. Virtually all widgets will need to have [[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] implementations provided for their corresponding AtkObject class. In short, only UI elements which are *not* GUI elements will omit this ATK interface.<br />
<br />
A possible exception might be textual information with a transparent background, in which case text glyph bounding box information is provided by [[http://developer.gnome.org/atk/unstable/AtkTextt.html|AtkText]].<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkDocument ==<br />
=== Description from the Documentation ===<br />
The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should be supported by any object whose content is a representation or view of a document. The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should appear on the toplevel container for the document content; however [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] instances may be nested (i.e. an [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] may be a descendant of another [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]]) in those cases where one document contains "embedded content" which can reasonably be considered a document in its own right.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkHypertext and AtkHyperlinkImpl ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkHypertext.html|AtkHypertext]] is an interface used for objects which implement linking between multiple resource or content locations, or multiple 'markers' within a single document. A Hypertext instance is associated with one or more Hyperlinks, which are associated with particular offsets within the Hypertext's included content. While this interface is derived from Text, there is no requirement that Hypertext instances have textual content; they may implement Image as well, and Hyperlinks need not have non-zero text offsets.<br />
<br />
[[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] allows AtkObjects to refer to their associated AtkHyperlink instance, if one exists. [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] differs from AtkHyperlink in that [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] is an interface, whereas AtkHyperlink is a object type. The [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] interface allows a client to query an AtkObject for the availability of an associated AtkHyperlink instance, and obtain that instance. It is thus particularly useful in cases where embedded content or inline content within a text object is present, since the embedding text object implements [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]] and the inline/embedded objects are exposed as children which implement [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]], in addition to their being obtainable via [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]]:getLink followed by AtkHyperlink:getObject.<br />
<br />
=== How Assistive Technologies Use These Interfaces ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
<br />
''Matthias: I have used the hyperlink classes in the accessible implementation for GtkLinkButton, and I'd love to know if my implementation is using these classes as intended.''<br />
<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkImage ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] should be implemented by AtkObject subtypes on behalf of components which display image/pixmap information onscreen, and which provide information (other than just widget borders, etc.) via that image content. For instance, icons, buttons with icons, toolbar elements, and image viewing panes typically should implement [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]].<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] primarily provides two types of information: coordinate information (useful for screen review mode of screenreaders, and for use by onscreen magnifiers), and descriptive information. The descriptive information is provided for alternative, text-only presentation of the most significant information present in the image.<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkSelection ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] should be implemented by UI components with children which are exposed by atk_object_ref_child and atk_object_get_n_children, if the use of the parent UI component ordinarily involves selection of one or more of the objects corresponding to those AtkObject children - for example, selectable lists.<br />
<br />
Note that other types of "selection" (for instance text selection) are accomplished a other ATK interfaces - [[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] is limited to the selection/deselection of children.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkTable ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] should be implemented by components which present elements ordered via rows and columns. It may also be used to present tree-structured information if the nodes of the trees can be said to contain multiple "columns". Individual elements of an [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are typically referred to as "cells", and these cells are exposed by [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] as child AtkObjects of the [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]]. Both row/column and child-index-based access to these children is provided.<br />
<br />
Children of [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are frequently "lightweight" objects, that is, they may not have backing widgets in the host UI toolkit. They are therefore often transient.<br />
<br />
Since tables are often very complex, [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] includes provision for offering simplified summary information, as well as row and column headers and captions. Headers and captions are AtkObjects which may implement other interfaces ([[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]], etc.) as appropriate. [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] summaries may themselves be (simplified) [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]], etc.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkText ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] should be implemented by AtkObjects on behalf of widgets that have text content which is either attributed or otherwise non-trivial. AtkObjects whose text content is simple, unattributed, and very brief may expose that content via atk_object_get_name instead; however if the text is editable, multi-line, typically longer than three or four words, attributed, selectable, or if the object already uses the 'name' ATK property for other information, the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface should be used to expose the text content. In the case of editable text content, AtkEditableText (a subtype of the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface) should be implemented instead.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] provides not only traversal facilities and change notification for text content, but also caret tracking and glyph bounding box calculations. Note that the text strings are exposed as UTF-8, and are therefore potentially multi-byte, and caret-to-byte offset mapping makes no assumptions about the character length; also bounding box glyph-to-offset mapping may be complex for languages which use ligatures.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] should be implemented by UI components which contain text which the user can edit, via the AtkObject corresponding to that component (see AtkObject).<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is a subclass of [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], and as such, an object which implements [[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is by definition an [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] implementor as well.<br />
=== How Assistive Technologies Use These Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
As a general rule, only implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for widgets which:<br />
* Are text the user can interact with by doing things such as: arrowing amongst characters, selecting, copying, etc., OR<br />
* Present a substantial message and/or have significant, important-to-convey formatting attributes<br />
Thus you DO want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* Documents and any other place the text contents can be changed by the user.<br />
* Labels serving as static text (e.g. in a message box).<br />
You do NOT want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* The displayed text/label of buttons (instead set the AtkObject's name to reflect the text)<br />
* The displayed/functional value of widgets implementing AtkValue (instead set the AtkObject's description to reflect the text)<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkValue ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] should be implemented for components which either display a value from a bounded range, or which allow the user to specify a value from a bounded range, or both. For instance, most sliders and range controls, as well as dials, should have AtkObject representations which implement [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] on the component's behalf. [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValues]] may be read-only, in which case attempts to alter the value return FALSE to indicate failure.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
----<br />
<br />
= Relations =<br />
<br />
Add the AtkRelation types here<br />
<br />
----<br />
<br />
<br />
<br />
= Widgets =<br />
Two main properties of widgets are Name and Description.<br />
The name reflects the primary text for the widget: The text of a label, the text on a button.<br />
The description gives additional information: A button labeled "OK" could have the description "Accepts the dialog". FIXME more sensible example?<br />
<br />
== Label ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Button ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Line Edit ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Table ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Tree ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Menu ==<br />
This is the menu bar of an application - File, Edit etc.<br />
<br />
* '''menu bar'''<br />
* '''menu*'''<br />
* '''menu*''' can contain more menu and menu item<br />
* '''menu item*'''<br />
<br />
There is one '''menu bar''' as root element, it has any number of '''menu''' as children.<br />
'''menu''' can have '''menu''' and '''menu item''' as children.<br />
'''menu item''' does not have children.<br />
<br />
<br />
<br />
== List ==<br />
* '''list'''<br />
* '''list item*'''<br />
<br />
A list has only one column. It contains items.<br />
<br />
'''States''': STATE_MANAGES_DESCENDANTS<br />
<br />
'''Events''': FIXME: what do we need? active descendant and more black magic<br />
<br />
'''Interfaces''': Table<br />
<br />
== Table ==<br />
<br />
current state in gtk: it would be difficult to provide row objects<br />
<br />
* '''table'''<br />
* '''table column header'''<br />
* '''table cell''' sometimes gtk has image+text in one cell. it represents that as two child objects of type '''table cell'''<br />
<br />
Web: firefox usually has rows, but sometimes it can happen that rows are not present (like html role presentation or css hidden)<br />
<br />
* '''table'''<br />
* '''table row''' the first row only contains headers<br />
* '''table row header''' once for the top-left header<br />
* '''table column header*''' as many as columns<br />
* '''table row*''' <br />
* '''table row header[0-1]''' for the left header<br />
* '''table cell*''' as many as columns, can be less if cell-span > 1 <br />
should headers be mandatory? should it be '''table header row''' for the first row?<br />
<br />
IA2: all cells are children of the table object. there are no row objects. like gtk.<br />
<br />
<br />
One big concern was notifications about selection changes. It would be great to get notified for things such as row selected. There are two ways to tackle this:<br />
in the first approach (gtk) we could define a signal: rows-selected() and rows-deselected or somesuch<br />
in the second approach with rows, the row object could be sent as selected. this has the downside that there is no way to do the same for columns. it is less flexible.<br />
IA2 has functions to get selected rows/columns<br />
<br />
<br />
== Trees ==<br />
The reason for the variety of trees that are possible is mostly that ARIA has very flexible tree definitions. The web implementators will simply expose that.<br />
<br />
<br />
Tree has exactly one column. For trees with more than one column the '''tree table''' has to be used.<br />
<br />
Tree items can contain a grouping element. In the grouping element it can have other items.<br />
<br />
=== Tree 1: define hierarchy through relations and group positions ===<br />
* '''tree'''<br />
* '''tree item''' with relations and group positions that define hierarchy<br />
* '''tree item'''<br />
* ...<br />
<br />
This tree works with add/remove tree items when they get expanded/collapsed.<br />
<br />
=== Tree 2: real hierarchy ===<br />
The items are arranged as children.<br />
<br />
* '''tree'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item*'''<br />
<br />
<br />
* '''tree'''<br />
* '''tree item group'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item group'''<br />
* '''tree item*'''<br />
<br />
No need for add/remove for expanding/collapsing of sub items.<br />
<br />
<br />
=== Tree 3: Tree Table ===<br />
Tree tables can not be hierarchical.<br />
'''tree table''' can have more than one column<br />
<br />
* '''tree table''' <br />
* '''tree table cell*'''<br />
<br />
* '''tree table'''<br />
* '''tree table row*'''<br />
* '''tree table cell*'''<br />
<br />
<br />
== Scroll Bars ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Combo Box ==<br />
* ATSPI_ROLE_COMBO_BOX is the root element<br />
* ATSPI_ROLE_TABLE see table. Usually this is a flat list of items.<br />
* ATSPI_ROLE_TEXT [optional] is present when the combo box is editable.<br />
<br />
The Accessible Name of the '''combo box''' accessible is the current text that is displayed. This text can be typed by the user or one of the selected items.<br />
<br />
'''States''': Focused, Editable<br />
<br />
'''Events''': Focus<br />
<br />
'''Interfaces''': None required<br />
<br />
The name of the ATSPI_ROLE_COMBO_BOX should always reflect the current text.<br />
FIXME: what should combo box send when the current item/text changed?<br />
<br />
<br />
== Foo Bar Template ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Stuff we Mustn't Forget ==<br />
(But are not sure where all to put it yet.)<br />
<br />
* "Hint text" - Gtk+ has it as an AtkObject attribute ('placeholder-text').<br />
* Window management stuff - what happens when a window gains focus etc<br />
* Registry - give an overview what it is, why and how clients and servers register to it.]\<br />
* Relations <br />
* make sure to mention them with the widgets that most likely need them (labelled-by for line edit)<br />
* document what they are in general</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=User:Frederik.gladhorn/atspi-scratch&diff=61130User:Frederik.gladhorn/atspi-scratch2011-07-01T11:43:50Z<p>Frederik.gladhorn: /* List */</p>
<hr />
<div>= GNOME Accessibility Team =<br />
= ATK/AT-SPI Best Practices Guide for Implementors =<br />
= DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT =<br />
<br />
= Introduction =<br />
This guide is for implementors of ATK and AT-SPI 2.<br />
It should say how to describe the user interface through the use of the AT-SPI Accessibility APIs.<br />
Having consistent representations of widgets makes the implementation of assisitive technology much easier.<br />
<br />
ATK and AT-SPI should be identical to large parts. Especially roles and enums should be the same, so this guide applies to both.<br />
<br />
The aim is to have a defined structure where applicable. For example an editable Combo Box should have a list or table and an editable text as children.<br />
<br />
In addition the expected signals such as accessible-name changed should be documented so that it is clear which signals to emit.<br />
<br />
= States =<br />
Accessible objects always have a set of states.<br />
For each widget below it is mentioned which states should be implemented.<br />
Over AT-SPI2 the states are split into two 32 bit uints. (yes, it's that horrible).<br />
<br />
FIXME link to states list<br />
<br />
ATSPI States (from at-spi2-core/atspi/atspi-constants.c)<br />
<br />
* ATSPI_STATE_INVALID: <br />
* ATSPI_STATE_ACTIVE: Indicates a window is currently the active window, or is an active subelement within a container or table <br />
* ATSPI_STATE_ARMED: Indicates that the object is armed <br />
* ATSPI_STATE_BUSY: Indicates the current object is busy, i.e. onscreen representation is in the process of changing, or the object is temporarily unavailable for interaction due to activity already in progress. <br />
* ATSPI_STATE_CHECKED: Indicates this object is currently checked <br />
* ATSPI_STATE_COLLAPSED: Indicates this object is collapsed <br />
* ATSPI_STATE_DEFUNCT: Indicates that this object no longer has a valid backing widget (for instance, if its peer object has been destroyed) <br />
* ATSPI_STATE_EDITABLE: Indicates the user can change the contents of this object <br />
* ATSPI_STATE_ENABLED: Indicates that this object is enabled, i.e. that it currently reflects some application state. Objects that are "greyed out" may lack this state, and may lack the STATE_SENSITIVE if direct user interaction cannot cause them to acquire STATE_ENABLED. @see STATE_SENSITIVE. <br />
* ATSPI_STATE_EXPANDABLE: Indicates this object allows progressive disclosure of its children <br />
* ATSPI_STATE_EXPANDED: Indicates this object its expanded <br />
* ATSPI_STATE_FOCUSABLE: Indicates this object can accept keyboard focus, which means all events resulting from typing on the keyboard will normally be passed to it when it has focus <br />
* ATSPI_STATE_FOCUSED: Indicates this object currently has the keyboard focus <br />
* ATSPI_STATE_HAS_TOOLTIP: Indicates that the object has an associated tooltip <br />
* ATSPI_STATE_HORIZONTAL: Indicates the orientation of thsi object is horizontal <br />
* ATSPI_STATE_ICONIFIED: Indicates this object is minimized and is represented only by an icon <br />
* ATSPI_STATE_MODAL: Indicates something must be done with this object before the user can interact with an object in a different window. <br />
* ATSPI_STATE_MULTI_LINE: Indicates this (text) object can contain multiple lines of text <br />
* ATSPI_STATE_MULTISELECTABLE: Indicates this object allows more than one of its children to be selected at the same time, or in the case of text objects, that the object supports non-contiguous text selections. <br />
* ATSPI_STATE_OPAQUE: Indicates this object paints every pixel within its rectangular region. It also indicates an alpha value of unity, if it supports alpha blending. <br />
* ATSPI_STATE_PRESSED: Indicates this object is currently pressed <br />
* ATSPI_STATE_RESIZABLE: Indicates the size of this object's size is not fixed <br />
* ATSPI_STATE_SELECTABLE: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that can be selected. <br />
* ATSPI_STATE_SELECTED: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that has been selected. <br />
* ATSPI_STATE_SENSITIVE: Indicates this object is sensitive, e.g. to user interaction. STATE_SENSITIVE usually accompanies STATE_ENABLED for user-actionable controls, but may be found in the absence of STATE_ENABLED if the current visible state of the control is "disconnected" from the application state. In such cases, direct user interaction can often result in the object gaining STATE_SENSITIVE, for instance if a user makes an explicit selection using an object whose current state is ambiguous or undefined. @see STATE_ENABLED, STATE_INDETERMINATE. <br />
* ATSPI_STATE_SHOWING: Indicates this object, the object's parent, the object's parent's parent, and so on, are all 'shown' to the end-user, i.e. subject to "exposure" if blocking or obscuring objects do not interpose between this object and the top of the window stack. <br />
* ATSPI_STATE_SINGLE_LINE: Indicates this (text) object can contain only a single line of text <br />
* ATSPI_STATE_STALE: Indicates that the information returned for this object may no longer be synchronized with the application state. This can occur if the object has STATE_TRANSIENT, and can also occur towards the end of the object peer's lifecycle. <br />
* ATSPI_STATE_TRANSIENT: Indicates this object is transient <br />
* ATSPI_STATE_VERTICAL: Indicates the orientation of this object is vertical; for example this state may appear on such objects as scrollbars, text objects (with vertical text flow), separators, etc. <br />
* ATSPI_STATE_VISIBLE: Indicates this object is visible, e.g. has been explicitly marked for exposure to the user. STATE_VISIBLE is no guarantee that the object is actually unobscured on the screen, only that it is 'potentially' visible, barring obstruction, being scrolled or clipped out of the field of view, or having an ancestor container that has not yet made visible. A widget is potentially onscreen if it has both STATE_VISIBLE and STATE_SHOWING. The absence of STATE_VISIBLE and STATE_SHOWING is semantically equivalent to saying that an object is 'hidden'. <br />
* ATSPI_STATE_MANAGES_DESCENDANTS: Indicates that "active-descendant-changed" event is sent when children become 'active' (i.e. are selected or navigated to onscreen). Used to prevent need to enumerate all children in very large containers, like tables. The presence of STATE_MANAGES_DESCENDANTS is an indication to the client. that the children should not, and need not, be enumerated by the client. Objects implementing this state are expected to provide relevant state notifications to listening clients, for instance notifications of visibility changes and activation of their contained child objects, without the client having previously requested references to those children. <br />
* ATSPI_STATE_INDETERMINATE: Indicates that a check box or other boolean indicator is in a state other than checked or not checked. This usually means that the boolean value reflected or controlled by the object does not apply consistently to the entire current context. For example, a checkbox for the "Bold" attribute of text may have STATE_INDETERMINATE if the currently selected text contains a mixture of weight attributes. In many cases interacting with a STATE_INDETERMINATE object will cause the context's corresponding boolean attribute to be homogenized, whereupon the object will lose STATE_INDETERMINATE and a corresponding state-changed event will be fired. <br />
* ATSPI_STATE_REQUIRED: Indicates that user interaction with this object is 'required' from the user, for instance before completing the processing of a form. <br />
* ATSPI_STATE_TRUNCATED: Indicates that an object's onscreen content is truncated, e.g. a text value in a spreadsheet cell. <br />
* ATSPI_STATE_ANIMATED: Indicates this object's visual representation is dynamic, not static. This state may be applied to an object during an animated 'effect' and be removed from the object once its visual representation becomes static. some applications, notably content viewers, may not be able to detect all kinds of animated content. Therefore the absence of this state should not be taken as definitive evidence that the object's visual representation is static; this state is advisory. <br />
* ATSPI_STATE_INVALID_ENTRY: This object has indicated an error condition due to failure of input validation. For instance, a form control may acquire this state in response to invalid or malformed user input. <br />
* ATSPI_STATE_SUPPORTS_AUTOCOMPLETION: This state indicates that the object in question implements some form of &#168;typeahead&#168; or pre-selection behavior whereby entering the first character of one or more sub-elements causes those elements to scroll into view or become selected. Subsequent character input may narrow the selection further as long as one or more sub-elements match the string. This state is normally only useful and encountered on objects that implement Selection. In some cases the typeahead behavior may result in full or partial &#168;completion&#168; of the data in the input field, in which case these input events may trigger text-changed events from the source. <br />
* ATSPI_STATE_SELECTABLE_TEXT: This state indicates that the object in question supports text selection. It should only be exposed on objects which implement the Text interface, in order to distinguish this state from STATE_SELECTABLE, which infers that the object in question is a selectable child of an object which implements Selection. While similar, text selection and subelement selection are distinct operations. <br />
* ATSPI_STATE_IS_DEFAULT: This state indicates that the object in question is the 'default' interaction object in a dialog, i.e. the one that gets activated if the user presses "Enter" when the dialog is initially posted. <br />
* ATSPI_STATE_VISITED: This state indicates that the object (typically a hyperlink) has already been activated or invoked, with the result that some backing data has been downloaded or rendered. <br />
* ATSPI_STATE_LAST_DEFINED: This value of the enumeration should not be used as a parameter, it indicates the number of items in the StateType enumeration. <br />
<br />
<br />
<br />
Some states are valid for all widgets:<br />
* Visible?<br />
<br />
<br />
----<br />
= Roles =<br />
* ATSPI_ROLE_INVALID: A Role indicating an error condition, such as uninitialized Role data. <br />
* ATSPI_ROLE_ACCELERATOR_LABEL: Object is a label indicating the keyboard accelerators for the parent <br />
* ATSPI_ROLE_ALERT: Object is used to alert the user about something <br />
* ATSPI_ROLE_ANIMATION: Object contains a dynamic or moving image of some kind <br />
* ATSPI_ROLE_ARROW: Object is a 2d directional indicator <br />
* ATSPI_ROLE_CALENDAR: Object contains one or more dates, usually arranged into a 2d list <br />
* ATSPI_ROLE_CANVAS: Object that can be drawn into and is used to trap events <br />
* ATSPI_ROLE_CHECK_BOX: A choice that can be checked or unchecked and provides a separate indicator for the current state. <br />
* ATSPI_ROLE_CHECK_MENU_ITEM: A menu item that behaves like a check box (see ROLE_CHECK_BOX) <br />
* ATSPI_ROLE_COLOR_CHOOSER: A specialized dialog that lets the user choose a color. <br />
* ATSPI_ROLE_COLUMN_HEADER: The header for a column of data <br />
* ATSPI_ROLE_COMBO_BOX: A list of choices the user can select from <br />
* ATSPI_ROLE_DATE_EDITOR: An object which allows entry of a date <br />
* ATSPI_ROLE_DESKTOP_ICON: An inconifed internal frame within a DESKTOP_PANE <br />
* ATSPI_ROLE_DESKTOP_FRAME: A pane that supports internal frames and iconified versions of those internal frames. <br />
* ATSPI_ROLE_DIAL: An object that allows a value to be changed via rotating a visual element, or which displays a value via such a rotating element. <br />
* ATSPI_ROLE_DIALOG: A top level window with title bar and a border <br />
* ATSPI_ROLE_DIRECTORY_PANE: A pane that allows the user to navigate through and select the contents of a directory <br />
* ATSPI_ROLE_DRAWING_AREA: A specialized dialog that displays the files in the directory and lets the user select a file, browse a different directory, or specify a filename. <br />
* ATSPI_ROLE_FILE_CHOOSER: An object used for drawing custom user interface elements. <br />
* ATSPI_ROLE_FILLER: A object that fills up space in a user interface <br />
* ATSPI_ROLE_FOCUS_TRAVERSABLE: Don't use, reserved for future use. <br />
* ATSPI_ROLE_FONT_CHOOSER: Allows selection of a display font <br />
* ATSPI_ROLE_FRAME: A top level window with a title bar, border, menubar, etc. <br />
* ATSPI_ROLE_GLASS_PANE: A pane that is guaranteed to be painted on top of all panes beneath it <br />
* ATSPI_ROLE_HTML_CONTAINER: A document container for HTML, whose children represent the document content. <br />
* ATSPI_ROLE_ICON: A small fixed size picture, typically used to decorate components <br />
* ATSPI_ROLE_IMAGE: An image, typically static. <br />
* ATSPI_ROLE_INTERNAL_FRAME: A frame-like object that is clipped by a desktop pane. <br />
* ATSPI_ROLE_LABEL: An object used to present an icon or short string in an interface <br />
* ATSPI_ROLE_LAYERED_PANE: A specialized pane that allows its children to be drawn in layers, providing a form of stacking order. <br />
* ATSPI_ROLE_LIST: An object that presents a list of objects to the user and allows the user to select one or more of them. <br />
* ATSPI_ROLE_LIST_ITEM: An object that represents an element of a list. <br />
* ATSPI_ROLE_MENU: An object usually found inside a menu bar that contains a list of actions the user can choose from. <br />
* ATSPI_ROLE_MENU_BAR: An object usually drawn at the top of the primary dialog box of an application that contains a list of menus the user can choose from. <br />
* ATSPI_ROLE_MENU_ITEM: An object usually contained in a menu that presents an action the user can choose. <br />
* ATSPI_ROLE_OPTION_PANE: A specialized pane whose primary use is inside a DIALOG <br />
* ATSPI_ROLE_PAGE_TAB: An object that is a child of a page tab list <br />
* ATSPI_ROLE_PAGE_TAB_LIST: An object that presents a series of panels (or page tabs), one at a time, through some mechanism provided by the object. <br />
* ATSPI_ROLE_PANEL: A generic container that is often used to group objects. <br />
* ATSPI_ROLE_PASSWORD_TEXT: A text object uses for passwords, or other places where the text content is not shown visibly to the user. <br />
* ATSPI_ROLE_POPUP_MENU: A temporary window that is usually used to offer the user a list of choices, and then hides when the user selects one of those choices. <br />
* ATSPI_ROLE_PROGRESS_BAR: An object used to indicate how much of a task has been completed. <br />
* ATSPI_ROLE_PUSH_BUTTON: An object the user can manipulate to tell the application to do something. <br />
* ATSPI_ROLE_RADIO_BUTTON: A specialized check box that will cause other radio buttons in the same group to become uncghecked when this one is checked. <br />
* ATSPI_ROLE_RADIO_MENU_ITEM: Object is both a menu item and a "radio button" (see ROLE_RADIO_BUTTON) <br />
* ATSPI_ROLE_ROOT_PANE: A specialized pane that has a glass pane and a layered pane as its children. <br />
* ATSPI_ROLE_ROW_HEADER: The header for a row of data <br />
* ATSPI_ROLE_SCROLL_BAR: An object usually used to allow a user to incrementally view a large amount of data by moving the bounds of a viewport along a one-dimensional axis. <br />
* ATSPI_ROLE_SCROLL_PANE: An object that allows a user to incrementally view a large amount of information. ROLE_SCROLL_PANE objects are usually accompanied by ROLE_SCROLL_BAR controllers, on which the RELATION_CONTROLLER_FOR and RELATION_CONTROLLED_BY reciprocal relations are set; \see Accessibility::RelationSet. <br />
* ATSPI_ROLE_SEPARATOR: An object usually contained in a menu to provide a visible and logical separation of the contents in a menu. <br />
* ATSPI_ROLE_SLIDER: An object that allows the user to select from a bounded range <br />
* ATSPI_ROLE_SPIN_BUTTON: An object which allows one of a set of choices to be selected, and which displays the current choice. Unlike ROLE_SCROLL_BAR, ROLE_SLIDER objects need not control 'viewport'-like objects. <br />
* ATSPI_ROLE_SPLIT_PANE: A specialized panel that presents two other panels at the same time. <br />
* ATSPI_ROLE_STATUS_BAR: Object displays non-quantitative status information (c.f. ROLE_PROGRESS_BAR) <br />
* ATSPI_ROLE_TABLE: An object used to repesent information in terms of rows and columns. <br />
* ATSPI_ROLE_TABLE_CELL: A 'cell' or discrete child within a Table. \note Table cells need not have ROLE_TABLE_CELL, other RoleType values are valid as well. <br />
* ATSPI_ROLE_TABLE_COLUMN_HEADER: An object which labels a particular column in a Table. <br />
* ATSPI_ROLE_TABLE_ROW_HEADER: An object which labels a particular row in a Table. Table rows and columns may also be labelled via the RELATION_LABEL_FOR/RELATION_LABELLED_BY relationships; see Accessibility.RelationSet. <br />
* ATSPI_ROLE_TEAROFF_MENU_ITEM: Object allows menu to be removed from menubar and shown in its own window. <br />
* ATSPI_ROLE_TERMINAL: An object that emulates a terminal <br />
* ATSPI_ROLE_TEXT: An object that presents text to the user, of nonspecific type. <br />
* ATSPI_ROLE_TOGGLE_BUTTON: A specialized push button that can be checked or unchecked, but does not procide a separate indicator for the current state. <br />
* ATSPI_ROLE_TOOL_BAR: A bar or palette usually composed of push buttons or toggle buttons <br />
* ATSPI_ROLE_TOOL_TIP: An object that provides information about another object <br />
* ATSPI_ROLE_TREE: An object used to repsent hierarchical information to the user. <br />
* ATSPI_ROLE_TREE_TABLE: An object that presents both tabular and hierarchical info to the user <br />
* ATSPI_ROLE_UNKNOWN: The object contains some Accessible information, but its role is not known. <br />
* ATSPI_ROLE_VIEWPORT: An object usually used in a scroll pane, or to otherwise clip a larger object or content renderer to a specific onscreen viewport. <br />
* ATSPI_ROLE_WINDOW: A &#168;top level window&#168; with no title or border. <br />
* ATSPI_ROLE_EXTENDED: means that the role for this item is known, but not included in the core enumeration <br />
* ATSPI_ROLE_HEADER: An object that serves as a document header. <br />
* ATSPI_ROLE_FOOTER: An object that serves as a document footer. <br />
* ATSPI_ROLE_PARAGRAPH: An object which is contains a single paragraph of text content. See also ROLE_TEXT. <br />
* ATSPI_ROLE_RULER: An object which describes margins and tab stops, etc. for text objects which it controls (should have CONTROLLER_FOR relation to such). <br />
* ATSPI_ROLE_APPLICATION: An object corresponding to the toplevel accessible of an application, which may contain ROLE_FRAME objects or other accessible objects. Children of AccessibleDesktop objects are generally ROLE_APPLICATION objects. <br />
* ATSPI_ROLE_AUTOCOMPLETE: The object is a dialog or list containing items for insertion into an entry widget, for instance a list of words for completion of a text entry. <br />
* ATSPI_ROLE_EDITBAR: The object is an editable text object in a toolbar. <br />
* ATSPI_ROLE_EMBEDDED: The object is an embedded component container. This role is a "grouping" hint that the contained objects share a context which is different from the container in which this accessible is embedded. In particular, it is used for some kinds of document embedding, and for embedding of out-of-process component, "panel applets", etc. <br />
* ATSPI_ROLE_ENTRY: The object is a component whose textual content may be entered or modified by the user, provided STATE_EDITABLE is present. A readonly ROLE_ENTRY object (i.e. where STATE_EDITABLE is not present) implies a read-only 'text field' in a form, as opposed to a title, label, or caption. <br />
* ATSPI_ROLE_CHART: The object is a graphical depiction of quantitative data. It may contain multiple subelements whose attributes and/or description may be queried to obtain both the quantitative data and information about how the data is being presented. The LABELLED_BY relation is particularly important in interpreting objects of this type, as is the accessible-description property. See ROLE_CAPTION <br />
* ATSPI_ROLE_CAPTION: The object contains descriptive information, usually textual, about another user interface element such as a table, chart, or image. <br />
* ATSPI_ROLE_DOCUMENT_FRAME: The object is a visual frame or container which contains a view of document content. Document frames may occur within another Document instance, in which case the second document may be said to be embedded in the containing instance. HTML frames are often ROLE_DOCUMENT_FRAME. Either this object, or a singleton descendant, should implement the Document interface. <br />
* ATSPI_ROLE_HEADING: The object serves as a heading for content which follows it in a document. The 'heading level' of the heading, if availabe, may be obtained by querying the object's attributes. <br />
* ATSPI_ROLE_PAGE: The object is a containing instance which encapsulates a page of information. ROLE_PAGE is used in documents and content which support a paginated navigation model. <br />
* ATSPI_ROLE_SECTION: The object is a containing instance of document content which constitutes a particular 'logical' section of the document. The type of content within a section, and the nature of the section division itself, may be obtained by querying the object's attributes. Sections may be nested. <br />
* ATSPI_ROLE_REDUNDANT_OBJECT: The object is redundant with another object in the hierarchy, and is exposed for purely technical reasons. Objects of this role should be ignored by clients, if they are encountered at all. <br />
* ATSPI_ROLE_FORM: The object is a containing instance of document content which has within it components with which the user can interact in order to input information; i.e. the object is a container for pushbuttons, comboboxes, text input fields, and other 'GUI' components. ROLE_FORM should not, in general, be used for toplevel GUI containers or dialogs, but should be reserved for 'GUI' containers which occur within document content, for instance within Web documents, presentations, or text documents. Unlike other GUI containers and dialogs which occur inside application instances, ROLE_FORM containers' components are associated with the current document, rather than the current foreground application or viewer instance. <br />
* ATSPI_ROLE_LINK: The object is a hypertext anchor, i.e. a "link" in a hypertext document. Such objects are distinct from 'inline' content which may also use the Hypertext/Hyperlink interfaces to indicate the range/location within a text object where an inline or embedded object lies. <br />
* ATSPI_ROLE_INPUT_METHOD_WINDOW: The object is a window or similar viewport which is used to allow composition or input of a 'complex character', in other words it is an "input method window." <br />
* ATSPI_ROLE_LAST_DEFINED: Not a valid role, used for finding end of enumeration. <br />
----<br />
<br />
= Events =<br />
== Focus ==<br />
One of the most important events is the focus change.<br />
FIXME document here what needs to happen when focus changes.<br />
<br />
----<br />
<br />
= Objects and their Properties =<br />
<br />
* Add AtkObject, AtkRoles, Names, Descriptions and the like<br />
* Talk about when to include versus when to omit or "fold in" (e.g. button whose child is a label, filler, etc.)<br />
<br />
''Matthias: I would really like to get some clarification about signals, when to emit them, what their expected semantics are, etc. E.g: do I emit 'visible-data-changed' when a label gains a mnemonic underline ?''<br />
----<br />
<br />
= Interfaces =<br />
''Note from JD: For now, I'm including the Documentation along with a Do's and Don'ts. Those ultimately might need to be merged. For now, having them both makes it more obvious to me what we should be questioning, docs we might need to go back and update, etc., etc.''<br />
<br />
Most accessible objects are expected to implement a variety of interfaces based on the purpose served by the backing toolkit widget, along with the ways users can interact with that widget.<br />
<br />
== AtkAction ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should be implemented by instances of AtkObject classes with which the user can interact directly, i.e. buttons, checkboxes, scrollbars, e.g. components which are not "passive" providers of UI information.<br />
<br />
Exceptions: when the user interaction is already covered by another appropriate interface such as AtkEditableText (insert/delete test, etc.) or AtkValue (set value) then these actions should not be exposed by [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] as well.<br />
<br />
Also note that the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] API is limited in that parameters may not be passed to the object being activated; thus the action must be self-contained and specifiable via only a single "verb". Concrete examples include "press", "release", "click" for buttons, "drag" (meaning initiate drag) and "drop" for drag sources and drop targets, etc.<br />
<br />
Though most UI interactions on components should be invocable via keyboard as well as mouse, there will generally be a close mapping between "mouse actions" that are possible on a component and the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkActions]]. Where mouse and keyboard actions are redundant in effect, [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should expose only one action rather than exposing redundant actions if possible. By convention we have been using "mouse centric" terminology for [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] names.<br />
<br />
''Note from Matthias: Should point out here that actions have keybindings associated with them. What are those good for, anyway ?''<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
* TODO: There was some discussion in #a11y with Benjamin and Joanie regarding the 'exception' above. We need to decide if it is good to have this "It's an AtkAction unless it happens to be an interface and then, well, it's not" situation. Surely that is confusing to implementors. Should Actiony things always be actions?<br />
* TODO: The verdict on press/release versus just click for buttons is still out.<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkComponent ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] should be implemented by most if not all UI elements with an actual on-screen presence, i.e. components which can be said to have a screen-coordinate bounding box. Virtually all widgets will need to have [[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] implementations provided for their corresponding AtkObject class. In short, only UI elements which are *not* GUI elements will omit this ATK interface.<br />
<br />
A possible exception might be textual information with a transparent background, in which case text glyph bounding box information is provided by [[http://developer.gnome.org/atk/unstable/AtkTextt.html|AtkText]].<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkDocument ==<br />
=== Description from the Documentation ===<br />
The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should be supported by any object whose content is a representation or view of a document. The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should appear on the toplevel container for the document content; however [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] instances may be nested (i.e. an [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] may be a descendant of another [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]]) in those cases where one document contains "embedded content" which can reasonably be considered a document in its own right.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkHypertext and AtkHyperlinkImpl ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkHypertext.html|AtkHypertext]] is an interface used for objects which implement linking between multiple resource or content locations, or multiple 'markers' within a single document. A Hypertext instance is associated with one or more Hyperlinks, which are associated with particular offsets within the Hypertext's included content. While this interface is derived from Text, there is no requirement that Hypertext instances have textual content; they may implement Image as well, and Hyperlinks need not have non-zero text offsets.<br />
<br />
[[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] allows AtkObjects to refer to their associated AtkHyperlink instance, if one exists. [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] differs from AtkHyperlink in that [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] is an interface, whereas AtkHyperlink is a object type. The [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] interface allows a client to query an AtkObject for the availability of an associated AtkHyperlink instance, and obtain that instance. It is thus particularly useful in cases where embedded content or inline content within a text object is present, since the embedding text object implements [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]] and the inline/embedded objects are exposed as children which implement [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]], in addition to their being obtainable via [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]]:getLink followed by AtkHyperlink:getObject.<br />
<br />
=== How Assistive Technologies Use These Interfaces ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
<br />
''Matthias: I have used the hyperlink classes in the accessible implementation for GtkLinkButton, and I'd love to know if my implementation is using these classes as intended.''<br />
<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkImage ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] should be implemented by AtkObject subtypes on behalf of components which display image/pixmap information onscreen, and which provide information (other than just widget borders, etc.) via that image content. For instance, icons, buttons with icons, toolbar elements, and image viewing panes typically should implement [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]].<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] primarily provides two types of information: coordinate information (useful for screen review mode of screenreaders, and for use by onscreen magnifiers), and descriptive information. The descriptive information is provided for alternative, text-only presentation of the most significant information present in the image.<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkSelection ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] should be implemented by UI components with children which are exposed by atk_object_ref_child and atk_object_get_n_children, if the use of the parent UI component ordinarily involves selection of one or more of the objects corresponding to those AtkObject children - for example, selectable lists.<br />
<br />
Note that other types of "selection" (for instance text selection) are accomplished a other ATK interfaces - [[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] is limited to the selection/deselection of children.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkTable ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] should be implemented by components which present elements ordered via rows and columns. It may also be used to present tree-structured information if the nodes of the trees can be said to contain multiple "columns". Individual elements of an [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are typically referred to as "cells", and these cells are exposed by [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] as child AtkObjects of the [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]]. Both row/column and child-index-based access to these children is provided.<br />
<br />
Children of [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are frequently "lightweight" objects, that is, they may not have backing widgets in the host UI toolkit. They are therefore often transient.<br />
<br />
Since tables are often very complex, [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] includes provision for offering simplified summary information, as well as row and column headers and captions. Headers and captions are AtkObjects which may implement other interfaces ([[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]], etc.) as appropriate. [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] summaries may themselves be (simplified) [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]], etc.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkText ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] should be implemented by AtkObjects on behalf of widgets that have text content which is either attributed or otherwise non-trivial. AtkObjects whose text content is simple, unattributed, and very brief may expose that content via atk_object_get_name instead; however if the text is editable, multi-line, typically longer than three or four words, attributed, selectable, or if the object already uses the 'name' ATK property for other information, the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface should be used to expose the text content. In the case of editable text content, AtkEditableText (a subtype of the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface) should be implemented instead.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] provides not only traversal facilities and change notification for text content, but also caret tracking and glyph bounding box calculations. Note that the text strings are exposed as UTF-8, and are therefore potentially multi-byte, and caret-to-byte offset mapping makes no assumptions about the character length; also bounding box glyph-to-offset mapping may be complex for languages which use ligatures.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] should be implemented by UI components which contain text which the user can edit, via the AtkObject corresponding to that component (see AtkObject).<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is a subclass of [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], and as such, an object which implements [[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is by definition an [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] implementor as well.<br />
=== How Assistive Technologies Use These Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
As a general rule, only implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for widgets which:<br />
* Are text the user can interact with by doing things such as: arrowing amongst characters, selecting, copying, etc., OR<br />
* Present a substantial message and/or have significant, important-to-convey formatting attributes<br />
Thus you DO want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* Documents and any other place the text contents can be changed by the user.<br />
* Labels serving as static text (e.g. in a message box).<br />
You do NOT want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* The displayed text/label of buttons (instead set the AtkObject's name to reflect the text)<br />
* The displayed/functional value of widgets implementing AtkValue (instead set the AtkObject's description to reflect the text)<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkValue ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] should be implemented for components which either display a value from a bounded range, or which allow the user to specify a value from a bounded range, or both. For instance, most sliders and range controls, as well as dials, should have AtkObject representations which implement [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] on the component's behalf. [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValues]] may be read-only, in which case attempts to alter the value return FALSE to indicate failure.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
----<br />
<br />
= Relations =<br />
<br />
Add the AtkRelation types here<br />
<br />
----<br />
<br />
<br />
<br />
= Widgets =<br />
Two main properties of widgets are Name and Description.<br />
The name reflects the primary text for the widget: The text of a label, the text on a button.<br />
The description gives additional information: A button labeled "OK" could have the description "Accepts the dialog". FIXME more sensible example?<br />
<br />
== Label ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Button ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Line Edit ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Table ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Tree ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Menu ==<br />
This is the menu bar of an application - File, Edit etc.<br />
<br />
* '''menu bar'''<br />
* '''menu*'''<br />
* '''menu*''' can contain more menu and menu item<br />
* '''menu item*'''<br />
<br />
There is one '''menu bar''' as root element, it has any number of '''menu''' as children.<br />
'''menu''' can have '''menu''' and '''menu item''' as children.<br />
'''menu item''' does not have children.<br />
<br />
<br />
<br />
== List ==<br />
* '''list'''<br />
* '''list item*'''<br />
<br />
A list has only one column. It contains items.<br />
<br />
<br />
== Table ==<br />
<br />
current state in gtk: it would be difficult to provide row objects<br />
<br />
* '''table'''<br />
* '''table column header'''<br />
* '''table cell''' sometimes gtk has image+text in one cell. it represents that as two child objects of type '''table cell'''<br />
<br />
Web: firefox usually has rows, but sometimes it can happen that rows are not present (like html role presentation or css hidden)<br />
<br />
* '''table'''<br />
* '''table row''' the first row only contains headers<br />
* '''table row header''' once for the top-left header<br />
* '''table column header*''' as many as columns<br />
* '''table row*''' <br />
* '''table row header[0-1]''' for the left header<br />
* '''table cell*''' as many as columns, can be less if cell-span > 1 <br />
should headers be mandatory? should it be '''table header row''' for the first row?<br />
<br />
IA2: all cells are children of the table object. there are no row objects. like gtk.<br />
<br />
<br />
One big concern was notifications about selection changes. It would be great to get notified for things such as row selected. There are two ways to tackle this:<br />
in the first approach (gtk) we could define a signal: rows-selected() and rows-deselected or somesuch<br />
in the second approach with rows, the row object could be sent as selected. this has the downside that there is no way to do the same for columns. it is less flexible.<br />
IA2 has functions to get selected rows/columns<br />
<br />
<br />
== Trees ==<br />
The reason for the variety of trees that are possible is mostly that ARIA has very flexible tree definitions. The web implementators will simply expose that.<br />
<br />
<br />
Tree has exactly one column. For trees with more than one column the '''tree table''' has to be used.<br />
<br />
Tree items can contain a grouping element. In the grouping element it can have other items.<br />
<br />
=== Tree 1: define hierarchy through relations and group positions ===<br />
* '''tree'''<br />
* '''tree item''' with relations and group positions that define hierarchy<br />
* '''tree item'''<br />
* ...<br />
<br />
This tree works with add/remove tree items when they get expanded/collapsed.<br />
<br />
=== Tree 2: real hierarchy ===<br />
The items are arranged as children.<br />
<br />
* '''tree'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item*'''<br />
<br />
<br />
* '''tree'''<br />
* '''tree item group'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item group'''<br />
* '''tree item*'''<br />
<br />
No need for add/remove for expanding/collapsing of sub items.<br />
<br />
<br />
=== Tree 3: Tree Table ===<br />
Tree tables can not be hierarchical.<br />
'''tree table''' can have more than one column<br />
<br />
* '''tree table''' <br />
* '''tree table cell*'''<br />
<br />
* '''tree table'''<br />
* '''tree table row*'''<br />
* '''tree table cell*'''<br />
<br />
<br />
== Scroll Bars ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Combo Box ==<br />
* ATSPI_ROLE_COMBO_BOX is the root element<br />
* ATSPI_ROLE_TABLE see table. Usually this is a flat list of items.<br />
* ATSPI_ROLE_TEXT [optional] is present when the combo box is editable.<br />
<br />
The Accessible Name of the '''combo box''' accessible is the current text that is displayed. This text can be typed by the user or one of the selected items.<br />
<br />
'''States''': Focused, Editable<br />
<br />
'''Events''': Focus<br />
<br />
'''Interfaces''': None required<br />
<br />
The name of the ATSPI_ROLE_COMBO_BOX should always reflect the current text.<br />
FIXME: what should combo box send when the current item/text changed?<br />
<br />
<br />
== Foo Bar Template ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Stuff we Mustn't Forget ==<br />
(But are not sure where all to put it yet.)<br />
<br />
* "Hint text" - Gtk+ has it as an AtkObject attribute ('placeholder-text').<br />
* Window management stuff - what happens when a window gains focus etc<br />
* Registry - give an overview what it is, why and how clients and servers register to it.]\<br />
* Relations <br />
* make sure to mention them with the widgets that most likely need them (labelled-by for line edit)<br />
* document what they are in general</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=User:Frederik.gladhorn/atspi-scratch&diff=61129User:Frederik.gladhorn/atspi-scratch2011-07-01T11:43:09Z<p>Frederik.gladhorn: Created page with "= GNOME Accessibility Team = = ATK/AT-SPI Best Practices Guide for Implementors = = DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT = = Introduction = This guide is for implementors of ATK ..."</p>
<hr />
<div>= GNOME Accessibility Team =<br />
= ATK/AT-SPI Best Practices Guide for Implementors =<br />
= DRAFT DRAFT DRAFT DRAFT DRAFT DRAFT =<br />
<br />
= Introduction =<br />
This guide is for implementors of ATK and AT-SPI 2.<br />
It should say how to describe the user interface through the use of the AT-SPI Accessibility APIs.<br />
Having consistent representations of widgets makes the implementation of assisitive technology much easier.<br />
<br />
ATK and AT-SPI should be identical to large parts. Especially roles and enums should be the same, so this guide applies to both.<br />
<br />
The aim is to have a defined structure where applicable. For example an editable Combo Box should have a list or table and an editable text as children.<br />
<br />
In addition the expected signals such as accessible-name changed should be documented so that it is clear which signals to emit.<br />
<br />
= States =<br />
Accessible objects always have a set of states.<br />
For each widget below it is mentioned which states should be implemented.<br />
Over AT-SPI2 the states are split into two 32 bit uints. (yes, it's that horrible).<br />
<br />
FIXME link to states list<br />
<br />
ATSPI States (from at-spi2-core/atspi/atspi-constants.c)<br />
<br />
* ATSPI_STATE_INVALID: <br />
* ATSPI_STATE_ACTIVE: Indicates a window is currently the active window, or is an active subelement within a container or table <br />
* ATSPI_STATE_ARMED: Indicates that the object is armed <br />
* ATSPI_STATE_BUSY: Indicates the current object is busy, i.e. onscreen representation is in the process of changing, or the object is temporarily unavailable for interaction due to activity already in progress. <br />
* ATSPI_STATE_CHECKED: Indicates this object is currently checked <br />
* ATSPI_STATE_COLLAPSED: Indicates this object is collapsed <br />
* ATSPI_STATE_DEFUNCT: Indicates that this object no longer has a valid backing widget (for instance, if its peer object has been destroyed) <br />
* ATSPI_STATE_EDITABLE: Indicates the user can change the contents of this object <br />
* ATSPI_STATE_ENABLED: Indicates that this object is enabled, i.e. that it currently reflects some application state. Objects that are "greyed out" may lack this state, and may lack the STATE_SENSITIVE if direct user interaction cannot cause them to acquire STATE_ENABLED. @see STATE_SENSITIVE. <br />
* ATSPI_STATE_EXPANDABLE: Indicates this object allows progressive disclosure of its children <br />
* ATSPI_STATE_EXPANDED: Indicates this object its expanded <br />
* ATSPI_STATE_FOCUSABLE: Indicates this object can accept keyboard focus, which means all events resulting from typing on the keyboard will normally be passed to it when it has focus <br />
* ATSPI_STATE_FOCUSED: Indicates this object currently has the keyboard focus <br />
* ATSPI_STATE_HAS_TOOLTIP: Indicates that the object has an associated tooltip <br />
* ATSPI_STATE_HORIZONTAL: Indicates the orientation of thsi object is horizontal <br />
* ATSPI_STATE_ICONIFIED: Indicates this object is minimized and is represented only by an icon <br />
* ATSPI_STATE_MODAL: Indicates something must be done with this object before the user can interact with an object in a different window. <br />
* ATSPI_STATE_MULTI_LINE: Indicates this (text) object can contain multiple lines of text <br />
* ATSPI_STATE_MULTISELECTABLE: Indicates this object allows more than one of its children to be selected at the same time, or in the case of text objects, that the object supports non-contiguous text selections. <br />
* ATSPI_STATE_OPAQUE: Indicates this object paints every pixel within its rectangular region. It also indicates an alpha value of unity, if it supports alpha blending. <br />
* ATSPI_STATE_PRESSED: Indicates this object is currently pressed <br />
* ATSPI_STATE_RESIZABLE: Indicates the size of this object's size is not fixed <br />
* ATSPI_STATE_SELECTABLE: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that can be selected. <br />
* ATSPI_STATE_SELECTED: Indicates this object is the child of an object that allows its children to be selected and that this child is one of those children that has been selected. <br />
* ATSPI_STATE_SENSITIVE: Indicates this object is sensitive, e.g. to user interaction. STATE_SENSITIVE usually accompanies STATE_ENABLED for user-actionable controls, but may be found in the absence of STATE_ENABLED if the current visible state of the control is "disconnected" from the application state. In such cases, direct user interaction can often result in the object gaining STATE_SENSITIVE, for instance if a user makes an explicit selection using an object whose current state is ambiguous or undefined. @see STATE_ENABLED, STATE_INDETERMINATE. <br />
* ATSPI_STATE_SHOWING: Indicates this object, the object's parent, the object's parent's parent, and so on, are all 'shown' to the end-user, i.e. subject to "exposure" if blocking or obscuring objects do not interpose between this object and the top of the window stack. <br />
* ATSPI_STATE_SINGLE_LINE: Indicates this (text) object can contain only a single line of text <br />
* ATSPI_STATE_STALE: Indicates that the information returned for this object may no longer be synchronized with the application state. This can occur if the object has STATE_TRANSIENT, and can also occur towards the end of the object peer's lifecycle. <br />
* ATSPI_STATE_TRANSIENT: Indicates this object is transient <br />
* ATSPI_STATE_VERTICAL: Indicates the orientation of this object is vertical; for example this state may appear on such objects as scrollbars, text objects (with vertical text flow), separators, etc. <br />
* ATSPI_STATE_VISIBLE: Indicates this object is visible, e.g. has been explicitly marked for exposure to the user. STATE_VISIBLE is no guarantee that the object is actually unobscured on the screen, only that it is 'potentially' visible, barring obstruction, being scrolled or clipped out of the field of view, or having an ancestor container that has not yet made visible. A widget is potentially onscreen if it has both STATE_VISIBLE and STATE_SHOWING. The absence of STATE_VISIBLE and STATE_SHOWING is semantically equivalent to saying that an object is 'hidden'. <br />
* ATSPI_STATE_MANAGES_DESCENDANTS: Indicates that "active-descendant-changed" event is sent when children become 'active' (i.e. are selected or navigated to onscreen). Used to prevent need to enumerate all children in very large containers, like tables. The presence of STATE_MANAGES_DESCENDANTS is an indication to the client. that the children should not, and need not, be enumerated by the client. Objects implementing this state are expected to provide relevant state notifications to listening clients, for instance notifications of visibility changes and activation of their contained child objects, without the client having previously requested references to those children. <br />
* ATSPI_STATE_INDETERMINATE: Indicates that a check box or other boolean indicator is in a state other than checked or not checked. This usually means that the boolean value reflected or controlled by the object does not apply consistently to the entire current context. For example, a checkbox for the "Bold" attribute of text may have STATE_INDETERMINATE if the currently selected text contains a mixture of weight attributes. In many cases interacting with a STATE_INDETERMINATE object will cause the context's corresponding boolean attribute to be homogenized, whereupon the object will lose STATE_INDETERMINATE and a corresponding state-changed event will be fired. <br />
* ATSPI_STATE_REQUIRED: Indicates that user interaction with this object is 'required' from the user, for instance before completing the processing of a form. <br />
* ATSPI_STATE_TRUNCATED: Indicates that an object's onscreen content is truncated, e.g. a text value in a spreadsheet cell. <br />
* ATSPI_STATE_ANIMATED: Indicates this object's visual representation is dynamic, not static. This state may be applied to an object during an animated 'effect' and be removed from the object once its visual representation becomes static. some applications, notably content viewers, may not be able to detect all kinds of animated content. Therefore the absence of this state should not be taken as definitive evidence that the object's visual representation is static; this state is advisory. <br />
* ATSPI_STATE_INVALID_ENTRY: This object has indicated an error condition due to failure of input validation. For instance, a form control may acquire this state in response to invalid or malformed user input. <br />
* ATSPI_STATE_SUPPORTS_AUTOCOMPLETION: This state indicates that the object in question implements some form of &#168;typeahead&#168; or pre-selection behavior whereby entering the first character of one or more sub-elements causes those elements to scroll into view or become selected. Subsequent character input may narrow the selection further as long as one or more sub-elements match the string. This state is normally only useful and encountered on objects that implement Selection. In some cases the typeahead behavior may result in full or partial &#168;completion&#168; of the data in the input field, in which case these input events may trigger text-changed events from the source. <br />
* ATSPI_STATE_SELECTABLE_TEXT: This state indicates that the object in question supports text selection. It should only be exposed on objects which implement the Text interface, in order to distinguish this state from STATE_SELECTABLE, which infers that the object in question is a selectable child of an object which implements Selection. While similar, text selection and subelement selection are distinct operations. <br />
* ATSPI_STATE_IS_DEFAULT: This state indicates that the object in question is the 'default' interaction object in a dialog, i.e. the one that gets activated if the user presses "Enter" when the dialog is initially posted. <br />
* ATSPI_STATE_VISITED: This state indicates that the object (typically a hyperlink) has already been activated or invoked, with the result that some backing data has been downloaded or rendered. <br />
* ATSPI_STATE_LAST_DEFINED: This value of the enumeration should not be used as a parameter, it indicates the number of items in the StateType enumeration. <br />
<br />
<br />
<br />
Some states are valid for all widgets:<br />
* Visible?<br />
<br />
<br />
----<br />
= Roles =<br />
* ATSPI_ROLE_INVALID: A Role indicating an error condition, such as uninitialized Role data. <br />
* ATSPI_ROLE_ACCELERATOR_LABEL: Object is a label indicating the keyboard accelerators for the parent <br />
* ATSPI_ROLE_ALERT: Object is used to alert the user about something <br />
* ATSPI_ROLE_ANIMATION: Object contains a dynamic or moving image of some kind <br />
* ATSPI_ROLE_ARROW: Object is a 2d directional indicator <br />
* ATSPI_ROLE_CALENDAR: Object contains one or more dates, usually arranged into a 2d list <br />
* ATSPI_ROLE_CANVAS: Object that can be drawn into and is used to trap events <br />
* ATSPI_ROLE_CHECK_BOX: A choice that can be checked or unchecked and provides a separate indicator for the current state. <br />
* ATSPI_ROLE_CHECK_MENU_ITEM: A menu item that behaves like a check box (see ROLE_CHECK_BOX) <br />
* ATSPI_ROLE_COLOR_CHOOSER: A specialized dialog that lets the user choose a color. <br />
* ATSPI_ROLE_COLUMN_HEADER: The header for a column of data <br />
* ATSPI_ROLE_COMBO_BOX: A list of choices the user can select from <br />
* ATSPI_ROLE_DATE_EDITOR: An object which allows entry of a date <br />
* ATSPI_ROLE_DESKTOP_ICON: An inconifed internal frame within a DESKTOP_PANE <br />
* ATSPI_ROLE_DESKTOP_FRAME: A pane that supports internal frames and iconified versions of those internal frames. <br />
* ATSPI_ROLE_DIAL: An object that allows a value to be changed via rotating a visual element, or which displays a value via such a rotating element. <br />
* ATSPI_ROLE_DIALOG: A top level window with title bar and a border <br />
* ATSPI_ROLE_DIRECTORY_PANE: A pane that allows the user to navigate through and select the contents of a directory <br />
* ATSPI_ROLE_DRAWING_AREA: A specialized dialog that displays the files in the directory and lets the user select a file, browse a different directory, or specify a filename. <br />
* ATSPI_ROLE_FILE_CHOOSER: An object used for drawing custom user interface elements. <br />
* ATSPI_ROLE_FILLER: A object that fills up space in a user interface <br />
* ATSPI_ROLE_FOCUS_TRAVERSABLE: Don't use, reserved for future use. <br />
* ATSPI_ROLE_FONT_CHOOSER: Allows selection of a display font <br />
* ATSPI_ROLE_FRAME: A top level window with a title bar, border, menubar, etc. <br />
* ATSPI_ROLE_GLASS_PANE: A pane that is guaranteed to be painted on top of all panes beneath it <br />
* ATSPI_ROLE_HTML_CONTAINER: A document container for HTML, whose children represent the document content. <br />
* ATSPI_ROLE_ICON: A small fixed size picture, typically used to decorate components <br />
* ATSPI_ROLE_IMAGE: An image, typically static. <br />
* ATSPI_ROLE_INTERNAL_FRAME: A frame-like object that is clipped by a desktop pane. <br />
* ATSPI_ROLE_LABEL: An object used to present an icon or short string in an interface <br />
* ATSPI_ROLE_LAYERED_PANE: A specialized pane that allows its children to be drawn in layers, providing a form of stacking order. <br />
* ATSPI_ROLE_LIST: An object that presents a list of objects to the user and allows the user to select one or more of them. <br />
* ATSPI_ROLE_LIST_ITEM: An object that represents an element of a list. <br />
* ATSPI_ROLE_MENU: An object usually found inside a menu bar that contains a list of actions the user can choose from. <br />
* ATSPI_ROLE_MENU_BAR: An object usually drawn at the top of the primary dialog box of an application that contains a list of menus the user can choose from. <br />
* ATSPI_ROLE_MENU_ITEM: An object usually contained in a menu that presents an action the user can choose. <br />
* ATSPI_ROLE_OPTION_PANE: A specialized pane whose primary use is inside a DIALOG <br />
* ATSPI_ROLE_PAGE_TAB: An object that is a child of a page tab list <br />
* ATSPI_ROLE_PAGE_TAB_LIST: An object that presents a series of panels (or page tabs), one at a time, through some mechanism provided by the object. <br />
* ATSPI_ROLE_PANEL: A generic container that is often used to group objects. <br />
* ATSPI_ROLE_PASSWORD_TEXT: A text object uses for passwords, or other places where the text content is not shown visibly to the user. <br />
* ATSPI_ROLE_POPUP_MENU: A temporary window that is usually used to offer the user a list of choices, and then hides when the user selects one of those choices. <br />
* ATSPI_ROLE_PROGRESS_BAR: An object used to indicate how much of a task has been completed. <br />
* ATSPI_ROLE_PUSH_BUTTON: An object the user can manipulate to tell the application to do something. <br />
* ATSPI_ROLE_RADIO_BUTTON: A specialized check box that will cause other radio buttons in the same group to become uncghecked when this one is checked. <br />
* ATSPI_ROLE_RADIO_MENU_ITEM: Object is both a menu item and a "radio button" (see ROLE_RADIO_BUTTON) <br />
* ATSPI_ROLE_ROOT_PANE: A specialized pane that has a glass pane and a layered pane as its children. <br />
* ATSPI_ROLE_ROW_HEADER: The header for a row of data <br />
* ATSPI_ROLE_SCROLL_BAR: An object usually used to allow a user to incrementally view a large amount of data by moving the bounds of a viewport along a one-dimensional axis. <br />
* ATSPI_ROLE_SCROLL_PANE: An object that allows a user to incrementally view a large amount of information. ROLE_SCROLL_PANE objects are usually accompanied by ROLE_SCROLL_BAR controllers, on which the RELATION_CONTROLLER_FOR and RELATION_CONTROLLED_BY reciprocal relations are set; \see Accessibility::RelationSet. <br />
* ATSPI_ROLE_SEPARATOR: An object usually contained in a menu to provide a visible and logical separation of the contents in a menu. <br />
* ATSPI_ROLE_SLIDER: An object that allows the user to select from a bounded range <br />
* ATSPI_ROLE_SPIN_BUTTON: An object which allows one of a set of choices to be selected, and which displays the current choice. Unlike ROLE_SCROLL_BAR, ROLE_SLIDER objects need not control 'viewport'-like objects. <br />
* ATSPI_ROLE_SPLIT_PANE: A specialized panel that presents two other panels at the same time. <br />
* ATSPI_ROLE_STATUS_BAR: Object displays non-quantitative status information (c.f. ROLE_PROGRESS_BAR) <br />
* ATSPI_ROLE_TABLE: An object used to repesent information in terms of rows and columns. <br />
* ATSPI_ROLE_TABLE_CELL: A 'cell' or discrete child within a Table. \note Table cells need not have ROLE_TABLE_CELL, other RoleType values are valid as well. <br />
* ATSPI_ROLE_TABLE_COLUMN_HEADER: An object which labels a particular column in a Table. <br />
* ATSPI_ROLE_TABLE_ROW_HEADER: An object which labels a particular row in a Table. Table rows and columns may also be labelled via the RELATION_LABEL_FOR/RELATION_LABELLED_BY relationships; see Accessibility.RelationSet. <br />
* ATSPI_ROLE_TEAROFF_MENU_ITEM: Object allows menu to be removed from menubar and shown in its own window. <br />
* ATSPI_ROLE_TERMINAL: An object that emulates a terminal <br />
* ATSPI_ROLE_TEXT: An object that presents text to the user, of nonspecific type. <br />
* ATSPI_ROLE_TOGGLE_BUTTON: A specialized push button that can be checked or unchecked, but does not procide a separate indicator for the current state. <br />
* ATSPI_ROLE_TOOL_BAR: A bar or palette usually composed of push buttons or toggle buttons <br />
* ATSPI_ROLE_TOOL_TIP: An object that provides information about another object <br />
* ATSPI_ROLE_TREE: An object used to repsent hierarchical information to the user. <br />
* ATSPI_ROLE_TREE_TABLE: An object that presents both tabular and hierarchical info to the user <br />
* ATSPI_ROLE_UNKNOWN: The object contains some Accessible information, but its role is not known. <br />
* ATSPI_ROLE_VIEWPORT: An object usually used in a scroll pane, or to otherwise clip a larger object or content renderer to a specific onscreen viewport. <br />
* ATSPI_ROLE_WINDOW: A &#168;top level window&#168; with no title or border. <br />
* ATSPI_ROLE_EXTENDED: means that the role for this item is known, but not included in the core enumeration <br />
* ATSPI_ROLE_HEADER: An object that serves as a document header. <br />
* ATSPI_ROLE_FOOTER: An object that serves as a document footer. <br />
* ATSPI_ROLE_PARAGRAPH: An object which is contains a single paragraph of text content. See also ROLE_TEXT. <br />
* ATSPI_ROLE_RULER: An object which describes margins and tab stops, etc. for text objects which it controls (should have CONTROLLER_FOR relation to such). <br />
* ATSPI_ROLE_APPLICATION: An object corresponding to the toplevel accessible of an application, which may contain ROLE_FRAME objects or other accessible objects. Children of AccessibleDesktop objects are generally ROLE_APPLICATION objects. <br />
* ATSPI_ROLE_AUTOCOMPLETE: The object is a dialog or list containing items for insertion into an entry widget, for instance a list of words for completion of a text entry. <br />
* ATSPI_ROLE_EDITBAR: The object is an editable text object in a toolbar. <br />
* ATSPI_ROLE_EMBEDDED: The object is an embedded component container. This role is a "grouping" hint that the contained objects share a context which is different from the container in which this accessible is embedded. In particular, it is used for some kinds of document embedding, and for embedding of out-of-process component, "panel applets", etc. <br />
* ATSPI_ROLE_ENTRY: The object is a component whose textual content may be entered or modified by the user, provided STATE_EDITABLE is present. A readonly ROLE_ENTRY object (i.e. where STATE_EDITABLE is not present) implies a read-only 'text field' in a form, as opposed to a title, label, or caption. <br />
* ATSPI_ROLE_CHART: The object is a graphical depiction of quantitative data. It may contain multiple subelements whose attributes and/or description may be queried to obtain both the quantitative data and information about how the data is being presented. The LABELLED_BY relation is particularly important in interpreting objects of this type, as is the accessible-description property. See ROLE_CAPTION <br />
* ATSPI_ROLE_CAPTION: The object contains descriptive information, usually textual, about another user interface element such as a table, chart, or image. <br />
* ATSPI_ROLE_DOCUMENT_FRAME: The object is a visual frame or container which contains a view of document content. Document frames may occur within another Document instance, in which case the second document may be said to be embedded in the containing instance. HTML frames are often ROLE_DOCUMENT_FRAME. Either this object, or a singleton descendant, should implement the Document interface. <br />
* ATSPI_ROLE_HEADING: The object serves as a heading for content which follows it in a document. The 'heading level' of the heading, if availabe, may be obtained by querying the object's attributes. <br />
* ATSPI_ROLE_PAGE: The object is a containing instance which encapsulates a page of information. ROLE_PAGE is used in documents and content which support a paginated navigation model. <br />
* ATSPI_ROLE_SECTION: The object is a containing instance of document content which constitutes a particular 'logical' section of the document. The type of content within a section, and the nature of the section division itself, may be obtained by querying the object's attributes. Sections may be nested. <br />
* ATSPI_ROLE_REDUNDANT_OBJECT: The object is redundant with another object in the hierarchy, and is exposed for purely technical reasons. Objects of this role should be ignored by clients, if they are encountered at all. <br />
* ATSPI_ROLE_FORM: The object is a containing instance of document content which has within it components with which the user can interact in order to input information; i.e. the object is a container for pushbuttons, comboboxes, text input fields, and other 'GUI' components. ROLE_FORM should not, in general, be used for toplevel GUI containers or dialogs, but should be reserved for 'GUI' containers which occur within document content, for instance within Web documents, presentations, or text documents. Unlike other GUI containers and dialogs which occur inside application instances, ROLE_FORM containers' components are associated with the current document, rather than the current foreground application or viewer instance. <br />
* ATSPI_ROLE_LINK: The object is a hypertext anchor, i.e. a "link" in a hypertext document. Such objects are distinct from 'inline' content which may also use the Hypertext/Hyperlink interfaces to indicate the range/location within a text object where an inline or embedded object lies. <br />
* ATSPI_ROLE_INPUT_METHOD_WINDOW: The object is a window or similar viewport which is used to allow composition or input of a 'complex character', in other words it is an "input method window." <br />
* ATSPI_ROLE_LAST_DEFINED: Not a valid role, used for finding end of enumeration. <br />
----<br />
<br />
= Events =<br />
== Focus ==<br />
One of the most important events is the focus change.<br />
FIXME document here what needs to happen when focus changes.<br />
<br />
----<br />
<br />
= Objects and their Properties =<br />
<br />
* Add AtkObject, AtkRoles, Names, Descriptions and the like<br />
* Talk about when to include versus when to omit or "fold in" (e.g. button whose child is a label, filler, etc.)<br />
<br />
''Matthias: I would really like to get some clarification about signals, when to emit them, what their expected semantics are, etc. E.g: do I emit 'visible-data-changed' when a label gains a mnemonic underline ?''<br />
----<br />
<br />
= Interfaces =<br />
''Note from JD: For now, I'm including the Documentation along with a Do's and Don'ts. Those ultimately might need to be merged. For now, having them both makes it more obvious to me what we should be questioning, docs we might need to go back and update, etc., etc.''<br />
<br />
Most accessible objects are expected to implement a variety of interfaces based on the purpose served by the backing toolkit widget, along with the ways users can interact with that widget.<br />
<br />
== AtkAction ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should be implemented by instances of AtkObject classes with which the user can interact directly, i.e. buttons, checkboxes, scrollbars, e.g. components which are not "passive" providers of UI information.<br />
<br />
Exceptions: when the user interaction is already covered by another appropriate interface such as AtkEditableText (insert/delete test, etc.) or AtkValue (set value) then these actions should not be exposed by [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] as well.<br />
<br />
Also note that the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] API is limited in that parameters may not be passed to the object being activated; thus the action must be self-contained and specifiable via only a single "verb". Concrete examples include "press", "release", "click" for buttons, "drag" (meaning initiate drag) and "drop" for drag sources and drop targets, etc.<br />
<br />
Though most UI interactions on components should be invocable via keyboard as well as mouse, there will generally be a close mapping between "mouse actions" that are possible on a component and the [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkActions]]. Where mouse and keyboard actions are redundant in effect, [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] should expose only one action rather than exposing redundant actions if possible. By convention we have been using "mouse centric" terminology for [[http://developer.gnome.org/atk/unstable/AtkAction.html|AtkAction]] names.<br />
<br />
''Note from Matthias: Should point out here that actions have keybindings associated with them. What are those good for, anyway ?''<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
* TODO: There was some discussion in #a11y with Benjamin and Joanie regarding the 'exception' above. We need to decide if it is good to have this "It's an AtkAction unless it happens to be an interface and then, well, it's not" situation. Surely that is confusing to implementors. Should Actiony things always be actions?<br />
* TODO: The verdict on press/release versus just click for buttons is still out.<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkComponent ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] should be implemented by most if not all UI elements with an actual on-screen presence, i.e. components which can be said to have a screen-coordinate bounding box. Virtually all widgets will need to have [[http://developer.gnome.org/atk/unstable/AtkComponent.html|AtkComponent]] implementations provided for their corresponding AtkObject class. In short, only UI elements which are *not* GUI elements will omit this ATK interface.<br />
<br />
A possible exception might be textual information with a transparent background, in which case text glyph bounding box information is provided by [[http://developer.gnome.org/atk/unstable/AtkTextt.html|AtkText]].<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkDocument ==<br />
=== Description from the Documentation ===<br />
The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should be supported by any object whose content is a representation or view of a document. The [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] interface should appear on the toplevel container for the document content; however [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] instances may be nested (i.e. an [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]] may be a descendant of another [[http://developer.gnome.org/atk/unstable/AtkDocument.html|AtkDocument]]) in those cases where one document contains "embedded content" which can reasonably be considered a document in its own right.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkHypertext and AtkHyperlinkImpl ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkHypertext.html|AtkHypertext]] is an interface used for objects which implement linking between multiple resource or content locations, or multiple 'markers' within a single document. A Hypertext instance is associated with one or more Hyperlinks, which are associated with particular offsets within the Hypertext's included content. While this interface is derived from Text, there is no requirement that Hypertext instances have textual content; they may implement Image as well, and Hyperlinks need not have non-zero text offsets.<br />
<br />
[[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] allows AtkObjects to refer to their associated AtkHyperlink instance, if one exists. [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] differs from AtkHyperlink in that [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] is an interface, whereas AtkHyperlink is a object type. The [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]] interface allows a client to query an AtkObject for the availability of an associated AtkHyperlink instance, and obtain that instance. It is thus particularly useful in cases where embedded content or inline content within a text object is present, since the embedding text object implements [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]] and the inline/embedded objects are exposed as children which implement [[http://developer.gnome.org/atk/unstable/atk-AtkHyperlinkImpl.html|AtkHyperlinkImpl]], in addition to their being obtainable via [[http://developer.gnome.org/atk/unsHypertext/AtkHypertext.html|AtkHypertext]]:getLink followed by AtkHyperlink:getObject.<br />
<br />
=== How Assistive Technologies Use These Interfaces ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
<br />
''Matthias: I have used the hyperlink classes in the accessible implementation for GtkLinkButton, and I'd love to know if my implementation is using these classes as intended.''<br />
<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkImage ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] should be implemented by AtkObject subtypes on behalf of components which display image/pixmap information onscreen, and which provide information (other than just widget borders, etc.) via that image content. For instance, icons, buttons with icons, toolbar elements, and image viewing panes typically should implement [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]].<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]] primarily provides two types of information: coordinate information (useful for screen review mode of screenreaders, and for use by onscreen magnifiers), and descriptive information. The descriptive information is provided for alternative, text-only presentation of the most significant information present in the image.<br />
<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkSelection ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] should be implemented by UI components with children which are exposed by atk_object_ref_child and atk_object_get_n_children, if the use of the parent UI component ordinarily involves selection of one or more of the objects corresponding to those AtkObject children - for example, selectable lists.<br />
<br />
Note that other types of "selection" (for instance text selection) are accomplished a other ATK interfaces - [[http://developer.gnome.org/atk/unstable/AtkSelection.html|AtkSelection]] is limited to the selection/deselection of children.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkTable ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] should be implemented by components which present elements ordered via rows and columns. It may also be used to present tree-structured information if the nodes of the trees can be said to contain multiple "columns". Individual elements of an [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are typically referred to as "cells", and these cells are exposed by [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] as child AtkObjects of the [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]]. Both row/column and child-index-based access to these children is provided.<br />
<br />
Children of [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] are frequently "lightweight" objects, that is, they may not have backing widgets in the host UI toolkit. They are therefore often transient.<br />
<br />
Since tables are often very complex, [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] includes provision for offering simplified summary information, as well as row and column headers and captions. Headers and captions are AtkObjects which may implement other interfaces ([[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], [[http://developer.gnome.org/atk/unstable/AtkImage.html|AtkImage]], etc.) as appropriate. [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]] summaries may themselves be (simplified) [[http://developer.gnome.org/atk/unstable/AtkTable.html|AtkTable]], etc.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkText ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] should be implemented by AtkObjects on behalf of widgets that have text content which is either attributed or otherwise non-trivial. AtkObjects whose text content is simple, unattributed, and very brief may expose that content via atk_object_get_name instead; however if the text is editable, multi-line, typically longer than three or four words, attributed, selectable, or if the object already uses the 'name' ATK property for other information, the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface should be used to expose the text content. In the case of editable text content, AtkEditableText (a subtype of the [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] interface) should be implemented instead.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] provides not only traversal facilities and change notification for text content, but also caret tracking and glyph bounding box calculations. Note that the text strings are exposed as UTF-8, and are therefore potentially multi-byte, and caret-to-byte offset mapping makes no assumptions about the character length; also bounding box glyph-to-offset mapping may be complex for languages which use ligatures.<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] should be implemented by UI components which contain text which the user can edit, via the AtkObject corresponding to that component (see AtkObject).<br />
<br />
[[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is a subclass of [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]], and as such, an object which implements [[http://developer.gnome.org/atk/unstable/AtkEditableText.html|AtkEditableText]] is by definition an [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] implementor as well.<br />
=== How Assistive Technologies Use These Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
As a general rule, only implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for widgets which:<br />
* Are text the user can interact with by doing things such as: arrowing amongst characters, selecting, copying, etc., OR<br />
* Present a substantial message and/or have significant, important-to-convey formatting attributes<br />
Thus you DO want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* Documents and any other place the text contents can be changed by the user.<br />
* Labels serving as static text (e.g. in a message box).<br />
You do NOT want to implement [[http://developer.gnome.org/atk/unstable/AtkText.html|AtkText]] for:<br />
* The displayed text/label of buttons (instead set the AtkObject's name to reflect the text)<br />
* The displayed/functional value of widgets implementing AtkValue (instead set the AtkObject's description to reflect the text)<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
== AtkValue ==<br />
=== Description from the Documentation ===<br />
[[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] should be implemented for components which either display a value from a bounded range, or which allow the user to specify a value from a bounded range, or both. For instance, most sliders and range controls, as well as dials, should have AtkObject representations which implement [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValue]] on the component's behalf. [[http://developer.gnome.org/atk/unstable/AtkValue.html|AtkValues]] may be read-only, in which case attempts to alter the value return FALSE to indicate failure.<br />
=== How Assistive Technologies Use This Interface ===<br />
* Write me<br />
=== Do's and Don'ts ===<br />
* Write me<br />
=== Implementations in the Wild ===<br />
* Write me<br />
=== Related Bugs/ATK 3 Changes ===<br />
* Write me<br />
<br />
----<br />
<br />
= Relations =<br />
<br />
Add the AtkRelation types here<br />
<br />
----<br />
<br />
<br />
<br />
= Widgets =<br />
Two main properties of widgets are Name and Description.<br />
The name reflects the primary text for the widget: The text of a label, the text on a button.<br />
The description gives additional information: A button labeled "OK" could have the description "Accepts the dialog". FIXME more sensible example?<br />
<br />
== Label ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Button ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Line Edit ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== List ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Table ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
<br />
== Tree ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Menu ==<br />
This is the menu bar of an application - File, Edit etc.<br />
<br />
* '''menu bar'''<br />
* '''menu*'''<br />
* '''menu*''' can contain more menu and menu item<br />
* '''menu item*'''<br />
<br />
There is one '''menu bar''' as root element, it has any number of '''menu''' as children.<br />
'''menu''' can have '''menu''' and '''menu item''' as children.<br />
'''menu item''' does not have children.<br />
<br />
<br />
<br />
== List ==<br />
* '''list'''<br />
* '''list item*'''<br />
<br />
A list has only one column. It contains items.<br />
<br />
<br />
== Table ==<br />
<br />
current state in gtk: it would be difficult to provide row objects<br />
<br />
* '''table'''<br />
* '''table column header'''<br />
* '''table cell''' sometimes gtk has image+text in one cell. it represents that as two child objects of type '''table cell'''<br />
<br />
Web: firefox usually has rows, but sometimes it can happen that rows are not present (like html role presentation or css hidden)<br />
<br />
* '''table'''<br />
* '''table row''' the first row only contains headers<br />
* '''table row header''' once for the top-left header<br />
* '''table column header*''' as many as columns<br />
* '''table row*''' <br />
* '''table row header[0-1]''' for the left header<br />
* '''table cell*''' as many as columns, can be less if cell-span > 1 <br />
should headers be mandatory? should it be '''table header row''' for the first row?<br />
<br />
IA2: all cells are children of the table object. there are no row objects. like gtk.<br />
<br />
<br />
One big concern was notifications about selection changes. It would be great to get notified for things such as row selected. There are two ways to tackle this:<br />
in the first approach (gtk) we could define a signal: rows-selected() and rows-deselected or somesuch<br />
in the second approach with rows, the row object could be sent as selected. this has the downside that there is no way to do the same for columns. it is less flexible.<br />
IA2 has functions to get selected rows/columns<br />
<br />
<br />
== Trees ==<br />
The reason for the variety of trees that are possible is mostly that ARIA has very flexible tree definitions. The web implementators will simply expose that.<br />
<br />
<br />
Tree has exactly one column. For trees with more than one column the '''tree table''' has to be used.<br />
<br />
Tree items can contain a grouping element. In the grouping element it can have other items.<br />
<br />
=== Tree 1: define hierarchy through relations and group positions ===<br />
* '''tree'''<br />
* '''tree item''' with relations and group positions that define hierarchy<br />
* '''tree item'''<br />
* ...<br />
<br />
This tree works with add/remove tree items when they get expanded/collapsed.<br />
<br />
=== Tree 2: real hierarchy ===<br />
The items are arranged as children.<br />
<br />
* '''tree'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item*'''<br />
<br />
<br />
* '''tree'''<br />
* '''tree item group'''<br />
* '''tree item*''' with parent child relations to describe hierarchy<br />
* '''tree item group'''<br />
* '''tree item*'''<br />
<br />
No need for add/remove for expanding/collapsing of sub items.<br />
<br />
<br />
=== Tree 3: Tree Table ===<br />
Tree tables can not be hierarchical.<br />
'''tree table''' can have more than one column<br />
<br />
* '''tree table''' <br />
* '''tree table cell*'''<br />
<br />
* '''tree table'''<br />
* '''tree table row*'''<br />
* '''tree table cell*'''<br />
<br />
<br />
== Scroll Bars ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Combo Box ==<br />
* ATSPI_ROLE_COMBO_BOX is the root element<br />
* ATSPI_ROLE_TABLE see table. Usually this is a flat list of items.<br />
* ATSPI_ROLE_TEXT [optional] is present when the combo box is editable.<br />
<br />
The Accessible Name of the '''combo box''' accessible is the current text that is displayed. This text can be typed by the user or one of the selected items.<br />
<br />
'''States''': Focused, Editable<br />
<br />
'''Events''': Focus<br />
<br />
'''Interfaces''': None required<br />
<br />
The name of the ATSPI_ROLE_COMBO_BOX should always reflect the current text.<br />
FIXME: what should combo box send when the current item/text changed?<br />
<br />
<br />
== Foo Bar Template ==<br />
<br />
Structure of Accessibles and their roles.<br />
<br />
'''States''': <br />
<br />
'''Events''': <br />
<br />
'''Interfaces''': <br />
<br />
== Stuff we Mustn't Forget ==<br />
(But are not sure where all to put it yet.)<br />
<br />
* "Hint text" - Gtk+ has it as an AtkObject attribute ('placeholder-text').<br />
* Window management stuff - what happens when a window gains focus etc<br />
* Registry - give an overview what it is, why and how clients and servers register to it.]\<br />
* Relations <br />
* make sure to mention them with the widgets that most likely need them (labelled-by for line edit)<br />
* document what they are in general</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Plasma4/QML/GettingStarted&diff=57797Development/Tutorials/Plasma4/QML/GettingStarted2011-03-11T10:54:35Z<p>Frederik.gladhorn: /* qmlviewer */</p>
<hr />
<div>== Abstract ==<br />
<br />
Writing a plasma applet in QML is very easy, in fact, with KDE 4.6 and Qt 4.7 it just works.<br />
<br />
== Package Structure ==<br />
<br />
You create a .desktop file and the .qml file. They have to be in the usual plasma package structure.<br />
<br />
plasmoid-qml/metadata.desktop<br />
plasmoid-qml/contents/qml/main.qml<br />
<br />
=== <tt>metadata.desktop</tt> ===<br />
<code ini><br />
[Desktop Entry]<br />
Name=Hello QML<br />
Comment=A hello world widget in QML<br />
Icon=chronometer<br />
<br />
X-Plasma-API=declarativeappletscript<br />
X-Plasma-MainScript=qml/main.qml<br />
X-Plasma-DefaultSize=200,100<br />
<br />
X-KDE-PluginInfo-Author=Frederik Gladhorn<br />
X-KDE-PluginInfo-Email=gladhorn@kde.org<br />
X-KDE-PluginInfo-Website=http://plasma.kde.org/<br />
X-KDE-PluginInfo-Category=Examples<br />
X-KDE-PluginInfo-Name=org.kde.hello-qml<br />
X-KDE-PluginInfo-Version=0.0<br />
<br />
X-KDE-PluginInfo-Depends=<br />
X-KDE-PluginInfo-License=GPL<br />
X-KDE-PluginInfo-EnabledByDefault=true<br />
X-KDE-ServiceTypes=Plasma/Applet<br />
Type=Service<br />
</code><br />
<br />
=== <tt>main.qml</tt> ===<br />
<code javascript><br />
import Qt 4.7<br />
<br />
Text {<br />
text: "Hello world!";<br />
}<br />
</code><br />
<br />
<br />
== Installing ==<br />
You can install your plasmoid:<br />
plasmapkg --install plasmoid-qml<br />
<br />
== plasmoidviewer ==<br />
You can run it in plasmoidviewer as usual:<br />
plasmoidviewer plasmoid-qml<br />
<br />
== qmlviewer ==<br />
And you can run it in qmlviewer:<br />
qmlviewer -I /usr/lib/kde4/imports/ plasmoid-qml/contents/qml/main.qml <br />
<br />
Where the -I is the path to the plasma plugin for qml. Try to look for the path of <br />
/usr/lib/kde4/imports/org/kde/plasma/graphicswidgets/libgraphicswidgetsbindingsplugin.so<br />
and use everything up to org of that path.<br />
<br />
== Plasma Widgets in QML ==<br />
To use plasma widgets, you simply add an import line for them.<br />
<br />
<code javascript><br />
import Qt 4.7<br />
import org.kde.plasma.graphicswidgets 0.1 as PlasmaWidgets<br />
<br />
Item {<br />
width: 64<br />
height: 64<br />
PlasmaWidgets.IconWidget {<br />
id: icon<br />
Component.onCompleted: setIcon("flag-red")<br />
anchors.centerIn: parent<br />
}<br />
}<br />
</code></div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Plasma4/QML/GettingStarted&diff=57796Development/Tutorials/Plasma4/QML/GettingStarted2011-03-11T10:47:36Z<p>Frederik.gladhorn: </p>
<hr />
<div>== Abstract ==<br />
<br />
Writing a plasma applet in QML is very easy, in fact, with KDE 4.6 and Qt 4.7 it just works.<br />
<br />
== Package Structure ==<br />
<br />
You create a .desktop file and the .qml file. They have to be in the usual plasma package structure.<br />
<br />
plasmoid-qml/metadata.desktop<br />
plasmoid-qml/contents/qml/main.qml<br />
<br />
=== <tt>metadata.desktop</tt> ===<br />
<code ini><br />
[Desktop Entry]<br />
Name=Hello QML<br />
Comment=A hello world widget in QML<br />
Icon=chronometer<br />
<br />
X-Plasma-API=declarativeappletscript<br />
X-Plasma-MainScript=qml/main.qml<br />
X-Plasma-DefaultSize=200,100<br />
<br />
X-KDE-PluginInfo-Author=Frederik Gladhorn<br />
X-KDE-PluginInfo-Email=gladhorn@kde.org<br />
X-KDE-PluginInfo-Website=http://plasma.kde.org/<br />
X-KDE-PluginInfo-Category=Examples<br />
X-KDE-PluginInfo-Name=org.kde.hello-qml<br />
X-KDE-PluginInfo-Version=0.0<br />
<br />
X-KDE-PluginInfo-Depends=<br />
X-KDE-PluginInfo-License=GPL<br />
X-KDE-PluginInfo-EnabledByDefault=true<br />
X-KDE-ServiceTypes=Plasma/Applet<br />
Type=Service<br />
</code><br />
<br />
=== <tt>main.qml</tt> ===<br />
<code javascript><br />
import Qt 4.7<br />
<br />
Text {<br />
text: "Hello world!";<br />
}<br />
</code><br />
<br />
<br />
== Installing ==<br />
You can install your plasmoid:<br />
plasmapkg --install plasmoid-qml<br />
<br />
== plasmoidviewer ==<br />
You can run it in plasmoidviewer as usual:<br />
plasmoidviewer plasmoid-qml<br />
<br />
== qmlviewer ==<br />
And you can run it in qmlviewer:<br />
qmlviewer -I /usr/lib/kde4/imports/ plasmoid-qml/contents/qml/main.qml <br />
<br />
Where the -I is the path to the plasma plugin for qml. Try to look for the path of <br />
/usr/lib/kde4/imports/org/kde/plasma/graphicswidgets/libgraphicswidgetsbindingsplugin.so<br />
and use everything up to org of that path.</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Plasma4/QML/GettingStarted&diff=57795Development/Tutorials/Plasma4/QML/GettingStarted2011-03-11T10:43:32Z<p>Frederik.gladhorn: Created page with '== Abstract == Writing a plasma applet in QML is very easy, in fact, with KDE 4.6 and Qt 4.7 it just works. == Package Structure == You create a .desktop file and the .qml fil...'</p>
<hr />
<div>== Abstract ==<br />
<br />
Writing a plasma applet in QML is very easy, in fact, with KDE 4.6 and Qt 4.7 it just works.<br />
<br />
== Package Structure ==<br />
<br />
You create a .desktop file and the .qml file. They have to be in the usual plasma package structure.<br />
<br />
plasmoid-qml/metadata.desktop<br />
plasmoid-qml/contents/qml/main.qml<br />
<br />
=== <tt>metadata.desktop</tt> ===<br />
<code ini><br />
[Desktop Entry]<br />
Name=Hello QML<br />
Comment=A hello world widget in QML<br />
Icon=chronometer<br />
<br />
X-Plasma-API=declarativeappletscript<br />
X-Plasma-MainScript=qml/main.qml<br />
X-Plasma-DefaultSize=200,100<br />
<br />
X-KDE-PluginInfo-Author=Frederik Gladhorn<br />
X-KDE-PluginInfo-Email=gladhorn@kde.org<br />
X-KDE-PluginInfo-Website=http://plasma.kde.org/<br />
X-KDE-PluginInfo-Category=Examples<br />
X-KDE-PluginInfo-Name=org.kde.hello-qml<br />
X-KDE-PluginInfo-Version=0.0<br />
<br />
X-KDE-PluginInfo-Depends=<br />
X-KDE-PluginInfo-License=GPL<br />
X-KDE-PluginInfo-EnabledByDefault=true<br />
X-KDE-ServiceTypes=Plasma/Applet<br />
Type=Service<br />
</code><br />
<br />
=== <tt>main.qml</tt> ===<br />
<code qml><br />
import Qt 4.7<br />
<br />
Text {<br />
text: "Hello world!";<br />
}<br />
<code><br />
<br />
<br />
== Installing ==<br />
You can install your plasmoid:<br />
plasmapkg --install plasmoid-qml<br />
<br />
== plasmoidviewer ==<br />
You can run it in plasmoidviewer as usual:<br />
plasmoidviewer plasmoid-qml<br />
<br />
== qmlviewer ==<br />
And you can run it in qmlviewer:<br />
qmlviewer -I /usr/lib/kde4/imports/ plasmoid-qml/contents/qml/main.qml <br />
<br />
Where the -I is the path to the plasma plugin for qml. Try to look for the path of <br />
/usr/lib/kde4/imports/org/kde/plasma/graphicswidgets/libgraphicswidgetsbindingsplugin.so<br />
and use everything up to org of that path.</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Plasma4&diff=57794Development/Tutorials/Plasma42011-03-11T10:32:37Z<p>Frederik.gladhorn: /* Plasma Programming with Web Technologies (HTML/JS/CSS etc) */</p>
<hr />
<div>{{Template:I18n/Language Navigation Bar|Development/Tutorials/Plasma}}<br />
<br />
== Plasma Programming with C++ ==<br />
<br />
;[[Development/Tutorials/Plasma/GettingStarted|Getting Started With Plasmoids]]<br />
:''Creating your first plasmoid in C++ with SVG background, icon and text''<br />
<br />
;[[Development/Tutorials/Plasma/GettingStarted..Some_More|Getting Started With Plasmoids..Some more]] :''A few more starter's tips.''<br />
<br />
;[[Development/Tutorials/Plasma/DataEngines|Writing a DataEngine]]<br />
:''DataEngines provide a standardized interface to various (read only) data sources for visualizations to use. Learn what a DataEngine is and how to write one of your own.''<br />
<br />
;[[Development/Tutorials/Plasma/Services|Writing a Service]]<br />
:''Services provide a standardized interface for visualizations to perform "write operations". This can be for example, uploading pasted test to a pastebin service..''<br />
<br />
;[[Development/Tutorials/Plasma/UsingExtenders|How to use extenders in your Plasmoid]]<br />
:''A simple example that shows how to use extenders in a Plasmoid.''<br />
<br />
;[[Development/Tutorials/Plasma/AbstractRunner|Creating Runners]]<br />
:''Runners are plugins that provide action-based search functionality in the Plasma workspace "run command" dialog. These plugins can be used by any application that links again libplasma.''<br />
<br />
;[[Development/Tutorials/Plasma/WallpaperHelloWorld|Wallpaper Tutorial 1]]<br />
:''This tutorial shows you how to make a simple Hello World plasma wallpaper plugin.''<br />
<br />
;[[Development/Tutorials/Plasma/WallpaperConfiguration|Wallpaper Tutorial 2]]<br />
:''This tutorial covers how to add configuration options to the wallpaper.''<br />
<br />
;[[Development/Tutorials/Plasma/ShellDesign|Creating a Plasma Shell]]<br />
:''This tutorial covers the essentials of writing a new Plasma shell from scratch. A must-read for anyone creating a new or modifying an existing Plasma Shell. Existing Plasma shells include Plasma Desktop, Plasma Netbook, Plasma Mobile, Plasma Media Center, Plasma Screensaver, Plasma KPart and Plasma KDM, and all follow the patterns documented here.''<br />
<br />
;[http://www.linux-magazine.com/w3/issue/114/036-040_plasma.pdf Creating Plasmoids]<br />
:''May 2010 article from Linux Magazine''<br />
<br />
;[http://www.ibm.com/developerworks/linux/library/l-kde-plasmoids/index.html Create Plasmoids using KDevelop]<br />
:''Article explaining the structure of Plasma and how to create a Plasmoid''<br />
<br />
;[http://community.kde.org/User:Mxttie#Adding_configuration Adding configuration to your plasmoid]<br />
:''Article explaining how to add a configuration dialog to your plasmoid.''<br />
<br />
;[[Development/Tutorials/Plasma/ApplicationShell|Integrate Plasma in Applications]]<br />
:''This tutorial shows you how to make an application dashboard based on Plasma technologies.''<br />
<br />
== Plasma Programming with JavaScript ==<br />
<br />
Plasma has built-in JavaScript (also known as ECMAScript, and often referred to as QtScript in the context of Qt) scripting support without requiring any external dependencies.<br />
<br />
=== Plasmoids ===<br />
<br />
;[[Development/Tutorials/Plasma/JavaScript/GettingStarted|Getting Started]]<br />
:''Creating and running your first plasmoid in JavaScript''<br />
<br />
;[[Development/Tutorials/Plasma/JavaScript/DataEngine|Getting Data]]<br />
:''How to retreive data from a data engine''<br />
<br />
;[[Development/Tutorials/Plasma/JavaScript/NowPlaying|Now Playing]]<br />
:''Slightly more advanced data engine usage: displaying what's currently playing''<br />
<br />
;[[Development/Tutorials/Plasma/JavaScript/SystemMonitor|System Monitor]]<br />
:''How to access systemmonitor data engine''<br />
<br />
;[[Development/Tutorials/Plasma/JavaScript/CheatSheet|Cheat Sheet]]<br />
:''A cheat sheet, rather than a tutorial, of things to remember and watch out for when developing JavaScript plasmoids''<br />
<br />
;[[Development/Tutorials/Plasma/JavaScript/API|API Reference]]<br />
:''The Simplified JavaScript Plasmoid API. Useful for referencing what is available in the runtime and as a study aid for the tutorials above.''<br />
<br />
=== Other Applications Of Javascript ===<br />
;[[KDE_System_Administration/PlasmaDestkopScripting|Scripting Plasma Shells]]<br />
:The KDE Plasma Desktop and Netbook provide means to manage the desktop shell (desktop, panels, widget) via scripts written in JavaScript. This article describes how to take advantage of this feature set as well as documents the full API. This is primarily a system administration tool, but may also be of interest to power users.<br />
<br />
;[[Development/Tutorials/Plasma/JavaScript/Animations|Javascript Animations]]<br />
:''How to write Animations using Javascript for use in Plasma applications''<br />
<br />
;[[Development/Tutorials/Plasma/ComicPlugin|Creating Comic Plugins]]<br />
:''This guide shows you how to create a comic plugin for the comic plasmoid.''<br />
<br />
== Plasma Programming with Python ==<br />
<br />
;[[Development/Tutorials/Plasma/Python/GettingStarted|Getting Started]]<br />
:''Creating and running your first plasmoid in Python''<br />
<br />
;[[Development/Tutorials/Plasma/Python/Using widgets|Using widgets]]<br />
:''Introduction to using Plasma widgets''<br />
<br />
;[[Development/Tutorials/Plasma/Python/Using DataEngines|Using DataEngines]]<br />
:''How to use DataEngines from a plasmoid''<br />
<br />
;[[Development/Tutorials/Plasma/Python/Writing DataEngines|Writing DataEngines]]<br />
:''How to write your own Plasma DataEngine''<br />
<br />
;[[Development/Tutorials/Plasma/PythonPlasmoid|Writing a Plasmoid in Python]]<br />
:''Writing a simple battery graph in python''<br />
<br />
== Plasma Programming with Ruby ==<br />
;[[Development/Tutorials/Plasma/Ruby/GettingStarted|Getting Started]]<br />
:''Creating and running your first plasmoid in Ruby''<br />
<br />
;[[Development/Tutorials/Plasma/Ruby/Using widgets|Using widgets]]<br />
:''Introduction to using Plasma widgets''<br />
<br />
;[[Development/Tutorials/Plasma/Ruby/SimplePasteApplet|Writing a simple paste applet]]<br />
:''A tutorial explaining how to set up a plasmoid, create a simple paste applet using widgets and add Plasma features seen elsewhere. Complete with tips for those who have never programmed before.''<br />
<br />
;[[Development/Tutorials/Plasma/Ruby/Writing DataEngines|Writing DataEngines]]<br />
:''How to write your own Plasma DataEngine using Ruby''<br />
<br />
;[[Development/Tutorials/Plasma/Ruby/Blinker|Use SVG artwork in the simplest way possible]]<br />
:''Follow a fellow student as he asks around about SVG usage and explains why the code examples work. This is a wiki so feel free to add your own insights until this tutorial can be considered complete.''<br />
<br />
== Plasma Programming with Web Technologies (HTML/JS/CSS etc) ==<br />
;[[Development/Tutorials/Plasma/Web/GettingStarted|Getting Started]]<br />
:''Creating and running your first plasmoid in HTML''<br />
<br />
<br />
== Plasma Programming with Qt Quick (QML) ==<br />
;[[Development/Tutorials/Plasma/QML/GettingStarted|Getting Started]]<br />
:''Creating and running your first plasmoid with Qt Quick/QML''<br />
<br />
== Plasma integration ==<br />
<br />
;[[Development/Tutorials/Solid_Device_Actions|Creating a Device Notifier action]]<br />
:''When your application is interested in removable hardware''<br />
<br />
== Theme development ==<br />
<br />
;[[Development/Tutorials/Plasma/Theme|Creating a Plasma Theme Quickstart]]<br />
:''A quick guide to creating your first Plasma theme''<br />
<br />
;[[Development/Tutorials/Plasma/ThemeDetails|The Plasma Theme Structure In Detail]]<br />
:''A comprehensive guide to the contents of a Plasma SVG theme, including configuration options, wallpapers, on-disk layout, names of all standard SVG files and every element in them.''<br />
<br />
== Resources ==<br />
<br />
* [[Projects/Plasma|Projects: Plasma]]<br />
* [http://api.kde.org/4.x-api/kdelibs-apidocs/plasma/html/index.html Plasma api documentation]<br />
* [http://techbase.kde.org/Projects/Plasma/Eclipse_Integration Plasma Eclipse Integration]<br />
* The [https://mail.kde.org/mailman/listinfo/plasma-devel plasma-devel mailing list] and #plasma on IRC (irc.freenode.org).<br />
<br />
== Presentation Slides==<br />
http://chani.wordpress.com/2009/04/25/quick-update-for-my-presentation/ Victory Calendar -- also link to websvn plasma playground in the odp file.</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Accessibility&diff=56963Development/Tutorials/Accessibility2011-02-07T14:38:55Z<p>Frederik.gladhorn: /* How to test at-spi2 with gtk */</p>
<hr />
<div>== QAccessible ==<br />
<br />
[http://doc.qt.nokia.com/4.7/accessible.html QAccessible] is the Qt Accessible framework. Each Qt/KDE application supports QAccessible out of the box.<br />
<br />
You need to call "export QT_ACCESSIBILITY=1" before you start the application that should be made accessible. Once the application is started it will load all installed accessibility-plugins (such as the Qt AT-SPI and KAccessible plugins) to provide accessibility-services.<br />
<br />
== Qt AT-SPI ==<br />
<br />
[http://gitorious.org/qt-at-spi qt-at-spi] is a QAccessibleBridgePlugin that bridges the QAccessible API’s to the AT-SPI 2 protocol enabling Qt applications to be used with Orca, Accerciser, and GOK.<br />
<br />
For a brief overview of how atk/at-spi accessibility works on linux platforms, take a look at [http://a11y.org/atspi http://a11y.org/atspi].<br />
<br />
=== Setup a test environment ===<br />
In order to set up a test environment to help improve qt-at-spi (or at-spi itself) You'll need a few things. Orca can be installed from your distribution, as can accerciser, however accerciser will need to be run in a particular way to work with at-spi2 as I'll mention later. You'll also need at-spi2-core and at-spi2-atk to test gtk applications. You'll also need pyatspi2. The simplest way to get these is to clone them from the following git urls:<br />
<br />
git://git.gnome.org/at-spi2-core<br />
git://git.gnome.org/at-spi2-atk<br />
git://git.gnome.org/pyatspi2<br />
<br />
Then proceed to build them by running <br />
<br />
./autogen.sh --disable-relocate<br />
make<br />
make install <br />
(or sudo make install if your user doesn't have write privileges to /usr/local)<br />
<br />
=== How to test at-spi2 with gtk ===<br />
Once these are installed, you can then test at-spi2 by running gcalctool with a few environment variables set. As mentioned on the [http://a11y.org/dbus at-spi dbus site] under "Instructions for Testing" you'll need some environment variables set. <br />
<br />
To switch to AT-SPI 2, you should set two gconf variables:<br />
gconftool-2 --set /desktop/gnome/interface/at-spi-dbus --type bool true<br />
gconftool-2 --set /desktop/gnome/interface/at-spi-corba --type bool false<br />
<br />
<br />
I use a file called ~/.a11ybashrc with the following contents:<br />
<br />
export GTK_PATH=/usr/local/lib/gtk-2.0/<br />
export PYTHONPATH=/usr/local/lib/python2.6/site-packages/<br />
export QT_ACCESSIBILITY=1<br />
export GTK_MODULES=gail:atk-bridge<br />
<br />
then I just source ~/.a11ybashrc to set up my shell for testing accessibility.<br />
<br />
Then to test just run gcalctool with gcalctool & from that shell. You should see at-spi2-registryd in your process table once gcalctool has started. If not you are likely still using at-spi instead of at-spi2. You can use d-feet or qdbusviewer, or just qdbus to inspect the dbus interface of the registry and the accessible methods of the application at this point. You should also be able to run orca and hear the text of the calculator tool at this point.<br />
<br />
=== How to test at-spi2 with Qt ===<br />
Once you have a gtk app running correctly with orca and/or accerciser you are ready to try qt-at-spi. In order to do so, just clone the repo from <br />
git://gitorious.org/qt-at-spi<br />
Then run<br />
qmake<br />
make<br />
make install<br />
<br />
There is a handy calculator in qt-at-spi under the test folder that can be used to test qt's at-spi plugin with. Make sure QT_ACCESSIBILITY is set in your environment and run<br />
test/test<br />
from the source folder of qt-at-spi. You should see some console message about the bridge initializing. You'll also see the calculator's dbus path in the org.a11y.atspi.Registry GetChildren output.<br />
<br />
== KAccessible ==<br />
<br />
[http://websvn.kde.org/trunk/KDE/kdeaccessibility/kaccessible/ kaccessible] implements a QAccessibleBridgePlugin to provide accessibility services like focus tracking and a screenreader.<br />
<br />
Once you called "export QT_ACCESSIBILITY=1" and then started the application that should be made accessible the kaccessible icon should display in the icon system tray. Once the kaccessible bridge was loaded it will register a dbus service.<br />
<br />
This kaccessible dbus service is used by kmagnifier and the KWin's zooming plugin to enable focus tracking in a application.<br />
<br />
You can enable the screenreader (that uses speech dispatcher for text-to-speech atm) by 1. starting speech.dispatcher with "/etc/init.d/speech-dispatcher start" and 2. right-clicking the icon system tray and have "enable screenreader" checked.<br />
<br />
== Jovie ==<br />
<br />
[http://websvn.kde.org/trunk/KDE/kdeaccessibility/jovie/ Jovie] is a subsystem within the KDE desktop for conversion of text to audible speech.<br />
<br />
See also the [http://techbase.kde.org/Development/Tutorials/Text-To-Speech Text-To-Speech tutorial].<br />
<br />
== Simon ==<br />
<br />
[http://simon-listens.org/ Simon] is an open-source speech recognition program and replaces the mouse and keyboard.</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Projects/Edu/Parley/Theme_Creation&diff=55710Projects/Edu/Parley/Theme Creation2010-11-23T14:10:11Z<p>Frederik.gladhorn: </p>
<hr />
<div>To create a Parley theme you need to edit a SVG file.<br />
<br />
SVG files can contain multiple elements and they have to follow a naming convention so that parley can show the right items.<br />
<br />
The easiest is to find a finished svg file and change it to your liking.<br />
<br />
One theme you can get directly from kde's source code repository is the default one:<br />
http://websvn.kde.org/*checkout*/trunk/KDE/kdeedu/parley/themes/theme_reference.svgz<br />
This file contains some instructions how the items have to be named.<br />
<br />
Other themes are here: http://kde-look.org/?xcontentmode=85<br />
<br />
<br />
To test a theme you need three files:<br />
- themename.desktop which describes the theme with its name and points to the image files.<br />
- themename.png or .jpg as preview<br />
- themename.svgz is a compressed svg file which contains the actual graphics<br />
<br />
The files have to be found by Parley, so they should be in a hidden directory at this location:<br />
/home/your_user_name/.kde/share/apps/parley/themes<br />
<br />
When you created the three files you can start Parley and it should automatically find your new theme.</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Projects/Edu/Parley/Practice/Theme_Requirements&diff=55709Projects/Edu/Parley/Practice/Theme Requirements2010-11-23T14:05:53Z<p>Frederik.gladhorn: moved Projects/Edu/Parley/Practice/Theme Requirements to Projects/Edu/Parley/Theme Creation</p>
<hr />
<div>#REDIRECT [[Projects/Edu/Parley/Theme Creation]]</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Projects/Edu/Parley/Theme_Creation&diff=55708Projects/Edu/Parley/Theme Creation2010-11-23T14:05:53Z<p>Frederik.gladhorn: moved Projects/Edu/Parley/Practice/Theme Requirements to Projects/Edu/Parley/Theme Creation</p>
<hr />
<div></div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Schedules/KDE4/4.5_Feature_Plan&diff=52652Schedules/KDE4/4.5 Feature Plan2010-07-19T20:22:53Z<p>Frederik.gladhorn: /* kdelibs */</p>
<hr />
<div>This is a list of planned features for the SC 4.5 release. <br />
<br />
See also: <br />
<br />
*[[Schedules/KDE4/4.5 Release Schedule]] <br />
*[[Schedules/KDE4/4.5 Release Goals]] <br />
*[[Schedules/KDE4/4.4 Feature Plan]]<br />
<br />
<br> Legend: <br />
<br />
*todo =&gt; not started yet <br />
*in-progress =&gt; started, but not completed yet <br />
*done =&gt; completed<br />
<br />
__TOC__ <br />
<br />
<br><br />
<br />
= kdeaccessibility =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureDone|text-to-speech|Merge kttsd and kttsmgr into one application that sits in the system tray|jpwhiting@kde.org|Jeremy Whiting}} <br />
<br />
|}<br />
<br />
<br><br />
= kdeadmin =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|system-config-printer-kde|Restore feature parity with KDEPrint3 where possible.||Jonathan Riddell, John Layt}} <br />
<br />
|}<br />
<br />
<br><br />
<br />
= kdeartwork =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact<br />
|}<br />
<br />
<br><br />
<br />
= kdebase-apps =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Dolphin|Faceted browsing|peter.penz@gmx.at|Peter Penz}}<br />
{{FeatureTodo|Dolphin|Smooth scrolling|fredrik@kde.org|Fredrik Höglund}}<br />
{{FeatureTodo|Konqueror|Improvements in session-management|edulix@gmail.com|Eduardo Robles Elvira}} <br />
{{FeatureTodo|Konqueror|Improvements in tab-bar widget|edulix@gmail.com|Eduardo Robles Elvira}} <br />
{{FeatureTodo|Konqueror|Add speeddial/thumbnails-like start page|germain@ebooksfrance.org|Germain Garand}} <br />
{{FeatureInProgress|Konqueror|New Konqueror bookmarks using Akonadi and Nepomuk, awesome bar|edulix@gmail.com|Eduardo Robles Elvira}} <br />
{{FeatureInProgress|Konsole|Adds support for SHELL_SESSION_ID|kurt.hindenburg@gmail.com|Kurt Hindenburg}}<br />
{{FeatureInProgress|nspluginviewer|npruntime scripting support|maksim@kde.org|Maks Orlovich}}<br />
{{FeatureInProgress|print-manager|New Print manager KCM and applet replacement, using C++|dantti85-pk@yahoo.com.br|Daniel Nicoletti}}<br />
{{FeatureDone|Dolphin|Drag and drop on tabs|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|Dolphin|Make menus like "View Mode", "Additional Information" and "Sort By" available as toolbar buttons|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|Dolphin|Make use of additional columns (Symbolic Link Destination, Path or URL) in KFileItemDelegate|frank78@googlemail.com|Frank Reininghaus}} <br />
{{FeatureDone|Dolphin|Show extended meta data also for files that are not indexed or in the case where Nepomuk is turned off.|peter.penz19@gmail.com|Peter Penz}} <br />
{{FeatureDone|Konsole|Allow setting tab profile from file on command-line|kurt.hindenburg@gmail.com|Kurt Hindenburg}}<br />
{{FeatureDone|Konsole|Finish implementing tab context menu|kurt.hindenburg@gmail.com|Kurt Hindenburg}}<br />
{{FeatureDone|Konsole|Modernize menu layout|sasch.pe@gmx.de|Sascha Peilicke}}<br />
|}<br />
<br />
<br><br />
<br />
= kdebase-runtime =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Locale KCM|Add support for new KLocale and KCalendarSystem features (see kdelibs section) including AM/PM, etc. Improvements to usability of existing money display options.|john@layt.net|John Layt}}<br />
{{FeatureTodo|KNotify|Route solid errors via knotify to the device notifier|wilderkde@gmail.com|Jacopo De Simoi}}<br />
{{FeatureTodo|KWallet|Single Sign On using PAM|lemma@confuego.org|Michael Leupold}}<br />
{{FeatureTodo|network kioslave|Backend for LISa|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureTodo|network kioslave|Backend for SMB|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureTodo|network kioslave|Backend to discover bluetooth devices and they services |edulix@gmail.com|Eduardo Robles Elvira}}<br />
{{FeatureTodo|network kioslave|Integrate with remote and zeroconf kioslaves|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureInProgress|bluetooth kioslave|Backend to browse bluetooth devices|edulix@gmail.com|Eduardo Robles Elvira}}<br />
{{FeatureInProgress|network kioslave|Backend for UPnP|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureDone|Locale KCM|Ability to select more Digit Sets (Bengali, Gujarati, Gurmukhi, Kannada, Khmer, Malayalam, Oriya, Tamil, Telugu and Thai). Ability to set date formats to include Calendar Era.|john@layt.net|John Layt}}<br />
{{FeatureDone|Nepomuk|Monitor file system changes via inotify|trueg@kde.org|Sebastian Trueg}}<br />
|}<br />
<br />
<br><br />
<br />
= kdebase-workspace =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact<br />
|-<br />
! style="text-align: center;" colspan="4" | Non-Plasma, Non-KWin <br />
{{FeatureTodo|BlueDevil Wizard |Write a new Wizard to pair Bluetooth devices |alex@eyeos.org|Alex Fiestas}} <br />
{{FeatureTodo|Bluetooth KCM|New KCM to manage all bluetooth configurations and devices|ereslibre@kde.org|Rafael Fernandez}}<br />
{{FeatureTodo|Icons KCM|More configurable icon sizes|christoph@maxiom.de|Christoph Feck}} <br />
{{FeatureTodo|Fonts KCM|More configurable fonts|christoph@maxiom.de|Christoph Feck}}<br />
{{FeatureTodo|Screenedges|Screenedges handling outside of kwin/plasma|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureInProgress|Activities Daemons|Daemons to handle info about activities (kded daemon and a nepomuk service)|ivan.cukic@kde.org|Ivan Cukic}}<br />
{{FeatureTodo|Systemsettings|driconf KCM|fredrik@kde.org|Fredrik Höglund}}<br />
{{FeatureDone|DeviceInfo KCM|New DeviceInfo KCM for KInfoCenter|hubnerd@ntlworld.com|David Hubner}}<br />
{{FeatureDone|Free Space Notifier Daemon|Small daemon that warns you when your home has almost no space left|knuckles@gmail.com|Ivo Anjo}}<br />
{{FeatureDone|Keyboard|Add keyboard layout indicator plasma applet|arysin@gmail.com|Andriy Rysin}}<br />
{{FeatureDone|Keyboard|Allow adding layouts by language|arysin@gmail.com|Andriy Rysin}}<br />
{{FeatureDone|Keyboard|Merge keyboard hardware and layouts configuration UI|arysin@gmail.com|Andriy Rysin}}<br />
{{FeatureDone|Keyboard|Allow configuring keyboard model without configuring layouts|arysin@gmail.com|Andriy Rysin}}<br />
{{FeatureDone|Keyboard|Allow by-window switching and KDE shortcut without configuring layouts|arysin@gmail.com|Andriy Rysin}}<br />
{{FeatureDone|Keyboard|Rewrite keyboard layouts app into kded daemon|arysin@gmail.com|Andriy Rysin}}<br />
{{FeatureDone|KInfoCenter|Add Export functionality into KInfoCenter|hubnerd@ntlworld.com|David Hubner}}<br />
{{FeatureDone|KInfoCenter|Complete rewrite of KInfoCenter|hubnerd@ntlworld.com|David Hubner}}<br />
{{FeatureDone|Oxygen configuration|Oxygen style and decoration standalone expert configuration tool|hugo@oxygen-icons.org|Hugo Pereira Da Costa}}<br />
{{FeatureDone|Oxygen style|Move window using left-mouse button on windows' empty areas|hugo@oxygen-icons.org|Hugo Pereira Da Costa}}<br />
{{FeatureDone|PowerDevil|Display brightness OSD|debfx-kde@fobos.de|Felix Geyer}}<br />
{{FeatureDone|Summary KCM|New Summary KCM for KInfoCenter|hubnerd@ntlworld.com|David Hubner}}<br />
|-<br />
! style="text-align: center;" colspan="4" | Plasma <br />
{{FeatureTodo|accounts applet|a plasma widget that is a central place to add accounts to social sites like identica and opendesktop, optimized for the netbook shell|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|battery|Weighted charge information for multiple batteries|sebas@kde.org|Sebastian Kügler}}<br />
{{FeatureTodo|folderview|Extend the configuration UI for nepomuksearch|fredrik@kde.org|Fredrik Höglund}}<br />
{{FeatureDone|folderview|"Open folder" action icon to open folder in pop-up at request instead of on hover.|fredrik@kde.org|Fredrik Höglund}}<br />
{{FeatureTodo|KRunner|Improve keyboard navigation & command history interaction|wilderkde@gmail.com|Jacopo De Simoi}}<br />
{{FeatureTodo|libplasma|Improvements to Calendar/Clock widgets. Improved config ui. Allow multiple holidays on same day. Allow multiple Holiday Regions. Weekends. etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|libplasma/extenders|put extendergroups in scrollwidgets|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|libplasma/extenders|possibility to detach exteneritems as standalone windows|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|netbook/SAL|package manager invocation from the toolbox|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|netbook/Workspace KCM|New default options for KWin: tabbox as present windows, that will be set as regular grid|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|Plasma|Welcome plasmoid|riccardo@kde.org|Riccardo Iaconelli}}<br />
{{FeatureTodo|systemtray|sort icons by category|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|crystal|New desktop search widget|sebas@kde.org|Sebastian Kügler}}<br />
{{FeatureInProgress|device-notifier|Detailed (HAL) error notifications in the device notifier|wilderkde@gmail.com|Jacopo De Simoi}}<br />
{{FeatureInProgress|device-notifier|Route all solid error notifications via knotify to the device notifier|wilderkde@gmail.com|Jacopo De Simoi}}<br />
{{FeatureDone|Extend Calendar DataEngine with Akonadi calendar incidents|Allows to query calendar events/todos from Akonadi in Plasma|gladhornKDEorg|Frederik Gladhorn}}<br />
{{FeatureInProgress|KRunner|Add some advanced sorting to KRunner using Nepomuk|l.appelhans@gmx.de|Lukas Appelhans}}<br />
{{FeatureInProgress|libplasma/theme|more transparent dialogs when the blur effect is enabled|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|netbook/SAL|support for drag and drop of items|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|networkmanagement|Network management Plasmoid|sebas@kde.org|Sebastian Kügler}}<br />
{{FeatureInProgress|notifications|new look and behaviour for notifications|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|Plasma::Theme|Themed CSS support|sebas@kde.org|Sebastian Kügler}}<br />
{{FeatureInProgress|systemtray|monochrome statusnotifier based systray icons support|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|systemtray|put hidden icons in a popup menu|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|systemtray/taskmanager|port the systray and tasks applet to windows|windows@kde.org|kde windows}}<br />
{{FeatureDone|calculator|Added optional libqalculate support in the calculator runner|agostinelli@gmail.com|Matteo Agostinelli}}<br />
{{FeatureDone|libplasma/desktop|Activity Manager UI|chani@kde.org|Chani}}<br />
{{FeatureDone|netbook/SAL|use QStandardModels|notmart@gmail.com|Marco Martin}}<br />
{{FeatureDone|notifications|split systemtray and notifications applet|notmart@gmail.com|Marco Martin}} <br />
{{FeatureDone|notifications|support for remote applets for notifications|notmart@gmail.com|Marco Martin}}<br />
{{FeatureDone|quicklaunch|Improvements from Ingomar Wesp|l.appelhans@gmx.de|Lukas Appelhans}}<br />
{{FeatureDone|tasks dataengine|export all informations needed to build an applet comparable to the current one|matthieu_gallien@yahoo.fr|Matthieu Gallien}}<br />
|-<br />
! style="text-align: center;" colspan="4" | KWin<br />
{{FeatureTodo|Aurorae|Autohiding decoration for maximized windows|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureTodo|Effects|Add close window button to each window in present windows/desktop grid|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureTodo|Effects|Move features from present windows to libkwineffects to make them available in desktop grid|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureTodo|KWin|Hint for defining the window snap rect|fredrik@kde.org|Fredrik Höglund}}<br />
{{FeatureTodo|Window Tabbing/libtaskmanager|Announce window groups to be used for grouping in tasks applet|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureInProgress|Effects|Glide effect for opening and closing windows|iori.yagami.26979@gmail.com|Iori Yagami}}<br />
{{FeatureDone|Effects|High quality scaling shader for taskbar thumbnails/present windows etc.|fredrik@kde.org|Fredrik Höglund}}<br />
{{FeatureInProgress|KWin|New flag to exclude windows from switchers|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureInProgress|KWin/plasma|New window type for Plasma dashboard|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureDone|Aurorae|Better themeing support|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureDone|Aurorae|Decorations on window sides|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureDone|Aurorae|Port Aurorae to GraphicsView and KDecoration|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureDone|Aurorae|Window tabbing support|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureDone|KCM Decoration|New decoration kcm with previews and GHNS|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureDone|Tiling|Merge window tiling branch|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureDone|kwin|hide windows from other activities|chani@kde.org|Chani}}<br />
{{FeatureDone|Effects|New blur effect|fredrik@kde.org|Fredrik Höglund}}<br />
|}<br />
<br />
<br><br />
<br />
= kdebindings =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureInProgress|C# bindings|Auto-generate the assemblies from SMOKE libs|arno@arnorehn.de|Arno Rehn}}<br />
{{FeatureInProgress|C# bindings|Split the bindings into smaller assemblies, like qyoto-qtcore, qyoto-qtgui, etc..|arno@arnorehn.de|Arno Rehn}}<br />
{{FeatureDone|Ruby bindings|Support for writing KIO slaves in Ruby|arno@arnorehn.de|Arno Rehn}}<br />
|}<br />
<br />
<br><br />
<br />
= kdeedu =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Cantor|import and polish Qalculate! backend|mail@milianw.de|Milian Wolff}}<br />
{{FeatureTodo|Kalzium|Port Kalzium to use QGV based periodic table widget|mhanwell@kde.org|Marcus D. Hanwell}}<br />
{{FeatureTodo|KStars|Display Comet Magnitudes whenever possible|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Information links in-place for each technical term|akarshsimha@gmail.com|Akarsh Simha}} {{FeatureTodo|KStars|Tool to suggest star-hopping techniques???|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureDone|KStars|Extend conjunction tool to have one object unspecified, but have a genre of objects specified instead|jsid.emor3j.fr.eu.org|Jérôme Sonrier}} <br />
{{FeatureTodo|KStars|Simulate Lunar Eclipses|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Simulate Satellites and Iridium Flares|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Social and Geographical Integration for KStars|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Marble widget for Geolocation tool|mboquien@free.fr|Médéric Boquien}} <br />
{{FeatureTodo|KStars|Better printed star charts|kstars@30doradus.org|Jason Harris}} <br />
{{FeatureTodo|KStars|Better rendering of comets/asteroids|kstars@30doradus.org|Jason Harris}} <br />
{{FeatureInProgress|KStars|Texture mapping of the skymap???|kstars@30doradus.org|Jason Harris}} <br />
{{FeatureTodo|KTurtle|Implement GHNS upload support|nielsslot@gmail.com|Niels Slot}}<br />
{{FeatureTodo|Marble|Add proper support for GPX waypoints, tracks and routes display|anders@alweb.dk|Anders Lund}}<br />
{{FeatureTodo|Marble|Export map to MxN pixel bitmap|inge@lysator.liu.se|Inge Wallin}}<br />
{{FeatureTodo|Marble|Map Contents translation|tackat@kde.org|Torsten Rahn}}<br />
{{FeatureTodo|Parley|Better support for entering synonyms|laidig_kde.org|Benjamin Schleinzer, Daniel Laidig}}<br />
{{FeatureInProgress|Marble|Bookmark support|anik.varshney@gmail.com|Kumar Anik Varshney}}<br />
{{FeatureInProgress|Marble|Follow XDG Base Directory Specification|bastianholst@gmx.de|Bastian Holst}}<br />
{{FeatureInProgress|Marble|GeoGraphicsScene for Online Service Plugins|bastianholst@gmx.de|Bastian Holst}}<br />
{{FeatureInProgress|Marble|Import geonames city data|sonu.itbhu@gmail.com|Harshit Jain}}<br />
{{FeatureInProgress|Marble|Maemo Support|earthwings@gentoo.org|Bastian Holst, Dennis Nienhüser}}<br />
{{FeatureInProgress|Marble|Various Marble speed improvements|rahn@kde.org|Torsten Rahn, Ariya Hidayat}}<br />
{{FeatureDone|KAlgebra|Support for drawing implicit curves|percy.camilo.ta@gmail.com|Percy Camilo Triveño Aucahuasi}}<br />
{{FeatureDone|KAlgebra|Type checker for expressions to statically detect errors|aleixpol@kde.org|Aleix Pol}}<br />
{{FeatureDone|KTurtle|Implement GHNS download support|nielsslot@gmail.com|Niels Slot}}<br />
{{FeatureDone|Marble|Configurable texture layer blending|jmho@c-xx.com|Jens-Michael Hoffmann}}<br />
{{FeatureDone|Marble|Download region|jmho@c-xx.com|Jens-Michael Hoffmann}}<br />
{{FeatureDone|Marble|Generalized Animations with GeoDataLookAt support|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureDone|Marble|GPS improvements|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureDone|Marble|Online-Routing|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureDone|Marble|Plugin to display APRS data|hardaker@users.sourceforge.net|Wes Hardaker}}<br />
{{FeatureDone|Marble|Support OpenStreetMap Nominatim as search backend (MarbleRunner)|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureDone|Parley|LaTeX support|laidig_kde.org|Daniel Laidig}}<br />
{{FeatureDone|Parley|Parley practice mode rewritten|gladhornKDEorg|Daniel Laidig, Frederik Gladhorn}}<br />
{{FeatureDone|Rocs|Multiple Script support|tcanabrava@kde.org|Tomaz Canabrava}}<br />
{{FeatureDone|Rocs|Node beautification in SVG|tcanabrava@kde.org|Tomaz Canabrava}}<br />
{{FeatureDone|Rocs|Plugin System|wiglot@gmail.com|Wagner Reck}}<br />
{{FeatureDone|Rocs|Redesigned the UI for better usability|tcanabrava@kde.org|Tomaz Canabrava}}<br />
{{FeatureDone|Rocs|Small plugins as examples|wiglot@gmail.com|Wagner Reck}}<br />
{{FeatureDone|Rocs|Threads for not blocking the UI|tcanabrava@kde.org|Tomaz Canabrava}}<br />
|}<br />
<br><br />
<br />
= kdegames =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact<br />
{{FeatureTodo|Granatier|Arena Editor|k.hias@gmx.de|Mathias Kraus}}<br />
{{FeatureTodo|Kajongg|Default voices for computer players|wolfgang@rohdewald.de|Wolfgang Rohdewald}}<br />
{{FeatureTodo|KBreakOut|Level Sets|fela.kde@gmail.com|Fela Winkelmolen}} {{FeatureTodo|KBreakOut|Sound|fela.kde@gmail.com|Fela Winkelmolen}}<br />
{{FeatureTodo|Kolf|Replace with Kolf 2 (help on coding and artwork desired)|majewsky@gmx.net|Stefan Majewsky}}<br />
{{FeatureTodo|KsirK|Boost playing over Jabber|kleag@free.fr|Gaël de Chalendar}}<br />
{{FeatureTodo|KsirK|rewrite AI code or at least correct most problems related in bug #170777. Volunteers wanted!|kleag@free.fr|Gaël de Chalendar}} <br />
{{FeatureTodo|KSquares|Add more types of boards: hexagonal, triangular|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureTodo|KSquares|Re-write computer player, make it act faster and more intelligent|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureTodo|KSudoku|Adapt view to show information provided by engine|joselb@gmx.net|Johannes Bergmeier}} <br />
{{FeatureTodo|KSudoku|Add new actions to GUI|joselb@gmx.net|Johannes Bergmeier}}<br />
{{FeatureTodo|KSudoku|Import new engine|joselb@gmx.net|Johannes Bergmeier}} <br />
{{FeatureTodo|KSudoku|Port game to new engine|joselb@gmx.net|Johannes Bergmeier}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211859 Recieve new puzzles over KNewStuff]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211861 Introduce handicap as a means to configure difficulty]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211866 Implement puzzle piles to organize pieces]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}212814 Quick piece grouping]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}213774 Add magnifying glass]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureInProgress|Kajongg|New traditional Mahjongg for four players|wolfgang@rohdewald.de|Wolfang Rohdewald}}<br />
{{FeatureInProgress|Kiriki|Hint|luizromario@gmail.com|Luiz Romário Santana Rios}}<br />
{{FeatureInProgress|KTuberling|A new "fast switch" between playgrounds|alex@eyeos.org|Alex Fiestas}}<br />
{{FeatureDone|KBounce|Difficulty levels|ascherfy@gmail.com|Andreas Scherf}}<br />
{{FeatureDone|KBounce|Random images as background|ascherfy@gmail.com|Andreas Scherf}}<br />
{{FeatureDone|KGoldrunner|Add the Demolition game (20 levels)|iandw.au@gmail.com|Ian Wadham}}<br />
{{FeatureDone|Kigo|Load SGF games from command line and register to mimetype 'application/x-go-sgf'|sasch.pe@gmx.de|Sascha Peilicke}}<br />
{{FeatureDone|Konquest|Merge the patch by Sean D'Epagnier to implement many features like map editing|pinaraf@pinaraf.info|Pierre Ducroquet}}<br />
{{FeatureDone|KPat|Add keyboard controls to allow playing without a mouse.|parker.coates@kdemail.net|Parker Coates}}<br />
{{FeatureDone|KPat|Create a new LibKCardGame from KPat's card scene logic. It is a private library for SC 4.5, but the intention is to make it generic, stable and friendly enough for use in other card games in a future release.|parker.coates@kdemail.net|Parker Coates}}<br />
{{FeatureDone|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}233784 Optimize size of puzzle files in default collection] (temporarily fixed for this release cycle with an awful hack)|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureDone|Palapeli|Cleanup config dialog code|majewsky@gmx.net|Stefan Majewsky}}<br />
{{FeatureDone|Palapeli|Rewrite puzzle table mouse interaction stack|majewsky@gmx.net|Stefan Majewsky}}<br />
|}<br />
<br />
<br><br />
<br />
= kdegraphics =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|gwenview|Persistent changes|agateau@kde.org|Aurelien Gateau}}<br />
{{FeatureTodo|gwenview|Show Nepomuk info in image meta info|agateau@kde.org|Aurelien Gateau}} <br />
{{FeatureTodo|libkdcraw|Make color management options more flexible|marcel.wiesweg@gmx.de|Marcel Wiesweg}} <br />
{{FeatureTodo|libksane|Add public API for available devices|kare.sars@iki.fi|K&aring;re S&auml;rs}} <br />
{{FeatureTodo|okular|Thumb creators via Okular Core|harsh@harshj.com|Harsh J}} <br />
{{FeatureDone|gwenview|Add option to disable video support|agateau@kde.org|Aurelien Gateau}}<br />
{{FeatureDone|gwenview|Add option to show image size and file size below thumbnails|agateau@kde.org|Aurelien Gateau}}<br />
{{FeatureDone|gwenview|Avoid blocking UI when modifying or saving images|agateau@kde.org|Aurelien Gateau}}<br />
{{FeatureDone|gwenview|Support for starting with multiple images|agateau@kde.org|Aurelien Gateau}}<br />
{{FeatureDone|gwenview|Wrap around when panning images|agateau@kde.org|Aurelien Gateau}}<br />
{{FeatureDone|libksane|Highlight scanned area|kare.sars@iki.fi|K&aring;re S&auml;rs}} <br />
{{FeatureDone|libksane|Improve auto-selection|kare.sars@iki.fi|K&aring;re S&auml;rs}} <br />
|}<br />
<br />
<br><br />
<br />
= kdelibs =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|katepart|Add visual block mode and make the basic commands support it|ehambergαgmail.com|Erlend Hamberg}}<br />
{{FeatureTodo|katepart|context dependent indenters|mail@milianw.de|Milian Wolff}}<br />
{{FeatureTodo|katepart|easier writing of indenters, esp. by automatically reloading them when changed|mail@milianw.de|Milian Wolff}}<br />
{{FeatureTodo|katepart|extend list of available default styles for highlighting, remove hardcoded colors from existing XML files|mail@milianw.de|Milian Wolff}}<br />
{{FeatureTodo|katepart|GHNS for scripts/indenters|mail@milianw.de|Milian Wolff}}<br />
{{FeatureTodo|katepart|improve AutoBrace plugin|mail@milianw.de|Milian Wolff}}<br />
{{FeatureTodo|katepart|list of available scripts and indenters|mail@milianw.de|Milian Wolff}}<br />
{{FeatureTodo|katepart|replace smart cursor/ranges API|cullmann@kde.org|Christoph Cullmann}}<br />
{{FeatureTodo|katepart|scripting configuration, esp. for indenters|mail@milianw.de|Milian Wolff}}<br />
{{FeatureTodo|KCalendarSystem|Add new astronomical calculation support classes to be used in kdelibs to build new astronomically based calendar systems, and in kdepim to build new version of libkholiday.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KCalendarSystem|Add new calendar systems: Bahai'i, Chinese, Buddhist, etc.|john@layt.net|John Layt}}<br />
{{FeatureTodo|KCalendarSystem|Add support for traditional/USA week numbering.|john@layt.net|John Layt}}<br />
{{FeatureTodo|kdecore|Group policy (Windows) backend for KAuth|drf@kde.org|Dario Freddi}}<br />
{{FeatureTodo|KDEPrint|Add framework for standard actions for 'Send to...' for e-mail, fax, etc by printing to PDF/PS.|john@layt.net|John Layt}} <br />
{{FeatureTodo|kdeui|API to integrate KStatusNotifierItem and KNotification: both as class api and DBus specification API|davide.bettio@kdemail.net|Davide Bettio}}<br />
{{FeatureTodo|kdeui|DBus interface in StatusNotifierItem to connect it with freedesktop notifications instances|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|kdeui|Implement caps-lock warning for password entry widgets|lemma@confuego.org|Michael Leupold}}<br />
{{FeatureTodo|kdeui|Improvements to KDatePicker/KDateTable for feature parity with Plasma Calendar widget, i.e. holiday support, select calendar system, etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|kdeui|Social About Dialog|teo@kde.org|Téo Mrnjavac}}<br />
{{FeatureTodo|kfile|Show sub-sub-folders (and so on) in breadcrumb bar|toddrme2178@gmail.com|Todd}}<br />
{{FeatureTodo|khtml|add new form widgets defined in HTML5 draft|germain@ebooksfrance.org|Germain Garand}}<br />
{{FeatureTodo|khtml|Implement more of DOM3's CSSOM View module|germain@ebooksfrance.org|Germain Garand}}<br />
{{FeatureTodo|khtml|Improvements in kwallet integration|edulix@gmail.com|Eduardo Robles Elvira}}<br />
{{FeatureTodo|khtml and kparts|More general KPart scripting interfaces|maksim@kde.org|Maks Orlovich}}<br />
{{FeatureTodo|kio|SSL client certificate support|ahartmetz@gmail.com|Andreas Hartmetz}}<br />
{{FeatureTodo|kio|SSL root certificate list GUI + backend|ahartmetz@gmail.com|Andreas Hartmetz}}<br />
{{FeatureTodo|KLocale|Add configuration for AM/PM symbols.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Add default colour to optionally display negative numbers.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Add Full date format in addition to existing short and long.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Full POSIX compliant format support for date, time, numbers and money.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement more 'named' date/time formats, e.g. ISO, UnixTimestamp, RFC3339, etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement support for number grouping other than thousands using LC_NUMERIC and LC_MONETARY formats, e.g. India 00 00 000 and China 0000 0000.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement separate backends for each supported platform/desktop to use platform localisation in place of KDE locale.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement support for additional Country Code standards: ISO Alpha 3, ISO Numeric 3, FIPS-10.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement support for Country Code sub-regions, i.e. States/Provinces/etc. Needed for new KHolidays.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KNewStuff|Support more than one payload|jmho@c-xx.com|Jens-Michael Hoffmann}}<br />
{{FeatureTodo|solid|Add parent matching to predicate parsing|wilderkde@gmail.com|Jacopo De Simoi}}<br />
{{FeatureInProgress|katepart/ktexteditor|defaultvalues, regular expressions, mirroring master, scripting of templates|jowenn(you_know)kde(here_too)org|Joseph Wenninger}}<br />
{{FeatureInProgress|khtml|Basic audio/video tag support|germain@ebooksfrance.org|Michael Howell and Germain Garand}} <br />
{{FeatureInProgress|khtml|DOM3 XPath/XPath1 support|maksim@kde.org|Maks Orlovich}}<br />
{{FeatureInProgress|khtml|Implement missing parts of DOM3's Background and Borders module|germain@ebooksfrance.org|Germain Garand}}<br />
{{FeatureDone|KNewStuff|Icon view mode|gladhornKDEorg|Reza Shah, Frederik Gladhorn}}<br />
{{FeatureInProgress|ktexteditor plugin|InsaneHTML_LE (zencoding like selector input (light edition)|jowenn(you_know)kde(here_too)org|Joseph Wenninger}}<br />
{{FeatureDone|katepart|loading compressed files and then saving them back in the original compression format (bug 65518)|cullmann@kde.org|Christoph Cullmann}}<br />
{{FeatureDone|KCalendarSystem|Add support for Date Difference calculations.|john@layt.net|John Layt}}<br />
{{FeatureDone|KCalendarSystem|Add support for era based calendar systems.|john@layt.net|John Layt}}<br />
{{FeatureDone|KCalendarSystem|Add new calendar systems: Japanese Era, Thai, Taiwanese.|john@layt.net|John Layt}}<br />
{{FeatureDone|KCalendarSystem|Add support for Unicode format strings for Qt and cross-platform compatability (for output only, not input).|john@layt.net|John Layt}}<br />
{{FeatureDone|kdecore|Generic shared-memory cache|mpyne@kde.org|Michael Pyne}}<br />
{{FeatureDone|kdeui|Add the KRecursiveFilterProxyModel to kdeui/itemviews|steveire@gmail.com|Stephen Kelly}}<br />
{{FeatureDone|kdeui|Redesigned icon cache|mpyne@kde.org|Michael Pyne}}<br />
{{FeatureDone|kdeui|Support alpha channel in KColor classes|christoph@maxiom.de|Christoph Feck}}<br />
{{FeatureDone|kfile|Easier access to protocols in breadcrumb bar|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|kfile|Middle-click on subfolder in the breadcrumb bar to open in a new tab|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|kfile|Scroll wheel support for breadcrumb bar|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|kfile|Show all sub-folders in breadcrumb bar|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|khtml|Selectors API1|maksim@kde.org|Maks Orlovich}}<br />
{{FeatureDone|kio|Add "apply to all" checkbox in renamedialog and allow for automatic renaming|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|kio|Add support for additional columns (e.g., smybolic link destination) in KFileItemDelegate|frank78ac@googlemail.com|Frank Reininghaus}}<br />
{{FeatureDone|kio|Better listing of applications in file "open with" context menu|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|kio|Context menu entry to open all files in their default applications|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|kio|Don't select extension in renamedialog|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|kio|Port renamedialog to KFileMetaDataWidget|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|kio|Remember downloads via Nepomuk|trueg@kde.org|Sebastian Trueg}}<br />
{{FeatureDone|KNewStuff|Improved Download Dialog, multiple previews, better integration of details, changelog is displayed|gladhornKDEorg|Frederik Gladhorn}}<br />
{{FeatureDone|KNewStuff|Upload dialog rewritten: It now supports updating of old uploads, previews, most data that can be entered on the website and allows direct login to the account|gladhornKDEorg|Frederik Gladhorn}}<br />
{{FeatureDone|nepomuk|Redesigned Nepomuk::TagWidget which can now actually be used by applications|trueg@kde.org|Sebastian Trueg}}<br />
{{FeatureDone|solid|Broadcast mount/unmount messages across processes|wilderkde@gmail.com|Jacopo De Simoi}}<br />
|}<br />
<br><br />
<br />
= kdemultimedia =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureDone|Video Thumbnailer|Add ffmpegthumbnailer for faster video thumbnailing|ascherfy@gmail.com|Andreas Scherf}}<br />
<br />
|}<br />
<br />
<br><br />
<br />
= kdenetwork =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Kopete|Add support for urls to Bonjour plugin|kossebau@kde.org|Friedrich W. H. Kossebau}} <br />
{{FeatureTodo|Kopete|Akonadi History Plugin|roideuniverse@gmail.com|Kaushik Saurabh}} <br />
{{FeatureTodo|Kopete|Jabber Jingle ICE support|detlev.casanova@gmail.com|Detlev Casanova}} <br />
{{FeatureTodo|Kopete|Jabber Jingle video support|detlev.casanova@gmail.com|Detlev Casanova}} <br />
{{FeatureTodo|Kopete|Rich text support for ICQ|kedgedev@gmail.com|Roman Jarosz}} <br />
{{FeatureTodo|Kopete|UPnp Support|mattr@kde.org|Matt Rogers}} <br />
{{FeatureTodo|Krdc|Connection status and reconnect screen|murraytony@gmail.com|Tony Murray}}<br />
{{FeatureInProgress|KGet|Better error handling|l.appelhans@gmx.de|Lukas Appelhans}}<br />
{{FeatureInProgress|KGet|Use plasma notifications to show the progress|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureDone|KGet|Refaktor Torrent-Plugin to base on the newly created libktorrent from extragear|l.appelhans@gmx.de|Lukas Appelhans}}<br />
{{FeatureDone|Kopete|Extended video controls|fschaefer.oss(at)googlemail.com|Frank Schaefer}} <br />
{{FeatureDone|Krdc|Much improved new connection screen: more info, sortable, interactive, and better use of space|murraytony@gmail.com|Tony Murray}}<br />
|}<br />
<br />
<br><br />
<br />
= kdepim =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|KHolidays|Add support for holiday types and day-off types.|john@layt.net|John Layt}}<br />
{{FeatureInProgress|KAlarm|Port to Akonadi|djarvie@kde.org|David Jarvie}}<br />
{{FeatureInProgress|KJots|Port to Akonadi|kde-pim@kde.org|Stephen Kelly}}<br />
{{FeatureInProgress|KMail|Port to Akonadi|kde-pim@kde.org|Thomas McGuire}}<br />
{{FeatureInProgress|KOrganizer|Port to Akonadi|kde-pim@kde.org|Frank Osterfeld, Sebastian Sauer}}<br />
{{FeatureDone|KHolidays|Add support for alternative calendar systems to enable new holiday files for countries such as Iran and Israel, support for regional level files to enable new holiday files for all the Australian states and UK regions, improved metadata such as file language, support for advanced holiday calculations such as substitute days, and an improved API for more efficient queries.|john@layt.net|John Layt}}<br />
|}<br />
<br />
<br><br />
<br />
= kdeplasma-addons =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|knowledgebase|Add categories|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureTodo|knowledgebase|port knowledgebase plasmoid to new engine|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureDone|Bookmarks widget|New|kossebau@kde.org|Friedrich W. H. Kossebau}} <br />
{{FeatureDone|Character Runner|New|akreuzkamp@web.de|Anton Kreuzkamp}}<br />
{{FeatureDone|Comic Applet|Add option to show "text", "icons" or both "text and icons" for tabs|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureDone|Comic Applet|Prefetch next and previous comic strip (thx to Miha Cancula)|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureDone|KDE Observatory|Performance improvements, new data engine|sandroandrade@kde.org|Sandro Andrade}}<br />
{{FeatureDone|Mandelbrot Wallpaper|Performance improvements|jacob.benoit.1@gmail.com|Benoit Jacob}} <br />
{{FeatureDone|Mandelbrot Wallpaper|Rendering improvements (through dithering, extra iterations, and better/simpler formulas)|jacob.benoit.1@gmail.com|Benoit Jacob}}<br />
{{FeatureDone|Mandelbrot Wallpaper|Allow to import/export parameters and to export to PNG images|jacob.benoit.1@gmail.com|Benoit Jacob}}<br />
{{FeatureDone|Plasmaboard|Completly rework the current onscreen keyboard and add key layouts for tablets and mids. Better performance, better useability, less memory usage. See: http://btux1984.wordpress.com/ |bjoern@ruberg-wegener.de|Björn Ruberg}}<br />
|}<br />
<br />
<br><br />
<br />
= kdesdk =<br />
<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureInProgress|Kate|Replace old snippet plugin through TNG plugin and enhance the usability of the new plugin|jowenn(you_know)kde(here_too)org|Joseph Wenninger}}<br />
{{FeatureInProgress|Umbrello|Add a code importing wizzard|andi.fischer@NOSPAMhispeed.ch|Andi Fischer}}<br />
{{FeatureDone|Kate|Port the old XML completion plugin (xmltools)|tomastrnka@gmx.com|Tomáš Trnka}} <br />
{{FeatureDone|Lokalize|Cache filestats to improve initial project scam time|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureDone|Lokalize|Rewrite glossary engine to use QDom|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureDone|Lokalize|Return simple [but reliable] project creation back|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureDone|Lokalize|Support GNU PO file layout better by paying attention to the language specified in the PO file header (not the project-wide one)|shafff@NOSPAMukr.net|Nick Shaforostoff}}<br />
{{FeatureDone|KCachegrind|Support loading multiple profile dumps concatenated in one file|Josef.Weidendorfer@NOSPAMgmx.de|Josef Weidendorfer}}<br />
{{FeatureDone|KCachegrind|Support transparent loading of compressed profile dumps (using KFilterDev)|mwolff|mwolff}}<br />
{{FeatureDone|KCachegrind|Tool button to hide C++ template parameters in symbols|Josef.Weidendorfer@NOSPAMgmx.de|Josef Weidendorfer}}<br />
|}<br />
<br />
<br><br />
<br />
= kdeutils =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Ark|Add a "Preview with..." context menu item|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Add an options dialog (maybe)|haraldhv@stud.ntnu.no|Harald Hvaal}}<br />
{{FeatureTodo|Ark|Add feedback for the latest operation in the status bar|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Get rid of the Observer code in Kerfuffle|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Make error reporting work as expected in Kerfuffle|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Make Kerfuffle really thread-safe (and use threads in less places)|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Make the internal previewer optional|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Simplify Kerfuffle's API (jobs, interfaces etc) and try to make it stable|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Support for custom options from the compression interface (eg. a slider for selecting compression level for rar files)|haraldhv@stud.ntnu.no|Harald Hvaal}}<br />
{{FeatureTodo|Ark|Try multiple plugins for each archive type before failing|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Okteta|Add a general KPart adapter to Kasten, than finish port of Okteta KPart to Okteta Kasten|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add global toggle option for the offset display, hex or decimal|kossebau@kde.org|Friedrich W. H. Kossebau}} <br />
{{FeatureTodo|Okteta|Add Kate-like combined dialogs to query for actions on files|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|add Kate-like search tool|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add Okular like embedded notifications|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|add support for import by drop, both url and data|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|add support for memory mapping of files and 64-bit addressing|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|add support for jobs like io, printing, string search or filter|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add view profiles, incl. editor/manager|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|copy again puts also a value or char variant of the data to clipboard|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Improve the titels of the changes to the bytearray to be more descriptive, best using ids to avoid text string|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Make all user interaction in the KastenCore managers plugin-based|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Merge row and column widgets into one|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Store bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Store bookmarks and other view settings for next load|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|printer-applet|Restore feature parity with KDEPrint3 where possible.||Jonathon Riddell, John Layt}} <br />
{{FeatureInProgress|Okteta|Add possibility to set count of bytes per line/group|kossebau@kde.org|Friedrich W. H. Kossebau}} <br />
{{FeatureInProgress|Okteta|Allow writing structure definitions in JavaScript|alex.richardson@gmx.de|Alex Richardson}} <br />
{{FeatureDone|kdelirc/kremotecontrol|Transition from KDELirc to KRemoteControl|michael_zanetti@gmx.net|Michael Zanetti}} <br />
{{FeatureDone|KGpg|Add &quot;caff&quot; mode for keysigning|kde@opensource.sf-tec.de|Rolf Eike Beer}}<br />
{{FeatureDone|Okteta|Add KNewStuff support to the structures tool|alex.richardson@gmx.de|Alex Richardson}} <br />
{{FeatureDone|Okteta|add QIODevice for AbstractByteArrayModel and make mimetype detection use this instead of only filename |kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureDone|Okteta|Allow pinning structure beginning to a specific offset|alex.richardson@gmx.de|Alex Richardson}}<br />
{{FeatureDone|Okteta|new export formats: S-Record, Intel Hex, Base32, Ascii85, Uuencoding, Xxencoding|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureDone|Okteta|Refactor mouse input to controllers for the bytearray widget|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
|}<br />
<br />
<br><br />
<br />
= kdetoys =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|amor|Add KStatusNotifierItem support|kde@hilefoks.org|Stefan Böhmann}}<br />
{{FeatureTodo|amor|Do some refactoring in amor|kde@hilefoks.org|Stefan Böhmann}} <br />
{{FeatureTodo|amor|Implement KNewStuff support|kde@hilefoks.org|Stefan Böhmann}} <br />
{{FeatureTodo|amor|Improve theme support|kde@hilefoks.org|Stefan Böhmann}} <br />
{{FeatureTodo|amor|Revamp configure dialog|kde@hilefoks.org|Stefan Böhmann}} {{FeatureTodo|amor|Sound support|kde@hilefoks.org|Stefan Böhmann}}<br />
{{FeatureTodo|kteatime|Fork multiple instances for multiple timers|kde@hilefoks.org|Stefan Böhmann}}<br />
{{FeatureTodo|kteatime|Improved command line|kde@hilefoks.org|Stefan Böhmann}}<br />
{{FeatureTodo|kteatime|Tea runner|kde@hilefoks.org|Stefan Böhmann}}<br />
{{FeatureTodo|ktux|Revamp configure dialog|kde@hilefoks.org|Stefan Böhmann}} {{FeatureTodo|ktux|Sound support|kde@hilefoks.org|Stefan Böhmann}}<br />
{{FeatureInProgress|kteatime|Improved indicator icon painting|kde@hilefoks.org|Stefan Böhmann}}<br />
{{FeatureInProgress|kteatime|Port to KConfigXT|kde@hilefoks.org|Stefan Böhmann}} <br />
{{FeatureInProgress|kteatime|Port to KStatusNotifierItem|kde@hilefoks.org|Stefan Böhmann}} <br />
{{FeatureInProgress|kteatime|Support categories|kde@hilefoks.org|Stefan Böhmann}}<br />
{{FeatureInProgress|ktux|Do some refactoring in ktux|kde@hilefoks.org|Stefan Böhmann}} <br />
|}<br />
<br />
<br><br />
<br />
= Other =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact<br />
<br />
|}</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Schedules/KDE4/4.5_Feature_Plan&diff=52651Schedules/KDE4/4.5 Feature Plan2010-07-19T20:22:05Z<p>Frederik.gladhorn: /* kdebase-workspace */</p>
<hr />
<div>This is a list of planned features for the SC 4.5 release. <br />
<br />
See also: <br />
<br />
*[[Schedules/KDE4/4.5 Release Schedule]] <br />
*[[Schedules/KDE4/4.5 Release Goals]] <br />
*[[Schedules/KDE4/4.4 Feature Plan]]<br />
<br />
<br> Legend: <br />
<br />
*todo =&gt; not started yet <br />
*in-progress =&gt; started, but not completed yet <br />
*done =&gt; completed<br />
<br />
__TOC__ <br />
<br />
<br><br />
<br />
= kdeaccessibility =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureDone|text-to-speech|Merge kttsd and kttsmgr into one application that sits in the system tray|jpwhiting@kde.org|Jeremy Whiting}} <br />
<br />
|}<br />
<br />
<br><br />
= kdeadmin =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|system-config-printer-kde|Restore feature parity with KDEPrint3 where possible.||Jonathan Riddell, John Layt}} <br />
<br />
|}<br />
<br />
<br><br />
<br />
= kdeartwork =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact<br />
|}<br />
<br />
<br><br />
<br />
= kdebase-apps =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Dolphin|Faceted browsing|peter.penz@gmx.at|Peter Penz}}<br />
{{FeatureTodo|Dolphin|Smooth scrolling|fredrik@kde.org|Fredrik Höglund}}<br />
{{FeatureTodo|Konqueror|Improvements in session-management|edulix@gmail.com|Eduardo Robles Elvira}} <br />
{{FeatureTodo|Konqueror|Improvements in tab-bar widget|edulix@gmail.com|Eduardo Robles Elvira}} <br />
{{FeatureTodo|Konqueror|Add speeddial/thumbnails-like start page|germain@ebooksfrance.org|Germain Garand}} <br />
{{FeatureInProgress|Konqueror|New Konqueror bookmarks using Akonadi and Nepomuk, awesome bar|edulix@gmail.com|Eduardo Robles Elvira}} <br />
{{FeatureInProgress|Konsole|Adds support for SHELL_SESSION_ID|kurt.hindenburg@gmail.com|Kurt Hindenburg}}<br />
{{FeatureInProgress|nspluginviewer|npruntime scripting support|maksim@kde.org|Maks Orlovich}}<br />
{{FeatureInProgress|print-manager|New Print manager KCM and applet replacement, using C++|dantti85-pk@yahoo.com.br|Daniel Nicoletti}}<br />
{{FeatureDone|Dolphin|Drag and drop on tabs|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|Dolphin|Make menus like "View Mode", "Additional Information" and "Sort By" available as toolbar buttons|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|Dolphin|Make use of additional columns (Symbolic Link Destination, Path or URL) in KFileItemDelegate|frank78@googlemail.com|Frank Reininghaus}} <br />
{{FeatureDone|Dolphin|Show extended meta data also for files that are not indexed or in the case where Nepomuk is turned off.|peter.penz19@gmail.com|Peter Penz}} <br />
{{FeatureDone|Konsole|Allow setting tab profile from file on command-line|kurt.hindenburg@gmail.com|Kurt Hindenburg}}<br />
{{FeatureDone|Konsole|Finish implementing tab context menu|kurt.hindenburg@gmail.com|Kurt Hindenburg}}<br />
{{FeatureDone|Konsole|Modernize menu layout|sasch.pe@gmx.de|Sascha Peilicke}}<br />
|}<br />
<br />
<br><br />
<br />
= kdebase-runtime =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Locale KCM|Add support for new KLocale and KCalendarSystem features (see kdelibs section) including AM/PM, etc. Improvements to usability of existing money display options.|john@layt.net|John Layt}}<br />
{{FeatureTodo|KNotify|Route solid errors via knotify to the device notifier|wilderkde@gmail.com|Jacopo De Simoi}}<br />
{{FeatureTodo|KWallet|Single Sign On using PAM|lemma@confuego.org|Michael Leupold}}<br />
{{FeatureTodo|network kioslave|Backend for LISa|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureTodo|network kioslave|Backend for SMB|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureTodo|network kioslave|Backend to discover bluetooth devices and they services |edulix@gmail.com|Eduardo Robles Elvira}}<br />
{{FeatureTodo|network kioslave|Integrate with remote and zeroconf kioslaves|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureInProgress|bluetooth kioslave|Backend to browse bluetooth devices|edulix@gmail.com|Eduardo Robles Elvira}}<br />
{{FeatureInProgress|network kioslave|Backend for UPnP|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureDone|Locale KCM|Ability to select more Digit Sets (Bengali, Gujarati, Gurmukhi, Kannada, Khmer, Malayalam, Oriya, Tamil, Telugu and Thai). Ability to set date formats to include Calendar Era.|john@layt.net|John Layt}}<br />
{{FeatureDone|Nepomuk|Monitor file system changes via inotify|trueg@kde.org|Sebastian Trueg}}<br />
|}<br />
<br />
<br><br />
<br />
= kdebase-workspace =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact<br />
|-<br />
! style="text-align: center;" colspan="4" | Non-Plasma, Non-KWin <br />
{{FeatureTodo|BlueDevil Wizard |Write a new Wizard to pair Bluetooth devices |alex@eyeos.org|Alex Fiestas}} <br />
{{FeatureTodo|Bluetooth KCM|New KCM to manage all bluetooth configurations and devices|ereslibre@kde.org|Rafael Fernandez}}<br />
{{FeatureTodo|Icons KCM|More configurable icon sizes|christoph@maxiom.de|Christoph Feck}} <br />
{{FeatureTodo|Fonts KCM|More configurable fonts|christoph@maxiom.de|Christoph Feck}}<br />
{{FeatureTodo|Screenedges|Screenedges handling outside of kwin/plasma|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureInProgress|Activities Daemons|Daemons to handle info about activities (kded daemon and a nepomuk service)|ivan.cukic@kde.org|Ivan Cukic}}<br />
{{FeatureTodo|Systemsettings|driconf KCM|fredrik@kde.org|Fredrik Höglund}}<br />
{{FeatureDone|DeviceInfo KCM|New DeviceInfo KCM for KInfoCenter|hubnerd@ntlworld.com|David Hubner}}<br />
{{FeatureDone|Free Space Notifier Daemon|Small daemon that warns you when your home has almost no space left|knuckles@gmail.com|Ivo Anjo}}<br />
{{FeatureDone|Keyboard|Add keyboard layout indicator plasma applet|arysin@gmail.com|Andriy Rysin}}<br />
{{FeatureDone|Keyboard|Allow adding layouts by language|arysin@gmail.com|Andriy Rysin}}<br />
{{FeatureDone|Keyboard|Merge keyboard hardware and layouts configuration UI|arysin@gmail.com|Andriy Rysin}}<br />
{{FeatureDone|Keyboard|Allow configuring keyboard model without configuring layouts|arysin@gmail.com|Andriy Rysin}}<br />
{{FeatureDone|Keyboard|Allow by-window switching and KDE shortcut without configuring layouts|arysin@gmail.com|Andriy Rysin}}<br />
{{FeatureDone|Keyboard|Rewrite keyboard layouts app into kded daemon|arysin@gmail.com|Andriy Rysin}}<br />
{{FeatureDone|KInfoCenter|Add Export functionality into KInfoCenter|hubnerd@ntlworld.com|David Hubner}}<br />
{{FeatureDone|KInfoCenter|Complete rewrite of KInfoCenter|hubnerd@ntlworld.com|David Hubner}}<br />
{{FeatureDone|Oxygen configuration|Oxygen style and decoration standalone expert configuration tool|hugo@oxygen-icons.org|Hugo Pereira Da Costa}}<br />
{{FeatureDone|Oxygen style|Move window using left-mouse button on windows' empty areas|hugo@oxygen-icons.org|Hugo Pereira Da Costa}}<br />
{{FeatureDone|PowerDevil|Display brightness OSD|debfx-kde@fobos.de|Felix Geyer}}<br />
{{FeatureDone|Summary KCM|New Summary KCM for KInfoCenter|hubnerd@ntlworld.com|David Hubner}}<br />
|-<br />
! style="text-align: center;" colspan="4" | Plasma <br />
{{FeatureTodo|accounts applet|a plasma widget that is a central place to add accounts to social sites like identica and opendesktop, optimized for the netbook shell|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|battery|Weighted charge information for multiple batteries|sebas@kde.org|Sebastian Kügler}}<br />
{{FeatureTodo|folderview|Extend the configuration UI for nepomuksearch|fredrik@kde.org|Fredrik Höglund}}<br />
{{FeatureDone|folderview|"Open folder" action icon to open folder in pop-up at request instead of on hover.|fredrik@kde.org|Fredrik Höglund}}<br />
{{FeatureTodo|KRunner|Improve keyboard navigation & command history interaction|wilderkde@gmail.com|Jacopo De Simoi}}<br />
{{FeatureTodo|libplasma|Improvements to Calendar/Clock widgets. Improved config ui. Allow multiple holidays on same day. Allow multiple Holiday Regions. Weekends. etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|libplasma/extenders|put extendergroups in scrollwidgets|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|libplasma/extenders|possibility to detach exteneritems as standalone windows|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|netbook/SAL|package manager invocation from the toolbox|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|netbook/Workspace KCM|New default options for KWin: tabbox as present windows, that will be set as regular grid|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|Plasma|Welcome plasmoid|riccardo@kde.org|Riccardo Iaconelli}}<br />
{{FeatureTodo|systemtray|sort icons by category|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|crystal|New desktop search widget|sebas@kde.org|Sebastian Kügler}}<br />
{{FeatureInProgress|device-notifier|Detailed (HAL) error notifications in the device notifier|wilderkde@gmail.com|Jacopo De Simoi}}<br />
{{FeatureInProgress|device-notifier|Route all solid error notifications via knotify to the device notifier|wilderkde@gmail.com|Jacopo De Simoi}}<br />
{{FeatureDone|Extend Calendar DataEngine with Akonadi calendar incidents|Allows to query calendar events/todos from Akonadi in Plasma|gladhornKDEorg|Frederik Gladhorn}}<br />
{{FeatureInProgress|KRunner|Add some advanced sorting to KRunner using Nepomuk|l.appelhans@gmx.de|Lukas Appelhans}}<br />
{{FeatureInProgress|libplasma/theme|more transparent dialogs when the blur effect is enabled|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|netbook/SAL|support for drag and drop of items|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|networkmanagement|Network management Plasmoid|sebas@kde.org|Sebastian Kügler}}<br />
{{FeatureInProgress|notifications|new look and behaviour for notifications|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|Plasma::Theme|Themed CSS support|sebas@kde.org|Sebastian Kügler}}<br />
{{FeatureInProgress|systemtray|monochrome statusnotifier based systray icons support|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|systemtray|put hidden icons in a popup menu|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|systemtray/taskmanager|port the systray and tasks applet to windows|windows@kde.org|kde windows}}<br />
{{FeatureDone|calculator|Added optional libqalculate support in the calculator runner|agostinelli@gmail.com|Matteo Agostinelli}}<br />
{{FeatureDone|libplasma/desktop|Activity Manager UI|chani@kde.org|Chani}}<br />
{{FeatureDone|netbook/SAL|use QStandardModels|notmart@gmail.com|Marco Martin}}<br />
{{FeatureDone|notifications|split systemtray and notifications applet|notmart@gmail.com|Marco Martin}} <br />
{{FeatureDone|notifications|support for remote applets for notifications|notmart@gmail.com|Marco Martin}}<br />
{{FeatureDone|quicklaunch|Improvements from Ingomar Wesp|l.appelhans@gmx.de|Lukas Appelhans}}<br />
{{FeatureDone|tasks dataengine|export all informations needed to build an applet comparable to the current one|matthieu_gallien@yahoo.fr|Matthieu Gallien}}<br />
|-<br />
! style="text-align: center;" colspan="4" | KWin<br />
{{FeatureTodo|Aurorae|Autohiding decoration for maximized windows|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureTodo|Effects|Add close window button to each window in present windows/desktop grid|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureTodo|Effects|Move features from present windows to libkwineffects to make them available in desktop grid|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureTodo|KWin|Hint for defining the window snap rect|fredrik@kde.org|Fredrik Höglund}}<br />
{{FeatureTodo|Window Tabbing/libtaskmanager|Announce window groups to be used for grouping in tasks applet|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureInProgress|Effects|Glide effect for opening and closing windows|iori.yagami.26979@gmail.com|Iori Yagami}}<br />
{{FeatureDone|Effects|High quality scaling shader for taskbar thumbnails/present windows etc.|fredrik@kde.org|Fredrik Höglund}}<br />
{{FeatureInProgress|KWin|New flag to exclude windows from switchers|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureInProgress|KWin/plasma|New window type for Plasma dashboard|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureDone|Aurorae|Better themeing support|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureDone|Aurorae|Decorations on window sides|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureDone|Aurorae|Port Aurorae to GraphicsView and KDecoration|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureDone|Aurorae|Window tabbing support|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureDone|KCM Decoration|New decoration kcm with previews and GHNS|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureDone|Tiling|Merge window tiling branch|kde@martin-graesslin.com|Martin Gräßlin}}<br />
{{FeatureDone|kwin|hide windows from other activities|chani@kde.org|Chani}}<br />
{{FeatureDone|Effects|New blur effect|fredrik@kde.org|Fredrik Höglund}}<br />
|}<br />
<br />
<br><br />
<br />
= kdebindings =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureInProgress|C# bindings|Auto-generate the assemblies from SMOKE libs|arno@arnorehn.de|Arno Rehn}}<br />
{{FeatureInProgress|C# bindings|Split the bindings into smaller assemblies, like qyoto-qtcore, qyoto-qtgui, etc..|arno@arnorehn.de|Arno Rehn}}<br />
{{FeatureDone|Ruby bindings|Support for writing KIO slaves in Ruby|arno@arnorehn.de|Arno Rehn}}<br />
|}<br />
<br />
<br><br />
<br />
= kdeedu =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Cantor|import and polish Qalculate! backend|mail@milianw.de|Milian Wolff}}<br />
{{FeatureTodo|Kalzium|Port Kalzium to use QGV based periodic table widget|mhanwell@kde.org|Marcus D. Hanwell}}<br />
{{FeatureTodo|KStars|Display Comet Magnitudes whenever possible|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Information links in-place for each technical term|akarshsimha@gmail.com|Akarsh Simha}} {{FeatureTodo|KStars|Tool to suggest star-hopping techniques???|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureDone|KStars|Extend conjunction tool to have one object unspecified, but have a genre of objects specified instead|jsid.emor3j.fr.eu.org|Jérôme Sonrier}} <br />
{{FeatureTodo|KStars|Simulate Lunar Eclipses|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Simulate Satellites and Iridium Flares|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Social and Geographical Integration for KStars|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Marble widget for Geolocation tool|mboquien@free.fr|Médéric Boquien}} <br />
{{FeatureTodo|KStars|Better printed star charts|kstars@30doradus.org|Jason Harris}} <br />
{{FeatureTodo|KStars|Better rendering of comets/asteroids|kstars@30doradus.org|Jason Harris}} <br />
{{FeatureInProgress|KStars|Texture mapping of the skymap???|kstars@30doradus.org|Jason Harris}} <br />
{{FeatureTodo|KTurtle|Implement GHNS upload support|nielsslot@gmail.com|Niels Slot}}<br />
{{FeatureTodo|Marble|Add proper support for GPX waypoints, tracks and routes display|anders@alweb.dk|Anders Lund}}<br />
{{FeatureTodo|Marble|Export map to MxN pixel bitmap|inge@lysator.liu.se|Inge Wallin}}<br />
{{FeatureTodo|Marble|Map Contents translation|tackat@kde.org|Torsten Rahn}}<br />
{{FeatureTodo|Parley|Better support for entering synonyms|laidig_kde.org|Benjamin Schleinzer, Daniel Laidig}}<br />
{{FeatureInProgress|Marble|Bookmark support|anik.varshney@gmail.com|Kumar Anik Varshney}}<br />
{{FeatureInProgress|Marble|Follow XDG Base Directory Specification|bastianholst@gmx.de|Bastian Holst}}<br />
{{FeatureInProgress|Marble|GeoGraphicsScene for Online Service Plugins|bastianholst@gmx.de|Bastian Holst}}<br />
{{FeatureInProgress|Marble|Import geonames city data|sonu.itbhu@gmail.com|Harshit Jain}}<br />
{{FeatureInProgress|Marble|Maemo Support|earthwings@gentoo.org|Bastian Holst, Dennis Nienhüser}}<br />
{{FeatureInProgress|Marble|Various Marble speed improvements|rahn@kde.org|Torsten Rahn, Ariya Hidayat}}<br />
{{FeatureDone|KAlgebra|Support for drawing implicit curves|percy.camilo.ta@gmail.com|Percy Camilo Triveño Aucahuasi}}<br />
{{FeatureDone|KAlgebra|Type checker for expressions to statically detect errors|aleixpol@kde.org|Aleix Pol}}<br />
{{FeatureDone|KTurtle|Implement GHNS download support|nielsslot@gmail.com|Niels Slot}}<br />
{{FeatureDone|Marble|Configurable texture layer blending|jmho@c-xx.com|Jens-Michael Hoffmann}}<br />
{{FeatureDone|Marble|Download region|jmho@c-xx.com|Jens-Michael Hoffmann}}<br />
{{FeatureDone|Marble|Generalized Animations with GeoDataLookAt support|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureDone|Marble|GPS improvements|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureDone|Marble|Online-Routing|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureDone|Marble|Plugin to display APRS data|hardaker@users.sourceforge.net|Wes Hardaker}}<br />
{{FeatureDone|Marble|Support OpenStreetMap Nominatim as search backend (MarbleRunner)|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureDone|Parley|LaTeX support|laidig_kde.org|Daniel Laidig}}<br />
{{FeatureDone|Parley|Parley practice mode rewritten|gladhornKDEorg|Daniel Laidig, Frederik Gladhorn}}<br />
{{FeatureDone|Rocs|Multiple Script support|tcanabrava@kde.org|Tomaz Canabrava}}<br />
{{FeatureDone|Rocs|Node beautification in SVG|tcanabrava@kde.org|Tomaz Canabrava}}<br />
{{FeatureDone|Rocs|Plugin System|wiglot@gmail.com|Wagner Reck}}<br />
{{FeatureDone|Rocs|Redesigned the UI for better usability|tcanabrava@kde.org|Tomaz Canabrava}}<br />
{{FeatureDone|Rocs|Small plugins as examples|wiglot@gmail.com|Wagner Reck}}<br />
{{FeatureDone|Rocs|Threads for not blocking the UI|tcanabrava@kde.org|Tomaz Canabrava}}<br />
|}<br />
<br><br />
<br />
= kdegames =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact<br />
{{FeatureTodo|Granatier|Arena Editor|k.hias@gmx.de|Mathias Kraus}}<br />
{{FeatureTodo|Kajongg|Default voices for computer players|wolfgang@rohdewald.de|Wolfgang Rohdewald}}<br />
{{FeatureTodo|KBreakOut|Level Sets|fela.kde@gmail.com|Fela Winkelmolen}} {{FeatureTodo|KBreakOut|Sound|fela.kde@gmail.com|Fela Winkelmolen}}<br />
{{FeatureTodo|Kolf|Replace with Kolf 2 (help on coding and artwork desired)|majewsky@gmx.net|Stefan Majewsky}}<br />
{{FeatureTodo|KsirK|Boost playing over Jabber|kleag@free.fr|Gaël de Chalendar}}<br />
{{FeatureTodo|KsirK|rewrite AI code or at least correct most problems related in bug #170777. Volunteers wanted!|kleag@free.fr|Gaël de Chalendar}} <br />
{{FeatureTodo|KSquares|Add more types of boards: hexagonal, triangular|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureTodo|KSquares|Re-write computer player, make it act faster and more intelligent|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureTodo|KSudoku|Adapt view to show information provided by engine|joselb@gmx.net|Johannes Bergmeier}} <br />
{{FeatureTodo|KSudoku|Add new actions to GUI|joselb@gmx.net|Johannes Bergmeier}}<br />
{{FeatureTodo|KSudoku|Import new engine|joselb@gmx.net|Johannes Bergmeier}} <br />
{{FeatureTodo|KSudoku|Port game to new engine|joselb@gmx.net|Johannes Bergmeier}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211859 Recieve new puzzles over KNewStuff]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211861 Introduce handicap as a means to configure difficulty]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211866 Implement puzzle piles to organize pieces]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}212814 Quick piece grouping]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}213774 Add magnifying glass]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureInProgress|Kajongg|New traditional Mahjongg for four players|wolfgang@rohdewald.de|Wolfang Rohdewald}}<br />
{{FeatureInProgress|Kiriki|Hint|luizromario@gmail.com|Luiz Romário Santana Rios}}<br />
{{FeatureInProgress|KTuberling|A new "fast switch" between playgrounds|alex@eyeos.org|Alex Fiestas}}<br />
{{FeatureDone|KBounce|Difficulty levels|ascherfy@gmail.com|Andreas Scherf}}<br />
{{FeatureDone|KBounce|Random images as background|ascherfy@gmail.com|Andreas Scherf}}<br />
{{FeatureDone|KGoldrunner|Add the Demolition game (20 levels)|iandw.au@gmail.com|Ian Wadham}}<br />
{{FeatureDone|Kigo|Load SGF games from command line and register to mimetype 'application/x-go-sgf'|sasch.pe@gmx.de|Sascha Peilicke}}<br />
{{FeatureDone|Konquest|Merge the patch by Sean D'Epagnier to implement many features like map editing|pinaraf@pinaraf.info|Pierre Ducroquet}}<br />
{{FeatureDone|KPat|Add keyboard controls to allow playing without a mouse.|parker.coates@kdemail.net|Parker Coates}}<br />
{{FeatureDone|KPat|Create a new LibKCardGame from KPat's card scene logic. It is a private library for SC 4.5, but the intention is to make it generic, stable and friendly enough for use in other card games in a future release.|parker.coates@kdemail.net|Parker Coates}}<br />
{{FeatureDone|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}233784 Optimize size of puzzle files in default collection] (temporarily fixed for this release cycle with an awful hack)|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureDone|Palapeli|Cleanup config dialog code|majewsky@gmx.net|Stefan Majewsky}}<br />
{{FeatureDone|Palapeli|Rewrite puzzle table mouse interaction stack|majewsky@gmx.net|Stefan Majewsky}}<br />
|}<br />
<br />
<br><br />
<br />
= kdegraphics =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|gwenview|Persistent changes|agateau@kde.org|Aurelien Gateau}}<br />
{{FeatureTodo|gwenview|Show Nepomuk info in image meta info|agateau@kde.org|Aurelien Gateau}} <br />
{{FeatureTodo|libkdcraw|Make color management options more flexible|marcel.wiesweg@gmx.de|Marcel Wiesweg}} <br />
{{FeatureTodo|libksane|Add public API for available devices|kare.sars@iki.fi|K&aring;re S&auml;rs}} <br />
{{FeatureTodo|okular|Thumb creators via Okular Core|harsh@harshj.com|Harsh J}} <br />
{{FeatureDone|gwenview|Add option to disable video support|agateau@kde.org|Aurelien Gateau}}<br />
{{FeatureDone|gwenview|Add option to show image size and file size below thumbnails|agateau@kde.org|Aurelien Gateau}}<br />
{{FeatureDone|gwenview|Avoid blocking UI when modifying or saving images|agateau@kde.org|Aurelien Gateau}}<br />
{{FeatureDone|gwenview|Support for starting with multiple images|agateau@kde.org|Aurelien Gateau}}<br />
{{FeatureDone|gwenview|Wrap around when panning images|agateau@kde.org|Aurelien Gateau}}<br />
{{FeatureDone|libksane|Highlight scanned area|kare.sars@iki.fi|K&aring;re S&auml;rs}} <br />
{{FeatureDone|libksane|Improve auto-selection|kare.sars@iki.fi|K&aring;re S&auml;rs}} <br />
|}<br />
<br />
<br><br />
<br />
= kdelibs =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|katepart|Add visual block mode and make the basic commands support it|ehambergαgmail.com|Erlend Hamberg}}<br />
{{FeatureTodo|katepart|context dependent indenters|mail@milianw.de|Milian Wolff}}<br />
{{FeatureTodo|katepart|easier writing of indenters, esp. by automatically reloading them when changed|mail@milianw.de|Milian Wolff}}<br />
{{FeatureTodo|katepart|extend list of available default styles for highlighting, remove hardcoded colors from existing XML files|mail@milianw.de|Milian Wolff}}<br />
{{FeatureTodo|katepart|GHNS for scripts/indenters|mail@milianw.de|Milian Wolff}}<br />
{{FeatureTodo|katepart|improve AutoBrace plugin|mail@milianw.de|Milian Wolff}}<br />
{{FeatureTodo|katepart|list of available scripts and indenters|mail@milianw.de|Milian Wolff}}<br />
{{FeatureTodo|katepart|replace smart cursor/ranges API|cullmann@kde.org|Christoph Cullmann}}<br />
{{FeatureTodo|katepart|scripting configuration, esp. for indenters|mail@milianw.de|Milian Wolff}}<br />
{{FeatureTodo|KCalendarSystem|Add new astronomical calculation support classes to be used in kdelibs to build new astronomically based calendar systems, and in kdepim to build new version of libkholiday.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KCalendarSystem|Add new calendar systems: Bahai'i, Chinese, Buddhist, etc.|john@layt.net|John Layt}}<br />
{{FeatureTodo|KCalendarSystem|Add support for traditional/USA week numbering.|john@layt.net|John Layt}}<br />
{{FeatureTodo|kdecore|Group policy (Windows) backend for KAuth|drf@kde.org|Dario Freddi}}<br />
{{FeatureTodo|KDEPrint|Add framework for standard actions for 'Send to...' for e-mail, fax, etc by printing to PDF/PS.|john@layt.net|John Layt}} <br />
{{FeatureTodo|kdeui|API to integrate KStatusNotifierItem and KNotification: both as class api and DBus specification API|davide.bettio@kdemail.net|Davide Bettio}}<br />
{{FeatureTodo|kdeui|DBus interface in StatusNotifierItem to connect it with freedesktop notifications instances|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|kdeui|Implement caps-lock warning for password entry widgets|lemma@confuego.org|Michael Leupold}}<br />
{{FeatureTodo|kdeui|Improvements to KDatePicker/KDateTable for feature parity with Plasma Calendar widget, i.e. holiday support, select calendar system, etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|kdeui|Social About Dialog|teo@kde.org|Téo Mrnjavac}}<br />
{{FeatureTodo|kfile|Show sub-sub-folders (and so on) in breadcrumb bar|toddrme2178@gmail.com|Todd}}<br />
{{FeatureTodo|khtml|add new form widgets defined in HTML5 draft|germain@ebooksfrance.org|Germain Garand}}<br />
{{FeatureTodo|khtml|Implement more of DOM3's CSSOM View module|germain@ebooksfrance.org|Germain Garand}}<br />
{{FeatureTodo|khtml|Improvements in kwallet integration|edulix@gmail.com|Eduardo Robles Elvira}}<br />
{{FeatureTodo|khtml and kparts|More general KPart scripting interfaces|maksim@kde.org|Maks Orlovich}}<br />
{{FeatureTodo|kio|SSL client certificate support|ahartmetz@gmail.com|Andreas Hartmetz}}<br />
{{FeatureTodo|kio|SSL root certificate list GUI + backend|ahartmetz@gmail.com|Andreas Hartmetz}}<br />
{{FeatureTodo|KLocale|Add configuration for AM/PM symbols.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Add default colour to optionally display negative numbers.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Add Full date format in addition to existing short and long.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Full POSIX compliant format support for date, time, numbers and money.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement more 'named' date/time formats, e.g. ISO, UnixTimestamp, RFC3339, etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement support for number grouping other than thousands using LC_NUMERIC and LC_MONETARY formats, e.g. India 00 00 000 and China 0000 0000.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement separate backends for each supported platform/desktop to use platform localisation in place of KDE locale.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement support for additional Country Code standards: ISO Alpha 3, ISO Numeric 3, FIPS-10.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement support for Country Code sub-regions, i.e. States/Provinces/etc. Needed for new KHolidays.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KNewStuff|Support more than one payload|jmho@c-xx.com|Jens-Michael Hoffmann}}<br />
{{FeatureTodo|solid|Add parent matching to predicate parsing|wilderkde@gmail.com|Jacopo De Simoi}}<br />
{{FeatureInProgress|katepart/ktexteditor|defaultvalues, regular expressions, mirroring master, scripting of templates|jowenn(you_know)kde(here_too)org|Joseph Wenninger}}<br />
{{FeatureInProgress|khtml|Basic audio/video tag support|germain@ebooksfrance.org|Michael Howell and Germain Garand}} <br />
{{FeatureInProgress|khtml|DOM3 XPath/XPath1 support|maksim@kde.org|Maks Orlovich}}<br />
{{FeatureInProgress|khtml|Implement missing parts of DOM3's Background and Borders module|germain@ebooksfrance.org|Germain Garand}}<br />
{{FeatureInProgress|KNewStuff|Icon view mode|gladhornKDEorg|Reza Shah, Frederik Gladhorn}}<br />
{{FeatureInProgress|ktexteditor plugin|InsaneHTML_LE (zencoding like selector input (light edition)|jowenn(you_know)kde(here_too)org|Joseph Wenninger}}<br />
{{FeatureDone|katepart|loading compressed files and then saving them back in the original compression format (bug 65518)|cullmann@kde.org|Christoph Cullmann}}<br />
{{FeatureDone|KCalendarSystem|Add support for Date Difference calculations.|john@layt.net|John Layt}}<br />
{{FeatureDone|KCalendarSystem|Add support for era based calendar systems.|john@layt.net|John Layt}}<br />
{{FeatureDone|KCalendarSystem|Add new calendar systems: Japanese Era, Thai, Taiwanese.|john@layt.net|John Layt}}<br />
{{FeatureDone|KCalendarSystem|Add support for Unicode format strings for Qt and cross-platform compatability (for output only, not input).|john@layt.net|John Layt}}<br />
{{FeatureDone|kdecore|Generic shared-memory cache|mpyne@kde.org|Michael Pyne}}<br />
{{FeatureDone|kdeui|Add the KRecursiveFilterProxyModel to kdeui/itemviews|steveire@gmail.com|Stephen Kelly}}<br />
{{FeatureDone|kdeui|Redesigned icon cache|mpyne@kde.org|Michael Pyne}}<br />
{{FeatureDone|kdeui|Support alpha channel in KColor classes|christoph@maxiom.de|Christoph Feck}}<br />
{{FeatureDone|kfile|Easier access to protocols in breadcrumb bar|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|kfile|Middle-click on subfolder in the breadcrumb bar to open in a new tab|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|kfile|Scroll wheel support for breadcrumb bar|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|kfile|Show all sub-folders in breadcrumb bar|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|khtml|Selectors API1|maksim@kde.org|Maks Orlovich}}<br />
{{FeatureDone|kio|Add "apply to all" checkbox in renamedialog and allow for automatic renaming|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|kio|Add support for additional columns (e.g., smybolic link destination) in KFileItemDelegate|frank78ac@googlemail.com|Frank Reininghaus}}<br />
{{FeatureDone|kio|Better listing of applications in file "open with" context menu|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|kio|Context menu entry to open all files in their default applications|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|kio|Don't select extension in renamedialog|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|kio|Port renamedialog to KFileMetaDataWidget|toddrme2178@gmail.com|Todd}}<br />
{{FeatureDone|kio|Remember downloads via Nepomuk|trueg@kde.org|Sebastian Trueg}}<br />
{{FeatureDone|KNewStuff|Improved Download Dialog, multiple previews, better integration of details, changelog is displayed|gladhornKDEorg|Frederik Gladhorn}}<br />
{{FeatureDone|KNewStuff|Upload dialog rewritten: It now supports updating of old uploads, previews, most data that can be entered on the website and allows direct login to the account|gladhornKDEorg|Frederik Gladhorn}}<br />
{{FeatureDone|nepomuk|Redesigned Nepomuk::TagWidget which can now actually be used by applications|trueg@kde.org|Sebastian Trueg}}<br />
{{FeatureDone|solid|Broadcast mount/unmount messages across processes|wilderkde@gmail.com|Jacopo De Simoi}}<br />
|}<br />
<br><br />
<br />
= kdemultimedia =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureDone|Video Thumbnailer|Add ffmpegthumbnailer for faster video thumbnailing|ascherfy@gmail.com|Andreas Scherf}}<br />
<br />
|}<br />
<br />
<br><br />
<br />
= kdenetwork =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Kopete|Add support for urls to Bonjour plugin|kossebau@kde.org|Friedrich W. H. Kossebau}} <br />
{{FeatureTodo|Kopete|Akonadi History Plugin|roideuniverse@gmail.com|Kaushik Saurabh}} <br />
{{FeatureTodo|Kopete|Jabber Jingle ICE support|detlev.casanova@gmail.com|Detlev Casanova}} <br />
{{FeatureTodo|Kopete|Jabber Jingle video support|detlev.casanova@gmail.com|Detlev Casanova}} <br />
{{FeatureTodo|Kopete|Rich text support for ICQ|kedgedev@gmail.com|Roman Jarosz}} <br />
{{FeatureTodo|Kopete|UPnp Support|mattr@kde.org|Matt Rogers}} <br />
{{FeatureTodo|Krdc|Connection status and reconnect screen|murraytony@gmail.com|Tony Murray}}<br />
{{FeatureInProgress|KGet|Better error handling|l.appelhans@gmx.de|Lukas Appelhans}}<br />
{{FeatureInProgress|KGet|Use plasma notifications to show the progress|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureDone|KGet|Refaktor Torrent-Plugin to base on the newly created libktorrent from extragear|l.appelhans@gmx.de|Lukas Appelhans}}<br />
{{FeatureDone|Kopete|Extended video controls|fschaefer.oss(at)googlemail.com|Frank Schaefer}} <br />
{{FeatureDone|Krdc|Much improved new connection screen: more info, sortable, interactive, and better use of space|murraytony@gmail.com|Tony Murray}}<br />
|}<br />
<br />
<br><br />
<br />
= kdepim =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|KHolidays|Add support for holiday types and day-off types.|john@layt.net|John Layt}}<br />
{{FeatureInProgress|KAlarm|Port to Akonadi|djarvie@kde.org|David Jarvie}}<br />
{{FeatureInProgress|KJots|Port to Akonadi|kde-pim@kde.org|Stephen Kelly}}<br />
{{FeatureInProgress|KMail|Port to Akonadi|kde-pim@kde.org|Thomas McGuire}}<br />
{{FeatureInProgress|KOrganizer|Port to Akonadi|kde-pim@kde.org|Frank Osterfeld, Sebastian Sauer}}<br />
{{FeatureDone|KHolidays|Add support for alternative calendar systems to enable new holiday files for countries such as Iran and Israel, support for regional level files to enable new holiday files for all the Australian states and UK regions, improved metadata such as file language, support for advanced holiday calculations such as substitute days, and an improved API for more efficient queries.|john@layt.net|John Layt}}<br />
|}<br />
<br />
<br><br />
<br />
= kdeplasma-addons =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|knowledgebase|Add categories|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureTodo|knowledgebase|port knowledgebase plasmoid to new engine|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureDone|Bookmarks widget|New|kossebau@kde.org|Friedrich W. H. Kossebau}} <br />
{{FeatureDone|Character Runner|New|akreuzkamp@web.de|Anton Kreuzkamp}}<br />
{{FeatureDone|Comic Applet|Add option to show "text", "icons" or both "text and icons" for tabs|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureDone|Comic Applet|Prefetch next and previous comic strip (thx to Miha Cancula)|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureDone|KDE Observatory|Performance improvements, new data engine|sandroandrade@kde.org|Sandro Andrade}}<br />
{{FeatureDone|Mandelbrot Wallpaper|Performance improvements|jacob.benoit.1@gmail.com|Benoit Jacob}} <br />
{{FeatureDone|Mandelbrot Wallpaper|Rendering improvements (through dithering, extra iterations, and better/simpler formulas)|jacob.benoit.1@gmail.com|Benoit Jacob}}<br />
{{FeatureDone|Mandelbrot Wallpaper|Allow to import/export parameters and to export to PNG images|jacob.benoit.1@gmail.com|Benoit Jacob}}<br />
{{FeatureDone|Plasmaboard|Completly rework the current onscreen keyboard and add key layouts for tablets and mids. Better performance, better useability, less memory usage. See: http://btux1984.wordpress.com/ |bjoern@ruberg-wegener.de|Björn Ruberg}}<br />
|}<br />
<br />
<br><br />
<br />
= kdesdk =<br />
<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureInProgress|Kate|Replace old snippet plugin through TNG plugin and enhance the usability of the new plugin|jowenn(you_know)kde(here_too)org|Joseph Wenninger}}<br />
{{FeatureInProgress|Umbrello|Add a code importing wizzard|andi.fischer@NOSPAMhispeed.ch|Andi Fischer}}<br />
{{FeatureDone|Kate|Port the old XML completion plugin (xmltools)|tomastrnka@gmx.com|Tomáš Trnka}} <br />
{{FeatureDone|Lokalize|Cache filestats to improve initial project scam time|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureDone|Lokalize|Rewrite glossary engine to use QDom|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureDone|Lokalize|Return simple [but reliable] project creation back|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureDone|Lokalize|Support GNU PO file layout better by paying attention to the language specified in the PO file header (not the project-wide one)|shafff@NOSPAMukr.net|Nick Shaforostoff}}<br />
{{FeatureDone|KCachegrind|Support loading multiple profile dumps concatenated in one file|Josef.Weidendorfer@NOSPAMgmx.de|Josef Weidendorfer}}<br />
{{FeatureDone|KCachegrind|Support transparent loading of compressed profile dumps (using KFilterDev)|mwolff|mwolff}}<br />
{{FeatureDone|KCachegrind|Tool button to hide C++ template parameters in symbols|Josef.Weidendorfer@NOSPAMgmx.de|Josef Weidendorfer}}<br />
|}<br />
<br />
<br><br />
<br />
= kdeutils =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Ark|Add a "Preview with..." context menu item|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Add an options dialog (maybe)|haraldhv@stud.ntnu.no|Harald Hvaal}}<br />
{{FeatureTodo|Ark|Add feedback for the latest operation in the status bar|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Get rid of the Observer code in Kerfuffle|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Make error reporting work as expected in Kerfuffle|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Make Kerfuffle really thread-safe (and use threads in less places)|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Make the internal previewer optional|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Simplify Kerfuffle's API (jobs, interfaces etc) and try to make it stable|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Support for custom options from the compression interface (eg. a slider for selecting compression level for rar files)|haraldhv@stud.ntnu.no|Harald Hvaal}}<br />
{{FeatureTodo|Ark|Try multiple plugins for each archive type before failing|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Okteta|Add a general KPart adapter to Kasten, than finish port of Okteta KPart to Okteta Kasten|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add global toggle option for the offset display, hex or decimal|kossebau@kde.org|Friedrich W. H. Kossebau}} <br />
{{FeatureTodo|Okteta|Add Kate-like combined dialogs to query for actions on files|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|add Kate-like search tool|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add Okular like embedded notifications|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|add support for import by drop, both url and data|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|add support for memory mapping of files and 64-bit addressing|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|add support for jobs like io, printing, string search or filter|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add view profiles, incl. editor/manager|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|copy again puts also a value or char variant of the data to clipboard|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Improve the titels of the changes to the bytearray to be more descriptive, best using ids to avoid text string|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Make all user interaction in the KastenCore managers plugin-based|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Merge row and column widgets into one|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Store bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Store bookmarks and other view settings for next load|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|printer-applet|Restore feature parity with KDEPrint3 where possible.||Jonathon Riddell, John Layt}} <br />
{{FeatureInProgress|Okteta|Add possibility to set count of bytes per line/group|kossebau@kde.org|Friedrich W. H. Kossebau}} <br />
{{FeatureInProgress|Okteta|Allow writing structure definitions in JavaScript|alex.richardson@gmx.de|Alex Richardson}} <br />
{{FeatureDone|kdelirc/kremotecontrol|Transition from KDELirc to KRemoteControl|michael_zanetti@gmx.net|Michael Zanetti}} <br />
{{FeatureDone|KGpg|Add &quot;caff&quot; mode for keysigning|kde@opensource.sf-tec.de|Rolf Eike Beer}}<br />
{{FeatureDone|Okteta|Add KNewStuff support to the structures tool|alex.richardson@gmx.de|Alex Richardson}} <br />
{{FeatureDone|Okteta|add QIODevice for AbstractByteArrayModel and make mimetype detection use this instead of only filename |kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureDone|Okteta|Allow pinning structure beginning to a specific offset|alex.richardson@gmx.de|Alex Richardson}}<br />
{{FeatureDone|Okteta|new export formats: S-Record, Intel Hex, Base32, Ascii85, Uuencoding, Xxencoding|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureDone|Okteta|Refactor mouse input to controllers for the bytearray widget|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
|}<br />
<br />
<br><br />
<br />
= kdetoys =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|amor|Add KStatusNotifierItem support|kde@hilefoks.org|Stefan Böhmann}}<br />
{{FeatureTodo|amor|Do some refactoring in amor|kde@hilefoks.org|Stefan Böhmann}} <br />
{{FeatureTodo|amor|Implement KNewStuff support|kde@hilefoks.org|Stefan Böhmann}} <br />
{{FeatureTodo|amor|Improve theme support|kde@hilefoks.org|Stefan Böhmann}} <br />
{{FeatureTodo|amor|Revamp configure dialog|kde@hilefoks.org|Stefan Böhmann}} {{FeatureTodo|amor|Sound support|kde@hilefoks.org|Stefan Böhmann}}<br />
{{FeatureTodo|kteatime|Fork multiple instances for multiple timers|kde@hilefoks.org|Stefan Böhmann}}<br />
{{FeatureTodo|kteatime|Improved command line|kde@hilefoks.org|Stefan Böhmann}}<br />
{{FeatureTodo|kteatime|Tea runner|kde@hilefoks.org|Stefan Böhmann}}<br />
{{FeatureTodo|ktux|Revamp configure dialog|kde@hilefoks.org|Stefan Böhmann}} {{FeatureTodo|ktux|Sound support|kde@hilefoks.org|Stefan Böhmann}}<br />
{{FeatureInProgress|kteatime|Improved indicator icon painting|kde@hilefoks.org|Stefan Böhmann}}<br />
{{FeatureInProgress|kteatime|Port to KConfigXT|kde@hilefoks.org|Stefan Böhmann}} <br />
{{FeatureInProgress|kteatime|Port to KStatusNotifierItem|kde@hilefoks.org|Stefan Böhmann}} <br />
{{FeatureInProgress|kteatime|Support categories|kde@hilefoks.org|Stefan Böhmann}}<br />
{{FeatureInProgress|ktux|Do some refactoring in ktux|kde@hilefoks.org|Stefan Böhmann}} <br />
|}<br />
<br />
<br><br />
<br />
= Other =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact<br />
<br />
|}</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Development/Tutorials/Collaboration/HotNewStuff/Updates&diff=52489Development/Tutorials/Collaboration/HotNewStuff/Updates2010-07-07T20:02:39Z<p>Frederik.gladhorn: /* DownloadManager */</p>
<hr />
<div>{{Template:I18n/Language Navigation Bar|Development/Tutorials/Collaboration/HotNewStuff/Updates}} <br />
<br />
{{TutorialBrowser|<br />
series=[[../|HotNewStuff]]|<br />
name=Get Hot New Stuff 3 Introduction|<br />
pre=[[Development/Tutorials/Collaboration/HotNewStuff/Introduction|Get Hot New Stuff 3 - Download]]|<br />
next=[[Development/Tutorials/Collaboration/HotNewStuff/Upload|Get Hot New Stuff 3 - Upload]]|<br />
reading=[http://api.kde.org/4.x-api/kdelibs-apidocs/knewstuff/html/classKNS3_1_1DownloadManager.html API Documentation]<br />
}} <br />
<br />
== Overview ==<br />
Just like firefox informs you of updates to your addons, KNewStuff can let you check for updates since KDE SC 4.5.<br />
<br />
There is an example in [http://websvn.kde.org/trunk/KDE/kdeexamples/knewstuff/updatechecker/ kdeexamples].<br />
<br />
== DownloadManager ==<br />
The class in question is DownloadManager.<br />
<br />
Use an instance of DownloadManager in your class:<br />
<code cppqt="cppqt"><br />
m_downloadManager = new KNS3::DownloadManager("plasmoids.knsrc", this);<br />
<br />
// to know when checking for updates is done<br />
connect(m_downloadManager, SIGNAL(searchResult(KNS3::Entry::List)), <br />
this, SLOT(slotUpdatesFound(KNS3::Entry::List)));<br />
<br />
// to know about finished installations<br />
connect(m_downloadManager, SIGNAL(entryStatusChanged(KNS3::Entry)), <br />
this, SLOT(entryStatusChanged(KNS3::Entry)));<br />
<br />
// start checking for updates<br />
m_downloadManager->checkForUpdates();<br />
</code><br />
<br />
The entryStatusChanged signal informs you when you installed an entry. If you don't want to make use of that possibility, you can ignore the signal.<br />
<code cppqt="cppqt"><br />
void UpdateChecker::slotUpdatesFound(const KNS3::Entry::List& updates)<br />
{<br />
m_updates = updates;<br />
foreach (const KNS3::Entry& entry, updates) {<br />
kDebug() << entry.name();<br />
}<br />
}</code><br />
To install an entry you can '''show the download dialog''' or do it without the dialog by using:<br />
<code cppqt="cppqt"><br />
m_downloadManager->installEntry(entry);<br />
</code></div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Projects/Edu/Parley/Theme_Creation&diff=51796Projects/Edu/Parley/Theme Creation2010-05-30T13:39:30Z<p>Frederik.gladhorn: Blanked the page</p>
<hr />
<div></div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Schedules/KDE4/4.5_Feature_Plan&diff=50673Schedules/KDE4/4.5 Feature Plan2010-04-10T21:42:51Z<p>Frederik.gladhorn: /* kdeedu */</p>
<hr />
<div>This is a list of planned features for the SC 4.5 release. <br />
<br />
See also: <br />
<br />
*[[Schedules/KDE4/4.5 Release Schedule]] <br />
*[[Schedules/KDE4/4.5 Release Goals]] <br />
*[[Schedules/KDE4/4.4 Feature Plan]]<br />
<br />
<br> Legend: <br />
<br />
*todo =&gt; not started yet <br />
*in-progress =&gt; started, but not completed yet <br />
*done =&gt; completed<br />
<br />
__TOC__ <br />
<br />
<br><br />
<br />
= kdeadmin =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|system-config-printer-kde|Restore feature parity with KDEPrint3 where possible.||Jonathan Riddell, John Layt}} <br />
<br />
|}<br />
<br />
<br><br />
<br />
= kdeartwork =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact<br />
|}<br />
<br />
<br><br />
<br />
= kdebase-apps =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Konqueror|Improvements in session-management|edulix@gmail.com|Eduardo Robles Elvira}} <br />
{{FeatureTodo|Konqueror|Improvements in tab-bar widget|edulix@gmail.com|Eduardo Robles Elvira}} <br />
{{FeatureInProgress|Konqueror|New Konqueror bookmarks using Akonadi and Nepomuk, awesome bar|edulix@gmail.com|Eduardo Robles Elvira}} <br />
|}<br />
<br />
<br><br />
<br />
= kdebase-runtime =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|KWallet|Single Sign On using PAM|lemma@confuego.org|Michael Leupold}}<br />
{{FeatureTodo|network kioslave|Backend for LISa|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureTodo|network kioslave|Backend for SMB|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureTodo|network kioslave|Integrate with remote and zeroconf kioslaves|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureTodo|Locale KCM|Add support for new KLocale features (see kdelibs section) including Digit Groups, AM/PM, etc. Improvements to usability of existing money display options.|john@layt.net|John Layt}}<br />
{{FeatureInProgress|network kioslave|Backend for UPnP|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureTodo|network kioslave| Backend to discover bluetooth devices and they services |edulix@gmail.com|Eduardo Robles Elvira}}<br />
{{FeatureInProgress|bluetooth kioslave|Backend to browse bluetooth devices|edulix@gmail.com|Eduardo Robles Elvira}}<br />
|}<br />
<br />
<br><br />
<br />
= kdebase-workspace =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact<br />
|-<br />
! style="text-align: center;" colspan="4" | Non-Plasma, Non-KWin <br />
{{FeatureTodo|Icons KCM|More configurable icon sizes|christoph@maxiom.de|Christoph Feck}} <br />
{{FeatureTodo|Fonts KCM|More configurable fonts|christoph@maxiom.de|Christoph Feck}} <br />
{{FeatureTodo|Solid|Write a new Bluetooth backend |alex@eyeos.org|Alex Fiestas}} <br />
<br />
<br />
|-<br />
! style="text-align: center;" colspan="4" | Plasma <br />
{{FeatureInProgress|systemtray|monochrome statusnotifier based systray icons support|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|systemtray|sort icons by category|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|systemtray|put hidden icons in a popup menu|notmart@gmail.com|Marco Martin}}<br />
{{FeatureDone|notifications|split systemtray and notifications applet|notmart@gmail.com|Marco Martin}} <br />
{{FeatureInProgress|notifications|new look and behaviour for notifications|notmart@gmail.com|Marco Martin}}<br />
{{FeatureDone|notifications|support for remote applets for notifications|notmart@gmail.com|Marco Martin}}<br />
{{FeatureDone|netbook/SAL|use QStandardModels|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|netbook/SAL|support for drag and drop of items|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|libplasma/extenders|put extendergroups in scrollwidgets|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|libplasma/extenders|possibility to detach exteneritems as standalone windows|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|libplasma/theme|more transparent dialogs when the blur effect is enabled|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|libplasma/desktop|Activity Manager UI|chani@kde.org|Chani}}<br />
{{FeatureTodo|accounts applet|a plasma widget that is a central place to add accounts to social sites like identica and opendesktop, optimized for the netbook shell|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|libplasma|Improvements to Calendar/Clock widgets. Improved config ui. Allow multiple holidays on same day. Allow multiple Holiday Regions. Weekends. etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|folderview|"Open folder" icon to open folder into pop-up at request instead of automatically.|bigras.bruno@gmail.com|Bruno Bigras}}<br />
{{FeatureInProgress|Extend Calendar DataEngine with Akonadi calendar incidents|Allows to query calendar events/todos from Akonadi in Plasma|gladhornKDEorg|Frederik Gladhorn}}<br />
|}<br />
<br />
<br><br />
<br />
= kdeedu =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|KStars|Display Comet Magnitudes whenever possible|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Information links in-place for each technical term|akarshsimha@gmail.com|Akarsh Simha}} {{FeatureTodo|KStars|Tool to suggest star-hopping techniques???|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Extend conjunction tool to have one object unspecified, but have a genre of objects specified instead|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Simulate Lunar Eclipses|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Simulate Satellites and Iridium Flares|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Social and Geographical Integration for KStars|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Marble widget for Geolocation tool|mboquien@free.fr|Médéric Boquien}} <br />
{{FeatureTodo|KStars|Better printed star charts|kstars@30doradus.org|Jason Harris}} <br />
{{FeatureTodo|KStars|Better rendering of comets/asteroids|kstars@30doradus.org|Jason Harris}} <br />
{{FeatureTodo|KStars|Texture mapping of the skymap???|kstars@30doradus.org|Jason Harris}} <br />
{{FeatureTodo|Marble|Add proper support for GPX waypoints, tracks and routes display|anders@alweb.dk|Anders Lund}}<br />
{{FeatureTodo|Marble|Export map to MxN pixel bitmap|inge@lysator.liu.se|Inge Wallin}}<br />
{{FeatureTodo|Marble|Map Contents translation|tackat@kde.org|Torsten Rahn}}<br />
{{FeatureTodo|Kalzium|Port Kalzium to use QGV based periodic table widget|mhanwell@kde.org|Marcus D. Hanwell}}<br />
{{FeatureDone|Marble|Support OpenStreetMap Nominatim as search backend (MarbleRunner)|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureInProgress|Marble|Generalized Animations with GeoDataLookAt support|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureInProgress|Marble|Online-Routing|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureDone|KAlgebra|Type checker for expressions to statically detect errors|aleixpol@kde.org|Aleix Pol}}<br />
{{FeatureInProgress|Parley|Parley practice mode rewritten|gladhornKDEorg|Daniel Laidig, Frederik Gladhorn}}<br />
|}<br />
<br><br />
<br />
= kdegames =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureDone|KBounce|Difficulty levels|ascherfy@gmail.com|Andreas Scherf}}<br />
{{FeatureDone|KBounce|Random images as background|ascherfy@gmail.com|Andreas Scherf}}<br />
{{FeatureTodo|KBreakOut|Level Sets|fela.kde@gmail.com|Fela Winkelmolen}} {{FeatureTodo|KBreakOut|Sound|fela.kde@gmail.com|Fela Winkelmolen}} {{FeatureTodo|Kolf|Replace with Kolf 2 (help on coding and artwork desired)|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|KsirK|rewrite AI code or at least correct most problems related in bug #170777. Volunteers wanted!|kleag@free.fr|Gaël de Chalendar}} <br />
{{FeatureTodo|KsirK|Boost playing over Jabber|kleag@free.fr|Gaël de Chalendar}}<br />
{{FeatureTodo|KSquares|Re-write computer player, make it act faster and more intelligent|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureTodo|KSquares|Add more types of boards: hexagonal, triangular|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureTodo|KSudoku|Import new engine|joselb@gmx.net|Johannes Bergmeier}} <br />
{{FeatureTodo|KSudoku|Port game to new engine|joselb@gmx.net|Johannes Bergmeier}} <br />
{{FeatureTodo|KSudoku|Adapt view to show information provided by engine|joselb@gmx.net|Johannes Bergmeier}} <br />
{{FeatureTodo|KSudoku|Add new actions to GUI|joselb@gmx.net|Johannes Bergmeier}}<br />
{{FeatureTodo|Granatier|Arena Editor|k.hias@gmx.de|Mathias Kraus}}<br />
{{FeatureInProgress|Kajongg|New traditional Mahjongg for four players|wolfgang@rohdewald.de|Wolfang Rohdewald}}<br />
{{FeatureDone|Kigo|Load SGF games from command line and register to mimetype 'application/x-go-sgf'|sasch.pe@gmx.de|Sascha Peilicke}}<br />
{{FeatureInProgress|KTuberling|A new "fast switch" between playgrounds|alex@eyeos.org|Alex Fiestas}}<br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211859 Recieve new puzzles over KNewStuff]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211861 Introduce handicap as a means to configure difficulty]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211866 Implement puzzle piles to organize pieces]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}212814 Quick piece grouping]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}213774 Add magnifying glass]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Konquest|Merge the patch by Sean D'Epagnier to implement many features like map editing|pinaraf@pinaraf.info|Pierre Ducroquet}}<br />
|}<br />
<br />
<br><br />
<br />
= kdegraphics =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|libkdcraw|Make color management options more flexible|marcel.wiesweg@gmx.de|Marcel Wiesweg}} <br />
{{FeatureDone|libksane|Improve auto-selection|kare.sars@iki.fi|K&aring;re S&auml;rs}} <br />
{{FeatureTodo|gwenview|Show Nepomuk info in image meta info|agateau@kde.org|Aurelien Gateau}} <br />
{{FeatureTodo|gwenview|Persistent changes|agateau@kde.org|Aurelien Gateau}}<br />
{{FeatureTodo|okular|Thumb creators via Okular Core|harsh@harshj.com|Harsh J}} <br />
<br />
|}<br />
<br />
<br><br />
<br />
= kdelibs =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|katepart|Add visual block mode and make the basic commands support it|ehambergαgmail.com|Erlend Hamberg}}<br />
{{FeatureTodo|kdeui|API to integrate KStatusNotifierItem and KNotification: both as class api and DBus specification API|davide.bettio@kdemail.net|Davide Bettio}}<br />
{{FeatureTodo|KCalendarSystem|Add new astronomical calculation support classes to be used in kdelibs to build new astronomically based calendar systems, and in kdepim to build new version of libkholiday.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KCalendarSystem|Add new calendar systems: Bahaii, Coptic, Ethiopean, Chinese, Japanese, Buddhist, etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|kdecore|Group policy (Windows) backend for KAuth|drf@kde.org|Dario Freddi}}<br />
{{FeatureTodo|KDEPrint|If no file printing support in Qt4.5, migrate FilePrinter class from Okular to enable file printing for all apps via QPrinter. To be discussed on k-c-d first.|john@layt.net|John Layt}}<br />
{{FeatureTodo|KDEPrint|Add framework for standard actions for 'Send to...' for e-mail, fax, etc by printing to PDF/PS.|john@layt.net|John Layt}} <br />
{{FeatureTodo|kdeui|Implement caps-lock warning for password entry widgets|lemma@confuego.org|Michael Leupold}} <br />
{{FeatureTodo|kio|Better file information in file conflict dialog|toddrme2178@gmail.com|Todd}}<br />
{{FeatureTodo|KLocale|Implement support for number grouping other than thousands using LC_NUMERIC and LC_MONETARY formats, e.g. India 00 00 000 and China 0000 0000.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Add configuration for AM/PM symbols.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Full POSIX compliant format support for date, time, numbers and money.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement more 'named' date/time formats, e.g. ISO, UnixTimestamp, RFC3339, etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Add Full date format in addition to existing short and long.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Add default colour to optionally display negative numbers.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement separate backends for each supported platform/desktop to use platform localisation in place of KDE locale.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement support for additional Country Code standards: ISO Alpha 3, ISO Numeric 3, FIPS-10.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement support for Country Code sub-regions, i.e. States/Provinces/etc. Needed for new KHolidays.|john@layt.net|John Layt}} <br />
{{FeatureTodo|kdeui|Improvements to KDatePicker/KDateTable for feature parity with Plasma Calendar widget, i.e. holiday support, select calendar system, etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|kdeui|DBus interface in StatusNotifierItem to connect it with freedesktop notifications instances|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|Khtml|Improvements in kwallet integration|edulix@gmail.com|Eduardo Robles Elvira}}<br />
{{FeatureTodo|Khtml|Basic audio/video tag support|germain@ebooksfrance.org|Michael Howell and Germain Garand}} <br />
{{FeatureTodo|Khtml|Implement more of DOM3's CSSOM View module|germain@ebooksfrance.org|Germain Garand}}<br />
{{FeatureDone|KNewStuff|Improved Download Dialog, multiple previews, better integration of details, changelog is displayed|gladhornKDEorg|Frederik Gladhorn}}<br />
{{FeatureInProgress|KNewStuff|Icon view mode|gladhornKDEorg|Reza Shah, Frederik Gladhorn}}<br />
{{FeatureDone|KNewStuff|Upload dialog rewritten: It now supports updating of old uploads, previews, most data that can be entered on the website and allows direct login to the account|gladhornKDEorg|Frederik Gladhorn}}<br />
|}<br />
<br />
<br><br />
<br />
= kdemultimedia =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|JuK|Remove Qt/KDE3 support lib requirements -- will move to KDE 4.5 feature plan|mpyne@kde.org|Michael Pyne}}<br />
{{FeatureTodo|JuK|Allow setting covers directly from URLs supported by KIO - drag/drop already allows this however -- will move to KDE 4.5 feature plan|mpyne.org|Michael Pyne}}<br />
<br />
|}<br />
<br />
<br><br />
<br />
= kdenetwork =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Kopete|UPnp Support|mattr@kde.org|Matt Rogers}} <br />
{{FeatureTodo|Kopete|Jabber Jingle video support|detlev.casanova@gmail.com|Detlev Casanova}} <br />
{{FeatureTodo|Kopete|Jabber Jingle ICE support|detlev.casanova@gmail.com|Detlev Casanova}} <br />
{{FeatureTodo|Kopete|Add support for urls to Bonjour plugin|kossebau@kde.org|Friedrich W. H. Kossebau}} <br />
{{FeatureTodo|Kopete|Rich text support for ICQ|kedgedev@gmail.com|Roman Jarosz}} <br />
{{FeatureTodo|Krdc|Connection status screen and reconnect|murraytony@gmail.com|Tony Murray}}<br />
{{FeatureDone|Krdc|Much improved new connection screen: more info, sortable, interactive, and better use of space|murraytony@gmail.com|Tony Murray}}<br />
{{FeatureInProgress|KGet|Use plasma notifications to show the progress|mat69@gmx.net|Matthias Fuchs}}<br />
|}<br />
<br />
<br><br />
<br />
= kdeplasma-addons =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|knowledgebase|port knowledgebase plasmoid to new engine|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureTodo|knowledgebase|Add categories|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureDone|Bookmarks widget|New|kossebau@kde.org|Friedrich W. H. Kossebau}} <br />
{{FeatureDone|Mandelbrot Wallpaper|Performance improvements|jacob.benoit.1@gmail.com|Benoit Jacob}} <br />
{{FeatureDone|Mandelbrot Wallpaper|Rendering improvements (through dithering, extra iterations, and better/simpler formulas)|jacob.benoit.1@gmail.com|Benoit Jacob}}<br />
{{FeatureDone|Mandelbrot Wallpaper|Allow to import/export parameters and to export to PNG images|jacob.benoit.1@gmail.com|Benoit Jacob}}<br />
{{FeatureDone|Comic Applet|Add option to show "text", "icons" or both "text and icons" for tabs|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureDone|Comic Applet|Prefetch next and previous comic strip (thx to Miha Cancula)|mat69@gmx.net|Matthias Fuchs}}<br />
|}<br />
<br />
<br><br />
<br />
= kdesdk =<br />
<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Lokalize|Integrate snowball stemmer for glossary|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureTodo|Lokalize|Continue implementing XLIFF spec|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureTodo|Lokalize|Segmentation [editing] functionality|shafff@NOSPAMukr.net |Nick Shaforostoff}} <br />
{{FeatureTodo|Lokalize|Remote translation memories|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureTodo|Lokalize|Integrate with nepomuk (fast stats retrieval, tag cloud - incl sharing!)|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureTodo|Kate|Replace old snippet plugin through TNG plugin|jowenn(you_know)kde(here_too)org|Joseph Wenninger}} <br />
|}<br />
<br />
<br><br />
<br />
= kdeutils =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Ark|Add an options dialog (maybe)|haraldhv@stud.ntnu.no|Harald Hvaal}}<br />
{{FeatureTodo|Ark|Support for custom options from the compression interface (eg. a slider for selecting compression level for rar files)|haraldhv@stud.ntnu.no|Harald Hvaal}}<br />
{{FeatureTodo|Ark|Add feedback for the latest operation in the status bar|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Add feedback for the latest operation in the status bar|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Try multiple plugins for each archive type before failing|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Make the internal previewer optional|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|KGpg|Make keyserver actions possible to use on multiple keyservers at once|kde@opensource.sf-tec.de|Rolf Eike Beer}}<br />
{{FeatureTodo|Okteta|add Kate-like search tool|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|add support for import by drop, both url and data|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|copy again puts also a value or char variant of the data to clipboard|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|add support for memory mapping of files and 64-bit addressing|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|add support for jobs like io, printing, string search or filter|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add Okular like embedded notifications|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Store bookmarks and other view settings for next load|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add global toggle option for the offset display, hex or decimal|kossebau@kde.org|Friedrich W. H. Kossebau}} <br />
{{FeatureTodo|Okteta|Add Kate-like combined dialogs to query for actions on files|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Improve the titels of the changes to the bytearray to be more descriptive, best using ids to avoid text string|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Merge row and column widgets into one|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Refactor mouse input to controllers for the bytearray widget|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add a general KPart adapter to Kasten, than finish port of Okteta KPart to Okteta Kasten|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Make all user interaction in the KastenCore managers plugin-based|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Store bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add KNewStuff support to the structures tool|alex.richardson@gmx.de|Alex Richardson}} <br />
{{FeatureTodo|printer-applet|Restore feature parity with KDEPrint3 where possible.||Jonathon Riddell, John Layt}} <br />
{{FeatureInProgress|kdelirc/kremotecontrol|Transition from KDELirc to KRemoteControl|michael_zanetti@gmx.net|Michael Zanetti}} <br />
{{FeatureInProgress|Okteta|Allow writing structure definitions in JavaScript|alex.richardson@gmx.de|Alex Richardson}} <br />
{{FeatureDone|Okteta|new export formats: S-Record, Intel Hex, Base32, Ascii85, Uuencoding, Xxencoding|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureDone|Okteta|add QIODevice for AbstractByteArrayModel and make mimetype detection use this instead of only filename |kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
|}<br />
<br />
<br><br />
<br />
= Other =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact<br />
<br />
|}</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Schedules/KDE4/4.5_Feature_Plan&diff=50659Schedules/KDE4/4.5 Feature Plan2010-04-09T08:42:05Z<p>Frederik.gladhorn: /* kdebase-workspace */</p>
<hr />
<div>This is a list of planned features for the SC 4.5 release. <br />
<br />
See also: <br />
<br />
*[[Schedules/KDE4/4.5 Release Schedule]] <br />
*[[Schedules/KDE4/4.5 Release Goals]] <br />
*[[Schedules/KDE4/4.4 Feature Plan]]<br />
<br />
<br> Legend: <br />
<br />
*todo =&gt; not started yet <br />
*in-progress =&gt; started, but not completed yet <br />
*done =&gt; completed<br />
<br />
__TOC__ <br />
<br />
<br><br />
<br />
= kdeadmin =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|system-config-printer-kde|Restore feature parity with KDEPrint3 where possible.||Jonathan Riddell, John Layt}} <br />
<br />
|}<br />
<br />
<br><br />
<br />
= kdeartwork =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact<br />
|}<br />
<br />
<br><br />
<br />
= kdebase-apps =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Konqueror|Improvements in session-management|edulix@gmail.com|Eduardo Robles Elvira}} <br />
{{FeatureTodo|Konqueror|Improvements in tab-bar widget|edulix@gmail.com|Eduardo Robles Elvira}} <br />
{{FeatureInProgress|Konqueror|New Konqueror bookmarks using Akonadi and Nepomuk, awesome bar|edulix@gmail.com|Eduardo Robles Elvira}} <br />
|}<br />
<br />
<br><br />
<br />
= kdebase-runtime =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|KWallet|Single Sign On using PAM|lemma@confuego.org|Michael Leupold}}<br />
{{FeatureTodo|network kioslave|Backend for LISa|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureTodo|network kioslave|Backend for SMB|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureTodo|network kioslave|Integrate with remote and zeroconf kioslaves|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureTodo|Locale KCM|Add support for new KLocale features (see kdelibs section) including Digit Groups, AM/PM, etc. Improvements to usability of existing money display options.|john@layt.net|John Layt}}<br />
{{FeatureInProgress|network kioslave|Backend for UPnP|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureTodo|network kioslave| Backend to discover bluetooth devices and they services |edulix@gmail.com|Eduardo Robles Elvira}}<br />
{{FeatureInProgress|bluetooth kioslave|Backend to browse bluetooth devices|edulix@gmail.com|Eduardo Robles Elvira}}<br />
|}<br />
<br />
<br><br />
<br />
= kdebase-workspace =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact<br />
|-<br />
! style="text-align: center;" colspan="4" | Non-Plasma, Non-KWin <br />
{{FeatureTodo|Icons KCM|More configurable icon sizes|christoph@maxiom.de|Christoph Feck}} <br />
{{FeatureTodo|Fonts KCM|More configurable fonts|christoph@maxiom.de|Christoph Feck}} <br />
{{FeatureTodo|Solid|Write a new Bluetooth backend |alex@eyeos.org|Alex Fiestas}} <br />
<br />
<br />
|-<br />
! style="text-align: center;" colspan="4" | Plasma <br />
{{FeatureInProgress|systemtray|monochrome statusnotifier based systray icons support|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|systemtray|sort icons by category|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|systemtray|put hidden icons in a popup menu|notmart@gmail.com|Marco Martin}}<br />
{{FeatureDone|notifications|split systemtray and notifications applet|notmart@gmail.com|Marco Martin}} <br />
{{FeatureInProgress|notifications|new look and behaviour for notifications|notmart@gmail.com|Marco Martin}}<br />
{{FeatureDone|notifications|support for remote applets for notifications|notmart@gmail.com|Marco Martin}}<br />
{{FeatureDone|netbook/SAL|use QStandardModels|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|netbook/SAL|support for drag and drop of items|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|libplasma/extenders|put extendergroups in scrollwidgets|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|libplasma/extenders|possibility to detach exteneritems as standalone windows|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|libplasma/theme|more transparent dialogs when the blur effect is enabled|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|libplasma/desktop|Activity Manager UI|chani@kde.org|Chani}}<br />
{{FeatureTodo|accounts applet|a plasma widget that is a central place to add accounts to social sites like identica and opendesktop, optimized for the netbook shell|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|libplasma|Improvements to Calendar/Clock widgets. Improved config ui. Allow multiple holidays on same day. Allow multiple Holiday Regions. Weekends. etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|folderview|"Open folder" icon to open folder into pop-up at request instead of automatically.|bigras.bruno@gmail.com|Bruno Bigras}}<br />
{{FeatureInProgress|Extend Calendar DataEngine with Akonadi calendar incidents|Allows to query calendar events/todos from Akonadi in Plasma|gladhornKDEorg|Frederik Gladhorn}}<br />
|}<br />
<br />
<br><br />
<br />
= kdeedu =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|KStars|Display Comet Magnitudes whenever possible|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Information links in-place for each technical term|akarshsimha@gmail.com|Akarsh Simha}} {{FeatureTodo|KStars|Tool to suggest star-hopping techniques???|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Extend conjunction tool to have one object unspecified, but have a genre of objects specified instead|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Simulate Lunar Eclipses|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Simulate Satellites and Iridium Flares|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Social and Geographical Integration for KStars|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Marble widget for Geolocation tool|mboquien@free.fr|Médéric Boquien}} <br />
{{FeatureTodo|KStars|Better printed star charts|kstars@30doradus.org|Jason Harris}} <br />
{{FeatureTodo|KStars|Better rendering of comets/asteroids|kstars@30doradus.org|Jason Harris}} <br />
{{FeatureTodo|KStars|Texture mapping of the skymap???|kstars@30doradus.org|Jason Harris}} <br />
{{FeatureTodo|Marble|Add proper support for GPX waypoints, tracks and routes display|anders@alweb.dk|Anders Lund}}<br />
{{FeatureTodo|Marble|Export map to MxN pixel bitmap|inge@lysator.liu.se|Inge Wallin}}<br />
{{FeatureTodo|Marble|Map Contents translation|tackat@kde.org|Torsten Rahn}}<br />
{{FeatureTodo|Kalzium|Port Kalzium to use QGV based periodic table widget|mhanwell@kde.org|Marcus D. Hanwell}}<br />
{{FeatureDone|Marble|Support OpenStreetMap Nominatim as search backend (MarbleRunner)|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureInProgress|Marble|Generalized Animations with GeoDataLookAt support|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureInProgress|Marble|Online-Routing|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureDone|KAlgebra|Type checker for expressions to statically detect errors|aleixpol@kde.org|Aleix Pol}}<br />
|}<br />
<br />
<br><br />
<br />
= kdegames =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|KBreakOut|Level Sets|fela.kde@gmail.com|Fela Winkelmolen}} {{FeatureTodo|KBreakOut|Sound|fela.kde@gmail.com|Fela Winkelmolen}} {{FeatureTodo|Kolf|Replace with Kolf 2 (help on coding and artwork desired)|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|KsirK|rewrite AI code or at least correct most problems related in bug #170777. Volunteers wanted!|kleag@free.fr|Gaël de Chalendar}} <br />
{{FeatureTodo|KsirK|Boost playing over Jabber|kleag@free.fr|Gaël de Chalendar}}<br />
{{FeatureTodo|KSquares|Re-write computer player, make it act faster and more intelligent|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureTodo|KSquares|Add more types of boards: hexagonal, triangular|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureTodo|KSudoku|Import new engine|joselb@gmx.net|Johannes Bergmeier}} <br />
{{FeatureTodo|KSudoku|Port game to new engine|joselb@gmx.net|Johannes Bergmeier}} <br />
{{FeatureTodo|KSudoku|Adapt view to show information provided by engine|joselb@gmx.net|Johannes Bergmeier}} <br />
{{FeatureTodo|KSudoku|Add new actions to GUI|joselb@gmx.net|Johannes Bergmeier}}<br />
{{FeatureTodo|Granatier|Arena Editor|k.hias@gmx.de|Mathias Kraus}}<br />
{{FeatureInProgress|Kajongg|New traditional Mahjongg for four players|wolfgang@rohdewald.de|Wolfang Rohdewald}}<br />
{{FeatureDone|Kigo|Load SGF games from command line and register to mimetype 'application/x-go-sgf'|sasch.pe@gmx.de|Sascha Peilicke}}<br />
{{FeatureInProgress|KTuberling|A new "fast switch" between playgrounds|alex@eyeos.org|Alex Fiestas}}<br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211859 Recieve new puzzles over KNewStuff]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211861 Introduce handicap as a means to configure difficulty]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211866 Implement puzzle piles to organize pieces]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}212814 Quick piece grouping]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}213774 Add magnifying glass]|majewsky@gmx.net|Stefan Majewsky}} <br />
|}<br />
<br />
<br><br />
<br />
= kdegraphics =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|libkdcraw|Make color management options more flexible|marcel.wiesweg@gmx.de|Marcel Wiesweg}} <br />
{{FeatureTodo|libksane|Improve auto-selection|kare.sars@iki.fi|K&aring;re S&auml;rs}} <br />
{{FeatureTodo|gwenview|Show Nepomuk info in image meta info|agateau@kde.org|Aurelien Gateau}} <br />
{{FeatureTodo|gwenview|Persistent changes|agateau@kde.org|Aurelien Gateau}}<br />
{{FeatureTodo|okular|Thumb creators via Okular Core|harsh@harshj.com|Harsh J}} <br />
<br />
|}<br />
<br />
<br><br />
<br />
= kdelibs =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|katepart|Add visual block mode and make the basic commands support it|ehambergαgmail.com|Erlend Hamberg}}<br />
{{FeatureTodo|kdeui|API to integrate KStatusNotifierItem and KNotification: both as class api and DBus specification API|davide.bettio@kdemail.net|Davide Bettio}}<br />
{{FeatureTodo|KCalendarSystem|Add new astronomical calculation support classes to be used in kdelibs to build new astronomically based calendar systems, and in kdepim to build new version of libkholiday.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KCalendarSystem|Add new calendar systems: Bahaii, Coptic, Ethiopean, Chinese, Japanese, Buddhist, etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|kdecore|Group policy (Windows) backend for KAuth|drf@kde.org|Dario Freddi}}<br />
{{FeatureTodo|KDEPrint|If no file printing support in Qt4.5, migrate FilePrinter class from Okular to enable file printing for all apps via QPrinter. To be discussed on k-c-d first.|john@layt.net|John Layt}}<br />
{{FeatureTodo|KDEPrint|Add framework for standard actions for 'Send to...' for e-mail, fax, etc by printing to PDF/PS.|john@layt.net|John Layt}} <br />
{{FeatureTodo|kdeui|Implement caps-lock warning for password entry widgets|lemma@confuego.org|Michael Leupold}} <br />
{{FeatureTodo|kio|Better file information in file conflict dialog|toddrme2178@gmail.com|Todd}}<br />
{{FeatureTodo|KLocale|Implement support for number grouping other than thousands using LC_NUMERIC and LC_MONETARY formats, e.g. India 00 00 000 and China 0000 0000.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Add configuration for AM/PM symbols.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Full POSIX compliant format support for date, time, numbers and money.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement more 'named' date/time formats, e.g. ISO, UnixTimestamp, RFC3339, etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Add Full date format in addition to existing short and long.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Add default colour to optionally display negative numbers.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement separate backends for each supported platform/desktop to use platform localisation in place of KDE locale.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement support for additional Country Code standards: ISO Alpha 3, ISO Numeric 3, FIPS-10.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement support for Country Code sub-regions, i.e. States/Provinces/etc. Needed for new KHolidays.|john@layt.net|John Layt}} <br />
{{FeatureTodo|kdeui|Improvements to KDatePicker/KDateTable for feature parity with Plasma Calendar widget, i.e. holiday support, select calendar system, etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|kdeui|DBus interface in StatusNotifierItem to connect it with freedesktop notifications instances|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|Khtml|Improvements in kwallet integration|edulix@gmail.com|Eduardo Robles Elvira}}<br />
{{FeatureTodo|Khtml|Basic audio/video tag support|germain@ebooksfrance.org|Michael Howell and Germain Garand}} <br />
{{FeatureTodo|Khtml|Implement more of DOM3's CSSOM View module|germain@ebooksfrance.org|Germain Garand}}<br />
{{FeatureDone|KNewStuff|Improved Download Dialog, multiple previews, better integration of details, changelog is displayed|gladhornKDEorg|Frederik Gladhorn}}<br />
{{FeatureInProgress|KNewStuff|Icon view mode|gladhornKDEorg|Reza Shah, Frederik Gladhorn}}<br />
{{FeatureDone|KNewStuff|Upload dialog rewritten: It now supports updating of old uploads, previews, most data that can be entered on the website and allows direct login to the account|gladhornKDEorg|Frederik Gladhorn}}<br />
|}<br />
<br />
<br><br />
<br />
= kdemultimedia =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|JuK|Remove Qt/KDE3 support lib requirements -- will move to KDE 4.5 feature plan|mpyne@kde.org|Michael Pyne}}<br />
{{FeatureTodo|JuK|Allow setting covers directly from URLs supported by KIO - drag/drop already allows this however -- will move to KDE 4.5 feature plan|mpyne.org|Michael Pyne}}<br />
<br />
|}<br />
<br />
<br><br />
<br />
= kdenetwork =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Kopete|UPnp Support|mattr@kde.org|Matt Rogers}} <br />
{{FeatureTodo|Kopete|Jabber Jingle video support|detlev.casanova@gmail.com|Detlev Casanova}} <br />
{{FeatureTodo|Kopete|Jabber Jingle ICE support|detlev.casanova@gmail.com|Detlev Casanova}} <br />
{{FeatureTodo|Kopete|Add support for urls to Bonjour plugin|kossebau@kde.org|Friedrich W. H. Kossebau}} <br />
{{FeatureTodo|Kopete|Rich text support for ICQ|kedgedev@gmail.com|Roman Jarosz}} <br />
{{FeatureTodo|Krdc|Connection status screen and reconnect|murraytony@gmail.com|Tony Murray}}<br />
{{FeatureDone|Krdc|Much improved new connection screen: more info, sortable, interactive, and better use of space|murraytony@gmail.com|Tony Murray}}<br />
|}<br />
<br />
<br><br />
<br />
= kdeplasma-addons =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|knowledgebase|port knowledgebase plasmoid to new engine|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureTodo|knowledgebase|Add categories|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureDone|Bookmarks widget|New|kossebau@kde.org|Friedrich W. H. Kossebau}} <br />
{{FeatureDone|Mandelbrot Wallpaper|Performance improvements|jacob.benoit.1@gmail.com|Benoit Jacob}} <br />
{{FeatureDone|Mandelbrot Wallpaper|Rendering improvements (through dithering, extra iterations, and better/simpler formulas)|jacob.benoit.1@gmail.com|Benoit Jacob}}<br />
{{FeatureDone|Mandelbrot Wallpaper|Allow to import/export parameters and to export to PNG images|jacob.benoit.1@gmail.com|Benoit Jacob}}<br />
{{FeatureDone|Comic Applet|Add option to show "text", "icons" or both "text and icons" for tabs|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureDone|Comic Applet|Prefetch next and previous comic strip (thx to Miha Cancula)|mat69@gmx.net|Matthias Fuchs}}<br />
|}<br />
<br />
<br><br />
<br />
= kdesdk =<br />
<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Lokalize|Integrate snowball stemmer for glossary|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureTodo|Lokalize|Continue implementing XLIFF spec|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureTodo|Lokalize|Segmentation [editing] functionality|shafff@NOSPAMukr.net |Nick Shaforostoff}} <br />
{{FeatureTodo|Lokalize|Remote translation memories|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureTodo|Lokalize|Integrate with nepomuk (fast stats retrieval, tag cloud - incl sharing!)|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureTodo|Kate|Replace old snippet plugin through TNG plugin|jowenn(you_know)kde(here_too)org|Joseph Wenninger}} <br />
|}<br />
<br />
<br><br />
<br />
= kdeutils =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Ark|Add an options dialog (maybe)|haraldhv@stud.ntnu.no|Harald Hvaal}}<br />
{{FeatureTodo|Ark|Support for custom options from the compression interface (eg. a slider for selecting compression level for rar files)|haraldhv@stud.ntnu.no|Harald Hvaal}}<br />
{{FeatureTodo|Ark|Add feedback for the latest operation in the status bar|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Add feedback for the latest operation in the status bar|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Try multiple plugins for each archive type before failing|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Make the internal previewer optional|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|KGpg|Make keyserver actions possible to use on multiple keyservers at once|kde@opensource.sf-tec.de|Rolf Eike Beer}}<br />
{{FeatureTodo|Okteta|add Kate-like search tool|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|add support for import by drop, both url and data|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|copy again puts also a value or char variant of the data to clipboard|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|add support for memory mapping of files and 64-bit addressing|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|add support for jobs like io, printing, string search or filter|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add Okular like embedded notifications|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Store bookmarks and other view settings for next load|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add global toggle option for the offset display, hex or decimal|kossebau@kde.org|Friedrich W. H. Kossebau}} <br />
{{FeatureTodo|Okteta|Add Kate-like combined dialogs to query for actions on files|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Improve the titels of the changes to the bytearray to be more descriptive, best using ids to avoid text string|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Merge row and column widgets into one|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Refactor mouse input to controllers for the bytearray widget|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add a general KPart adapter to Kasten, than finish port of Okteta KPart to Okteta Kasten|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Make all user interaction in the KastenCore managers plugin-based|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Store bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add KNewStuff support to the structures tool|alex.richardson@gmx.de|Alex Richardson}} <br />
{{FeatureTodo|printer-applet|Restore feature parity with KDEPrint3 where possible.||Jonathon Riddell, John Layt}} <br />
{{FeatureInProgress|kdelirc/kremotecontrol|Transition from KDELirc to KRemoteControl|michael_zanetti@gmx.net|Michael Zanetti}} <br />
{{FeatureInProgress|Okteta|Allow writing structure definitions in JavaScript|alex.richardson@gmx.de|Alex Richardson}} <br />
{{FeatureDone|Okteta|new export formats: S-Record, Intel Hex, Base32, Ascii85, Uuencoding, Xxencoding|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureDone|Okteta|add QIODevice for AbstractByteArrayModel and make mimetype detection use this instead of only filename |kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
|}<br />
<br />
<br><br />
<br />
= Other =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact<br />
<br />
|}</div>Frederik.gladhornhttps://techbase.kde.org/index.php?title=Schedules/KDE4/4.5_Feature_Plan&diff=50658Schedules/KDE4/4.5 Feature Plan2010-04-09T08:37:54Z<p>Frederik.gladhorn: /* kdelibs */</p>
<hr />
<div>This is a list of planned features for the SC 4.5 release. <br />
<br />
See also: <br />
<br />
*[[Schedules/KDE4/4.5 Release Schedule]] <br />
*[[Schedules/KDE4/4.5 Release Goals]] <br />
*[[Schedules/KDE4/4.4 Feature Plan]]<br />
<br />
<br> Legend: <br />
<br />
*todo =&gt; not started yet <br />
*in-progress =&gt; started, but not completed yet <br />
*done =&gt; completed<br />
<br />
__TOC__ <br />
<br />
<br><br />
<br />
= kdeadmin =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|system-config-printer-kde|Restore feature parity with KDEPrint3 where possible.||Jonathan Riddell, John Layt}} <br />
<br />
|}<br />
<br />
<br><br />
<br />
= kdeartwork =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact<br />
|}<br />
<br />
<br><br />
<br />
= kdebase-apps =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Konqueror|Improvements in session-management|edulix@gmail.com|Eduardo Robles Elvira}} <br />
{{FeatureTodo|Konqueror|Improvements in tab-bar widget|edulix@gmail.com|Eduardo Robles Elvira}} <br />
{{FeatureInProgress|Konqueror|New Konqueror bookmarks using Akonadi and Nepomuk, awesome bar|edulix@gmail.com|Eduardo Robles Elvira}} <br />
|}<br />
<br />
<br><br />
<br />
= kdebase-runtime =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|KWallet|Single Sign On using PAM|lemma@confuego.org|Michael Leupold}}<br />
{{FeatureTodo|network kioslave|Backend for LISa|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureTodo|network kioslave|Backend for SMB|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureTodo|network kioslave|Integrate with remote and zeroconf kioslaves|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureTodo|Locale KCM|Add support for new KLocale features (see kdelibs section) including Digit Groups, AM/PM, etc. Improvements to usability of existing money display options.|john@layt.net|John Layt}}<br />
{{FeatureInProgress|network kioslave|Backend for UPnP|kossebau@kde.org|Friedrich Kossebau}}<br />
{{FeatureTodo|network kioslave| Backend to discover bluetooth devices and they services |edulix@gmail.com|Eduardo Robles Elvira}}<br />
{{FeatureInProgress|bluetooth kioslave|Backend to browse bluetooth devices|edulix@gmail.com|Eduardo Robles Elvira}}<br />
|}<br />
<br />
<br><br />
<br />
= kdebase-workspace =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact<br />
|-<br />
! style="text-align: center;" colspan="4" | Non-Plasma, Non-KWin <br />
{{FeatureTodo|Icons KCM|More configurable icon sizes|christoph@maxiom.de|Christoph Feck}} <br />
{{FeatureTodo|Fonts KCM|More configurable fonts|christoph@maxiom.de|Christoph Feck}} <br />
{{FeatureTodo|Solid|Write a new Bluetooth backend |alex@eyeos.org|Alex Fiestas}} <br />
<br />
<br />
|-<br />
! style="text-align: center;" colspan="4" | Plasma <br />
{{FeatureInProgress|systemtray|monochrome statusnotifier based systray icons support|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|systemtray|sort icons by category|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|systemtray|put hidden icons in a popup menu|notmart@gmail.com|Marco Martin}}<br />
{{FeatureDone|notifications|split systemtray and notifications applet|notmart@gmail.com|Marco Martin}} <br />
{{FeatureInProgress|notifications|new look and behaviour for notifications|notmart@gmail.com|Marco Martin}}<br />
{{FeatureDone|notifications|support for remote applets for notifications|notmart@gmail.com|Marco Martin}}<br />
{{FeatureDone|netbook/SAL|use QStandardModels|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|netbook/SAL|support for drag and drop of items|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|libplasma/extenders|put extendergroups in scrollwidgets|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|libplasma/extenders|possibility to detach exteneritems as standalone windows|notmart@gmail.com|Marco Martin}}<br />
{{FeatureInProgress|libplasma/theme|more transparent dialogs when the blur effect is enabled|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|libplasma/desktop|Activity Manager UI|chani@kde.org|Chani}}<br />
{{FeatureTodo|accounts applet|a plasma widget that is a central place to add accounts to social sites like identica and opendesktop, optimized for the netbook shell|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|libplasma|Improvements to Calendar/Clock widgets. Improved config ui. Allow multiple holidays on same day. Allow multiple Holiday Regions. Weekends. etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|folderview|"Open folder" icon to open folder into pop-up at request instead of automatically.|bigras.bruno@gmail.com|Bruno Bigras}}<br />
<br />
|}<br />
<br />
<br><br />
<br />
= kdeedu =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|KStars|Display Comet Magnitudes whenever possible|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Information links in-place for each technical term|akarshsimha@gmail.com|Akarsh Simha}} {{FeatureTodo|KStars|Tool to suggest star-hopping techniques???|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Extend conjunction tool to have one object unspecified, but have a genre of objects specified instead|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Simulate Lunar Eclipses|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Simulate Satellites and Iridium Flares|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Social and Geographical Integration for KStars|akarshsimha@gmail.com|Akarsh Simha}} <br />
{{FeatureTodo|KStars|Marble widget for Geolocation tool|mboquien@free.fr|Médéric Boquien}} <br />
{{FeatureTodo|KStars|Better printed star charts|kstars@30doradus.org|Jason Harris}} <br />
{{FeatureTodo|KStars|Better rendering of comets/asteroids|kstars@30doradus.org|Jason Harris}} <br />
{{FeatureTodo|KStars|Texture mapping of the skymap???|kstars@30doradus.org|Jason Harris}} <br />
{{FeatureTodo|Marble|Add proper support for GPX waypoints, tracks and routes display|anders@alweb.dk|Anders Lund}}<br />
{{FeatureTodo|Marble|Export map to MxN pixel bitmap|inge@lysator.liu.se|Inge Wallin}}<br />
{{FeatureTodo|Marble|Map Contents translation|tackat@kde.org|Torsten Rahn}}<br />
{{FeatureTodo|Kalzium|Port Kalzium to use QGV based periodic table widget|mhanwell@kde.org|Marcus D. Hanwell}}<br />
{{FeatureDone|Marble|Support OpenStreetMap Nominatim as search backend (MarbleRunner)|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureInProgress|Marble|Generalized Animations with GeoDataLookAt support|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureInProgress|Marble|Online-Routing|earthwings@gentoo.org|Dennis Nienhüser}}<br />
{{FeatureDone|KAlgebra|Type checker for expressions to statically detect errors|aleixpol@kde.org|Aleix Pol}}<br />
|}<br />
<br />
<br><br />
<br />
= kdegames =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|KBreakOut|Level Sets|fela.kde@gmail.com|Fela Winkelmolen}} {{FeatureTodo|KBreakOut|Sound|fela.kde@gmail.com|Fela Winkelmolen}} {{FeatureTodo|Kolf|Replace with Kolf 2 (help on coding and artwork desired)|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|KsirK|rewrite AI code or at least correct most problems related in bug #170777. Volunteers wanted!|kleag@free.fr|Gaël de Chalendar}} <br />
{{FeatureTodo|KsirK|Boost playing over Jabber|kleag@free.fr|Gaël de Chalendar}}<br />
{{FeatureTodo|KSquares|Re-write computer player, make it act faster and more intelligent|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureTodo|KSquares|Add more types of boards: hexagonal, triangular|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureTodo|KSudoku|Import new engine|joselb@gmx.net|Johannes Bergmeier}} <br />
{{FeatureTodo|KSudoku|Port game to new engine|joselb@gmx.net|Johannes Bergmeier}} <br />
{{FeatureTodo|KSudoku|Adapt view to show information provided by engine|joselb@gmx.net|Johannes Bergmeier}} <br />
{{FeatureTodo|KSudoku|Add new actions to GUI|joselb@gmx.net|Johannes Bergmeier}}<br />
{{FeatureTodo|Granatier|Arena Editor|k.hias@gmx.de|Mathias Kraus}}<br />
{{FeatureInProgress|Kajongg|New traditional Mahjongg for four players|wolfgang@rohdewald.de|Wolfang Rohdewald}}<br />
{{FeatureDone|Kigo|Load SGF games from command line and register to mimetype 'application/x-go-sgf'|sasch.pe@gmx.de|Sascha Peilicke}}<br />
{{FeatureInProgress|KTuberling|A new "fast switch" between playgrounds|alex@eyeos.org|Alex Fiestas}}<br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211859 Recieve new puzzles over KNewStuff]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211861 Introduce handicap as a means to configure difficulty]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}211866 Implement puzzle piles to organize pieces]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}212814 Quick piece grouping]|majewsky@gmx.net|Stefan Majewsky}} <br />
{{FeatureTodo|Palapeli|[https://bugs.kde.org/show_bug.cgi?id{{=}}213774 Add magnifying glass]|majewsky@gmx.net|Stefan Majewsky}} <br />
|}<br />
<br />
<br><br />
<br />
= kdegraphics =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|libkdcraw|Make color management options more flexible|marcel.wiesweg@gmx.de|Marcel Wiesweg}} <br />
{{FeatureTodo|libksane|Improve auto-selection|kare.sars@iki.fi|K&aring;re S&auml;rs}} <br />
{{FeatureTodo|gwenview|Show Nepomuk info in image meta info|agateau@kde.org|Aurelien Gateau}} <br />
{{FeatureTodo|gwenview|Persistent changes|agateau@kde.org|Aurelien Gateau}}<br />
{{FeatureTodo|okular|Thumb creators via Okular Core|harsh@harshj.com|Harsh J}} <br />
<br />
|}<br />
<br />
<br><br />
<br />
= kdelibs =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|katepart|Add visual block mode and make the basic commands support it|ehambergαgmail.com|Erlend Hamberg}}<br />
{{FeatureTodo|kdeui|API to integrate KStatusNotifierItem and KNotification: both as class api and DBus specification API|davide.bettio@kdemail.net|Davide Bettio}}<br />
{{FeatureTodo|KCalendarSystem|Add new astronomical calculation support classes to be used in kdelibs to build new astronomically based calendar systems, and in kdepim to build new version of libkholiday.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KCalendarSystem|Add new calendar systems: Bahaii, Coptic, Ethiopean, Chinese, Japanese, Buddhist, etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|kdecore|Group policy (Windows) backend for KAuth|drf@kde.org|Dario Freddi}}<br />
{{FeatureTodo|KDEPrint|If no file printing support in Qt4.5, migrate FilePrinter class from Okular to enable file printing for all apps via QPrinter. To be discussed on k-c-d first.|john@layt.net|John Layt}}<br />
{{FeatureTodo|KDEPrint|Add framework for standard actions for 'Send to...' for e-mail, fax, etc by printing to PDF/PS.|john@layt.net|John Layt}} <br />
{{FeatureTodo|kdeui|Implement caps-lock warning for password entry widgets|lemma@confuego.org|Michael Leupold}} <br />
{{FeatureTodo|kio|Better file information in file conflict dialog|toddrme2178@gmail.com|Todd}}<br />
{{FeatureTodo|KLocale|Implement support for number grouping other than thousands using LC_NUMERIC and LC_MONETARY formats, e.g. India 00 00 000 and China 0000 0000.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Add configuration for AM/PM symbols.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Full POSIX compliant format support for date, time, numbers and money.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement more 'named' date/time formats, e.g. ISO, UnixTimestamp, RFC3339, etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Add Full date format in addition to existing short and long.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Add default colour to optionally display negative numbers.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement separate backends for each supported platform/desktop to use platform localisation in place of KDE locale.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement support for additional Country Code standards: ISO Alpha 3, ISO Numeric 3, FIPS-10.|john@layt.net|John Layt}} <br />
{{FeatureTodo|KLocale|Implement support for Country Code sub-regions, i.e. States/Provinces/etc. Needed for new KHolidays.|john@layt.net|John Layt}} <br />
{{FeatureTodo|kdeui|Improvements to KDatePicker/KDateTable for feature parity with Plasma Calendar widget, i.e. holiday support, select calendar system, etc.|john@layt.net|John Layt}} <br />
{{FeatureTodo|kdeui|DBus interface in StatusNotifierItem to connect it with freedesktop notifications instances|notmart@gmail.com|Marco Martin}}<br />
{{FeatureTodo|Khtml|Improvements in kwallet integration|edulix@gmail.com|Eduardo Robles Elvira}}<br />
{{FeatureTodo|Khtml|Basic audio/video tag support|germain@ebooksfrance.org|Michael Howell and Germain Garand}} <br />
{{FeatureTodo|Khtml|Implement more of DOM3's CSSOM View module|germain@ebooksfrance.org|Germain Garand}}<br />
{{FeatureDone|KNewStuff|Improved Download Dialog, multiple previews, better integration of details, changelog is displayed|gladhornKDEorg|Frederik Gladhorn}}<br />
{{FeatureInProgress|KNewStuff|Icon view mode|gladhornKDEorg|Reza Shah, Frederik Gladhorn}}<br />
{{FeatureDone|KNewStuff|Upload dialog rewritten: It now supports updating of old uploads, previews, most data that can be entered on the website and allows direct login to the account|gladhornKDEorg|Frederik Gladhorn}}<br />
|}<br />
<br />
<br><br />
<br />
= kdemultimedia =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|JuK|Remove Qt/KDE3 support lib requirements -- will move to KDE 4.5 feature plan|mpyne@kde.org|Michael Pyne}}<br />
{{FeatureTodo|JuK|Allow setting covers directly from URLs supported by KIO - drag/drop already allows this however -- will move to KDE 4.5 feature plan|mpyne.org|Michael Pyne}}<br />
<br />
|}<br />
<br />
<br><br />
<br />
= kdenetwork =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Kopete|UPnp Support|mattr@kde.org|Matt Rogers}} <br />
{{FeatureTodo|Kopete|Jabber Jingle video support|detlev.casanova@gmail.com|Detlev Casanova}} <br />
{{FeatureTodo|Kopete|Jabber Jingle ICE support|detlev.casanova@gmail.com|Detlev Casanova}} <br />
{{FeatureTodo|Kopete|Add support for urls to Bonjour plugin|kossebau@kde.org|Friedrich W. H. Kossebau}} <br />
{{FeatureTodo|Kopete|Rich text support for ICQ|kedgedev@gmail.com|Roman Jarosz}} <br />
{{FeatureTodo|Krdc|Connection status screen and reconnect|murraytony@gmail.com|Tony Murray}}<br />
{{FeatureDone|Krdc|Much improved new connection screen: more info, sortable, interactive, and better use of space|murraytony@gmail.com|Tony Murray}}<br />
|}<br />
<br />
<br><br />
<br />
= kdeplasma-addons =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|knowledgebase|port knowledgebase plasmoid to new engine|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureTodo|knowledgebase|Add categories|ewoerner@kde.org|Eckhart Wörner}} <br />
{{FeatureDone|Bookmarks widget|New|kossebau@kde.org|Friedrich W. H. Kossebau}} <br />
{{FeatureDone|Mandelbrot Wallpaper|Performance improvements|jacob.benoit.1@gmail.com|Benoit Jacob}} <br />
{{FeatureDone|Mandelbrot Wallpaper|Rendering improvements (through dithering, extra iterations, and better/simpler formulas)|jacob.benoit.1@gmail.com|Benoit Jacob}}<br />
{{FeatureDone|Mandelbrot Wallpaper|Allow to import/export parameters and to export to PNG images|jacob.benoit.1@gmail.com|Benoit Jacob}}<br />
{{FeatureDone|Comic Applet|Add option to show "text", "icons" or both "text and icons" for tabs|mat69@gmx.net|Matthias Fuchs}}<br />
{{FeatureDone|Comic Applet|Prefetch next and previous comic strip (thx to Miha Cancula)|mat69@gmx.net|Matthias Fuchs}}<br />
|}<br />
<br />
<br><br />
<br />
= kdesdk =<br />
<br />
{| cellspa/cing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Lokalize|Integrate snowball stemmer for glossary|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureTodo|Lokalize|Continue implementing XLIFF spec|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureTodo|Lokalize|Segmentation [editing] functionality|shafff@NOSPAMukr.net |Nick Shaforostoff}} <br />
{{FeatureTodo|Lokalize|Remote translation memories|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureTodo|Lokalize|Integrate with nepomuk (fast stats retrieval, tag cloud - incl sharing!)|shafff@NOSPAMukr.net|Nick Shaforostoff}} <br />
{{FeatureTodo|Kate|Replace old snippet plugin through TNG plugin|jowenn(you_know)kde(here_too)org|Joseph Wenninger}} <br />
|}<br />
<br />
<br><br />
<br />
= kdeutils =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact <br />
{{FeatureTodo|Ark|Add an options dialog (maybe)|haraldhv@stud.ntnu.no|Harald Hvaal}}<br />
{{FeatureTodo|Ark|Support for custom options from the compression interface (eg. a slider for selecting compression level for rar files)|haraldhv@stud.ntnu.no|Harald Hvaal}}<br />
{{FeatureTodo|Ark|Add feedback for the latest operation in the status bar|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Add feedback for the latest operation in the status bar|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Try multiple plugins for each archive type before failing|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|Ark|Make the internal previewer optional|kubito@gmail.com|Raphael Kubo da Costa}}<br />
{{FeatureTodo|KGpg|Make keyserver actions possible to use on multiple keyservers at once|kde@opensource.sf-tec.de|Rolf Eike Beer}}<br />
{{FeatureTodo|Okteta|add Kate-like search tool|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|add support for import by drop, both url and data|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|copy again puts also a value or char variant of the data to clipboard|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|add support for memory mapping of files and 64-bit addressing|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|add support for jobs like io, printing, string search or filter|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add Okular like embedded notifications|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Store bookmarks and other view settings for next load|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add global toggle option for the offset display, hex or decimal|kossebau@kde.org|Friedrich W. H. Kossebau}} <br />
{{FeatureTodo|Okteta|Add Kate-like combined dialogs to query for actions on files|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Improve the titels of the changes to the bytearray to be more descriptive, best using ids to avoid text string|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Merge row and column widgets into one|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Refactor mouse input to controllers for the bytearray widget|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add a general KPart adapter to Kasten, than finish port of Okteta KPart to Okteta Kasten|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Make all user interaction in the KastenCore managers plugin-based|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Store bookmarks|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureTodo|Okteta|Add KNewStuff support to the structures tool|alex.richardson@gmx.de|Alex Richardson}} <br />
{{FeatureTodo|printer-applet|Restore feature parity with KDEPrint3 where possible.||Jonathon Riddell, John Layt}} <br />
{{FeatureInProgress|kdelirc/kremotecontrol|Transition from KDELirc to KRemoteControl|michael_zanetti@gmx.net|Michael Zanetti}} <br />
{{FeatureInProgress|Okteta|Allow writing structure definitions in JavaScript|alex.richardson@gmx.de|Alex Richardson}} <br />
{{FeatureDone|Okteta|new export formats: S-Record, Intel Hex, Base32, Ascii85, Uuencoding, Xxencoding|kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
{{FeatureDone|Okteta|add QIODevice for AbstractByteArrayModel and make mimetype detection use this instead of only filename |kossebau@kde.org|Friedrich W. H. Kossebau}}<br />
|}<br />
<br />
<br><br />
<br />
= Other =<br />
<br />
{| cellspacing="0" cellpadding="5" border="1" style="border: 1px solid gray; border-collapse: collapse; text-align: left; width: 100%;" class="sortable"<br />
|- style="background: rgb(236, 236, 236) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; white-space: nowrap;"<br />
! Status <br />
! Project <br />
! Description <br />
! Contact<br />
<br />
|}</div>Frederik.gladhorn