The Document Foundation Planet


May 11, 2021

Official TDF Blog

LibreOffice Native Language Projects in 2020

By helping to translate and market LibreOffice around the world, native language projects bring enthusiasm and passion to the global community. Here’s what they did in 2020…

(This is part of The Document Foundation’s Annual Report for 2020 – the full version will be posted here on the blog soon.)

Central Kurdish

Support for the Central Kurdish language was added to LibreOffice in 2021, and Jwtiyar Ali helped to drive the translation of the suite’s user interface. In addition, a Telegram group was created for community members to talk about upcoming translation projects, and bring new translators on board. Throughout the year, the Central Kurdish team worked on translating strings, with the goal in 2021 being to complete all translations, and also provide a dictionary for the language.

For more on this project, see our interview with Jwtiyar here.


InstallFest, which took place in Prague on 29 February and 1 March 2020, was an event focused on GNU/Linux, helping new users to install the operating system. But it also had lectures and stands for many other free and open source software projects, and the Czech LibreOffice community was there with a booth.

The vast majority of visitors were from younger generations – often high school or even elementary school pupils. The new mobile application from Collabora, which was released just a few days before the event, aroused great interest, as did LibreOffice Online. Other visitors to the booth asked questions was about handling ODF files with embedded fonts, and the status of various bug reports.

Later in the year, the Czech community gave a talk at the OpenAlt conference (online) about maintaining an experimental Czech spellcheck dictionary in LibreOffice.

Outside of events, community members worked on maintaining and updating the Czech language LibreOffice website, supported users by answering questions on the CZ Ask LibreOffice website, and kept social media updated with 600 tweets on the Twitter account (and regular activity on the Facebook page).

