{"id":331,"date":"2014-02-25T09:52:01","date_gmt":"2014-02-25T08:52:01","guid":{"rendered":"http:\/\/blogs.igalia.com\/jaragunde\/?p=331"},"modified":"2014-09-10T11:03:05","modified_gmt":"2014-09-10T09:03:05","slug":"libreoffice-ux-hackfest-for-an-accessible-user-experience","status":"publish","type":"post","link":"https:\/\/blogs.igalia.com\/jaragunde\/2014\/02\/libreoffice-ux-hackfest-for-an-accessible-user-experience\/","title":{"rendered":"LibreOffice UX hackfest: for an accessible user experience"},"content":{"rendered":"<p>Accessibility is one of the areas of interest for us at <a title=\"Igalia accessibility website\" href=\"http:\/\/www.igalia.com\/accessibility\/\" target=\"_blank\">Igalia<\/a>, that&#8217;s why\u00a0I\u00a0traveled to Brussels\u00a0some weeks ago\u00a0to take part in the\u00a0<a title=\"Brussels LibreOffice Hackfest 2014 website\" href=\"https:\/\/wiki.documentfoundation.org\/Hackfest\/FOSDEM2014\" target=\"_blank\">LibreOffice UX hackfest<\/a>\u00a0organized by\u00a0<a title=\"The Document Foundation site\" href=\"http:\/\/www.documentfoundation.org\/\" target=\"_blank\">The Document Foundation<\/a>\u00a0and kindly hosted by\u00a0<a title=\"Betacowork website\" href=\"http:\/\/www.betacowork.com\/\" target=\"_blank\">Betacowork<\/a>.\u00a0My\u00a0colleage Joanmarie Diggs, maintainer of <a title=\"Orca website\" href=\"https:\/\/wiki.gnome.org\/Projects\/Orca\" target=\"_blank\">Orca<\/a>, had identified a set of bugs that will be instrumental in improving the experience with the screen reader; as she keeps saying, &#8220;Orca can only provide access to what is made accessible.&#8221;<\/p>\n<p>Before diving into the specifics, let me introduce the accessibility layers of LibreOffice first.\u00a0Due to its multi-platform nature, LibreOffice provides its own\u00a0<i>Visual Components Library<\/i><i>\u00a0<\/i>(VCL), with a graphical toolkit in the fashion of GTK+, Qt, etc. It serves as an operating system abstraction, and it is mapped to system-specific libraries whenever possible. When it comes to accessibility, there is a set of internal accessibility APIs that can be translated into ATK objects and functions in the same way it can be translated to IAccessible2 API in Windows.<\/p>\n<p>The first thing I tackled was implementing and improving the accessible roles exposed by LibreOffice.\u00a0Better role support means smarter client applications: for example, an object registering itself as a spreadsheet document allows the screen reader to make some assumptions about the structure of that document and present\u00a0its contents\u00a0more efficiently, and in a more tailored fashion,\u00a0than\u00a0it could for a generic document.\u00a0And navigation by heading only works if headings claim to be headings rather than paragraphs.<\/p>\n<p><a title=\"link to LibreOffice bugzilla\" href=\"https:\/\/bugs.freedesktop.org\/show_bug.cgi?id=39944\" target=\"_blank\">Bug #39944<\/a> is about\u00a0adding support for new(ish)\u00a0ATK roles\u00a0which\u00a0LibreOffice wasn\u2019t using yet. Checking the list of existing internal roles we find out that some of the new roles fit properly in the existing API, for example\u00a0<i>group box<\/i>\u00a0and\u00a0<i>comment<\/i>\u00a0internal roles match with ATK\u2019s\u00a0<i>grouping<\/i>\u00a0and\u00a0<i>comment<\/i>.\u00a0But\u00a0other\u00a0roles\u00a0had to be added from scratch.\u00a0This\u00a0was the case for the new, specific roles for spreadsheet, text and presentation documents that I added to LibreOffice API and linked to their ATK relatives.<\/p>\n<p><a title=\"link to LibreOffice bugzilla\" href=\"https:\/\/bugs.freedesktop.org\/show_bug.cgi?id=35105\" target=\"_blank\">Bug #35105<\/a> was a trickier\u00a0one, because it looked more simple than it was\u2026 The problem\u00a0as reported was that\u00a0headings in text\u00a0were not\u00a0exposed using\u00a0the proper\u00a0<i>heading<\/i>\u00a0role.\u00a0But as I dug deeper, I discovered a much more complicated issue:\u00a0paragraphs that could become headings, and the opposite,\u00a0as a result of\u00a0editing the document.\u00a0LibreOffice lacked support for\u00a0accessibility objects changing their roles, so I added a new event to the API to notify role changes, and connected that event with\u00a0<i>atk_object_set_role<\/i>.<\/p>\n<p>I also spent quite some time\u00a0working on <a title=\"link to LibreOffice bugzilla\" href=\"https:\/\/bugs.freedesktop.org\/show_bug.cgi?id=35107\" target=\"_blank\">bug #35107<\/a>. Again, it looked like a simple role-support bug, but I had learned\u00a0not to trust the first impression. To debug this one, I\u00a0first had to\u00a0learn about\u00a0the\u00a0ATK hypertext interface and hyperlink objects.\u00a0Having done so,\u00a0I\u00a0was able to\u00a0verify\u00a0that\u00a0LibreOffice&#8217;s existing\u00a0hypertext implementation was working properly.\u00a0The same didn\u2019t hold\u00a0true\u00a0for the hyperlink; in particular, the implementation of\u00a0<i>hyper_link_get_object<\/i>\u00a0in LibreOffice was wrong. A patch is still pending because it\u00a0requires\u00a0involving the third member of the ATK hyper-family, AtkHyperlinkImpl, of which there is no trace in LibreOffice\u00a0(yet)\u00a0and\u00a0thus\u00a0has to be implemented from scratch. Anyway, it was an interesting debugging and documentation-reading\u00a0exercise.<\/p>\n<div id=\"magicdomid21\">\n<p>In addition to the above, I spent\u00a0some time triaging \u00a0<a title=\"link to LibreOffice bugzilla\" href=\"https:\/\/bugs.freedesktop.org\/show_bug.cgi?id=36549\" target=\"_blank\">existing accessibility bug reports<\/a>\u00a0filed by GNOME developers and users\u00a0and closing\u00a0those which had\u00a0already\u00a0been fixed. The work of code analysis also led me to think of\u00a0some\u00a0additional\u00a0improvements\u00a0which can be made in LibreOffice&#8217;s\u00a0ATK support. I&#8217;ve <a title=\"link to LibreOffice bugzilla\" href=\"https:\/\/bugs.freedesktop.org\/show_bug.cgi?id=75191\" target=\"_blank\">filed them<\/a> for now and will begin working on them soon.<\/p>\n<p>I want to thank The\u00a0Document\u00a0Foundation\u00a0for having invited me\u00a0to attend this hackfest, and all the other\u00a0participants.\u00a0It was great to meet all the people I know from the IRC in person.<\/p>\n<\/div>\n<p>Happy hacking!<\/p>\n<div id=\"attachment_341\" style=\"width: 577px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/blogs.igalia.com\/jaragunde\/files\/2014\/02\/waffles.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-341\" class=\"size-large wp-image-341\" alt=\"Flavors from Brussels\" src=\"http:\/\/blogs.igalia.com\/jaragunde\/files\/2014\/02\/waffles-1024x575.jpg\" width=\"567\" height=\"318\" srcset=\"https:\/\/blogs.igalia.com\/jaragunde\/files\/2014\/02\/waffles-1024x575.jpg 1024w, https:\/\/blogs.igalia.com\/jaragunde\/files\/2014\/02\/waffles-300x168.jpg 300w, https:\/\/blogs.igalia.com\/jaragunde\/files\/2014\/02\/waffles-500x280.jpg 500w, https:\/\/blogs.igalia.com\/jaragunde\/files\/2014\/02\/waffles.jpg 1965w\" sizes=\"auto, (max-width: 567px) 100vw, 567px\" \/><\/a><p id=\"caption-attachment-341\" class=\"wp-caption-text\">Flavors from Brussels<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Accessibility is one of the areas of interest for us at Igalia, that&#8217;s why\u00a0I\u00a0traveled to Brussels\u00a0some weeks ago\u00a0to take part in the\u00a0LibreOffice UX hackfest\u00a0organized by\u00a0The Document Foundation\u00a0and kindly hosted by\u00a0Betacowork.\u00a0My\u00a0colleage Joanmarie Diggs, maintainer of Orca, had identified a set of &hellip; <a href=\"https:\/\/blogs.igalia.com\/jaragunde\/2014\/02\/libreoffice-ux-hackfest-for-an-accessible-user-experience\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":17,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18,3,17],"tags":[],"class_list":["post-331","post","type-post","status-publish","format-standard","hentry","category-accessibility","category-igalia","category-libreoffice"],"_links":{"self":[{"href":"https:\/\/blogs.igalia.com\/jaragunde\/wp-json\/wp\/v2\/posts\/331","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.igalia.com\/jaragunde\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.igalia.com\/jaragunde\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/jaragunde\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/jaragunde\/wp-json\/wp\/v2\/comments?post=331"}],"version-history":[{"count":12,"href":"https:\/\/blogs.igalia.com\/jaragunde\/wp-json\/wp\/v2\/posts\/331\/revisions"}],"predecessor-version":[{"id":345,"href":"https:\/\/blogs.igalia.com\/jaragunde\/wp-json\/wp\/v2\/posts\/331\/revisions\/345"}],"wp:attachment":[{"href":"https:\/\/blogs.igalia.com\/jaragunde\/wp-json\/wp\/v2\/media?parent=331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.igalia.com\/jaragunde\/wp-json\/wp\/v2\/categories?post=331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.igalia.com\/jaragunde\/wp-json\/wp\/v2\/tags?post=331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}