On other websites, Czech contributors published articles and news on Czech FOSS portals (,,, and ran a small survey (with 20 responses) to collect examples of how LibreOffice is being used in schools, organizations and small companies.

In terms of translations, the Czech community announced their work using platforms for volunteers – which turned out to be a great way to involve of new contributors. Tens of volunteers participated during 2020. Together with long-time community members, they worked on translations for LibreOffice’s user interface and help content (both at 100%), subtitles for videos, FAQ articles and other pages on the wiki.

The Online guide for LibreOffice 6.3 translated and published in March 2020, followed by the Math guide for LibreOffice 6.4 in June, and the Getting Started Guide for LibreOffice 6.4 in July.


Throughout 2020, the Dutch-speaking LibreOffice community was involved in various projects and activities. For instance, community members helped to support LibreOffice users by answering questions on the Ask LibreOffice website and mailing lists. In addition, they worked on maintaining the Dutch LibreOffice website, and helped out with the “10 year anniversary” video:

Please confirm that you want to play a YouTube video. By accepting, you will be accessing content from YouTube, a service provided by an external third party.

YouTube privacy policy

If you accept this notice, your choice will be saved and the page will refresh.

Another area where the Dutch community was especially active is documentation. The Math guide for LibreOffice 6.4 was translated and published in March 2020, and this was followed by the Getting Started Guide 6.4 in June, Draw Guide 6.4 in July, Writer and Calc Guides 6.4 in August, and finally the Calc Guide 7.0 in December. Other chapters for the Getting Started, Impress and Writer Guides 7.0 were translated as well.

For LibreOffice’s user interface, Dutch community members ensured that the software’s user interface was 100% translated in 2020 – while translations of the help text jumped from 70% to 92% by the end of the year.


Esperanto, a constructed auxiliary language, also received support from the LibreOffice community in 2020. The software’s user interface was almost entirely translated into the language, while LibreOffice Online, Impress Remote and the website reached “100% translated” status. For the help content, 48% of it was translated. Interested users of the Esperanto language can join in and help to further translations – see the website for more information.


Thanks to work by the local community in Finland, LibreOffice’s English-Finnish glossary for translators was expanded, and a lot of user interface translations were reviewed with funding from Fuugin Säätiö (from the Finnish Unix Users’ Group foundation). Also, the translations for the LibreOffice Impress Remote were reviewed, while instructions for translators were updated to reflect the current Weblate-based workflow and to make onboarding of new translators easier. Finally, there was ongoing translation work – mainly in the interface.


A Writer sprint was organised by the French-speaking community, with 25 participants from West African countries (Congo, Benin, Togo, Cameroun, Ivory Coast) from August to December via a Telegram group. The aim of the sprint was to explore Writer features through various exercises but also how to interact on Telegram. There were difficulties with internet connections in some countries (in Togo particularly), meaning the organisers had to extend the sprint for several weeks. But – all in all – it went well and will be continued with specifics demands from the participants.

The community met twice on Jitsi with some members, and more specifically with the La Mouette association to explore how they could better interact. On the documentation side, they translated the Base, Beginner, Writer and Draw guides.

A group of five students from the Brest University of Translation worked on translating the Math guide. The work is ongoing due to some delays because of the pandemic. In addition, the release notes and the FAQ were translated and maintained. Both the user interface and help for each LibreOffice version were translated into French, and a group began translating the UI in Guadeloupean Creole. Finally, regular support was provided via the mailing lists and Ask LibreOffice.


Before the COVID-19 pandemic stopped almost all in-person meetings, the German-speaking LibreOffice community had the opportunity to meet at Linuxhotel in Essen, in early March. There were 15 participants, who discussed many topics including: a potential scholarship programme in memory of Klaus-Jürgen Weghorn, who passed away in 2019; the new TDF Board of Directors; LibreOffice Online; the extensions and templates website; and upcoming events. Saturday evening was a social event, with pizza and drinks.

Throughout the year, German-speaking community members had monthly calls, planned via the pad. These calls provided opportunities for new community members to get familiar with TDF’s projects and tools.
In terms of documentation, the German Base Handbook 7.0 (covering LibreOffice’s database) was published in August 2020.

Inuktitut (and other activities in Canada)

The LibreWaterloo group consists of five committed individuals, and occasional Canadian members. Due to COVID-19 restrictions, all monthly meetings were moved to online videoconferences using the BigBlueButton (BBB) platform.

Over the twelve-month period of 2020, topics of meetings covered: How to build and hack LibreOffice code; An overview of LibreOffice and its main modules; Invited guest from Collabora; Invited guest from CIB; Localization and software – can we help?; Invited guest to discuss LibreLogo; And bug triaging – can we help?

A member of the LibreWaterloo group offered to help facilitate various Canadian indigenous localizations of LibreOffice, with the first efforts going into Inuktitut localization (which is still an ongoing effort). The LibreWaterloo project expects more concrete results in 2021 for this localization initiative.

On social media, some marginal effort to advertise LibreOffice through Facebook was done, but more is planned throughout 2021. Additionally, plans to evangelize ODF to various levels of the Canadian government and Canadian businesses are in the works – more will be reported on the TDF blog and via Twitter when it happens.


Because of the pandemic, most educational activities throughout 2020 took place online, and unfortunately several planned events had to be postponed. Nonetheless, LibreItalia representatives talked about many topics: LibreOffice’s 10th Anniversary; ODF and Open Standards; LibreOffice 7.0’s New Features; Free Software Tools for Remote Learning; and more.

There was just one face-to-face event, in Como in late summer, with a small attendance. Later in the year, the community organized the annual LibreItalia Conference in December (online), with several talks and a round table with politicians and other experts, to discuss about implementation of LibreOffice in public administrations.

Regarding localisation: the user interface and help content was translated for LibreOffice 6.4, LibreOffice 7.0 and LibreOffice 7.1. In addition, there was localisation of other documents, update of tips and tricks in Italian, and localization and maintenance of the Italian website.


Over in Japan, the local native language community organised 32 hackfests throughout the course of the year. Also, they had seminars or other presentations at seven open source software conferences, a study party, four online meetups (including Document Freedom Day, LibreOffice’s ten-year anniversary, and the openSUSE+LibreOffice pre-conference party).

For in-person events, community members organised nine mini-meetups, and attended one free software conference.

Lastly, Japanese project members worked with other countries and regions in East Asia: COSCUP (Taiwan), HKOSCon (Hong Kong), Northeast Asia OSS Promotion Forum (with the Korean community), Korea-Japan LibreOffice Online Seminar (organized by National IT Industry Promotion Agency, part of the South Korean government).


Currently, the Mongolian translation work is done by Battsengel Ichinnorov (aka “bachka”). In 2020, he resumed his work on translations, and got in contact with a Mongolian dictionary plugin developer. His current goal is to complete the translation, add support for the traditional Mongolian script, and bring more people into the project – so anyone with Mongolian knowledge is welcome to help out.

See our interview with bachka for more details.


Throughout 2020, the Farsi community wrote 20 blog posts on their website: In addition, they completed the translation of LibreOffice’s relaunched templates and extensions website, translated approximately 7000 strings on Weblate, added two new reviewers for translation on Weblate, and fixed some minor problems with right-to-left language pages on TDF’s wiki.

They also started translating development-related pages on the wiki, and began to document the LibreOffice’s software architecture in the Persian language.

(Final note: the community received several complaints about text rendering defects in fully justified Arabic/Persian text, which has lasted for several years without stable fix. Considering the emphasis of many active contributors and users, fixing this bug is the most important goal in 2021 for the Persian team.)


Marcin Popko led the Polish social media efforts in 2020, launching a new Facebook fanpage one year ago – it has so far reached 210 fans. He also organised two sticker giveaways via the page.

On the topic of community, Marcin wrote an article for a popular Polish techsite. The community also prepared the fully translated Polish LibreOffice website, using the current LibreOffice theme.

Portuguese (Brazilian)

Throughout 2020, the community organised “Papo Libre” – a weekly meeting with the pt-BR community, for any topic related to LibreOffice and The Document Foundation. The meeting bonded the Brazilian community around the publication of the LibreOffice Guides.

They published the Calc Guide 7.0 (coordinated by Felipe Viggiano), and the Math Guide 7.0 (coordinated by Rafael Lima). Much of the communication took place via “LibreOffice Portuguẽs”, the Telegram Channel for the Portuguese speaking community (393 members). There is also “LibreOffice Doc BR”, the Telegram channel for the pt-BR documentation community (17 members).


Activities in the Russian language community included supporting users on the forum and Russian Telegram group. Community members wrote 67 articles on a Russian blog about LibreOffice.

They also worked on translating wiki articles, the LibreOffice user interface, and guidebooks into Russian – such as the Draw Guide, which was updated to version 6.3.

Over 100 bug reports were filed, a new Russian thesaurus was integrated into LibreOffice, and Russian spellcheck dictionary was converted from KOI-8R to UTF. (Additionally: Belarusian hyphenations were integrated into LibreOffice, and the Belarusian spellcheck dictionary was updated.)


Various online events and regional conferences involving people from Latin America and Europe took place, with Spanish and Portuguese speakers. There were four online events, from May to August.

Moreover, they had a regional conference in parallel with the international one. Outside of these events, there were monthly Hispanic meetings on Jitsi. Community members also created a Hispanic YouTube channel.

In terms of user support, they helped out on Ask LibreOffice, and the Spanish-language Telegram group (currently with 1030 members).

For the website and social media, a Mastodon channel was created, while the Hispanic blog featured press release translations and other content produced in-house. A new section was implemented in order to collect tips and tricks coming from the Telegram group, called “Pearls of Wisdom” (coordinated by Celia Palacios).

In terms of documentation, a Python scripting course was held by Mauricio Baeza from Mexico (video here).
A documentation programme to involve young students from public universities was set up: “Social service program for Spanish version of LibreOffice documentation”. At the moment there are three students involved (Celia Palacios coordinates this programme).

A LibreOffice Base tutorial was added to (owned by Ismael Fanlo). Several courses for LibreOffice Calc and Writer are already there – they’re free to use by anyone, and publicly shown in the Telegram Spanish group. Some volunteers are testing the new Base tutorial (Juan Carlos Sanz, Paul G Janzen and Milton Tirado).

Traditional Chinese (Taiwan)

Sadly, the LibreOffice Asia 2020 conference was cancelled due to the pandemic. Still, there was plenty of good news throughout the year: for instance, a new blog for LibreOffice’s Traditional Chinese community was set up, to replace the old Blogspot one. News and important announcements were translated and published there.

Three lecturers passed the certification interview, which was held online during the LibreOffice Conference 2020, and were certified as LibreOffice Trainers: Freddie Chen, Kai-Yuan Hu, and Yu-Tung Hou. Now there are seven certified people in Taiwan, including six LibreOffice Certified Professional Trainers and six LibreOffice Certified Migration Consultants (two of them have both certifications).

In Yi-Lan County, the Police Departments migrated from Microsoft Visio to LibreOffice Draw. Several trainers helped the Police Departments to convert many, many drawing objects like cars and (cross) roads, which were used to describe traffic accidents in Visio, into SVG format and integrated into LibreOffice Draw. Also, Sunjun Information Service Company provided several training courses for LibreOffice Draw to the Police Departments in Yi-Lan County, to teach those officers how to use it in their daily work.


In January 2020, a LibreOffice Development Workshop took place at the Free Software Winter Camp. This was a four-day workshop, as a follow-up to the LibreOffice Developer Bootcamp 2019 – and two of LibreOffice’s six Google Summer of Code 2020 students were among the participants. It was hosted by Eskişehir University, and the trainer’s time was sponsored by Collabora.

Then there was the LibreOffice Developer Bootcamp 2020, organized together with Hacettepe University’s ACM Student Chapter and Collabora. It was run at full capacity of 150 students and went on for six weeks. Students were introduced to free and open source software, Google Summer of Code, LibreOffice, Collabora Online, and other FLOSS projects such as GNOME and KDE.

After the foundations of C++ and JavaScript were covered, the students compiled the source code for LibreOffice and Collabora Online, and sent patches to both projects. Then, a Telegram group was formed for the participants, and mentoring is now being provided by volunteers from the community.

Another event was “The Office Suite of the Open-Source World: LibreOffice”. This was a public talk/seminar as part of the “Open Seminars” series organized by Turkey Open Source Platform. With over 1,000 registered attendees, it was also streamed live from the Twitter account of the Science and Technology Minister.

And lastly, there was online basic training of LibreOffice on Pardus GNU/Linux. This was given by one of TDF’s members, Şenol Aldıbaş, live-streamed to the public, and is now available on YouTube:

Please confirm that you want to play a YouTube video. By accepting, you will be accessing content from YouTube, a service provided by an external third party.

YouTube privacy policy

If you accept this notice, your choice will be saved and the page will refresh.


In 2020, the Ukrainian language community translated approximately 9400 strings.

Thank you to everyone

We at The Document Foundation would like to say a huge thank you to everyone who in the native language communities. Your work makes LibreOffice accessible to hundreds of millions of people around the world, and your passion is wonderful. Thank you!

Like what we do? Support the LibreOffice project and The Document Foundation – get involved and help our volunteers, or consider making a donation. Thank you!

by Mike Saunders at May 11, 2021 09:00 AM

May 10, 2021

Official TDF Blog

Community Member Monday: Dante Doménech

(This image shows some LibreOffice community members from our map. If you’re not there, or want to get your location on the map, let us know!)

Today we’re talking to Dante Doménech, who’s helping to improve LibreOffice Math

Hi Dante – tell us a bit about yourself!

I’m from Spain – the biggest city in the area is Valencia. I’m a physics student, and my hobbies are coding and reading about other scientific fields.

What are you doing in the LibreOffice project right now?

I’m working on updating the suite’s formula editor to be fully compatible with MathML. This would increase the strength of our formula editor, by backing it with a solid standard.

Additionally, I’m working on adding support for Kahan summation, for handling sums in LibreOffice Calc. This would increase the accuracy of statistical operations – in particular sum, average, standard deviation …

How did you originally get involved, and what was the experience like?

There was no way of using custom RGB colors in Math formulas – so I added the feature myself. It was easier than expected, because the people in the community directly pointed me to the code I was looking for.

Is there anything else you’d like to work on?

Once I’m finished with the formula editor, I may improve the collection of numerical calculus functions in Calc. I also may help with making a new Math guide.

Many thanks to Dante for all his contributions! Some of them will arrive in LibreOffice 7.2, due this summer. Stay tuned to the blog for more updates…

by Mike Saunders at May 10, 2021 01:11 PM

May 08, 2021

Official TDF Blog

Improvements in LibreOffice’s PowerPoint presentation support

LibreOffice’s native file format is OpenDocument, a fully open and standardised format that’s great for sharing documents and long-term data storage. Of course, LibreOffice does its best to open files made by other office software as well, even if they’re stored in pseudo-“standards” with cryptic and obfuscated contents. Compatibility with PowerPoint PPT(X) presentations is therefore a challenge, but developers are working hard on improvements…

In September 2019, we announced an initiative to improve the support of PPT and PPTX files in LibreOffice. A year has passed since the last review and it is time to summarise achievements again.

Everyone is invited to participate in the PowerPoint support initiative, either in development or testing. If you are interested in joining, please send an email to


Miklos Vajna (Collabora):
Added import and export support for slide narrations and their icons

Borders and fills

Miklos Vajna (Collabora):
Handle stroke properties of image shapes
Improve import of transparency in multi-step gradients

Before screenshot of bug 134183

Slide before Miklos’s fix

After screenshot of bug 134183

Slide after Miklos’s fix

Regina Henschel:
PPTX: transparency gradient on solid fill is not considered in export
Add fill to fontwork in export to PPTX


Zhenhua Fong (PPT/X team):
Chart background is white instead of Automatic/No fill plot area

Custom shapes

Gülşah Köse (Collabora):
Handle greyscale effect on bitmap filled custom shapes (blog post)
Apply mirror property to custom cropped graphic (blog post)
Import support for custom stretch values (blog post)
Import crop position of bitmap filled shape (blog post)
Import graphics cropped into custom geometry as custom shapes (blog post)

Mark Hung (PPT/X team):
Export names of custom shapes

Miklos Vajna (Collabora):
Handle adjust values from both the custom shape and its placeholder

Tünde Tóth (NISZ):
Fix lost arcTo shape

Xisco Faulí (TDF):
PPT: export custom shapes as Bitmap


Tibor Nagy (NISZ):
Fix internal hyperlink to slide in PPTX
Fix lost direct hyperlink colors
Fix internal hyperlinks with PPTX export

Zhenhua Fong (PPT/X team):
Import hyperlinks from PPT


Gülşah Köse (Collabora):
Table row height improvement in Impress (blog post)

Miklos Vajna (Collabora):
Shadow for tables from PPTX in Impress (blog post)

Tibor Nagy (NISZ):
Fix vertical alignment in exported table

Text boxes

Attila Bakos (NISZ):
Fix exporting of placeholders

Gülşah Köse (Collabora):
Fix the placeholders priority order
Text box gets displaced by text coming from master page

Text in shapes

Gülşah Köse (Collabora):
Camera Rotation Improvement (blog post)

Miklos Vajna (Collabora):
SmartArt improvements in Impress, part 5 (blog post)
SmartArt improvements in Impress, part 6 (blog post)

Regina Henschel:
Text transformation “Deflate” is wrongly imported as “Inflate”
Wordart 3D is lost on round trip

Serge Krot (CIB):
Top-aligned text in imported PPTX becomes bottom-aligned


Ahmad Ganzouri:
OOXML support for shadow blur

Bartosz Kosiorek (PPT/X team):
OOXML Fix storage of date in Custom Properties

Dániel Arató (NISZ):
Fix missing chart in exported PPTX

Gülşah Köse (Collabora):
Protect aspect ratio of graphic bullets
Import shadow size

Luboš Luňák (Collabora):
Load images in parallel
Implement PowerPoint ‘flash’ slide transition

Mike Kaganski (Collabora):
Support for transparency attribute of glow effect

Miklos Vajna (Collabora):
Crash fix for pyramid SmartArt import
Detecting 0-byte files based on extension in Impress and elsewhere (blog post)

Samuel Mehrbrodt (allotropia) and Piet van Oostrum:
Tab positions not being retained in PPT and being lost in PPTX

Tibor Nagy (NISZ):
Fix duplicated slide name with PPTX import

Vasily Melenchuk (CIB):
Support API-based MS-CRYPTO algorithms

Zhenhua Fong (PPT/X team):
Correct positions for group shapes
SmartArt caption text location is wrong

From left to right: PowerPoint, LibreOffice before Zhenhua’s fix, LibreOffice after the fix

by Ilmari Lauhakangas at May 08, 2021 10:50 AM

May 06, 2021

Official TDF Blog

LibreOffice 7.1.3 Community available for download

Berlin, May 6, 2021 – LibreOffice 7.1.3 Community, the third minor release of the LibreOffice 7.1 family, targeted at technology enthusiasts and power users, is available for download from LibreOffice 7.1.3 includes over 100 bug fixes, with 25% focused on Microsoft Office file compatibility (DOCX, XLSX and PPTX).

For enterprise-class deployments, TDF strongly recommends the LibreOffice Enterprise family of applications from ecosystem partners, with long-term support options, professional assistance, custom features and Service Level Agreements:

LibreOffice Community and the LibreOffice Enterprise family of products are based on the LibreOffice Technology platform, the result of years of development efforts with the objective of providing a state of the art office suite not only for the desktop but also for mobile and the cloud.

Products based on LibreOffice Technology are available for major desktop operating systems (Windows, macOS, Linux and Chrome OS), mobile platforms (Android and iOS) and the cloud. They may have a different name, according to each company brand, but they share the same LibreOffice unique advantages, robustness and flexibility.

Migrations to LibreOffice

The Document Foundation has developed a Migration Protocol to support enterprises moving from proprietary office suites to LibreOffice, which is based on the deployment of a LTS version from the LibreOffice Enterprise family, plus migration consultancy and training sourced from certified professionals who offer CIOs and IT managers value-added solutions in line with proprietary offerings. Reference:

Availability of LibreOffice 7.1.3 Community

LibreOffice 7.1.3 Community represents the bleeding edge in term of features for open source office suites. For users whose main objective is personal productivity and therefore prefer a release that has undergone more testing and bug fixing over the new features, The Document Foundation provides LibreOffice 7.0.5.

LibreOffice 7.1.3 change log pages are available on TDF’s wiki: (changed in RC1) and (changed in RC2).

LibreOffice Technology based products for Android and iOS are listed here:, while for App Stores and ChromeOS are listed here:

LibreOffice individual users are assisted by a global community of volunteers: On the website and the wiki there are guides, manuals, tutorials and HowTos. Donations help us to make all of these resources available.

LibreOffice users are invited to join the community at, where they can get and provide user-to-user support. People willing to contribute their time and professional skills to the project can visit the dedicated website at

LibreOffice users, free software advocates and community members can provide financial support to The Document Foundation with a donation via PayPal, credit card or other tools at

LibreOffice 7.1.3 is built with document conversion libraries from the Document Liberation Project:

by Italo Vignoli at May 06, 2021 11:33 AM

May 05, 2021

LibreOffice QA Blog

QA/Dev Report: April 2021

General Activities

  1. LibreOffice 7.1.2 was released on April 1st
  2. Ilmari Lauhakangas (TDF) wrote a nice report about the progress done by the Macro Team in the last year
  3. Stanislav Horacek updated some menu paths in Help.
  4. Seth Chaiklin clarified the meaning of numbered paragraphs in Help.
  5. Olivier Hallot (TDF) made 20 changes and additions to Help with topics including menus, Calc cell protection and direct formatting.
  6. Jean-Pierre Ledure worked on the ScriptForge library
  7. Alain Romedenne and Rafael Lima improved the Help content for the ScriptForge library. Rafel also made it so word wrapping in shapes is enabled by default in Impress and Draw.
  8. Xisco Faulí (TDF) made about 30 improvements and additions to unit and UI tests, fixed some regression bugs and added an automated check for translation domains in .ui files
  9. Rizal Muttaqin made updates to all icon themes
  10. Jan-Marek Glogowski, Armin Le Grand and Thorsten Behrens (allotropia) worked on the WASM build in a feature branch
  11. Tibor Nagy (NISZ) fixed losing internal hyperlinks upon PPTX import
  12. Vert D improved renaming behaviour in the Template Manager
  13. Tushar Kumar Rai fixed a Data Provider crash
  14. Roland Kurmann fixed filtered/transpose paste in Calc while adding many new unit tests for the functionality, fixed copying multiple cells from a Calc column and pasting outside LibreOffice and made it so only the count of non-filtered rows will be shown in Calc’s status bar
  15. Dante Doménech added some MathML structures and started making use of the Kahan summation algorithm in Calc in order to reduce the numerical error in the total of floating-point calculations
  16. Ilhan Yesil made it so the tooltip of a button created by an extension in the Sidebar is refreshed immediately upon text changes
  17. Áron Budea (Collabora) fixed a regression in the Modify DDE Link dialog layout
  18. Attila Bakos (NISZ) fixed some Writer textbox crashes and regressions and fixed PPTX exporting of template textbox placeholders
  19. Tünde Tóth (NISZ) fixed some issues with Calc filtering
  20. Jeff Huang fixed a Writer regression in inserting lines with arrow/circle
  21. Mark Hung fixed an undo-redo crash
  22. Andreas Kainz improved the Notebookbar command logic and improved the layout of some dialogs
  23. Aditya Pratap Singh made the image export dialog behaviour more intuitive
  24. Luke Deller fixed an issue with Writer using 100% CPU while idle
  25. Pedro Pinto Silva improved the macro selector and about dialog layouts
  26. Bubli fixed some Impress animation issues
  27. Heiko Tietze (TDF) made it so the location in file properties dialog is a hyperlink and improved the Style Inspector layout
  28. Matej Kivader fixed the display of custom button text colour in Basic dialog designer
  29. Gábor Kelemen (NISZ) made improvements in menu accelerators, buttons and Impress/Draw general options layout
  30. Stephan Bergmann (Red Hat) made many code cleanups, replaced apache-commons-logging with java.util.logging.Logger in report builder and elsewhere, fixed unnecessary authentication prompt upon having sftp URIs in recent documents and improved compatibility with C++20
  31. Hossein Noorikhah converted all the README files to consistent Markdown format while updating them in many places. He also fixed problems with the HTML generation solution for the READMEs
  32. Luboš Luňák (Collabora) made optimisations related to graphics rendering and bitmap loading and improved the Skia integration
  33. Armin Le Grand (allotropia) fixed vanishing form controls in edit mode or print preview and fixed a couple of linked OLE object issues
  34. László Németh (NISZ) continued adding metadata display capabilities to the Style Inspector, added support for deleted images in change tracking, improved the change tracking UX and fixed a mail merge document counting off by one error
  35. Michael Stahl (allotropia) fixed a z-order issue with floating objects, fixed missing images in imported DOCX header/footer, improved the performance of Writer word count and fixed some Writer crashes
  36. Bayram Çiçek made it so MIME type icons are displayed in the recent documents menu list
  37. Noel Grandin (Collabora) improved the speed of opening XLSX files with thousands of shape objects (with additional contributions by Caolán McNamara), improved the speed of opening XLSX files with massive amounts of row range style attributes and made many code cleanups and optimisations
  38. Arnaud versini fixed a regression in breaking links to external images
  39. Vasily Melenchuk (CIB) added unit tests for Basic dialog XML serialisation (none existed so far)
  40. Andreas Heinisch added checks for valid range names and cell references inserted via API, made Calc range name definition errors show in a tooltip, taught UI tests how to check tooltip text, made Calc sorting respect “Include formats” option, made Calc’s IRR function accept an array as argument, limited the calculation of Pearson coefficient in Calc’s RSQ and PEARSON functions and improved the Calc Manage Names dialog
  41. Thorsten Behrens (allotropia) added initial support for sccache builds on Windows
  42. Regina Henschel fixed DOCX import of group or line with rotation
  43. Bartosz Kosiorek implemented PAINTRGN record and complex clipping support for EMF graphics
  44. Jan-Marek Glogowski (allotropia) fixed clipboard handling with Wayland + Qt as well as several other Qt/kf5 issues
  45. Gülşah Köse (Collabora) fixed a mail merge issue where empty fields were returned
  46. Tomoyuki Kubota helped Caolán with the UI backend work with a couple of patches
  47. Tomaž Vajngerl (Collabora) made internal improvements to graphics handling code
  48. Justin Luth (Collabora/SIL) fixed losing outline levels upon DOC export, fixed z-order issues with background shapes in DOC import, made DOCX export support russianUpper/russianLower numbering, fixed a DOC import layout issue related to MS Word’s excessively liberal design settings, fixed DOC/RTF export of fixed date and time fields, fixed dupliction of comments, fields and footnotes in DOCX export and fixed many DOC/DOCX import/export issues related to numbering
  49. Michael Weghorn made many improvements to the Android version with topics including recent file display, file saving and PDF export
  50. Tor Lillqvist (Collabora) worked on the iOS version and improved the event tracing API
  51. Rounak Modi added his first unit test
  52. Eike Rathke (Red Hat) overhauled VBA Range getFormula(R1C1) to make it work properly
  53. Szymon Kłos (Collabora) added a Fontwork options panel into the Sidebar and made Impress collaborative editing more robust
  54. Julien Nabet fixed regressions in image filters and made code cleanups and crash fixes
  55. Miklos Vajna (Collabora) continued improving gutter margins (RTL) and made improvements to the bibliography feature (URL handling, page references). He also fixed issues with OLE object sizing in HTML export
  56. Jim Raykowski improved the Outline folding feature, made crash fixes, added the ability to navigate by fields with the Navigate By control and added fields content type to Navigator
  57. Samuel Mehrbrodt (allotropia) added a mechanism to selectively enable macros for document events
  58. Matt K added a check for ODF file format associations on Windows upon startup and changed the Windows file dialog to run on the main thread to avoid crashes
  59. Mike Kaganski (Collabora) improved the Calc tab bar look, made it so pasting RTF content does not wipe out document settings, added DOCX export/import of resolved comments as “done” and made code cleanups and optimisations, crash fixes and improvements to unit tests
  60. Caolán McNamara fixed an infinite loop in spellchecking dialog layout, fixed an issue with duplicated and misplaced images in exported Archive/A-1b PDFs, made dragging hyperlinks in Writer with GTK3 backend work, continued on the last stretch of the massive UI backend work and made many cleanups and crash fixes

Kudos to Ilmari Lauhakangas for helping to elaborate this list.

Reported Bugs

577 bugs, 71 of which are enhancements, have been reported by 362 people.

Top 10 Reporters

  1. Xisco Faulí ( 24 )
  2. NISZ LibreOffice Team ( 24 )
  3. Telesto ( 24 )
  4. Eyal Rozenberg ( 22 )
  5. Regina Henschel ( 13 )
  6. Olivier Hallot ( 8 )
  7. Scito ( 6 )
  8. Roman Kuznetsov ( 6 )
  9. BDF ( 6 )
  10. Rizal Muttaqin ( 6 )

Triaged Bugs

609 bugs have been triaged by 100 people.

Top 10 Triagers

  1. Xisco Faulí ( 111 )
  2. Heiko Tietze ( 56 )
  3. Dieter ( 50 )
  4. Buovjaga ( 49 )
  5. Timur ( 33 )
  6. Julien Nabet ( 22 )
  7. Mike Kaganski ( 17 )
  8. Roman Kuznetsov ( 16 )
  9. raal ( 15 )
  10. Olivier Hallot ( 15 )

Resolution of resolved bugs

617 bugs have been set to RESOLVED.

Check the following sections for more information about bugs resolved as FIXED, WORKSFORME and DUPLICATE.

Fixed Bugs

207 bugs have been fixed by 47 people.

Top 10 Fixers

  1. Caolán McNamara ( 23 )
  2. Mike Kaganski ( 10 )
  3. Andreas Heinisch ( 9 )
  4. Olivier Hallot ( 9 )
  5. Justin Luth ( 7 )
  6. László Németh ( 7 )
  7. scito ( 6 )
  8. Miklos Vajna ( 6 )
  9. Jan-Marek Glogowski ( 6 )
  10. Attila Bakos (NISZ) ( 5 )

List of critical bugs fixed

  1. tdf#106282 Crash in: when hitting cancel in file open dialog, when a file search is running ( Thanks to Matt K )
  2. tdf#86321 EDITING, FORMATTING: diagram didn’t automatic update when change variable (steps in comment 28) ( Thanks to Xisco Fauli )

List of high severity bugs fixed

  1. tdf#106195 Change docs to explain how to handle and remove direct formatting ( Thanks to Olivier Hallot )
  2. tdf#132472 FILEOPEN PPTX Table text imported with white color ( Thanks to Xisco Fauli )
  3. tdf#132901 Tools > Options > LibreOffice > Online update crashes if “online update” feature is not installed ( Thanks to Xisco Fauli )
  4. tdf#138785 Empty frames after deleting an image and (auto-saving the file) (track changes involved) ( Thanks to Michael Stahl )
  5. tdf#140639 It is not possible to work with an older document from LO 6.4 in new LO 7.0, slow perf ( Thanks to Caolán McNamara )
  6. tdf#141345 new feature gutter-margin in LO7.2 produces unnecessary incompatibility with LO7.1 ( Thanks to Miklos Vajna )
  7. tdf#141504 UI Images look ugly with 1-bit depth with QT5 backend ( Thanks to Jan-Marek Glogowski )
  8. tdf#141703 EDITING Tab key no longer moves to next cell in Impress table ( Thanks to Samuel Mehrbrodt )

List of crashes fixed

  1. tdf#106282 Crash in: when hitting cancel in file open dialog, when a file search is running ( Thanks to Matt K )
  2. tdf#131634 Crash in sd::View::SdrEndTextEdit(bool) ( Thanks to Mark Hung )
  3. tdf#132901 Tools > Options > LibreOffice > Online update crashes if “online update” feature is not installed ( Thanks to Xisco Fauli )
  4. tdf#135997 SPECIAL CHARACTER DIALOG: Crash in: SvxCharacterMap::updateRecentCharControl() ( Thanks to Mike Kaganski )
  5. tdf#141405 LO crashes when adding control in dialog editor ( Thanks to Jim Raykowski )
  6. tdf#141499 Crash inserting hyperlink (fairly often) and cursor not starting in URL field ( Thanks to Caolán McNamara )
  7. tdf#141511 CRASH: creating new document while navigator is displayed ( Thanks to Jim Raykowski )
  8. tdf#141531 Android Viewer crashes trying to open mail merge file with unavailable data source ( Thanks to Michael Weghorn )
  9. tdf#141537 UNO Object Inspector: Crash while inspecting file ( Thanks to Julien Nabet )
  10. tdf#141547 CRASH: opening Standard Filter dialog ( Thanks to Mike Kaganski )
  11. tdf#141557 DOCX file crashes when the anchor changed to_paragraph from as_char ( Thanks to Attila Bakos (NISZ) )
  12. tdf#141689 Crash with trendline using moving average with 2 points and type central ( Thanks to Samuel Mehrbrodt )
  13. tdf#141701 EDITING Crash when closing 3D View dialog of 3D chart ( Thanks to Noel Grandin )
  14. tdf#141708 CRASH: closing document while navigator is open ( gen ) ( Thanks to Caolán McNamara )
  15. tdf#141854 Crash in: mergedlo.dll ( Thanks to Caolán McNamara )
  16. tdf#141887 Crash on closing Writer via window decoration (X) with unmodified document and active IM ( Thanks to Jan-Marek Glogowski )
  17. tdf#141924 A specific file crashes with Style Inspector open, after deleting some text ( Thanks to Mike Kaganski )
  18. tdf#141967 Crash when closing Asian Phonetic Guide (gtk3) ( Thanks to Caolán McNamara )

List of performance issues fixed

  1. tdf#140639 It is not possible to work with an older document from LO 6.4 in new LO 7.0, slow perf ( Thanks to Caolán McNamara )
  2. tdf#141416 [FILEOPEN] Excel file very long to open (more than one hour) ( Thanks to Xisco Fauli )
  3. tdf#141556 Ongoing 100% CPU usage after opening document ( Thanks to Luke Deller )
  4. tdf#45820 insanely slow wmf import (complex

by x1sc0 at May 05, 2021 03:42 PM

Official TDF Blog

3D Objects: Making a Globe with LibreOffice

Regina Henschel shows you how to do some nifty 3D tricks in LibreOffice…

First, you need a world map in “Miller projection”. You find a suitable one on Wikipedia – download the full-size version. Here’s a thumbnail of it (CC-BY-SA, Daniel R. Strebe, August 2011):

Next, start LibreOffice Draw, and create a sphere from the “3D-Objects” toolbar.

Click the sphere to select it, right-click to bring up the context menu, and choose “Area”.

In the dialog box that appears, click on “Bitmap” and then on “Add/Import”. Select the downloaded map, and enter a name for it, that you will use in your collection of bitmaps. The image should be applied to the sphere. If not, select the map from the collection.

Then, in the “Options” part of the dialog box, select the item “Stretched” from the drop-down list “Style”. Click OK. Your globe is finished!

Now you can rotate the globe to the part of the earth you want to see – click on it once to show red corner controls, then once again to show orange; the latter can be used for rotation.

If you want to change the position of the “sun”, open the “3D Effects” dialog from the context menu. Select the tab “Illumination”. In the lower part drag the ball to the desired direction. And finally, apply it with the “Assign” icon top right.

Thanks to Regina for the tips! More guides for LibreOffice Draw, written by our documentation community, are available on this page. Check out the Draw Guide 6.4 for lots more info!

by Mike Saunders at May 05, 2021 12:28 PM

Miklos Vajna

Bibliography improvements in LibreOffice Writer: refer to a specific page

The bibliography feature in Writer allows authors of e.g. scientific papers to track sources: first you can insert bibliography entry fields, then at the end you can generate a bibliography table automatically.

Writer recently gained two improvements in this area, and now there is one more: the ability to refer to a specific page of a (potentially long) source.

First, thanks TUBITAK ULAKBIM who made this work by Collabora possible.


The same feature in normal HTML linking / citation is well-known: you can place anchors in your document and then links can refer to not only to your page, but also can set the fragment part of the URL to jump to a specific section directly. E.g. this link will jump to the "Motivation" section of the above referred previous post.

Wouldn’t it be nice if you could also jump to a specific page of a scientific PDF?

Results so far

You can add such references by choosing the Insert → Table of Contents and Index → Bibliography Entry menu item. Set Bibliography Source to Document Content and press the New button. The appearing dialog now has widgets to set a specific page number:
Figure 1. Refer to a specic page of a bibliography source, user interface

This is then stored in the URL by setting its fragment to page=..., and typically PDF readers understand this syntax, so when you click on the URL, the PDF will open exactly on the cited page.

This also works the other way around: URLs with such syntax are presented to the user with the dedicated widget to see, edit or delete the page number of the URL.

Finally, if you refer to different pages of the same source, the bibliography text generator detects this and lists the source in the bibliography only once.

How is this implemented?

If you would like to know a bit more about how this works, continue reading… :-)

As usual, the high-level problem was addressed by a series of incremental development steps:

Want to start using this?

Collabora intends to continue supporting and contributing to LibreOffice, the code is merged so we expect all of this work will be available in TDF’s next release (7.2).

by Miklos Vajna at May 05, 2021 09:25 AM

April 30, 2021

Caolán McNamara

Math Selection Rendering

Towards 7.2 the Math edit window text selection is now drawn the same as the selection in the main applications. This affects the selection of similar uses of this EditView in LibreOffice such as the writer comments in sidebar.

by caolan ( at April 30, 2021 04:07 PM

April 18, 2021

Luboš Luňák

The effect of CPU, link-time (LTO) and profile-guided (PGO) optimizations on the compiler itself

 In other words, how much faster will a compiler be after it's been built with various optimizations?

Given the recent Clang12 release, I've decided to update my local build of Clang11 that I've been using for building LibreOffice. I switched to using my own Clang build instead of openSUSE packages somewhen in the past because it was faster. I've meanwhile forgot how much faster :), and openSUSE packages now build with LTO, so I've built Clang12 in several different ways to test the effect and this is it:

The file compiled is LO Calc's document.cxx, a fairly large source file, in a debug LO build. The compilation of the file is always the same, the only thing that differs is the compiler used and whether LO's PCH support is enabled. And the items are:

  1. Base - A release build of Clang12, with (more or less) the default options.
  2. CPU - As above, with -march=native -mtune=native added.
  3. LTO - As above, with link-time optimization used. Building Clang this way takes longer.
  4. LTO+PGO - As above, also with profile-guided optimization used. Building Clang this way takes even longer, as it needs two extra Clang builds to collect the PGO data.
  5. Base PCH - As Base, and the file is built with PCH used.
  6. LTO+PGO PCH - As LTO+PGO, again with PCH used.

Or, if you want this as numbers, then with Base being 100%, CPU is 85%, LTO is 78%, LTO+PGO is 59%, Base PCH is 37% and LTO+PGO PCH is 25%. Not bad.

Mind you, this is just for one randomly selected file. YMMV. For the build from the video from the last time, the original time of 4m39s with Clang11 LTO PCH goes down to 3m31s for Clang12 LTO+PGO PCH, which is 76%, which is consistent with the LTO->LTO+PGO change above.


by llunak ( at April 18, 2021 06:18 PM

April 14, 2021

Michael Meeks

2021-04-14 Wednesday

  • Catch up with Tor, sales call with Eloy - prodded at a nasty mis-feature with web view mode in Online and code read through a nasty with Ash. M's ballet re-starting; fun.

April 14, 2021 09:00 PM

Miklos Vajna

Improving borders of merged table cells in Writer

Writer now has better support for Word-compatible border rending when it comes to vertically merged cells in tables.

First, thanks Docmosis who made this work by Collabora possible.


Both Word and Writer allow specifying borders for any kind of table cells. When the user creates a vertically merged cell, there is a covering cell and there is one or more covered table cells.

The Writer approach is to render the cell borders according to the properties of the covering cell. This has the benefit that each edge of the table cell has a single border style (e.g. dashed or hairline).

The Word approach is to render the cell borders as if there would be no vertical merge, according to the properties of the covered cell. This has the benefit that merging the content of cells vertically doesn’t change the border rendering, but it also requires more complex code for painting.

Results so far

Writer can now detect that your tables originate from Word formats and render table borders the Word way in that case.

Here is how the new rendering result look like:
Figure 1. Writer rendering in compatibility mode, new output

And here is how it used to look like:
Figure 2. Writer rendering in compatibility mode, old output

And finally the reference rendering is:
Figure 3. Writer rendering in compatibility mode, reference output

You can see that the B4 and B5 cells are covered, they had some unwanted border on their left side and this is now gone.

How is this implemented?

If you would like to know a bit more about how this works, continue reading… :-)

  • First, some building blocks were introduced: SwCellFrame::GetCoveredCellInRow() can look up a covered cell in a certain row, provided that this cell covers it

  • Building on top of this, SwCellFrame::GetCoveredCells() can provide a list of cell frames which are covered by the current cell, due to vertical merge. This is needed, because previously the layout didn’t have to consider properties of covered cells, so while the document model had this information, it was not visible to the layout in a convenient way

  • Using the above functionality, SwTabFramePainter::Insert() can suppress painting of certain border lines in Word compatibility mode

  • Finally, the code change can be covered with a test by recording the rendering and asserting the vertical positions of border points: we can check that all the positions belong to the 1st, 2nd or 3rd rows, and not to a row below them

Want to start using this?

Collabora intends to continue supporting and contributing to LibreOffice, the code is merged so we expect all of this work will be available in TDF’s next release (7.2).

by Miklos Vajna at April 14, 2021 07:00 AM

April 13, 2021

Michael Meeks

2021-04-13 Tuesday

  • Mail chew, sync with Kendy; chased customer bugs, and contractuals; catch-up with Pedro.

April 13, 2021 09:00 PM

April 12, 2021

Michael Meeks

2021-04-12 Monday

  • Mail chew, planning call, catch up with Eloy.

April 12, 2021 09:00 PM

Excommunicating a heretic

Young & foolish?

In 1988 as a scrawny eleven-year old arrival alone at boarding school, perhaps the only Quaker in a thousand strong body; I wore a white poppy to the large Remembrance Day commemorations. I recall the interest and forceful objections of my peers and elders - some with armed service connections, and my impassioned pleas for a personal pacifism. No doubt there were some who were intellectual defenders of the doctrine of Just War: (love's response to a neighbour threatened), as I myself became later in life - but I suspect that the fun of picking on those who are noticeably different was the dominant motivation. I imagine a majority of those in the Free Software community have suffered similar or more traumatic experiences, associated with being noticeably and vocally different; of being outstanding in one area & yet weak in others: perhaps socially and/or athletically. Hopefully that lets us empathise with others who are oppressed. That's why in this debate I think the purest motives on both sides here are closest to this: What is love's response to a neighbour who is threatened? and then what is proportional?

Disclaimer: something must be done

Recently RMS returned to the FSF board with to my mind an indefensible lack of grace & engagement with his critics. This seems to unfortunately intersect with the absence of good, representative governance structures for eg. GPL users to affect license direction. People started on-line petitions in liu of voting to either remove the FSF board or to unconditionally support RMS. Spoiler alert - there is something to annoy everyone here. I don't believe either of these stated positions is helpful and one of them is actively dangerous. I expect RMS to demonstrate hard-core leadership by preparing for his inevitable political or physical death, and building good governance structures that can live on and continue his work. It is not a time to do nothing. KDE's, statement seemed constructive, Debian had a middle ground option, and even RedHat's position was not so extreme. I sincerely hope that the FSF can be improved and continue to reflect RMS' vision of Software Freedom.

Its not all awful

The open letter to remove the FSF board contains much that is deeply problematic, yet there are some sensible pieces, take this one:

While these ideas have been popularized in some form by Richard M. Stallman, he does not speak for us. We do not condone his actions and opinions. We do not acknowledge his leadership or the leadership of the Free Software Foundation as it stands today.

Notice the credit, and yet creating distance, notice the sensible tone, and the moderate approach. I would like to think that the several thousand people signing up to this, many of whom I like, some of whom I've really enjoyed working with are primarily saying only what this paragraph says. If so - good, I can understand that. Unfortunately alongside this reasonableness are some very profound problems that needlessly makes this one of the most divisive initiatives I've seen in free-software:

Attacking people's beliefs?

The rational here seems really damaging:

"He has shown himself to be misogynist, ableist, and transphobic, among other serious accusations of impropriety [impiety?]. These sorts of beliefs have no place in the free software, digital rights, and tech communities. ... There has been enough tolerance of RMS’s repugnant ideas ... we will not continue suffering his behaviour, ... or otherwise holding him and his hurtful and dangerous ideology as acceptable. ... We ask for contributors to free software projects to take a stand against bigotry and hate within their projects."

This focus on beliefs is unconscionable. Beliefs struggle to exist outside people's heads so I read this as: People who we can plausibly accuse of having misogynistic, ableist or transphobic beliefs have no place in the free software community. This might sound plural and welcoming, and I understand the desire to stick up for those who are marginalized, but it has a number of acute problems.

What is the new orthodoxy?

Which are the views that must be held (or not held) to have a place in free software? Unfortunately the new orthodoxy while having sixteen promoters is unbounded - we are not given a comprehensive creed. We do have some very precise examples on what is not acceptable though. Lets take trans-phobia. Apparently RMS while not on the autistic spectrum, does have a phobia. However - exactly what that phobia is is rather less than clear. Many (including I suspect RMS) are convinced that he is not transphobic. There seems to be a somewhat complex difference in the doctrine of how best to de-gender pronouns which causes the problem.

Interestingly the ableist issue when I skimmed the snippets seems to be rooted in a specific view on the ethics of abortion. As a young woman finds herself unexpectedly alone at a crossroads of life-changing consequence it is hard not to have deep compassion for her! Indeed, my wife has spent some years giving space and a listening ear, to help women think through their choices at this crisis point. Views vary widely here, but it seems that even among abortion activists the (perhaps comforting) view that there is zero moral dimension: that the act is no more significant than clipping your fingernails is a rather extreme one. Nevertheless if you hold it I expect it makes it much harder to critique selective abortion - whether for sex, disability or (as technology advances) more eugenic Gattaca-style scenarios. I read RMS' deeply disturbing advice on selecting for ability (which is sadly common) as flowing from this understanding. Should an affirmation of the wonderful, unique, created in the image of God value of all persons at some point in this process be mandatory for inclusion in our community? A tough one.

Apparently the signatories of this document also think that having mysogynistic beliefs is grounds for excommunication from the free software community. Who chose these three beliefs? where did they appear from? are there any more things we should not believe? Presumably traditional convictions around marriage are also grounds, cf. the Brendan Eich hysteria but; what else?

On excommunicating heretics

The paradox of intolerance is often aired to lazily avoid spending any thought justifying this sort of statement & action. One day I hope to have time to read The Open Society and its Enemies and its counterpoint. The vital need is to respect the dignity, protect the property, and cherish the lives of others - particularly those who have historically suffered. I can see how this is especially important to trans people, and I take no pleasure in seeing them offended. Having said that there are also many groups who have suffered historically in horrible ways. History is indeed littered with examples of well meaning intolerance going badly wrong. It is also clearly the case that some speech is unacceptable (but beliefs!?). The interesting question here is really where to draw the line. No doubt it feels good to stand up for a vulnerable marginalized community by excluding those with whom they disagree. I do wonder whether that is easier than trying to understand and accurately portray both sides - or "putting the work in to understand other human beings".

This is fun! lets find more heretics!

It seems to me there is a substantial convergence of views between RMS and this new orthodoxy - so it should be far easier to find those whose beliefs diverge significantly. Luckily very detailed descriptions exist of what very large groups of people believe around the world. Many have different ideas of how best to love those with whom they disagree. For example Male and Female he created them - towards a path of dialogue on the question of gender theory in education. (published 2019 under Pope Francis). That should be easy to caricature in order to exclude people from the Free Software community. I think it would also be easy to argue that a loyal Catholic faithfully upholding the Churches' teaching has beliefs that are more easy to caricature as mysogynist than RMS'. I really don't want to pick on Catholics (who just happen to be rather good at multi-lingual write-ups of their doctrines), so how about a random update from the Church of England. Of course - in each case adherents would reject such a caricature and these labels; no doubt they would also have powerful convictions on when life begins. But perhaps that's all a bit Euro-centric - so how about Wikipedia on Islam, or we can spend all day cycling through major belief systems each representing hundreds of millions of people, and collectively billions. Almost all of these will have some element that will conflict with or upset the opinions of someone else. Most of these belief systems are mutually contradictory and/or mutually offensive at some level to adherents of others. So there should be no shortage of beliefs for which we can excommunicate others.

I hear the common objection: "But I have a friend who is a <insert religion> and they don't believe anything (like that) - perhaps we can only exclude the ones that actually believe these things?". I'm sure you do have such a friend, and so do I. Clearly no world religion has a monolithic interpretation. The balance between revelation & personal experience, the hermeneutics and theology varies extraordinarily widely. That results in sets of people under the same apparent umbrella holding widely different beliefs; even if we can safely assume that you truly know what your friend believes; and this is before we get into more esoteric Spaghetti Monster style creeds.

All that aside - I see no way to argue for excluding RMS on the basis of his beliefs (ie. he is not progressive-orthodox enough) without also loosing a big chunk of the rest of the world as well. Please notice - nothing in the statement that so many signed says this is specific to leaders, or being a prominent person, each belief itself is grounds: "these sort of beliefs have no place in the free software community?". Why pick belief as a rationale?

Potential allies in surprising places

An acquaintance of a friend spent many decades smuggling 'pornographic literature' into the Eastern Block - (very good for marriage enrichment). He also founded a non-profit Open Doors, here's a quote from the pre-amble to their watch list:

In the most populated countries on earth, [people] live in a surveillance state ... China has also developed widespread facial recognition software and established laws requiring facial scans to purchase a phone. When taken together, these two technological advances mean the government can track individuals like never before ... China is also rolling out a country-wide Social Credit System (SCS) by which authorities plan to reward "good" citizenship and punish "bad."

Do people with those beliefs, who are actively working to educate, lobby, change hearts & minds to guard society and help others - have common cause with us in the "digital rights community"? - or do they need excommunicating too? It is interesting that Open Doors provide one of the more conservative estimates of the ~thousand(s) of Christians killed each year specifically for their faith. I worry about an ethnocentricity that extrapolates from the USA's poisonous cultural divisions to erase the oppression of minorities around the globe. It is not acceptable to consider the impact of community policies based only on the Silicon Valley population & culture.

Transient heretics in surprising places

Another interesting problem with orthodoxy is the surprising belligerence and infighting that it can breed - often on minor issues. This is familiar from the innumerable schisms in small churches. A joke is told in the aftermath of a church dividing; of an old friend checking in with one of the new leaders: "Ah, these are terrible faithless times - we've split again over doctrine, and now it's just me and my brother. And to be honest - I'm not so sure about him!". I was interested to see the story of eg. Valerie Aurora: an extremely smart & dynamic feminist who is a leading expert on the latest diversity topics. Yet she was somehow ejected from Double Union the hacker/maker space she co-founded because of inadvertently infringing the code of conduct that she ~wrote. I fear living in a world where even outwardly conforming to the latest progressive orthodoxy would tax the wisdom of Solomon.

Prophets of a new creed

It is interesting to read about the beliefs of some of the people involved here; sadly I don't know Molly - but I've had the privilege of working with Matthew Garrett in his early days on GNOME - and a smarter, more charismatic, outspoken, iconoclastic(?), amusing person it's hard to find - quite apart from his amazing depth of contribution to Free Software. I was interested to try to quickly skim Molly & Matthew's beliefs based on what they write and see how they measure up.

Before doing that - let me re-assert that I take the freedoms of speech, conscience and expression extremely seriously as self-evidently vital for the functioning of an open society, though not absolute. While I want everybody to live in a physically safe space, I want to discuss views robustly in an atmosphere of respectful enquiry, with complete freedom and openness. It is not my intention to enlarge the sphere of (self) censorship.

There is however a kind of humour whose value (if any) is drawn from trampling the personal & sacred to elicit a response; is it nervous schadenfreude for those thus offended? (in this case those who love Christ more than friends or family). I don't see many cursing with ~obsolete god's names eg. Marduk so what can we learn from:

I'd prefer five words such as: challenging, fascinating, absorbing, collaborative, rewarding myself - but I'd hate to live in a world devoid of humour. Another example - I was interested by Molly's re-tweet on another hot potato (as always well worth reading the primary source court judgement rather than the dubious spin below):

To me it is curious that someone can champion excluding people over their heterodox beliefs, while simultaneously shouting things like the below; perhaps some irony overload here:

Apparently it is easy to end up championing the gentle treatment of a sexual minority while thinking it is funny to be gratuitously offensive to other minorities. Surely it can be offensive enough to respectfully state ones position. Still - in a world where there is a broad freedom of belief, conscience and speech, possibly some humour can cut through the gloom. A possibly tragic, possibly humorous but probably co-incidental aside here is that some chunk of this is based on an excessive focus on a small divergence in linguistic orthodoxy; when this was a hallmark of the GNU-slash-Linux campaigns of the past.

Perhaps you think it is deeply unfair to examine people's public twitter feeds - which occur outside the context of a project - to determine whether their beliefs are aligned with the standards they demand from others. Actually - I tend to agree. For good reason any sensible code of conduct excludes speech and behaviour outside its immediate project context. Not so this statement - its scope is everyone, everywhere and all of the time - even historic beliefs.

But possibly you think that it is ok to attack the privileged to defend the weak; that it is proportional to agitate to end someone's career in order to avoid the risk of a friendly minority member inadvertently working alongside someone who has some subset of beliefs that differ from theirs.

Saint Obama: the world is complicated

I was encouraged recently to watch this, and I excerpt the first part:

This idea of purity, never compromised, always politically woke & all that stuff - you should get over that quickly. The world is messy, there are ambiguities, people who do really good stuff have flaws.

(his Catholic vice-president also seems to be doing well as of late too). I expect that any model of people that doesn't tolerate the complexity and malleability of human experience and belief will ultimately not represent the world well. That will lead to disappointment. You should get over that quickly. I'm certainly far from perfect, my views change over time, perhaps the same is true for you. As Lincoln pointed out that Those who look for the bad in people will surely find it, I'm often guilty of that myself.


Should we fear a world-view that locates most of the world's problems in other people? The flaws I'm most concerned about are my own (which are more than obvious though I'm certain I have more that you can locate). It is because of those flaws that I need to live in a place that is patient and loving.

Should we fear a world-view that builds a path to redemption via being maximally unpleasant to others who disagree? Or is it better to try hard to "Act justly and to love mercy and to walk humbly with your God" (Micah 6).

Is being offended occasionally by others' (truly objectionable) beliefs the price of collaborating with people with diverse viewpoints, discussing anything and everything without boundaries and learning? Not always a small price to pay, but is it not necessary? Surely it is the case that each member of outlying groups benefits from mutual tolerance. Indeed we often celebrate the amazing contributions to society of those who (at the time) were viewed to have unacceptably fringe beliefs & practices. Becoming a less tolerant society is potentially polarizing and dangerous.

What is love's response to a neighbour in need in this instance? Probably it is to vigorously encourage RMS to setup a representative governance so actual users of the GPL family can determine its post-RMS future. Perhaps it is to loudly re-iterate the obvious: that RMS does not represent you or me - and that we don't share the details of his unusual politics; to make more obvious that personal views are disjoint from organizations' missions, and to ensure we are able to choose our representatives in a secret ballot. But love's response is certainly not to let Free Software get twisted into a new and narrow orthodoxy consumed by gender politics to its own harm and the exclusion of others. We should remain a broad, tolerant and inclusive church even when it hurts. We used to be focused on liberty & freedom - I miss that.

"We ask for contributors to free software projects to take a stand against bigotry and hate within their projects."

Bigotry - a stubborn and complete intolerance of any creed, belief, or opinion that differs from one's own.

Postscript A - why religious tolerance?

It seems obvious to me that this new orthodoxy combined with political power is rather dangerous. Perhaps those who have not grown up with some of the common stories would do well to read them. How about the fiery furnace - takes two minutes of your life; but why is it so hard to show due respect to the pagan government's request? is that really breaking the 2nd commandment? Or - if you have a very strong stomach - try just eat the pork: why won't they obey orders from an authority (Epiphanes: 'god manifest') - perhaps interesting? What requirements or forced conformity might be too much? Is there a shortcut via coercion to truly change society to how I want it to look? or is winsome persuasion the best way? Of course there is a shameful record of burnings, division & bigotry - often over rather small divergences in orthodoxy throughout the Church's history, without even getting into where major creeds interacted at a larger world scale. Then again I'm sympathetic to the Pastafarian concern that arbitrarily unreasonable creeds can be created, and that other points of view have no systematic orthodoxy to protect them which seems unfair: surely it is so: so lets treat all people fairly when our worlds collide.

Postscript B - hiring people

"We want to hire diverse people - but only if they are exactly like us."

One of the things that has saddened me most among those I've worked with in the past is that it is now acceptable for people to say that they would not hire people with beliefs that I know many wonderful, excellent, Christian programmers have. There is a rising tide of intolerance of those that are perceived not to kowtow to the new progressive orthodoxy.

Generally an attitude of graciously accepting others' hostility has held, along with avoiding law-suits. I fear though that as attacks on believers' presence in Free Software get more explicit there will be a slowly growing realization of the problem here. Not to pick on Mozilla (though they did sign this problematic statement) but I'm curious how views that are 'traumatic and damaging' can be accommodated there. I think it is past time to start monitoring religious affiliation as well as ethnicity as part of diversity.

Can any company explain how These sorts of beliefs have no place in the free software, digital rights, and tech communities can intersect with companies that build products around such communities? Surely we can find lots of quotes saying how important community is to developing software. Surely we can find statements that employees are members of such communities. So is it really credible to a-priori exclude masses of people on the basis of their beliefs from your employee pool? Does that extend to refusing to hire people based on their beliefs? Or perhaps people with incompatible beliefs just get inferior jobs inside the company partitioned away from those communities? Certainly - I feel far from safe & welcome applying to one of the listed companies there without further re-assurance. It is deeply ironic that in the past one of the (baseless) explanations from some of the more reasonable people I talk with for excluding believers from management is that they might discriminate when hiring.

If this statement was focused on leaders, it could be characterized as installing a new glass-ceiling for any who are not progressive-orthodox. Even if it were re-written as a criteria for leaders - I'm still far from sure we will get better leaders by selecting for conformity rather than competence.

As the virtual becomes increasingly more important than the physical for some people's livelihoods hopefully we can all agree that encouraging equitable behaviour online is a good thing.

Postscript C - (goes without saying)

As should not need saying: these views are mine, my own. I don't speak for my employer, nor any projects I'm affiliated with, nor my Church, or my friends. Feel free to borrow any views you find persuasive or reject any you find objectionable.


2021-04-14: Impressed to receive a very gracious apology from Matthew G for his language; though of course - I'd prefer movement on the substance; good chap; (he approved this, and tweeted). Also an amusing comment from a friend on the parallels between Act justly, and to love mercy and the Robustness principle

April 12, 2021 02:00 PM

April 11, 2021

Michael Meeks

2021-04-11 Sunday

  • Sermon in the car on the way to R&A's - lovely to meet L - in person: another, wonderful nephew - exciting times, and tired parents. Lots of crypto mining going on, thank goodness for an increasingly de-carbonized electricity grid. Home, slugging, bed.

April 11, 2021 09:00 PM

April 09, 2021

Miklos Vajna

My hack week at Collabora: improvements to gutter margin in Writer

As mentioned in a previous such report, a hack week is when we are allowed to hack on anything we want in LibreOffice / Collabora Office / Collabora Online for a few days at Collabora. I used this time to implement core support for RTL gutter margin in Writer.


I posted about Writer gutter margin in general back in February, and two follow-up requests accumulated around this new feature since then.

First, the gutter margin could be on the left or at the top for non-mirrored documents, which initially sounded like a complete solution, but later it turned out that right-to-left (RTL) documents want it on the right.

Second, there was a request from the OASIS TC to to implement the ODF filter differently for gutter margin.

Neither of these is simple to do, so this hackweek was a good opportunity to address these problems.

Results so far

Here is the layout and user interface for RTL gutter looks like:
Figure 1. RTL gutter margin in Writer, layout and UI

You can see how the gutter is on the right (not the left) and you can alter this behavior with a dedicated checkbox on the UI.

How is this implemented?

If you would like to know a bit more about how this works, continue reading… :-)

Finally I had a little bit of remaining time, so I addressed a request from the OASIS ODF TC:

Want to start using this?

Collabora intends to continue supporting and contributing to LibreOffice, the code is merged so we expect all of this work will be available in TDF’s next release (7.2).

by Miklos Vajna at April 09, 2021 12:48 PM

April 07, 2021

LibreOffice QA Blog

QA/Dev Report: March 2021

General Activities

  1. LibreOffice 7.0.5 was released on March 12
  2. LibreOffice 7.1.1 was released on March 4
  3. LibreOffice was accepted as a project for the Googgle Summer of Code 2021 program
  4. Ilmari Lauhakangas (TDF) created a new wiki widget to help with navigating the Calc function documentation
  5. Steve Fanning made corrections to the Help content for Calc’s database functions
  6. Jean-Pierre Ledure worked on the ScriptForge library
  7. Alain Romedenne and Rafael Lima improved the Help content for the ScriptForge library. Rafael also updated Slide menu help for Impress and added an example for using hyperlink to folders in Writer and Calc
  8. Adolfo Jayme Barrientos and Johnny_M made smaller fixes and cleanups to Help pages
  9. Olivier Hallot (TDF) improved the Help for Java, Special characters dialog, font embedding and made cleanups
  10. Seth Chaiklin made nearly 50 changes and additions to Help, with topics including list formatting, menus, chapter numbering, page styles and shortcuts. He also made many improvements to tooltips and labels in LibreOffice. Among the people he worked with on perfecting the changes were Mike Kaganski (Collabora) and Dieter Praas.
  11. Akshit Kushwaha changed the QR code encoder library to zxing-cpp, which will allow implementing barcode support. René Engelhard and Mike Kaganski helped with code reviews.
  12. Panos Korovesis made a Writer code cleanup
  13. Jan-Marek Glogowski and Thorsten Behrens (allotropia) worked on the WASM build in a feature branch
  14. Fridrich Štrba made many improvements to libcdr (Corel DRAW importer) and release 0.1.7 was added to LibreOffice
  15. Lionel Elie Mamane fixed an SQL query crash
  16. Vert D fixed refresh showing the wrong category in the Template manager
  17. Gábor Kelemen (NISZ) assigned F4 as a shortcut for Image Properties in Writer and fixed importing WordArt effects textDeflate and textInflateTop from PPTX files
  18. Balázs Sántha improved the performance of Writer change tracking
  19. John fixed an initialisation bug in Basic
  20. Michael Stahl (allotropia) made many internal improvements to the handling of digital signatures, fixed a shape z-index issue with ODF export and implemented BackgroundFullSize property for ODF pages
  21. Jun Nogata added mixed Gregorian and Japanese gengou date formats
  22. Arpit Bandejiya made it so Basic CCur function accepts negative values
  23. Tibor Nagy and Attila Szűcs (NISZ) fixed overlapping wrapped rotated Calc cell contents and an extra page break in DOCX table export. Tibor also fixed losing table cell vertical alignment in PPTX export
  24. Bartosz Kosiorek fixed EMF issues with line width and region filling
  25. Mark Hung fixed a crash when undoing cell merge in Impress
  26. Dipanshu Garg added a UNO command for selection cycling (word, sentence, paragraph, all at cursor), so it can be used with a keyboard shortcut (F8). Dipanshu also made paragraph-anchored objects move more logically
  27. Armin Le Grand (allotropia) fixed incorrect resizing of OLE objects in Writer
  28. Tünde Tóth (NISZ) made several improvements to Calc AutoFilter, including XLSX to compatibility
  29. Eike Rathke (Red Hat) improved date format handling in order to support mixed Gregorian and Japanese gengou calendars, made Calc named ranges UI representation clearer and fixed a problem with Calc LOOKUP function
  30. Bayram Çiçek made restart prompting more logical when installing an extension
  31. Andreas Heinisch fixed an incrementing problem with autofilling dates in Calc, made it so hidden whitespaces in Calc’s AutoFilter dialog are indicated with quotes, fixed detecting end of month when autofilling dates in Calc, added a full HD image resolution option to Impress HTML export and with help from Tomoyuki Kubota, fixed referring to Calc named ranges when using the Excel R1C1 formula syntax
  32. Regina Henschel fixed a 3D shape origin problem and saving 3D wordart from PowerPoint back to PPTX
  33. László Németh (NISZ) fixed losing comment ranges and bad strikethroughs in tracked deletions, fixed a crash when undoing accept all changes, made deleted comments show antialiased lines, fixed losing DOCX tables in footnotes and endnotes and made Style Inspector support RDF metadata
  34. Ayhan Yalçınsoy rearranged the items in UI options
  35. Aditya Pratap Singh and Vikram Bais created their first unit tests
  36. Arnaud Versini made some code cleanups in Basic and animations
  37. Marco Cecchetti improved Impress slides JavaScript export
  38. Julien Nabet renamed “No-width No Break” character to “Word Joiner”, fixed an AutoCorrect crash and fixed PDF exported form buttons not working in Adobe Reader
  39. Rizal Muttaqin made updates to all icon themes
  40. Thorsten Wagner fixed blurry text on macOS 11 with Retina displays, blank tab names in dialog frames on macOS 11 and scrolling artifacts in bitmap images on macOS
  41. Michael Weghorn made many improvements to the Android version and improved the accessibility of Calc’s formatting toolbar
  42. Gülşah Köse (Collabora) implemented PPTX import support for clipped graphics
  43. Szymon Kłos (Collabora) made Calc AutoFilter dropdown button scale according to zoom level, improved Style preview performance and made it so fontwork objects can not be inserted outside the view area
  44. Mike Kaganski (Collabora) fixed an annoying Windows clipboard bug with help from jasonkres and Telesto, fixed a Navigator section listing order issue, made the Mail Merge toolbar visible whenever there is a data source, fixed issues with unnecessary password prompts in protected Mail Merge documents and made code cleanups and improvements to unit tests
  45. Vasily Melenchuk (CIB) fixed a header/footer issue with exported DOCX files
  46. Tomaž Vajngerl (Collabora) worked on the new UNO object inspector and made internal improvements to graphics handling code
  47. Christian Lohmaier (TDF) fixed language pack installation on macOS
  48. Tor Lillqvist (Collabora) worked on the iOS and Android versions, among other things improving pasting support on iOS and enabling thesauruses.
  49. Samuel Mehrbrodt (allotropia) made it so buttons in documents can be triggered with their mnemonic without first focusing on them
  50. Svante Schubert made many improvements to the XSL transformations of HTML export
  51. Heiko Tietze (TDF) fixed image blurriness in tips of the day and added scaling value to Draw’s statusbar
  52. Xisco Faulí (TDF) made nearly 60 improvements and additions to unit and UI tests
  53. Balázs Varga (NISZ) improved the XLSX import of autofilters and improved Mail Merge performance
  54. Attila Bakos (NISZ) fixed broken As character anchoring of Writer text boxes and improved DOCX header/footer compatibility
  55. Luboš Luňák (Collabora) improved image dragging performance in Writer, made crash fixes and improved font handling performance, PNG handling and Skia integration
  56. Daniel Arato (NISZ) made it so headers/footers in a Writer document are not lost when checking a “Same content on…” option, optimised DOCX export regarding header images and, together with Attila Bakos, fixed losing of header/footer undo stack
  57. Mert Tumer (Collabora) fixed an Impress slidesorter crash
  58. Stephan Bergmann (Red Hat) made many code cleanups and test fixes
  59. Justin Luth (Collabora/SIL) continued with character highlight fixes, fixed old issues with tabstops, superscript formatting in DOCX import and paragraph backgrounds and spacing in DOCX export
  60. Miklos Vajna (Collabora) continued improving gutter margins and made improvements to the bibliography feature
  61. Áron Budea (Collabora) fixed an exception crash when opening a DOCX with a certain type of table
  62. Dante Doménech made many internal improvements to Math
  63. Noel Grandin (Collabora) improved macOS widget look and feel, added a script to install build dependencies on different Linux distributions, helped Tomaž with graphics handling improvements and made many code cleanups, crash fixes and optimisations
  64. Caolán McNamara (Red Hat) made the Analog Clock sidebar extension demo work again, made a couple of accessibility fixes, fixed a scrolling issue in conditional formatting dialog, continued on the last stretch of the massive UI backend work and made many cleanups and crash fixes
  65. Jim Raykowski improved the selection mode control in the statusbar, made it so heading levels are displayed in the selection dialog for “Target in document” hyperlinks, fixed Writer’s “Add selection” functionality, made drawing objects have names upon creation in Writer and Calc, fixed table selection from the Navigator not selecting the whole table in Writer and improved the Outline folding feature

Kudos to Ilmari Lauhakangas for helping to elaborate this list.

Reported Bugs

654 bugs, 69 of which are enhancements, have been reported by 414 people.

Top 10 Reporters

  1. Telesto ( 34 )
  2. Mike Kaganski ( 21 )
  3. NISZ LibreOffice Team ( 20 )
  4. ( 18 )
  5. Xisco Faulí ( 14 )
  6. Eyal Rozenberg ( 11 )
  7. Jean-François Fortin Tam ( 10 )
  8. Regina Henschel ( 8 )
  9. Christian Lehmann ( 8 )
  10. Matheod ( 7 )

Triaged Bugs

698 bugs have been triaged by 101 people.

Top 10 Triagers

  1. Dieter ( 111 )
  2. Xisco Faulí ( 88 )
  3. Timur ( 64 )
  4. Buovjaga ( 57 )
  5. Roman Kuznetsov ( 48 )
  6. Heiko Tietze ( 31 )
  7. Olivier Hallot ( 27 )
  8. V Stuart Foote ( 25 )
  9. Julien Nabet ( 24 )
  10. Mike Kaganski ( 18 )

Resolution of resolved bugs

637 bugs have been set to RESOLVED.

Check the following sections for more information about bugs resolved as FIXED, WORKSFORME and DUPLICATE.

Fixed Bugs

224 bugs have been fixed by 51 people.

Top 10 Fixers

  1. Caolán McNamara ( 16 )
  2. Seth Chaiklin ( 12 )
  3. Luboš Luňák ( 9 )
  4. Jim Raykowski ( 8 )
  5. Mike Kaganski ( 8 )
  6. László Németh ( 7 )
  7. Justin Luth ( 7 )
  8. Michael Weghorn ( 6 )
  9. Miklos Vajna ( 6 )
  10. Xisco Fauli ( 5 )

List of critical bugs fixed

  1. tdf#116983 Paste is sometimes deactivated in (context) menu even though text is copied to clipboard and CTRL+V functioning (steps: Comment 0 and Comment 13 and Comment 28 and Comment 78) ( Thanks to Mike Kaganski )
  2. tdf#127217 PDF export: LibreOffice 6.3 option buttons in forms not working in Adobe Reader (OK in other readers) ( Thanks to Julien Nabet )
  3. tdf#134607 LO7RC1 – LANGPACK macOS – many versions fail to recognize LibreOffice 7.0 / 7.1 installation as valid on Catalina and Big Sur ( Thanks to Christian Lohmaier )
  4. tdf#138122 LibreOffice text blurry on Retina displays on macOS 11 ( Thanks to Thorsten Wagner )

List of high severity bugs fixed

  1. tdf#118693 FILEOPEN: Drawing has incorrect size ( Thanks to Xisco Fauli )
  2. tdf#122717 FILEOPEN DOCX: Horizontal line has wrong size/position and vertical line rendered horizontally ( Thanks to Xisco Fauli )
  3. tdf#122894 FILEOPEN DOC: Crash: SwFrame::RemoveFromLayout() ( Thanks to Caolán McNamara )
  4. tdf#136956 CRASH: Undoing merge cell ( Thanks to Mark Hung )
  5. tdf#138314 Blank tab names in dialog frames, macOS 11 Big Sur ( Thanks to Thorsten Wagner )
  6. tdf#140136 When we click on the FILTERED dropdown + sign it CHECKS and UNCHECKS all along with expanding and contracting ( Thanks to Attila Szűcs )
  7. tdf#140606 PDF: EXPORT: Crash in: mergedlo.dll ( Thanks to Tomaž Vajngerl )
  8. tdf#140668 CRASH: importing docx file ( Thanks to Daniel Arato (NISZ) )
  9. tdf#140863 Error hiding and unhiding sections ( Thanks to Bjoern Michaelsen )
  10. tdf#141166 Crash in: mergedlo.dll: Press “Help” button in Hyperlink dialog ( Thanks to Caolán McNamara )
  11. tdf#141171 FILESAVE: PDF: PNG images are exported as black ( Thanks to Luboš Luňák )
  12. tdf#88442 Global of struct type behave as local variables ( Thanks to John )
  13. tdf#93441 EDITING: cursor jumps to different horizontal position when moving to a different line with Up / Down ( Thanks to Xisco Fauli )
  14. tdf#99913 Importing autofiltered XLSX and selecting cells copies hidden cells, too ( Thanks to Tünde Tóth )

List of crashes fixed

  1. tdf#122894 FILEOPEN DOC: Crash: SwFrame::RemoveFromLayout() ( Thanks to Caolán McNamara )
  2. tdf#133933 CRASH: Undoing paste of table with images of cats ( Thanks to Miklos Vajna )
  3. tdf#136956 CRASH: Undoing merge cell ( Thanks to Mark Hung )
  4. tdf#139350 Crash when create a new odg,ods,odp file ( Thanks to Michael Weghorn )
  5. tdf#140288 Crash with zero-size window when running a macro ( Thanks to Luboš Luňák )
  6. tdf#140539 Crash when I open the help window ( Thanks to Caolán McNamara )
  7. tdf#140590 Crash in: mergedlo.dll: Using Save-As dialog in Tools>Chapter Numbering ( Thanks to Noel Grandin )
  8. tdf#140606 PDF: EXPORT: Crash in: mergedlo.dll ( Thanks to Tomaž Vajngerl )
  9. tdf#140668 CRASH: importing docx file ( Thanks to Daniel Arato (NISZ) )
  10. tdf#140700 calc crash at exit in ScSelectionTransferObj::~ScSelectionTransferObj (steps in comment 18) ( Thanks to Mike Kaganski )
  11. tdf#140754 LibreOffice Calc crash when selecting filters (threaded) ( Thanks to Luboš Luňák )
  12. tdf#140757 EDITING Crash when

by x1sc0 at April 07, 2021 07:25 AM

April 06, 2021

Luboš Luňák

Clang precompiled headers and improving C++ compile times, conclusion

 With Clang12 almost released, I guess it's high time to write a conclusion to the Clang11 changes that improve compilation times with PCHs. I originally planned to do this after the Clang11 release, but with the process to get the changes reviewed and merged having been so tedious I was glad it was finally over and I couldn't at the time muster the little extra effort to also write this down (I spent way more time repeatedly writing 'ping' and waiting for a possible reaction than writing the code, which was really demotivating). But although the new options are described in the Clang11 release notes, I think it'd be useful to write it down in more detail.

First of all, I've already written why C++ developers might care, but a thousand pictures can be worth more than a thousand words saying how this can save you even 60% of the build time:

 In case you'd like to see a similar change in your LibreOffice compilation times, it should be as simple as this:

  1. Get Clang11 or newer and use it to build LibreOffice.
  2. Use --enable-pch (preferably --enable-pch=full) to enable PCH use.
  3. Profit.

You may want to check that your ccache and icecream are not too ancient if you use them, but by now any reasonably recent version should do. And if you need to do changes that would repeatedly trigger larger rebuilds (such as changing a header), the trick to temporarily disable PCH builds is to do 'make BLOCK_PCH=1'. And since PCH builds sometimes cause build errors in non-PCH builds because of missing #include's of headers, it's a good idea to touch all your changed files and do 'make BLOCK_PCH=1' before pushing your change to Gerrit. This is all you should need to know, the LO build system will take care of everything else.

As for the rest of the world, this boils down to the two PCH-related sections in the Clang11 release notes.

The first one is using -fpch-instantiate-templates. It needs to be set when building the PCH, but it will work even if you just add it to the CXXFLAGS used for building everything. Recent enough CMake version should handle this option automatically, I have no idea about other build systems. It should be safe to enable the option for any building with PCH. It's not enabled by default in Clang only because of really corner cases with PCHs that are not self-contained. In other words, as long as your PCH works with an empty .cpp file, it's safe, and if your PCH is not self-contained, you'd be better off fixing that anyway.

The second part using -fpch-codegen -fpch-debuginfo is more complicated, as it requires build system support, and I'm not aware of any build system besides LibreOffice's providing it. This discussion in a CMake ticket provides an example of how to use the option that seems rather simple. For other build systems have a look at the description in the Clang11 release notes for all the details and possible complications, and consider whether it'd be worth it. Which it sometimes may not be, as this graph from my previous post shows (Clang means normal PCH build, Clang+ means only -fpch-instantiate-templates, Clang++ means all 3 options).

Note that you may get rather different results depending on how much you put in your PCHs. Unlike before, now the general rule should be that the more you add to your PCHs, even if shared only by several source files, the faster the builds usually will be. And since these options move building some code to the PCH-related object file, the improvement is usually even better for incremental builds than full rebuilds. I've been using PCHs this way for slightly more than a year, and I forgot already quite some time ago how slow it used to be.

by llunak ( at April 06, 2021 01:38 PM

April 04, 2021

Roman Kuznetsov

Hey, Lubuntu maintainners! Please build LibreOffice with vcl:kf5 instead vcl:qt5!

I should ask you Lubuntu maintainers: please build LibreOffice with vcl:kf5 instead vcl:qt5. Because LibreOffice's vcl:qt5 backend still buggy and unstable. Look at it:


I just tried to use Lubuntu 21.04 beta, opened LibreOffice Writer and I wanted increase a scale of the page. So you can see what I saw: wrong vertical rule, ugly page view, etc.

by Roman Kuznetsov ( at April 04, 2021 05:45 PM

March 24, 2021

LibreOffice Design Blog

The Dos and Don’ts of Writer Templates

As we have seen in the previous posts (1st and 2nd) there are many advantages of using templates. And you should use them whenever is possible, they will help you with consistency across documents and will make your workflow more efficient.…

by Pedro Pinto Silva at March 24, 2021 12:11 PM

Miklos Vajna

Bibliography improvements in LibreOffice Writer

The bibliography feature in Writer allows authors of e.g. scientific papers to track sources: first you can insert bibliography entry fields, then at the end you can generate a bibliography table automatically.

Writer now has two improvements in this area: more information about these entries in the form of a mouse tooltip and clickable URLs in the table.

First, thanks TUBITAK ULAKBIM who made this work by Collabora possible.


Generating a bibliography (table) for a document is a two-step process: first the user inserts bibliography entry fields to refer to sources, then later the bibliography can be auto-generated. It was not great that details of a source was only visible in the Writer edit window after generating the bibliography table. A somewhat related shortcoming was that URLs of sources were handled as plain text, while users expect that references are also clickable, similar to e.g. table of contents.

Results so far

This is how a tooltip looks like, available even if there is no bibliography table yet:
Figure 1. Tooltip for bibliography entry fields

And URLs in the bibliography table are now clickable:
Figure 2. Clickable URLs in the bibliography table

How is this implemented?

If you would like to know a bit more about how this works, continue reading… :-)

As usual, the high-level problem was addressed by a series of incremental development steps:

Want to start using this?

Collabora intends to continue supporting and contributing to LibreOffice, the code is merged so we expect all of this work will be available in TDF’s next release (7.2).

by Miklos Vajna at March 24, 2021 11:18 AM

Tomaž Vajngerl

Built-in "Xray" like UNO object inspector – Part 3

DevTools implementation has been completed and this is the third and final part of the mini-series. The focus of this part is on the object inspector, but I have also improved or changed other DevTools parts, so first I will briefly mention those.

New menu position

Figure 1: Development Tools location in the menu

The position in menu has changed from "Help / Development Tools" to "Tools / Development Tools". The new position fits better as it is near the position of macro editor and they go hand in hand with each-other.

Updates to the document model tree view

Figure 2: Document model tree view and "Current Selection" toggle button

The left-hand side document model tree view has been changed to use the same approach than the object inspector tree view uses, where the object attached tree view (in this case DocumentModelTreeEntry) has all the behavioural logic for a specific tree view node. This makes it easier to manipulate the tree view and add new nodes (if necessary).

In the document object tree view I have added a top toolbar with "Refresh" (icon) button and I changed the existing “Current Selection” button to a toolbar toggle button, so it looks more consistent as the is only the toolbar now (see figure 2).

In Writer, each paragraph tree view node now has text portion child nodes (as shown in figure 2), to make it possible to quickly inspect all the individual parts of a paragraph.

The object inspector tree view

Figure 3: Top toolbar and tab bar in object inspector

The object inspector shows various information about an object. Each object has a implementation class, which is always shown for the current object (see figure 3).

The other information that the object inspector shows are divided into four main categories:
  • "Interfaces" - the interfaces that the current object implements
  • "Services" - the services that the current object supports
  • "Properties" - the properties of the current object
  • "Methods" - the combined methods that can be called on the current object
On the user interface, the categories are divided with a tab bar (see figure 3). Each tab represents a different categories. The tabs are filled on "entry" - when the user clicks on the tab.

In the code the tabs and tree views are all handled by the ObjectInspectorTreeHandler and the hierarchy of objects attached the tree view that implement the ObjectInspectorNodeInterface (see include/sfx2/devtools/ObjectInspectorTreeHandler.hxx). 

The two major categories are "Properties" and "Methods", which I describe in more detail next.


Figure 4: Object inspector "Properties" tab

There are three types of properties of an object:
  • Properties accessible view XPropertySet.
  • Properties defined as an attribute (marked "[attribute]" in IDL). 
  • Pseudo properties defined by a get and set method. 
All the three types are represented in the properties tab and can be identified by the "Info" column. Attribute properties have an "attribute" flag, pseudo properties have either a "get", "set" or both flags. If neither flags exists, it represents a property that is from XPropertySet. 

In the tree view there are four columns for each property - "Name", "Value", "Type" and already mentioned "Info". The "Name" of the property is always available, but it is possible that two properties have the same name (because of multiple property types). The "Value" shows the value of the property, which is converted to the string, if this is possible (it should be if the property is basic), otherwise a representation string is created. The representation string for objects shows the implementation name ("<Object@SwXTextRange>"), for sequences it shows the size ("<Sequence [5]>") and for structs it just mentions the type ("<Struct>").

A node in the “Properties” tree view can be expanded (if offered) so it is possible to recursively inspect the the objects further. In case the property is a struct, it shows the struct members, and if it is a sequence, it shows the indices each object has in the sequence.

There are special properties, which names start with "@". This are added for convenience, so it is possible to inspect objects, that implement XIndexContainer, XNameContainer or XEnumeration interfaces. When such an object is found, the entries gathered using those interfaces are added to the tree view, and are prefixed with "@". For example "@3" (XIndexContainer)   "@PageStyles" (XNameContainer or XEnumeration). The type of the special property is written in the "Info" column ("index container", "name container" and "enumeration" flags). Note that this functionality is not present in Xray or the Macro editor's debugger, but was added for convenience.

Figure 5: "Properties" tab and the text view

On the bottom of the "Properties" tab there is a text view, which shows the full value of the current selected property. In the tree view, the value shown is always using a short form (shortened to 60 chars with new-line characters removed) to not make the tree view too wide. The full value therefor is written in the text view, where it can be inspected in full and has also a working copy/paste (see figure 5).

Object Stack

Related to the "Properties" is the object stack. It is possible to select an object in the tree view and inspect the object (either using the context menu or the toolbar "Inspect" action). In this case the object in the object inspector will change to the selected one. This is convenient when you are only interested in one object down in the tree view hierarchy and want to inspect only that. In that case the previous object will be added to the stack, and can be returned to with hitting the "Back" button in the toolbar.

Note that going to another object (not using "Inspect" action) will always remove the object stack. 


Figure 6: Object inspector "Methods" tab

The "Methods" tab contains a tree view that shows all the methods, that can be called for the current object. Each method is represented by four columns (see figure 6):
  • "Method" - name of the method
  • "Return type" - the return (simplified) type of the method
  • "Parameters" - list of input parameters, where each one lists the direction ("in", "out" or "in/out"), the parameter name and the simplified type 
  • "Implementation Class" - class/interface where the method is implemented
Currently the types of parameters and return types are simplified, with only basic types, "void", "any", "sequence" and "object" that represents all the objects and the type of the object isn't written. The reason for this is to make it easier to read. 

Future ideas

There are many improvements that can still be made, but aren't included in the current implementation. 

I think it would be quite convenient to have the ability to open a object inspector in mode-less dialog separate to the DevTools, just to quickly look up a property. 

Another big upgrade would also be the ability to change values of basic types for the properties and structs, so it is possible to quickly see what effect the change would have. Similar to changing property values is to call methods with defining the parameters, but only if the parameters are basic types.

My initial vision of DevTools was not that it will be only one tool (object inspector), but more tools just like the development tools in the browser, so I'm sure there will be more useful things integrated over time.

I think there are a lot of ideas you may also have, so please tell me if you have a good one. Of course if you find something that is not working as expected, please let me know.


Many thanks to TDF and users that support the foundation by providing donations, to make this work possible.

by Tomaž Vajngerl ( at March 24, 2021 07:42 AM

March 22, 2021

Olivier Hallot

Exporting LibreOffice Guides to XHTML (Part II)

In the previous blog post I explained the reasons and some issues on exporting LibreOffice Guides to the xHTML format. Now it is time to give more technical details. 

I choose to use the extension writer2xhtml available in the Extension website, because the produced HTML5 look less cluttered than the native XHTML export. Nevertheless there it will be necessary to add some extra HTML5 lines, to load the CSS and a Javascript file.

Invisible changes in chapter files that can go upstream

There are some changes that should go upstream, because it does not change the resulting PDF or ODT book layout.

Each image must be anchored “as character” in the document. The image becomes a character and must be single in the paragraph. The paragraph must be centered in the page, using a style that aligns in the center, for example, the “Figure” paragraph style. The image caption paragraph must have style “Caption”. The wrapping frame that holds the image and the caption must also be anchored “as character” in a paragraph with style “Figure” as well. This arrangement is transparent when producing ODT, PDF and HTML5 documents.

Tips, Notes and Cautions headings use graphics as bullet. Many of these paragraphs have the bullet enabled by direct formatting and this is invisible to the user in LibreOffice, but will show when exporting to HTML5 with an ugly black circle.

Recommended changes that should go upstream

Create a table style, or copy it from the table in the copyright section. Name the style as you want, custom table styles are stored in your user profile. Apply this style to all tables in the chapter. Open the table properties of each table and set alignment to “Centered”, and table width in 90%.

Remove cross references to pages. For example, “See figure 12 on page 30”. At best, use the “above” or “below” in the reference.

Add the sections described in 2,3 and 4 below.

Changes in the working copy of the chapter file.

The original chapter file is optimized for a book format, we need to prepare it for exporting to HTML5 where pagination is different, mostly by smooth scrolling. This involves steps but will not change the chapter contents, only the layout and some formatting

  1. With the images anchored as explained above – a step that may require manual work – move the caption above the image. This can be quickly done by placing the cursor in the caption text and pressing Ctrl+Alt+Up Arrow, to swap the caption paragraph with the image paragraph. Some chapter have dozens of images so it will be nice to have a script to bulk execute this swap.

  2. Wrap the top LibreOffice logo in a Section named “SEC_LOGO”.

  3. Wrap the Guide name in a section named “SEC_GUIDE”.

  4. Wrap the chapter title in a section named “SEC_TITLE”.

  5. Delete the existing table of Contents.

  6. Select the text from the copyright heading to the end of the chapter and wrap in a section named “SEC_DISPLAYAREA”. Ensure you leave some empty paragraphs after the end of the section.

  7. On the bottom of the chapter, after the SEC_DISPLAYAREA section, add 6 new empty sections: SEC_TOC, SEC_BOOK_TOC, SEC_SEARCH, SEC_IMPRINT, SEC_DONATION, SEC_NAV. You can create these 6 sections in an empty document and load it as Autotext, so all section can be inserted in a single command using Autotext (Ctrl+F3).

  8. Insert the chapter table of contents in the SEC_TOC section.

  9. Change the template of the chapter to the provided template

  10. Review the ordered and unordered lists in the chapter. The new template may highlight the spurious bullet and numbering inserted by direct format, and as explained above, is very hard to detect in the original ODT file. Some of these list direct formatting may also be detected in the HTML5 output.

Save your working copy.

Exporting to HTML5

The extension writer2xhtml adds a toolbar for exporting on a click. The extension allows some customization, not used here. The export used “original format” style and 115% font size.

The export is very fast and gives no choice to change the export name, so the exported file has same file name and html as file extension, overwriting existing files with same name and extension.

By default the exported file name opens in the system browser for inspection. The result is not yet what we want, we must apply specific CSS and Javascript for rearranging the layout of the sections. The se files are added in the HTML5 output juste before the </head> closing tag.

<link href="guideposition.css" rel="Stylesheet" type="text/css">
<link href="guideformats.css" rel="Stylesheet" type="text/css">
<script type="text/javascript" src="GS70.js" defer></script>

The CSS files

Two extra CSS files were created, one is guideposition.css and manages the sections position in the page, and has provision for handling other screen sizes such as in tablets. The second CSS file is guideformats.cssthat contains rules to override some attributes such as lists, fonts, font-size, colors, margins, padding and more of the sections.

The Javascript file

This file fills the empty sections we added at the end of the chapter. Contents for donation, guide table of contents (jump between chapters), a legal imprint, a search form (to be implemented) and more. The javascript file is common to all chapter and is custom to the guide.


Exporting the LibreOffice Guides to HTML is another way to offer a rich contents to the public. Guides in HTML format can be installed in servers of schools, libraries, colleges and corporations alongside with a PDF copy, to support a migration project.

The rich set of features of Writer, while allowing the creation of wonderful documents, is also source of concern not only when exporting to formats that are less flexible that ODF, but also to manage the excess of freedom. The changes recommended and the detection of hidden direct formatting in lists are examples. It becomes clear that a set of sanitizing scripts can help to remove spurious formatting, unused legacy styles, detect unwated extra styles and adjust the objects in the documents.

When handling the full set of guides it is easy to dream of an office suite that can execute some "wishes" like "anchor all images as characters and center in line", "change position of caption  in all frames to top", "format all tables with style 'guides' and align to center"... but that is for an office suite of the next generation!!!.

Partial results of all this work can be visualized below. 

The getting started guide in HTML format.

The javascript file

The css files: css1 and css2

The template

The writer2xhtml extension

 Happy documenting!!!!



by Olivier Hallot ( at March 22, 2021 03:25 AM

March 17, 2021

Roman Kuznetsov

Microsoft gave us fix for its stupid KB5000802

So, as I wrote before, MS broke LibreOffice work (and just broke many Windows 10 system) with its stupid update KB5000802.

OK, they gave us the fix for that problem. But it will be optional (!!!!). You should install it manually if you have the problem!

For Windows 10 20H2 and Windows 10 (2004) install KB5001567

For Windows 10 (1909) — KB5001566

For Windows 10 (1809) — KB5001568

For Windows 10 (1803) — KB5001565.

Why they made it different for different builds of ONE OS Windows 10, I don't know. And I think they don't know too.

You can find your Windows 10 build number in system options - system - about (I can show you only Russian variant):

by Roman Kuznetsov ( at March 17, 2021 09:54 AM

March 14, 2021

Marius Popa Adrian

New Flamerobin snapshot available! with a few fixes and small features

New Flamerobin snapshot available! with a few fixes and small features Take a look, test and comment!

by Popa Adrian Marius ( at March 14, 2021 09:47 AM

March 13, 2021

Roman Kuznetsov

Windows 10 is a bullshit. Update KB5000802 breaks LibreOffice work

If you use Windows 10 and you didn't disable its updates then you could got an update KB5000802 pair days ago that breaks LibreOffice work. If your LibreOffice crashes or doesn't print now, then:

- Delete that Windows update KB5000802

- Delete LibreOffice, include a user profile from C:\Users\User_name\AppData\Roaming\LibreOffice

- Reboot Windows

- Reinstall LibreOffice

If these steps didn't help, please write a comment here. Thanks

by Roman Kuznetsov ( at March 13, 2021 09:37 PM

March 12, 2021

LibreOffice Design Blog

The Dos and Don’ts of Impress Templates

  • Don’t substitute templates by sample documents
  • Template ManagerTemplates contain generic content and structure, and are meant to create multiple documents. In contrast, a document is intended for a single use. While both types are more or less the same, the advantage of templates is the handling within the program (→Template Manager).

by Heiko Tietze at March 12, 2021 11:30 AM

March 11, 2021

LibreOffice Design Blog

Templates- ftw!

Templates can seem daunting and overly complex as any new concept. Hopefully this series of articles will help to understand and clarify some of your worries. If you have never heard of templates or if, for any reason, you tend to avoid them- this is for you.…

by Pedro Pinto Silva at March 11, 2021 10:07 AM

March 08, 2021

LibreOffice QA Blog

QA/Dev Report: February 2021

General Activities

  1. LibreOffice 7.1 Community was released on February 3
  2. Steve Fanning made corrections to the Help content for Calc functions
  3. Jean-Pierre Ledure worked on the ScriptForge library
  4. Alain Romedenne and Rafael Lima improved the Help content for the ScriptForge library
  5. Olivier Hallot (TDF) updated the Help for Calc’s View menu and made many smaller fixes and reorganisations in Help
  6. Seth Chaiklin made 27 changes and additions to Help, with topics including menus, styles and AutoCorrect. He also made many improvements to tooltips and labels in LibreOffice
  7. Srijita Mallick and Akshit Shan created their first unit test and their first accessibility improvements
  8. George Bateman added a “Keep asking during this session” checkbox to Calc’s paste import options dialog
  9. Andrzej Hunt (Google) improved the fuzzing setup
  10. Dipanshu Garg made it so information about Calc’s Jumbo sheet status appears in the About dialog
  11. Deb Barkley-Yeung added a unit test for BColorModifier
  12. Andreas Kainz improved the Notebookbar and Sidebar UIs
  13. Justin Luth (Collabora/SIL) fixed character highlight issues related to numbering, fixed a Writer crash related to superscript, a superscript applying issue with DOCX export and a bulleted list copying problem with imported DOC files
  14. David Tardon (Red Hat) made it possible to dump intermediate XML structure of Lotus Word Pro imports into file
  15. Quan Nguyen made it so adding a word in the Spelling dialog immediately applies autocorrection and added rendering support for hiding Chart titles
  16. Andreas Heinisch fixed a problem with sort options not being saved in Calc documents
  17. Shubham Jain wrote new tests for BASIC literals
  18. Anshu Khare added a “No List” list style to make unstyling interaction more clear
  19. Balázs Varga (NISZ) improved the XLSX import and export of autofilters
  20. Tünde Tóth (NISZ) fixed sorting of autofiltered Calc rows, added an option to only select visible Calc cells for copying and fixed clearing of Calc row and column selection when extending selection over filtered rows
  21. Tibor Nagy and Attila Szűcs (NISZ) fixed incorrect multiple conditional formatting rules in the same cell range with XLSX import, fixed hidden Calc columns being printed, fixed DOCX page margins imported as border padding and fixed a missing page break with DOCX export
  22. Áron Budea (Collabora) fixed a password protection regression in Windows 7
  23. Tamás Zolnai (Collabora) fixed broken master slide list after switching view mode
  24. András Timár (Collabora) fixed OOXML chart label import, matching system locale like MSO
  25. Gülşah Köse (Collabora) fixed a PPTX import image cropping issue
  26. Andrew Udvare made a couple of improvements to the macOS build process
  27. Jan-Marek Glogowski (allotropia) fixed incorrect scaling of input method cursor with Qt backend
  28. Luboš Luňák (Collabora) improved idle priority task handling, improved the performance of rendering transformed bitmaps and improved document load times by using zlib’s crc32() function
  29. Michael Weghorn improved the Qt Creator integration
  30. Maxim Monastirsky fixed missing DisplayName property for Writer table styles
  31. Christian Lohmaier (TDF) improved Visual Studio Code integration
  32. Julien Nabet added backepsilon symbol to Math elements panel and fixed a Calc hyperlink insertion crash
  33. Szymon Kłos (Collabora) made it so scrolling a treelist does not leave artifacts on the screen and improved the Style preview widget
  34. Attila Bakos (NISZ) fixed shape and anchor going out of synch in an exported DOCX file and fixed losing Contour shape wrap in DOCX export
  35. Björn Michaelsen continued internal improvements to Writer
  36. Armin Le Grand (allotropia) improved the handling of font scaling in metafile images
  37. Regina Henschel fixed shape handling in RTL Calc sheets, fixed bringing Fontwork objects to front and fixed incorrect anchor type of rotated shapes in imported XLSX files
  38. Michael Stahl (allotropia) fixed copying and deleting tables in sections via the API, fixed hyperlinks in user-defined indexes pointing to certain types of targets and made VML shapes in exported DOCX files compatible with MS Word
  39. Ouyang Leyan made it so no data loss occurs when copying a chart in Calc with errors in formulas and fixed copying of numbers in Calc chart categories into Writer
  40. Eike Rathke (Red Hat) made the CELL() Calc function implementation conform to the ODF 1.2 spec
  41. Dante Doménech made many internal improvements to Math
  42. Rizal Muttaqin made updates to all icon themes regarding find & replace and formatting
  43. Stephan Bergmann (Red Hat) fixed a crash with UNO bootstrapping related to absolute paths and made many code cleanups as well as build and test fixes
  44. Noel Grandin (Collabora) fixed importing of pathological SVG images and made many code cleanups, crash fixes and optimisations
  45. Jim Raykowski made it possible to right-click the style previews in Notebookbar Tabbed and made a couple of improvements to the Outline view functionality
  46. Samuel Mehrbrodt (allotropia) added support for series name in Chart data series labels, implemented chart:regression-moving-type and improved the layout of Chart trendline and data label dialogs
  47. Mike Kaganski (Collabora) made sweeping improvements to unit conversion code, made it so the locale is set when language is defined by command line invocation, improved tests and made code cleanups.
  48. Tomaž Vajngerl (Collabora) worked on the new UNO object inspector and made internal improvements to graphics handling code
  49. László Németh (NISZ) bumped libnumbertext to version 1.0.7, improved the Track Changes toolbar auto-appear behaviour, fixed an XLSX import issue with dashed line styles, greatly improved the performance of importing DOCX footnotes and endnotes and fixed losing comment position in tracked deletions
  50. Caolán McNamara (Red Hat) made it so tabs can show tooltips, Ctrl+A works to select all in Impress comments, continued on the last stretch of the massive UI backend work and made many cleanups and crash fixes
  51. Gábor Kelemen (NISZ) added new shortcuts for Impress pointer as pen functionality
  52. Heiko Tietze (TDF) added templates from the competition and removed some older templates, improved the print dialog and made some improvements to the Start Center
  53. Miklos Vajna (Collabora) continued improving the handling of inserted PDFs and improved Writer’s support for gutter margins
  54. Xisco Faulí (TDF) made the missing unit tests script use Bugzilla API and made over 70 improvements and additions to unit and UI tests
  55. Tor Lillqvist (Collabora) made LibreOffice Vanilla (Mac) version work with embedded Firebird databases and made Calc row height adjustment behaviour less annoying

Kudos to Ilmari Lauhakangas for helping to elaborate this list.

Reported Bugs

659 bugs, 75 of which are enhancements, have been reported by 399 people.

Top 10 Reporters

  1. Telesto ( 80 )
  2. ( 19 )
  3. NISZ LibreOffice Team ( 19 )
  4. Regina Henschel ( 19 )
  5. Xisco Faulí ( 10 )
  6. Petr Valach ( 8 )
  7. Aron Budea ( 7 )
  8. Ulrich Windl ( 7 )
  9. Dieter ( 6 )
  10. Eyal Rozenberg ( 6 )

Triaged Bugs

599 bugs have been triaged by 101 people.

Top 10 Triagers

  1. Xisco Faulí ( 131 )
  2. Heiko Tietze ( 47 )
  3. Buovjaga ( 44 )
  4. Dieter ( 41 )
  5. Timur ( 33 )
  6. Aron Budea ( 20 )
  7. BogdanB ( 17 )
  8. Regina Henschel ( 17 )
  9. Julien Nabet ( 17 )
  10. NISZ LibreOffice Team ( 16 )

Resolution of resolved bugs

522 bugs have been set to RESOLVED.

Check the following sections for more information about bugs resolved as FIXED, WORKSFORME and DUPLICATE.

Fixed Bugs

153 bugs have been fixed by 37 people.

Top 10 Fixers

  1. Caolán McNamara ( 11 )
  2. Seth Chaiklin ( 8 )
  3. László Németh ( 6 )
  4. Heiko Tietze ( 6 )
  5. Regina Henschel ( 5 )
  6. Miklos Vajna ( 5 )
  7. Noel Grandin ( 5 )
  8. Luboš Luňák ( 4 )
  9. Julien Nabet ( 4 )
  10. Tünde Tóth ( 3 )

List of critical bugs fixed

  1. tdf#134607 LO7RC1 – LANGPACK macOS – many versions fail to recognize LibreOffice 7.0 / 7.1 installation as valid on Catalina and Big Sur ( Thanks to Xisco Fauli )
  2. tdf#138068 When there are a lot of pictures, typing the text is very slow (macOS/GTK3/GDI) ( Thanks to Luboš Luňák )
  3. tdf#140280 Crash in: KERNELBASE.dll when double click a slide content box and file is opened read-only ( Thanks to Miklos Vajna )
  4. tdf#140308 Crash import old OpenOffice template (stw, stc, sti, std) ( steps in comment 12 ) ( Thanks to Noel Grandin )

List of high severity bugs fixed

  1. tdf#139511 Impress: Shrinking table by dragging bottom border up or top down not working anymore ( Thanks to Gülşah Köse )
  2. tdf#140437 FILEOPEN: Writer document “Read Error. Format error discovered in the file in sub-document content.xml at 2,1311816(row,col).” ( Thanks to Michael Stahl )
  3. tdf#140444 EDITING: Creating a view from a query crashes whole LO ( Thanks to Caolán McNamara )
  4. tdf#140528 Crash in: swlo.dll In “Save As” dialog in “Tools -Chapter Numbering”, when switching from Numbering to Position tab ( Thanks to Noel Grandin )
  5. tdf#140572 FILESAVE DOCX Crash when saving a file with superscript formatting ( Thanks to Justin Luth )
  6. tdf#36466 Add option to Select Visible Cells Only (to be copied from or copied to) ( Thanks to Tünde Tóth )
  7. tdf#76260 FILEOPEN: slow loading and dump of .docx with lots of footnotes (see Comment 27 and Comment 43) ( Thanks to László Németh )

List of crashes fixed

  1. tdf#137406 Crash when clicking “Apply to Master” in Slide Master mode on Bullets and Numbering dialog ( Thanks to Gokce Kuler )
  2. tdf#139039 PDF export: Error message if filepath is URL coded / crash when saving as DOCX ( Thanks to Miklos Vajna )
  3. tdf#140014 Calc crashes when using COUNTIF, SUMIF, etc. on columns “far away” without data ( Thanks to Noel Grandin )
  4. tdf#140225 Crash in: g_lo_action_group_change_state FILEOPEN ( Thanks to Caolán McNamara )
  5. tdf#140280 Crash in: KERNELBASE.dll when double click a slide content box and file is opened read-only ( Thanks to Miklos Vajna )
  6. tdf#140308 Crash import old OpenOffice template (stw, stc, sti, std) ( steps in comment 12 ) ( Thanks to Noel Grandin )
  7. tdf#140414 Crash pressing Ctrl-K in input line in Calc ( Thanks to Caolán McNamara )
  8. tdf#140444 EDITING: Creating a view from a query crashes whole LO ( Thanks to Caolán McNamara )
  9. tdf#140528 Crash in: swlo.dll In “Save As” dialog in “Tools -Chapter Numbering”, when switching from Numbering to Position tab ( Thanks to Noel Grandin )
  10. tdf#140572 FILESAVE DOCX Crash when saving a file with superscript formatting ( Thanks to Justin Luth )

List of performance issues fixed

  1. tdf#120351 Writer hangs for over 20 minutes loading a 3MB, 450-page DOCX Edit with thousands of endnotes ( Thanks to László Németh )
  2. tdf#138068 When there are a lot of pictures, typing the text is very slow (macOS/GTK3/GDI) ( Thanks to Luboš Luňák )
  3. tdf#139820 Hang: Undoing paste of block with empty cells ( Thanks to Luboš Luňák )
  4. tdf#76260 FILEOPEN: slow loading and dump of .docx with lots of footnotes (see Comment 27 and Comment 43) ( Thanks to László Németh )

List of old bugs ( more than 4 years old ) fixed

  1. tdf#105301 sort options not remembered thoroughly in saved document ( Thanks to Andreas Heinisch )
  2. tdf#36466 Add option to Select Visible Cells Only (to be copied from or copied to) ( Thanks to Tünde Tóth )
  3. tdf#57667 Immediately apply AutoCorrection when added per Spelling and Grammar dialog ( Thanks to Quan Nguyen )
  4. tdf#60237 : Bug in API call StoreAsURL (or in the OO Basic API description) ( Thanks to Andreas Heinisch )
  5. tdf#66409 failure to correctly implement CELL ( Thanks to Eike Rathke )
  6. tdf#76260 FILEOPEN: slow loading and dump of .docx with lots of footnotes (see Comment 27 and Comment 43) ( Thanks to László Németh )
  7. tdf#91920 No support for gutter margins ( Thanks to Miklos Vajna )
  8. tdf#92622 WRITER: context menu “Unstyle selected text” from list style to “no-list” style ( Thanks to Anshu )
  9. tdf#92768 support hiding title objects ( Thanks to Quan Nguyen )
  10. tdf#94235 Ability to add series name to data series label ( Thanks to Samuel Mehrbrodt )


110 bugs have been retested by 33 people.

Top 10 testers

  1. Xisco Faulí ( 37 )
  2. Buovjaga ( 13 )
  3. Telesto ( 6 )
  4. Dieter ( 6 )
  5. Aron Budea ( 5 )
  6. Timur ( 4 )
  7. BogdanB ( 4 )

by x1sc0 at March 08, 2021 12:50 PM

March 03, 2021

Collabora Community

Collabora Online Community Roundup #10

On 1 October 2020, Collabora Online moved to its new home on GitHub, and started settling in the new infrastructure, expanding its fantastic community, and continuing the work to deliver the latest and greatest developments in productivity and collaboration together. Check our new community website for all the details! 😉

Collabora developers also keep fixing and improving our lovely mother project LibreOffice. As all the good work requires some appreciation, let’s take a look at what the seasoned developers of the Collabora team and the volunteer contributors from our community have been doing during the last 2 weeks.

Week in Numbers

On the Collabora Online code repository in the last week, 11 authors have pushed 42 commits to master and 72 commits to all branches. On master, 48 files have changed and there have been 1,567 additions and 835 deletions.

Screenshot of GitHub Pulse for Collabora Online
Development Activity on Collabora Online GitHub Repository from February 15, 2021 to February 22, 2021

New Contributors

Congratulations to Gianni154, Samuel, sowoi, oiselarius and SerjSX for reporting their first issues and improvement requests on our GitHub repository!

  • Thanks to Gianni154 for reporting multiple issues around the iOS app such as the comment function not working properly while the keyboard is active[0], thus giving us the opportunity to improve the experience for our users on iOS even further.
  • Thanks to Samuel for opening an enhancement request to add the Libertinus Font to the CODE docker image, thus letting us know about the preferences of our users on certain configurations.
  • Thanks to sowoi for reporting that empty menus are being shown even when all of their items are disabled on certain integrations, thus giving us the opportunity to improve the user experince of Collabora Online even more.
  • Thanks to oiselarius for letting us know about issues encountered while opening files with the iOS app which reside on some cloud storage services.
  • Thanks to SerjSX for reporting a potential issue on the Android app, and then helping triage the issue which turned out to be a false positive.

Thank you all, and welcome aboard! 🙂

Join the fun!

You can also join the fun, and be part of our next list of new contributors! 🙂

Just go to our GitHub repo, fork it, build it (on Linux or on any platform), grab one of our newcomer-friendly easy hacks, and send your first pull request. And if you get stuck at any point, just drop by one of our communication channels. 😉


Collabora Online Weekly Meeting #13

COOL Weekly Meeting #13 has taken place on Thursday, February 18, 2021 at 11:00:00 am (UTC) with participants both from the community contributors and the Collabora team. We have got a quick update on what’s going on and discussed matters raised by the contributors, as well as having the chance to say hi to fellow members of the community. Topics discussed in the meeting include:

  • During the quick update part by Muhammet Kara, it’s been reported that COOL has got more than 75 new contributors (25+ code contributors) since the move to GitHub, and the COOL Roundup #9, covering more than 2 months of time, is finally out.
  • Pedro Silva has reported that multiple new categories have been added to the Collabora Online community forum along with new icons, and a new navigation bar on the top making it easier to find your way around.

    New navigation bar on the forum
  • Nicolas Christener has given an update on the template contest, informing us that there are 33 submissions so far, with 10 of them being quite promising, and that they will finish the evaluations by Feb 25.
  • Gabriel Masei has confirmed that all the work towards allowing users and integrations to change/choose a toolbar type dynamically has been completed and landed on the main (master) branch.
  • Gökay Åžatır has shared the latest status of the ongoing CanvasTileLayer work, stating that they are now removing the custom scrollbars using the canvas section container and also updating the canvas section container as well, which would improve the user experience on different platforms with an even smoother and more natural look and behavior of scrolling.
  • On the Icon Theming topic, Pedro Silva has reported that Andreas Kainz is going to do some manual tests before moving on.
  • About the ongoing effort of Async Saving, which would improve the performance and the user experience of Collabora Online by allowing seamless/smooth save operations especially when multiple users are working on the same document collaboratively, Jan Holesovsky shared that Ashod Nakashian has already merged some of the initial/preparatory work, doing some clean-up and under-the-hood improvements, and the first step of the good stuff is already on GitHub as pull requests.
  • Andras Timar, on the new release schedule, has informed us that CODE is expected to have more frequent updates with the bleeding edge features and improvements before they go into the next release of COOL.
  • Pedro Silva has reported that the bug which prevented the notebookbar from being scrolled on small screens is now fixed, and all the work has already been merged.
  • Pranam Lashkari has reported that the Invalidation Debugging work by Rashesh Padia has been completed and merged.
  • Muhammet Kara has brought up that there is a small pull request by Gleb Popov which allegedly fixes a build issue on FreeBSD and looks okay, and he has requested a review from Ashod Nakashian, and he is going to merge it if no response or objection in a few days.

Check out the meeting minutes for the details of the meeting, and join us on Thursday, March 04, 2021, at 11:00 am (UTC) to stay in touch with the rest of the community. You may also make your own suggestions for the next meeting by following the link shared in the COOL Telegram group before the next meeting. We’re looking forward to hearing from you live. 😉

Collabora Online (COOL)

  • Thanks to Gökay Åžatır for his work on CanvasTileLayer, which would make COOL have a much crisper and smoother look and feel. See the Weekly Meeting notes above for some more details.
  • Thanks to Pranam Lashkari for fixing a bug which caused the composed shortcuts, such as Ctrl+P to print the document, not to work in read-only mode, and also for making sure the right-click menu properly works also on the first row & column of Calc documents.
  • Thanks to Andras Timar for adding the info on how to build Collabora Online 6.4 docker to the README file, thus improving the documentation for potential new contributors and adopters of COOL, along with various other improvements and maintenance around localization and containerization.
  • Thanks to Dennis Francis for various fixes and improvements around the Canvas layer, which brings a lot of visual and user experience improvements such as smooth zoom animations. You can also now add Mocha tests in Collabora Online to test any existing typescript classes or functions of it, again thanks to him. Check out his blog post for the details.

    Logo of Mocha testing framework
    Mocha is a feature-rich JavaScript test framework running on Node.js and in the browser, making asynchronous testing simple and fun.
  • Thanks to Szymon KÅ‚os for various improvements and fixes especially around the notebookbar and various dialogs, such as adding the Fontwork feature to Calc and making sure dialogs are closed when the user hits the ESC key without the need of explicitly clicking the close button, thus helping COOL become richer in feature and have an even better user experience.
  • Thanks to Tor Lillqvist for adding a new toString() method to use while debugging Collabora Online, thus helping to make the lives of developers a bit easier, and for making sure the view id is included in the tunneled dialogs’ image hash to prevent possible issues while users are collaboratively editing a document.
  • Thanks to Ashod Nakashian for various fixes and improvements towards increasing general stability of COOL and maintainability of the code-base along with tests to make our code-base future-proof, working on the async save feature which will be a major leap towards a much smoother experience for users while collaboratively editing documents, and also for reviewing pull requests of other contributors, and for mentoring them through tough issues.
  • Thanks to Gabriel Masei for adding support for changing the UI mode dynamically between the classical toolbar and the new notebookbar, effectively making Collabora Online easier to customize based on user needs or taste.
    A screenshot of the Collabora Online’s classic toolbar on the Writer module

    A screenshot of the Collabora Online’s new Notebookbar on the Writer module
  • Thanks to Rashesh Padia for improving the debugging facilities of COOL, by adding a separate option in debug mode for sidebar invalidation re-rendering.
  • Thanks to Pedro Silva for various fixes and improvements around the user interface of COOL to make it have a better and more consistent look and feel, especially focusing on the vex widgets lately.
  • Thanks to Henry Castro for making it easier to debug Collabora Online by adding a tag string to extract backtrace logs.
  • Thanks to Umut BayramoÄŸlu for removing some unused variables, thus helping our code-base to become even lighter and easier to maintain.
  • Thanks to Gleb Popov for fixing the build with libc++ by ensuring that std:min() function has the same type of parameters in the code-base.
  • Thanks to Tamás Zolnai for a lot of fixes and improvements around cypress (testing framework), and the testing facilities, and also documenting the interface testing on the README file, thus helping new potential contributors to ensure stability and future-proofness of COOL.
  • Thanks to Miklos Vajna for adding support for gutter margins on Writer documents, which makes it much easier to adhere to binding standards of governments and other institutions for printed materials. Checkout his blog post for details!

    UI for the new gutter margins on Collabora Online

Collabora Online Integrations

  • Thanks to Julius Härtl for reviewing and merging pull requests from other contributors on Collabora Online’s Nextcloud integration.
  • Thanks to Szymon KÅ‚os for improving the user experience of Collabora Online’s Nextcloud integration by making sure the Save As dialog shows the new name after the file is renamed from within the editor.
  • Thanks to Phil Davis for improving the CI and test facilities of Collabora Online’s ownCloud integration by applying latest drone starlark code.
  • Thanks to Artur Neumann for reviewing and merging pull requests from other contributors on Collabora Online’s ownCloud integration.
  • Thanks to Cindy PIASSALE of Jeci for various improvements and clean-ups on Collabora Online’s Alfresco integration, such as adding Collabora Online as a viewer option for supported formats, documenting the new feature on the README file, and also releasing a new version of the integration app.

Honorable Mentions

  • Thanks to Cor Nouws for leading the marketing team, and not stopping there but continuing with testing & reporting bugs, attending to community events, and keeping us all informed about what’s going on. He also attends LibreOffice Design meetings from time to time to help COOL’s mother project LibreOffice have a better UI & UX.
  • Thanks to Eloy Crespo for his efforts to help the project well-funded as always.
  • Thanks to Marc Rodrigues for continuing to keep us updated on various news around Collabora Online and related FOSS projects, and creating a lot of yummy content to read!
  • Thanks to Pedro Silva for improving various points around the COOL Community Page and forum, and also for helping other contributors by providing instructions on their pull requests as well as reviewing them.
  • Thanks to Andras Timar for keeping us organized, maintaining our translation project on Weblate, and delivering hot new releases of our software!
  • Thanks to Yunusemre Åžentürk for various tasks towards keeping our CI chains healthy.
  • Thanks to Jan Holesovsky for doing a lot of research on different topics, and providing mentoring/patch-reviewing/hand-holding/wisdom within the team, in our communication channels, and also on various channels of our lovely mother project LibreOffice.
  • Thanks to Mike Kaganski for his recent work on upgrading our partner & customer ticketing system to make things even sweeter for all of our users. Feel free to check his blog post on Reading from MySQL data with BLOBs dumped to CSV.
  • Your friendly community mentor, Muhammet Kara, is also creating & improving easy hacks, running workshops, helping new contributors solving their setup & build issues and reviewing their pull requests, working on easing the build procedure, improving our GitHub presence bit by bit based on its community guidelines, compiling/composing these community updates…


Last but not least, we can’t thank enough to our translators who constantly help COOL and its friends talk many languages on this earth. Collabora Online speaks many languages, thanks to all of our translators in our translation project, and all of those who previously contributed and keeps contributing to our mother project, LibreOffice.

We’re continuing to work to find good ways to credit translators’ hard work in the product. Please see a list of those involved, and please get in touch if you’re not listed. Many thanks to all those who have worked on translating Online, you rock!

If you would like to help COOL speak your language, you can just go to our translation project on weblate, and start contributing! 😉

Collabora Online translation project on Weblate
Collabora Online translation project on Weblate

Collabora loves LibreOffice!

We’re still contributing to LibreOffice and encourage you too to do so because LibreOffice rocks. 😉

  • Thanks to Miklos Vajna for many improvements and fixes especially around ensuring better support for OOXML formats thus better interoperability with other office suites, such as making sure the creation time of an imported DOCX file ispreserved, and adding support[0][1][2] for gutter margins of DOCX, DOC, ODF and RTF documents. Check out his blog post for details! He also had a FOSDEM talk on Handling PDF digital signatures with PDFium.
    Old render result, missing gutter, in Writer

    New render result, with gutter, in Writer
  • Thanks to Tomaž Vajngerl for continuing his work towards developing a built-in Xray-like UNO object inspector. This effort has been funded by The Document Foundation, so also thanks a lot to the TDF Board of Directors, and the TDF donors who made the work on this tool possible!
  • Thanks to GülÅŸah Köse for various fixes and improvements around importing custom shapes such as making sure crop positions are imported properly and greysale effect is handled properly, and also for adding corresponding tests to ensure those features keep working in the future, thus improving interoperability with other office suites.
  • Thanks to Noel Grandin for doing various code-quality improvements and modernization all around the LibreOffice code-base.
  • Thanks to Tor Lillqvist for a lot of fixes and improvements especially towards better support on macOS and iOS.

The post Collabora Online Community Roundup #10 appeared first on Collabora Office and Collabora Online.

by Muhammet Kara at March 03, 2021 02:15 PM

Gökay Şatir

A Layout Designer For HTML Canvas

    Crisp drawing and perfect look and feel is important for the projects those used by millions of people, like Collabora Online.

    As you know, Collabora Online keeps your data safe on your server. Renders the files on the server side and enables users to work on large documents with many device types easily.

    Documents are rendered in parts on the server, then they are sent to the client. Client merges the tiles and shows it to the user. Parts (tiles) should have no gaps between them and they should be crisp. They should have the very same look as when the document is opened with desktop version of Libre Office.

    Collabora Online achieved this goal many years ago. But the software technologies are evolving very fast, as the time passes, old solutions may not work with the new rules. We realized that rendering tiles by using HTML & CSS & JavaScript collection, may create gaps between the tiles and there may be some other difficulties related to consistency between different browsers. Document was shown but the resulting view wasn't perfect. As the goal is having a perfect view of the documents, we needed another approach: Drawing tiles onto a canvas element.

    Also, documents can have dynamic UI elements, like row and column headers in Calc. When user scrolls the document, row and column numbers should be refreshed according to the viewed part of the document. So this quick drawings also need a canvas to be drawn on.

    Having different canvas elements for drawing the UI and tiles was our first approach. But having them drawn on the same canvas would perform better of course. At the end, we prepared a layout designer for canvas.


    Image 1

    Image 1 shows a screen shot from the layout designer, written in JavaScript. You can see that there are some sections separated from each other with borders. With this layout, if user resizes the browser window, sections are re-located. At the end of the resizing event, section at the right most position will still be at the right most position, the others will keep their relative positions too.

    This layout is created on HTML canvas element using the small class that you can view at CanvasSectionContainer.ts.

    If you are interested on this class, you may also want to have a look at Collabora Online project at our github page.

    You can also view our easy-hacks and even contribute to this great project:)

 Usage Details

    Developer creates a CanvasSectionContainer (s-container for short) class instance and gives it the canvas element that it will work with. s-container will handle all the mouse and touch events and propagate it to the sections it has. Dragging events are also handled by the s-container.

    When s-container is created, it will have no sections. Developer can add as many sections as they need, using createSection or addSection methods. 

Sections will have below properties (potential values are separated with '|'):

    anchor: 'top left' | 'top right' | 'bottom left' | 'bottom right' (Examples: For row & column headers, anchor will be 'top left'. If we would want to draw something sticked to bottom, anchor would be 'bottom left' or 'bottom right').

        One can also anchor sections to other sections' edges. Order is important, first variables are related to top or bottom, next ones are related to left or right.


            1 - [["column header", "bottom", "some section name", "top", "top"], "left"]

                    Explanation: If "column header" section exists, its bottom will be new section's top. If "column header" doesn't exist but "some section name" exists, its top will be new section's top. If neither of them exists, canvas element's top will be used as a fallback anchor.

            2 -  [["column header", "bottom", "ruler", "bottom", "top"], ["row header", "right", "left"]]

    position: [0, 0] | [10, 50] | [x, y] -> Related to anchor. Example: "bottom right": P(0, 0) is bottom right etc. myTopLeft variable is updated according to position and anchor.

    size: [100, 100] | [10, 20] | [maxX, maxY] -> This doesn't restrict the drawable area, that is up to the implementation. Size is not important for expanded directions. Expanded size is assigned after calculations.

    zIndex: Sections with highest zIndex will be drawn on top.

    expand: 'right' | 'left' | 'top' | 'bottom' | 'left right top bottom' (any combination)

    interactable: true | false -> If false, only general events will be fired (onDraw, newDocumentTopLeft, onResize) for this section. Example: Background drawings etc.

    drawingOrder: Sections with the same zIndex values are drawn according to their drawingOrder values. Section with the highest drawing order is drawn on top (for specific zIndex).

        So, in terms of being drawn on top, priority is: zIndex > drawingOrder.

    processingOrder:  Processing order feature is tricky, let's say you want something like this:

| top bar |
| left | | tiles |
| bar | | area |

    Top bar's height will be static most probably. It needs to be processed first, so it can be expanded to right.

    If top bar is processed after tiles area, since "tiles area" will most probably be expanded to all directions, it will leave no space for top bar. So, tiles are will be processed last.

    For above scenario, processing orders would be (with the same zIndex):

    * top bar -> 1

    * left bar -> 2

    * tiles area -> 3

    And their "expand" properties would be like below:

    * top bar: 'right' from position (0, 0)

    * left bar: 'top bottom' from position (0, 200) -> So it will go up and find where top bar ends and then go down and find where canvas ends. One can also anchor left bar to top bar using "anchor" property.

    * tiles area: "top bottom left right" from position like (300, 300) -> So it won't overlap with resulting positions of others. Developer can also use "anchor" property to avoid using pre-assumed positions.

    Other than these properties, sections should implement the event handlers. s-container will catch events and propagate them to sections. There are almost all events for mouse and touch screens. For more details see canvas section container class.

by Gökay ŞATIR ( at March 03, 2021 01:02 PM

March 02, 2021

Olivier Hallot

Exporting LibreOffice Guides to HTML (Part I)

LibreOffice is an open source office suite full of tricky secrets. One of my favorites is the possibility to export a text document to XHTML or HTML5, both are W3C standards supported by most modern web browsers.

But you, the reader, will certainly ask: If I have the Guides in ODT and PDF file format why do I need another format? Why spend energy adding another medium for the LibreOffice Guides? 

There are advantages and drawbacks for the endeavor. On the thumbs up side, the community get a way to read the guides without actually downloading the PDF or ODT file and contents can be accessed with the browser's navigation tools (including bookmarking and more). One example is the current ODF Standard files exported to XHTML, available at the OASIS website.

A second advantage is that (X)HTML pages can be crawled and indexed by search engines robots and the LibreOffice Guides can be found on the search results pages of Bing, Google, DuckDuckGo and others.

Another exciting possibility for distributing the guides in (X)HTML format is that they could be installed on the intranets of schools, colleges and universities, public libraries, also community, public administrationand private company websites. The files are static and don't need a server side scripting languages such as php or asp. Distributing the rich contents of the LibreOffice Guides in a browser readable format will add value to every LibreOffice migration project.

One critical factor in the success of a LibreOffice migration project is how quickly users can transition to the new software and having readily available, easily accessible documentation in different forms should not be underestimated.

How difficult is to convert the Guides to an (X)HTML format?

My experience is that there are some work to do in the ODT side, and some work on the exported (X)HTML. The nice part is that these changes are small and can be partially automated.

LibreOffice has an interesting XHTML export filter. The developers did their best to preserve formatting and document fidelity between different rich text output formats. A second tool I tried is the nice extension writer2xhtml, which also have interesting features.

However reading contents in a browser (or even a tablet and a mobile phone) requires scrolling instead of the usual page turning, as in a printed book.

The layout of the document's content must be adapted to the browser's navigation actions. This requires the layout to be adjusted for on-screen viewing. Besides, it is interesting to also adapt the contents to tablets and perhaps mobile phones.

Luckily, all elements for navigation exist in the ODT file, they are just in the wrong position when exported to XHTML. The approach is to wrap these elements in sections with specific names. After being exported to XHTML these sections are mapped in <div id="name">...</div> and can be accessed by both a CSS and Javascript for pagination and layout.

Here is one layout among many alternatives, for a simple export of our Guides to a browser page layout.

Besides the existing sections in the chapter, we can add other blocks with content of interest, for example a donation section a search form for either an external or internal search, such as Xapian and Omindex.

In the next post, I'll describe the changes needed in the Guide templates and discuss some of the alternate approaches for the task.

Stay tuned!

by Olivier Hallot ( at March 02, 2021 12:11 PM

Jean Hollis Weber

LibreOffice 7.0 Getting Started and Impress Guides

Two more volumes of LO 7.0 user guides were published in January: Getting Started Guide and Impress Guide. They are available in free PDF downloads and in low-cost print editions. See this page for links.

by Jean at March 02, 2021 12:54 AM

LibreOffice 7.1 Community released

On 3 February, The Document Foundation announced the release of LibreOffice 7.1 Community, the volunteer-supported version of the office suite. The Community label emphasises the fact that the software is not targeted at enterprises, and not optimised for their support needs. Blog post with more information.

For enterprise-class deployments, TDF has strongly recommended the LibreOffice Enterprise family of applications from ecosystem partners—for desktop, mobile and cloud—with long-term support options, professional assistance, custom features and other benefits. See LibreOffice in business.

by Jean at March 02, 2021 12:43 AM

March 01, 2021

Tomaž Vajngerl

Built-in "Xray" like UNO object inspector – Part 2

Since my last blog post I've been continuing the work on DevTools and since then a lot of things have progressed. Point & click has been implemented and the object inspector view has been greatly improved to show current object’s properties and methods. In this part I will mainly talk about the point & click and a bit about the current state, and in the next blog I will extensively talk about the object inspector.

Point & click

Figure 1: Current selection button

The idea of this functionality is to provide a way to inspect selected objects in the document, for example an image or a shape. For this, I have implemented a selection change listener (sfx2/source/devtools/SelectionChangeHandler.hxx), whose purpose is to listen to the selection changes that happen in the document and store the latest selection object. It is started when the DevTools docking window is instantiated and shown. I have added a new toggle button “Current Selection” (see Figure 1) to the UI. When the button is selected, it automatically shows the current selected object (gathered with the selection change listener) in the object inspector. 

Figure 2: Current selected shape's properties shown in the object inspector

In the example shown in Figure 2, we can see the shape is selected in the document and its properties are shown in the object inspector. If the "Current Selection" button wouldn't be toggled, then the document top-level object would be shown in the object inspector or the selected object in the DOM tree view.

While the "Current Selection" button is toggled, selecting any object in the DOM tree view (left-hand side tree view) has no effect, however if the current selected object is also present in the current DOM tree view, it will be selected. Note that if the object is not present in the tree, it won't be selected, because the DOM tree view will not force creation of on-demand object because of performance considerations.

Figure 3: "Inspect Object" command in "Customize" dialog 

In addition to showing the selected object, I have added a UNO command named “Inspect Object” (.uno:InspectSelectedObject), which can be added to context menus for objects (See Figure 3). The purpose of this command is to provide a way to open the DevTools docking window and automatically show the current selected object. If a user regularly uses the object inspector, this may be a more convenient way for them to access DevTools. Note that by default the command isn't added to any context menu, this is up to the user. However, if there will be demand to add this to context menus, it can be easily added. 

Figure 4: "Inspect Object" context menu entry on a shape object

The example in Figure 4 shows the context menu of a shape object, where the selected entry is the added "Inspect Object". 

From the implementation standpoint, it was necessary to move the whole DevTools from svx to sfx2 module. This was mainly necessary to get .uno:InspectSelectedObject to work, because we need to signal to DevTools that we want to show the current selection and not the document root in the object inspector. Because the svx depends on sfx2 module, it is not possible to access svx from sfx2 (only the other way around). 

Improvements to object inspector

The object inspector was previously a single tree view only, which had services, interfaces, properties and methods categories as root tree entries. This has now been changed so that the categories are now pages in a tab view, and each category has its own tree view (can be seen in Figure 2). The main problem with one tree view is that columns for each of the categories are different. For example, the properties category has object, value and type categories but the same columns make no sense for methods (which has return type and input parameters). 

For methods it now shows the method name, return type and parameters. The types are currently simplified types, which are easier to read (instead of exact type name of the object it just writes "object"), but the user will want to know the exact type too, so this is a WIP.

For properties it shows the type and value of the property, and it is possible to expand a property if the type is a complex type (object, struct) so it lists nested properties. If the value is an enum, then we get the name of the enum value automatically and show the name instead. 

Support for sequences was also added, so the sequence can be expanded and a list of indices and values is presented. If the current object supports XNameAccess or XIndexAccess, the names and indices are added into the property list, so the user can navigate to those. 

With this additions, it is already easier to inspect objects than it previously was using the Xray tool, and I'm sure it will get even better when it is finished. 

Next steps

The object inspector is already in a very good shape so I encourage everyone to try it and give feedback, what can be improved, changed or added - especially if you use Xray or MRI regularly. 

For the next steps the major focus will be to fix a couple of bugs and crashes (mainly due to missing checks if objects are available), work on the UI, object stack (so it is possible to go back to the previous object) and finalizing all the features of the object inspector. 


Many thanks to TDF and users that support the foundation by providing donations, to make this work possible. 

To be continued...

by Tomaž Vajngerl ( at March 01, 2021 12:49 PM

February 25, 2021

Marius Popa Adrian

Firebird 3.0 Language Reference (English) Released

The Firebird Documentation Team is proud to announce the first release of the English Firebird 3.0 Language Reference (HTML, PDF). You can also find it on the Documentation page. This new Language Reference covers all SQL syntax of Firebird 3.0.The new English Firebird 3.0 Language Reference is based in part on the Russian Firebird 3.0 Language Reference, but is not a direct translation (though

by Popa Adrian Marius ( at February 25, 2021 09:00 AM

February 23, 2021

February 21, 2021

Dennis Francis

Mocha tests in Collabora Online

We have many data structure classes in Collabora Online. Most of them are complex enough to warrant unit tests for their correctness. We already have cypress tests in Online which does integration testing, but we need unit tests for the internal data structure classes too. Mocha testing framework is a good match for this. With this we can do asserts via its BDD interface. In fact we could use any assertion library like Chai or Expect.js. You can now add Mocha tests in Online to test its any existing typescript classes or functions.

Here is a sample mocha test written for CPointSet typescript class:

/// <reference path="../src/layer/vector/CPoint.ts" />
/// <reference path="../src/layer/vector/CPointSet.ts" />

var assert = require('assert');

describe('CPointSet empty() tests', function () {

	describe('new CPointSet()', function () {
		it('should be empty', function () {

How to add a new Mocha test to Online?

Lets write a new test for the function CBounds.parse() as an example:

  • Create a new test file for tests related to CBounds class under loleaflet/mocha_tests/. Lets name it CBounds.test.ts
  • Reference the needed types from CBounds.ts by adding these lines.
/// <reference path="../src/layer/vector/CPoint.ts" />
/// <reference path="../src/layer/vector/CBounds.ts" />
  • Import Nodejs assert.
var assert = require('assert').strict;
  • Add a BDD style description of the set of tests we are going to write for CBounds.parse().
describe('CBounds parse() tests', function () {
    // Write unit tests here.
  • Inside that add a few test cases with descriptions like below:
describe('CBounds.parse() call with an empty string argument',
    function () {
	it('should return undefined', function () {
		assert.equal(CBounds.parse(''), undefined);
  • Now run ‘make check’ inside the loleaflet/ dir to see these tests in action. In current master branch you should see something like below along with the results for the new test you have added.

If interested, do take a look at the commit 8b2eae423cf77e7c725843061898c3968a72c547 that integrated Mocha framework to Online.

by Dennis Francis at February 21, 2021 08:43 AM

February 20, 2021

February 19, 2021