The Document Foundation Planet


October 22, 2021

Luboš Luňák

Optimizing LibreOffice for a larger number of users

Have you ever edited a document in LibreOffice in more than one window? Right, neither have I. Who'd think about LibreOffice and more than one user at the same time, right? Except ... somebody did and that's how collaborative editing based on LibreOffice works. For whatever strange reason, somewhen in the past somebody thought that implementing multiple views for one document in OpenOffice (StarOffice?) was a good idea. Just select Window->New Window in the menu and you can edit your favourite document in 50 views that each show a different part of the document and update in real time. And that, in fact, is how collaborative editing such as with Collabora Online works - open a document, create a new view for every user, and there you go.

But, given that this has never really been used that much, how well did the original relevant code perform and scale for more users? Well, not much, it turns out. Not a big surprise, considering that presumably back when that code was written nobody thought the same document could be edited by numerous users at the same time. But I've been looking exactly into this recently as part of optimizing Collabora Online performance, and boy, are there were gems in there. You thought that showing the same document in more views would just mean more painting also in those views? Nah, think again, this is OpenOffice code, the land of programming wonders.

Profiling the code

When running Online's perf-test, which simulates several users typing in the same document, most of the time is actually spent in SwEditShell::EndAllAction(). It's called whenever Writer finishes an action such as adding another typed characters, and one of the things it does is telling other views about the change. So here LO spends a little time adding the character and then the rest of the time is spent in various code parts "talking" about it. A good part of that is that whenever an action is finished, that view tells the others about it happening, and then all those views tell all other views about how they reacted to it, making every change O(n^2) with the number of views. That normally does not matter, since on the desktop n generally tends to be 1, but hey, add few more views, and it can be a magnitude slower or more.

Redrawing, for example, is rather peculiar. When a part of the document changes, relevant areas of the view need redrawing. So all views get told about the rectangles that need repainting. In the desktop case those can be cropped by the window area, but for tiled rendering used by Online the entire document is the "window" area, so every view gets told about every change. And each view collects such rectangles, and later on it processes them and tells all other views about the changes. Yes, again. And it seems that in rare cases each view really needs its own repaint changes (even besides the cropping, as said before). So there's a lot of repeated processing of usually the same rectangles over and over again.

One of the functions prominently taking place in CPU costs is SwRegionRects::Compress(), which ironically is supposed to make things faster by compressing a group of rectangles into a smaller set of rectangles. I guess one of the cases in OpenOffice where the developer theoretically heard about optimizations being supposed to make things faster, but somehow the practical side of things just wasn't there. What happens here is that the function compares each rectangle with each other, checking if they can be merged ... and then, if yes and that changes the set of rectangles, it restarts the entire operation. Which easily makes the entire thing O(n^3). I have not actually found out why the restarting is there. I could eventually think of a rather rare case where restarting makes it possible to compress the rectangles more, but another possibility is that the code dates back to the time when it was not safe to continue after modifying whichever container SwRegionRects was using back then, and it has stayed there even though that class has been using to std::vector since a long time ago.

Another kind of interesting take on things is the SwRegionRects::operator-= in there. Would you expect that rectangles would be collected by simply, well, collecting them and then merging them together? Maybe you would, but that's not how it's done here. See, somebody apparently thought that it'd be better to use the whole area, and then remove rectangles to paint from it, and then at the end invert the whole thing. The document area is limited, so maybe this was done to "easily" crop everything by the area? It works, except, of course, this is way slower. Just not slow enough to really notice when n is 1.

Other code that works fine with small numbers but fails badly with larger ones is VCLEventListeners, a class for getting notified about changes to VCL objects such as windows. It's simply a list of listener objects, and normally there aren't that many of those. But if LO core gets overloaded, this may grow. And since each listener may remove itself from the list at any point, the loop calling all of them always checks for each of them if the listener is still in the list. So, again, O(n^2). And, of course, it's only rarely that any listener removes itself, so the code spends a lot of time doing checks just in case.

But so that I do not talk only about old code, new code can do equally interesting things. Remote rendering uses LOK (LibreOfficeKit), which uses text-based messages to send notifications about changes. And the intuitive choice for writing text are C++ iostreams, which are flexible, and slow. So there will be a lot of time spent in creating text messages, because as said above, there are many changes happening, repeatedly. And since there are so many repeated messages, it makes sense to write extra class CallbackFlushHandler that collects these messages and drops duplicates. Except ... for many of the checks it first needs to decode text mesages back to binary data, using C++ iostreams. And in most cases, it will find out that it can drop some message duplicates, so all these string conversions were done for nothing. Oops.

And there are more ways in which things can get slower rather than faster. CallbackFlushHandler uses an idle timer to first process all data in bulk and flush the data at once only when idle. Except if it gets too busy to keep up, and it can easily get too busy because of all the things pointed out above, it may take a very long time before any data is flushed. To make things even worse, the queue of collected messages will be getting longer and longer, which means searching for duplicates and compressing it will get longer. Which in turn will make everything even slower, which again in turn will make everything even slower. Bummer.

All in all, if unlucky, it may not take that much for everything to slow down very noticeably. Online's perf-test, which simulates only 6 users typing, can easily choke itself for a long time. Admitedly, it simulates them all typing at the same time and rather fast, which is not very a realistic scenario, but typing hitting the keyboard randomly and quickly is exactly how we all test things, right? So I guess it could be said that Collabora Online's perf-test simulates users testing Collabora Online performance :). Realistic scenarios are not going to be this bad.

Anyway. In this YT video you can see in the top part how perf-test performs without any optimizations. The other 5 simulated users are typing elsewhere in the document, so it's not visible, but it affects performance.

Improved performance

But as you can see in the other two parts, this poor performance is actually already a thing of the past. The middle part shows how big a difference can even one change make. In this specific case, the only difference is adding an extra high-priority timer to CallbackFlushHandler, which tries to flush the message queue before it becomes too big.

The bottom part is all the improvements combined, some of them already in git, some of them I'm still cleaning up. That includes changes like:

  • SwRegionRects::Compress() is now roughly somewhere at O(n*log(n)) I think. I've fixed the pointless restarts on any change, and implemented further optimizations such as Noel's idea to first sort the rectangles and not compare ones that cannot possibly overlap.
  • I have also changed the doubly-inverted paint rectangles handling to simply collecting them, cropping them at the end and compressing them.
  • One of the things I noticed when views collect their paint rectangles is that often they are adjacent and together form one large rectangle. So I have added a rather simple optimization of detecting this case and simply growing the previous rectangle.
  • Since it seems each Writer view really needs to collect its own paint rectangles, I have at least changed it so that they do not keep telling each other about them all the time in LOK mode. Now they collect them, and only once at end they are all combined together and compressed, and often thousands of rectangles become just tens of them.
  • Another thing Writer views like to announce all the time in LOK mode are cursor and selection positions. Now they just set a flag and compute and send the data only once at the end if needed.
  • VCLEventListeners now performs checks only if it knows that a listener has actually removed itself. Which it knows, because it manages the list.
  • Even though LOK now uses tiled rendering to send the view contents to clients, LO core was still rendering also to windows, even though those windows are never shown. That's now avoided by ignoring window invalidations in LOK mode.
  • Noel has written a JSON writer which is faster then the Boost one, and made non-JSON parts use our OString, which is faster and better suited for the fixed-format messages.
  • I have converted the from-message conversions to also use our strings, but more importantly I have changed internal LOK communications to be binary rather than text based, so that they usually do not even have to be converted. Only at the end those relatively few non-duplicated text messages are created.
  • Noel has optimized some queue handling in CallbackFlushHandler and then I have optimized it some more. Including the high-priority timer mentioned above.
  • There have been various other improvements from others from Collabora as part of the recent focus on improving performance.
  • While working on all of this, I noticed that even though we have support for Link Time Optimization (LTO), we do not use it, probably because it was broken on Windows. I've fixed this and sorted out few other small problems, and releases in the future should get a couple percent better performance across the board from this.

This is still work in progress, but it already looks much better, as now most of the time is actually spent doing useful things like doing the actual document changes or drawing and sending document tiles to clients. LOK and Collabora Online performance should improve noticeably, recent (Collabora) versions 6.4.x should include already some improvements, and the upcoming Collabora Online 2021 should have all of them.

And even though this's been an exercise in profiling LibreOffice performance for something nobody thought of back when the original OpenOffice code was written, some of these changes should matter even for desktop LibreOffice and will be included starting with LO 7.3.

by llunak ( at October 22, 2021 02:15 PM

Miklos Vajna

Transparent shadow for tables from PPTX in Impress

Impress is now able to correctly render shadows for table shapes, even if the shadow itself or the fill of the table cells have transparency. The result is now compatible with PowerPoint.

First, thanks to our partner SUSE for working with Collabora to make this possible.


We got a PPTX document, which has a table shape with pink background and a blurry shadow. Impress rendered a red background, making the text hard to read.

The request was to improve the shadow rendering to be PowerPoint-compatible and in general correctly support transparency when it comes to table cell fills and table shadows.

Results so far

The table shadow now looks like this:
Figure 1. New render result in Impress

Matching the reference rendering:
Figure 2. Reference render result

While background was red previously:
Figure 3. Old render result in Impress

You can see that not only the background in the top center cell is pink now, but the blurry table shadow is still correct.

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 fixes:

With these, it’s now possible to add transparency to both table cell fills and to table shadows, and the rendering will take both into account, correctly.

Want to start using this?

You can get a snapshot / demo of Collabora Office and try it out yourself right now: try unstable snapshot. 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 too (7.3).

by Miklos Vajna at October 22, 2021 06:48 AM

October 21, 2021

Official TDF Blog

LibreOffice extension to remove blank cells – Help to improve it!

Rafael Lima from the Brazilian LibreOffice community is working on an extension to remove blank cells in LibreOffice Calc. It has four modes (single column, single row, blank rows and blank columns). Here’s a quick animation of it in action:

So far, the main functionality is there, but Rafael would like to improve it. We asked him for some more info…

What does the extension do?

The main purpose of this extension is to remove blank cells to easily compact data. For instance, suppose you have a table with data and then you delete the contents of some rows. The next thing you might want to do is remove these blank rows to compact your table. By using the Remove Blank Cells extension this can be done with a single click.

Currently the extension supports four modes to remove blank cells. The simplest one is when you select a single row or column, then the extension will detect the selection and compact the data removing all blank cells. However, if a matrix is selected, then a message will be displayed and you can choose if blank rows or blank columns are to be removed.

When did you start making it?

I started writing the extension in February this year and finished the first version in less than one month. Then I kept testing it and working on improvements and the final version was finished in July.

At first the extension focused on my use case, because in my work with data analysis I often have to remove blank rows and columns. However, after seeing many people asking about how to remove blank cells in LibreOffice, I decided to pack it and make it available for everyone since it might be useful for other people.

What are the current limitations of it?

The main limitation of the extension is when the user wants to process very large tables (with tens of thousands of rows), which might take some time to finish. In these cases a progress bar is shown so the user can keep track of the data processing.

Moreover, the extension still does not support translations, so the user interface is only available in English. I plan to support translations in the next release.

How can people help to improve it?

Because this is the first released version of the extension, I would appreciate having more people testing it and reporting issues on the extension’s GitHub page.

I would also like to invite the community to create a better icon for the extension, so that it would be more in line with the default icon theme in LibreOffice.

In the future I will also need some assistance with translating the extension’s strings.

So, everyone is welcome to try out the extension – and if you have some technical knowledge, jump in and help Rafael and the community to improve it! Check out the wiki for more information on extension development.

by Mike Saunders at October 21, 2021 01:59 PM

October 20, 2021

Official TDF Blog

Ten more videos from the LibreOffice Conference 2021

Here are some more videos from the LibreOffice Conference 2021! Check out the playlist, using the button in the top-right – or scroll down for links to individual videos:

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.

Individual links

Note: many of these are also available on PeerTube, and more will be added…

Stay tuned for more videos from rooms 2 and 3 of the conference!

by Mike Saunders at October 20, 2021 12:03 PM

October 19, 2021

Official TDF Blog

LibreOffice and Google Summer of Code 2021: The results

Google Summer of Code logo

This year, LibreOffice was once again a mentoring organization in the Google Summer of Code (GSoC), a global program focused on bringing more student developers into free and open source software development. Seven projects were finished successfully. Students and mentors enjoyed the time, and here we present some of the achievements, which should make their way into LibreOffice 7.3 in early February 2022!

You can experiment with the new features by using daily builds and report any problems in our bug tracker.

100 Paper Cuts by Bayram Çiçek

Mentors: Muhammet Kara (Collabora), Heiko Tietze (TDF)

100 Paper Cuts aims to improve user interface, implementing enhancement requests and solving the most annoying issues on the user experience (UX) side of LibreOffice.

Bayram fixed six bugs from different topics. Most notable are border preview not showing the diagonal border option, a bug where cropping flipped images occurred at the wrong side, and mouse-over effect for different palettes in the area tab.

Learn more about 100 Paper Cuts in the final report.

Screenshot of diagonal borders

Integrate .ui dialogs with translation tooling/string search webservice to help translators by Sary Nasser

Mentors: Christian Lohmaier, Olivier Hallot (TDF)

Sary automated the adding of screenshots to our translation platform, Weblate, while associating them with translatable words. This will greatly help translators by providing context for their work.

Learn more about the translation tooling in the final report.

Tests for the VCL graphic backends by Akshit Kushwaha

Mentors: Tomaž Vajngerl, Luboš Luňák (Collabora)

LibreOffice adapts its user interface to different operating systems with the help of its graphics toolkit Visual Class Library (VCL). Thanks to Akshit’s work, we have a working suite of automated graphics rendering tests. There is now also the ability for users to run the tests manually, inspect the results and attach them to our bug tracker in case there is a problem.

Learn more about the tests in the final report.

Screenshot of VCL tests

Improving table styles by Balázs Sántha

Mentors: László Németh (independent), Michael Stahl (allotropia)

This project resulted in fixes for the most annoying Writer table style issues. Further work is needed to provide full DOCX compatibility.

Learn more about DOCX tables styles in the final report.

Make SVM (StarView Metafile) format independent of the VCL Metafile + tests of the format by Panos Korovesis

Mentors: Tomaž Vajngerl, Miklos Vajna (Collabora)

Thanks to the work of Panos, the SVM file format is handled independently of internal VCL constructs, which will make important reorganisation of the VCL code possible. Panos also created automated tests for the SVM format.

Learn more about the SVM project in the final report.

Show text styles together in the sidebar by Anshu Khare

Mentors: Mike Kaganski, Tomaž Vajngerl (Collabora), Heiko Tietze (TDF)

Both paragraph as well as character styles are essential means to format text. Many users struggle with this concept and use direct formatting. Also, we don’t show both at once, and the two style families are not obvious to spot for casual users.

In order to improve the handling of styles (and as necessary preparation for the styles highlighter), Anshu started to rework the code. The new code makes it now possible to merge both lists into one view. A first patch was also part of the project – although it is not finished yet.

Implement Interface for external data source import into Calc by Tushar Kumar Rai

Mentors: Markus Mohrhard (independent), Heiko Tietze (TDF)

The data provider allows to import various data such as local CSV files or streams from external sources, and to apply transformations like adding/removing rows or columns, formatting and numerical operations with the data before it is inserted into the sheet. Plus, to update the data by still applying the transformations is just a click.

The project aimed to rework the user interface. Tushar organized the layout according the user workflow and common UI principles and made the workflow of adding/removing transformations easy to understand. He also added a couple of transformations.

Learn more about the data provider project in the final report.

Screenshot of Data Provider

Wrapping up

Many thanks to all students who spent their summer time improving LibreOffice. You are awesome! And special thanks also to the mentors who always put so much love and energy into these tasks. That’s what makes LibreOffice rock.

Now we are looking forward to next year’s GSoC. If you are interested, why not prepare early? Learn more at out wiki page where some ideas are listed.

Participating in GSoC is a great way to build your skills, and show future employers what you’re capable of!

by Ilmari Lauhakangas at October 19, 2021 11:12 AM

Announcing the election for the next TDF Board of Directors

Marina Latini, on behalf of the Membership Committee, writes:

On October 18, we officially announced the upcoming election for the next Board of Directors of The Document Foundation, the non-profit entity behind LibreOffice.

As per ยง 7 II of our statutes (binding German version and non-binding English translartion) the Board’s term lasts two years. The current Board started its duty on February 18, 2020. Therefore, the old Board remains in charge until the end of February 17, 2022, so the new Board will be in charge the day after that, which is February 18, 2022.

That upcoming term will then (regularly) end on February 17, 2024, so the next election of the Board of Directors will take place before.

As per ยง 6 III, only members of the Board of Trustees of The Document Foundation, as well as current members of any of its bodies, are eligible to be elected into the Board of Directors, and the election is prepared and supervised by the Membership Committee (ยง 7 II).

The active electoral right is reserved to those who have been members of the Board of Trustees before this announcement (ยง 7 II).

ยง 6 III also states that members of the Board of Directors or their deputies may not be members of the Membership Committee and vice versa. This means that current members of the Membership Committee are eligible to be elected, but with the acceptance of their new role they lose their current role in the MC. For clarification, they have to step down from the Membership Committee, with effect no later than to the beginning of the new term of the Board of Directors, the minute before accepting to become a member of the Board of Directors.

There is one more notable limitation: Per ยง 8 IV of the statutes, a maximum of 1/3 members of the Board of Directors is allowed to work on an employment basis for the same company, organisation, entity or one of its affiliate organisations.

Nomination of candidates fulfilling the above requirements, as well as self nomination is welcome. In total, at least seven Board of Directors members are required, and given there are enough candidates, up to three deputies can be elected (ยง 7 II). As deputies are on duty quite often, we encourage many candidates to participate.

Re-election of current members of the Board of Directors is permitted (ยง 7 II).

Please send nominations and self-nominations via e-mail to (which reaches the Membership Committee in private) and at the same time to (which is a public mailing list).

We kindly ask nominees who would like to stand for election to provide a statement of up to 75 words – longer statements will be cut off at the maximum – on their candidacy as continuous text (so no bullet lists or multiple paragraphs). In addition, you have to provide and keep up to date your full name, e-mail address and your corporate affiliation, if any, or state the lack of an affiliation, and please announce that you will provide information on all future changes as soon as possible. Specifically, it is necessary to indicate all information regarding ยง 8 IV of the statutes.

Discussions with the candidates and questions to them as well as questions about the election should take place on the public mailing list. For details on how to use the mailing list, see here.

Eligible voters will receive further details via email prior to the start of election, including a summary of the candidates, details on how to access the voting system, and instructions on how to independently verify the vote count. Please ensure the Membership Committee has your recent and correct e-mail address on file. For questions, you can reach the Membership Committee in private at

Following the timeline set forth in ยง 7 II, requiring a 45 day advance notice, we hereby announce the following timeline for the election:

(00:00 is beginning of the day, 24:00 is end of the day)

  1. Monday, 2021-10-18: announcement of the election; and start of the nomination phase
  2. Thursday, 2021-11-25, 24:00 CET/UTC+1: end of the nomination phase (one week before the election starts, as per ยง 7 II)
  3. Friday, 2021-12-03, 00:00 CET/UTC+1: official start of the election (at least 45 days after announcement of the election, as per ยง 7 II)
  4. Monday, 2021-12-13, 24:00 CET/UTC+1: end of the election
  5. Tuesday, 2021-12-14: announcement of the preliminary results of the election and acknowledgement of role
  6. Wednesday, 2021-12-15, 00:00 CET/UTC+1: start of the challenging phase
  7. Monday, 2021-12-20, 24:00 CET/UTC+1: end of the challenging phase
  8. afterwards: official announcement of the final results
  9. Friday, 2022-02-18: new Board of Directors officially in charge, and election of a Chairperson and a Deputy Chairperson from among its members

Live sessions with the candidates: Between the end of the nomination phase (Thursday, 2021-11-25, 24:00 CET/UTC+1) and the official start of the election (Friday, 2021-12-03, 00:00 CET/UTC+1), the Membership Committee will organise public – and if possible recorded – live sessions, where members of the Board of Trustees can ask questions to the candidates. Everyone, also non-members, is invited to join these sessions. We will also make available to the general public the recordings and the answers given.

Questions to the candidates: In addition, after the end of the nomination phase (Thursday, 2021-11-25, 24:00 CET/UTC+1), the Membership Committee will provide a set of questions to all the candidates. All candidates are kindly invited to send their answers, which will also be made available to the general public.

Be advised that the newly elected Board of Directors will only be in charge from February 18, 2022 on. The current Board of Directors will however include them in the decision making process, to ease up the transition.

Challenges to this announcement with respect to the deadlines outlined have to happen no later than seven (7) days after this announcement, via e-mail to (which reaches the Membership Committee in private).

Challenges to the preliminary results of the election have to happen until the deadline set forth above, via e-mail to (which reaches the Membership Committee in private).

by Mike Saunders at October 19, 2021 08:06 AM

October 18, 2021

Official TDF Blog

Community Member Monday: Hlompho Mota

Today we’re talking to Hlompho Mota, who’s working on the Sesotho LibreOffice translation project in Lesotho…

Tell us a bit about yourself!

I am a native of Lesotho, and a dreamer and a person who aspires to make changes. Currently I’m working in a business that serves other businesses in Lesotho to get recognition in the market, and generally grow to become more self-reliant. Other than my business, I do try and dabble in technology and try to understand how it works – and get a sense on how it can be relevant in the area of life that I live in at this moment.

But besides that, I consider myself as lifelong learner and I hope that the learning will continue for the rest of my life. Currently, I’m a self-taught developer trying to participate in as many open-source projects as possible, with the hope of bringing much-needed development to my part of the world.

How did the Sesotho LibreOffice translation project get started?

I’ll refer to a few individuals who I came across, who grew the seeds to contribute to this project.

  • Mamako Mota: My wife, who was somehow able to believe in some of my vision, and hopes that the vision will become reality someday. She was willing to help me get the word out to people.
  • Edwin R Brown: One of the most intelligent people that I had the honour of meeting. He lived by his philosophy of trying to make the world a better place. During the times that he came to Lesotho, we were able to talk about some of the many ways that we looked at the world. However, given that there are some serious changes that need to be brought about with developing the country, I feel that we need some changes in the outlook in my part of the world, and only then will we be able to understand this man’s vision.
  • Vincent D. Warmerdam: A machine learning practitioner and another person I was humbled enough to meet. From how he hold his talks on in the Python community, right down to how he does his work – it all radiates a purpose that has inspired me to have an outlook on what can happen when people have enthusiasm for the work that they do. Besides that, he has shown me some of the ways that vision can be used to develop language, and has shared the tools and resources that he personally developed.
  • Maele Neko: One person who I originally spent time with, where we had hoped to make significant developments in Lesotho and Sesotho. But we were originally came across the challenges that came along with translating, due to the differences in Lesotho and South African dialect. The challenges in life and the discussions I’ve had with him have inspired me to continue. However, he was able to contribute to Sesotho knowledge and language on Twitter.
  • Lastly, Red Hat, the company: I see it as a company that was driven to make a business model out of open source projects. In time, I would either hope to work with this organization, or build one like it – in the hope that I can be the change that is needed in Lesotho and Africa in total.

Is free and open source software widely known/used in Lesotho? Are there any challenges there to wider adoption?

This is where there is a tragedy, yet I aspire to help with creating a solution. Given some of the dynamics that are involved in the size and demographics of the the population, there has been little support from many of the profit-driven organizations. To make matters worse, the adoption of open source is yet to reach ideal levels because of the lack of understanding – because technology as a whole in our part of the world has been slow. The drive to do better is something that still needs to be developed.

With that being said, there are other parts of the my world where my work and passion cross paths – mainly in terms of developing businesses to become better, and helping them to become technologically savvy. So in that light, the aim of this project would be realised in time, when businesses begin to embrace technology, and the language barrier will be tackled in one way or another. In this case, my vision is that Lesotho will become a home of open source – and will become more of a player in the tech sector, rather than just a spectator.

How can people help with the translation or general promotion in your area?

The vision is not just in translation, but that we go though this process and that Lesotho has a better understanding of open source and technology. The open source community needs to understand that the vision of open source (or at least from my view) has always been about making progress more relatable to society as a whole, than just about competing with closed source software.

However, I hope to do my bit to make sure that open source spreads to as many people as possible. Translation is the first part of this, but in time I hope to be an ambassador and developer. (After fumbling with C and C++, hopefully I can help there as well.)

From this point onwards, I hope that we can not only just translate, but have a contextual discussion on why some ideas are named the way that they are – and hopefully then, open source can then make the impact that it’s meant to make.

Many thanks to Hlompho for his work, and sharing his thoughts! Check out our Native Language Projects for LibreOffice in many other languages around the world – and if yours is missing, you can help us to add it!

by Mike Saunders at October 18, 2021 01:29 PM

LibreOffice Design Blog

Results from the Survey about LibreOffice Calc


Earlier this year we run a survey on LibreOffice Calc. It was inspired by a similar questionnaire for LibreOffice Draw (see first and second blog post). The Calc survey was used to learn about how Calc is being used, what features are most important to users and where they expect to see the improvements to the software.…

by Heiko Tietze at October 18, 2021 08:18 AM

October 15, 2021

Michael Meeks

2021-10-15 Friday

  • Mail chew; admin, patch review here & there - encouraging to see more fixes & performance improvements for Online as well as good progress to our next major release.
  • After Italo's keynote announcement of the new LibreOffice Technology marketing plan at the LibreOffice conference, we lost no time integrating this great way to fairly present the goodness of LibreOffice that we depend on to build Collabora Online & Collabora Office mobile into the product. With new links that can take you to our LibreOffice Technology page where we can celebrate the community & credit all the hard work done under the hood here, and of course the logo. Still a work-in-progress, and will start to appear in our products over the next weeks as/when we refresh them, but so far it looks like this for desktop & mobile:
    up-coming COOL About dialog up-coming COOL About dialog
    Thanks to Italo & Mike at TDF for developing the concept, and also to Pedro & Elisa, for their work on the code & logos - we'll be iterating it with them over the next days & weeks.

October 15, 2021 04:55 PM

October 14, 2021

Michael Meeks

2021-10-14 Thursday

  • Mail chew; catch up with Miklos, Andras & a great COOL community call - lovely to see some of the hacktober participants showing up and contributing.

October 14, 2021 09:00 PM

LibreOffice Dev Blog

Automated bibisect to find source of a bug

In programming, we usually face bugs that we should fix to maintain or improve our software. In order to fix a bug, first we should find the source of the problem, and there are tools like “Automated bibisect” are available to help, specially when the bug is a regression. You probably know what a regression is:

Regression bugs are special kinds of bugs. They describe a feature that was previously working well, but at some point a change in the code has caused it to stop working. They are source of disappointment for the user, but they are easier to fix for the developers compared to other bugs! Why? Because every single change to the LibreOffice code is kept in the source code management system (Git), it is possible to find that which change actually introduced the bug.


But, how to find where (in which commit) the bug has actually introduced? The answer is provided by the Git; the source code management system that most of us use, and is used in LibreOffice development. Git provides a command named bisect.

Using git bisect, you can find the exact commit where the bug was introduced with the minimum number of tries possible using binary search. After invoking git bisect start, you should mark the last bad commit you know using git bisect good, and then the first bad commit you know using git bisect bad. Then you are told what is the number of estimated steps you need to go. You should compile each commit that is checked out, and then test to see if the problem is there.

Binary bibisect

But wait! Isn’t it true that compiling LibreOffice takes a while? Is git bisect for LibreOffice is something usable, in a short period time? The answer is no, but there is a solution called binary bisect or bibisect. Binary builds of all commits within certain periods of time are available as git repositories, and you can do git bisect on these repositories.

You can read more about bibisect here:

First, you have to find a suitable repository. If the bug is reproducible on every platform, you can choose among the repositories according to your OS:

For example, consider tdf#141049. It is about bad rendering of an EMF figure, which is wrongly displayed as blank. It was OK in LibreOffice 6.2, but in newer versions of LibreOffice 6.2, the problem appeared. So, if you are working on Linux, bibisect-linux-64-6.3 would be the right choice, because it provides “libreoffice-6-2-branch-point to libreoffice-6-3-branch-point and then libreoffice-6-3”.

good output in binary bibisect


bad output in binary bibisect


Figure 1: The good, and the bad!

We start by downloading the repository bundle from TDF repo: (Warning: The bundle is ~8GB, and you need more space to extract and work with it)

$ wget --continue
$ git clone -o bundle linux-64-6.3.git-bundle linux-64-6.3

Then you can work with the linux-64-6.3 like a normal git repository, and do bisect on it. In each step, you open the example file of the bug in LibreOffice using ./instdir/program/soffice and check if it the problem is there, or not. If it’s good, you use git bisect good and if it’s bad, you invoke git bisect bad. You should continue this process until it is finished, and you find the first bad commit.

Let’s see a video tutorial:

Please accept YouTube cookies to play this 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.

Automated bibisect

But what if we could automate this process? Fortunately, this is possible! It is called automated bisect, and it is usable on binary bisect repositories as an automated bibisect.

For the tdf#141049, if you create PDF output from the input file, there is a visible difference in the size of the blank output, and the size of the correct output.

To simplify, I’ve create tdf141049.doc from one of the figures that is not shown in the original example. The blank output is <20k, but the correct output is > 40k.  This provides a way to differentiate between good and bad commits automatically: checking the size to be > 40k is used to determine if the commit is good or bad.

We store this script as

./instdir/program/soffice --headless --convert-to pdf tdf141049.doc
size=$(wc -c <"$file")
if [ $size -ge $minsize ]; then
    exit 0
    exit 1

And then we do automated bibisect:

$ cd linux-64-6.3
$ git bisect start
$ git bisect bad  master    # master is bad
$ git bisect good oldest    # oldest is good
Bisecting: 4085 revisions left to test after this (roughly 12 steps)
$ git bisect run ./
Author: Jenkins Build User <tdf@pollux.tdf>
Date: Tue May 28 09:22:52 2019 +0200

source sha:69b62cfcbd364d7f62142149c2f690104b217ca1

That’s it! The script determines which commit is good, and which is bad, and through bisect binary search, the first bad commit will be found within seconds. The automated bibisect provides the exact commit which is the source of the bug, and you should work on this commit to fix the problem.

Final Notes

In the end, I should note  that not it is not easy to do automated bibisect for every bug. But, if you create PDF or SVG output from the input file, you can possibly write a script to analyze the output and automate the task. The script have to return 0 to the shell if the commit was good, and non-zero if it was bad. The values greater than 127 and also 125 can be used to skip the commit.

If you want to get started with LibreOffice development, I suggest you to see our video tutorial:

Getting Started (Video Tutorial)

by Hossein Nourikhah at October 14, 2021 02:08 PM

October 13, 2021

Michael Meeks

2021-10-13 Wednesday

  • Slept badly, took babes to school in such a hurry I left my wallet & phone at home: discovered this having filled up the car; eventually released to get them from home; ho hum.
  • A day of gut-wrenching TDF administrative angst; draining.

October 13, 2021 09:00 PM

October 12, 2021

Michael Meeks

2021-10-12 Tuesday

  • Caught up with Kendy; more admin, calls. Out for a run with J.

October 12, 2021 09:00 PM

October 11, 2021

Michael Meeks

2021-10-11 Monday

  • Mail chew, planning call, worked on projections, and an admin backlog - lots to be done.

October 11, 2021 09:00 PM

Roman Kuznetsov

You use Windows 7 and LibreOffice 7.1 doesn't start

If you use Windows 7 and LibreOffice 7.1 doesn't start there, then possibly you have Windows 7 without update. For fixing that issue please install Windows 7 update as it wrote in LibreOffice 7.1 Release Note:

Because of updated Python's change bpo-36085, LibreOffice now requires KB2533623 on Windows 7. The mentioned update is not directly available from Microsoft anymore, but KB3063858 (32-bit / 64-bit) may be used, that superseded the older one (details in tdf#144902).

by Roman Kuznetsov ( at October 11, 2021 02:54 PM

October 07, 2021

LibreOffice QA Blog

QA/Dev Report: September 2021

General Activities

  1. LibreOffice 7.2.1 was released on September 16
  2. LibreOffice 7.1.6 was released on September 9
  3. Allotropia published a couple of blogposts about their recent work on master documents and ODF 1.3 transition
  4. Alain Romedenne improved the Help content for the ScriptForge library
  5. Adolfo Jayme Barrientos improved the accuracy of some Help texts and made some smaller fixes
  6. Rafael Lima created a guide about Calc macros for formatting cell borders, improved the Help pages for Slide master, Calc AutoCorrect and document encryption.
  7. Steve Fanning improved the help for EUROCONVERT and CONVERT_OOO Calc functions
  8. Olivier Hallot (TDF) added Help pages for Accessibility Check Tool, ProtectFields and ProtectBookmarks, improved the pages for GPG signing and Database Advanced Settings, added examples for using Calc functions in macros and updated many menu item references.
  9. Ilmari Lauhakangas (TDF) replaced Help’s index filtering JS library with a more performant one
  10. Jean-Pierre Ledure worked on the ScriptForge library
  11. Ross Johnson improved paragraph keyboard navigation in Writer and fixed a problem with the grouping of Help index filter results
  12. Juan C. Sanz implemented connecting to a Firebird server (still missing UI)
  13. Natalia Gavrilova made Calc’s focus rectangle use the highlight colour rather than the default font colour
  14. Aleksei Nikiforov (basealt) fixed a Linux crash related to SVG icon themes
  15. Pierre Marty (Linagora) fixed an Impress autolayout issue
  16. Tor Lillqvist (Collabora) worked on the iOS version
  17. Daniel Arato (NISZ) fixed issues with footers in XLSX export and custom shapes in DOCX export
  18. Jim Raykowski completed the work on Navigator focus tracking for all content types while greatly improving its performance and improved the Outline folding feature
  19. Tibor Nagy (NISZ) added support for hyperlinks in images in PPTX import
  20. Vasily Melenchuk (CIB) added line thickness presets for borders and fixed a couple of DOCX import hyperlink issues
  21. Gábor Kelemen (NISZ) fixed a regression in Mail Merge email output ranges
  22. Michael Stahl (allotropia) fixed an issue of spelling dialog in Impress messing up text formatting in shapes and made several crash fixes
  23. Regina Henschel fixed an issue with line object rotation in XLSX export
  24. Samuel Mehrbrodt (allotropia) improved the Calc colour filter feature
  25. Áron Budea (Collabora) fixed a crash caused by a performance improvement
  26. Julien Nabet made emoji toolbar button work on Windows, fixed a regression in Calc’s standard filter with gtk3 UI, improved the behaviour of Base’s Direct SQL dialog and fixed the percentage display in the Check for Updates dialog
  27. Jan-Marek Glogowski (allotropia) made internal directory handling and Windows-specific printing related code more robust
  28. Rizal Muttaqin updated Sukapura and Colibre icon themes
  29. Ilhan Yesil made internal hyperlinks in spreadsheets work in the Android app
  30. Tomaž Vajngerl (Collabora) continued working on the new searching and indexing feature
  31. Hossein Nourikhah (TDF) fixed a font size problem in WMF graphics and added preliminary support for Visual Studio 2022 for building on Windows
  32. László Németh (NISZ) improved the coverage of change tracking, adding paragraph style tracking and making table tracking more complete
  33. Stephan Bergmann (Red Hat) made many code and build-related cleanups
  34. Chris Sherlock continued VCL refactoring work
  35. Michael Weghorn made many improvements to Windows and Qt 5 accessibility and added a Qt 6 VCL plugin
  36. Eike Rathke (Red Hat) fixed several Calc regressions related to number formats, date patterns, sorting and filtering. He also improved date pattern recognition robustness and made out-of-bounds dates show an #FMT error
  37. Justin Luth (SIL) improved the DOC/DOCX support for multi-level list attributes in paragraph styles and made Writer table row height optimisation more robust
  38. Mike Kaganski (Collabora) introduced per-process lock directories for Firebird to allow running multiple LibreOffice Base instances with Firebird embedded databases. He also fixed other Firebird issues like crashes, a LIST function issue and path issues. He also made many code cleanups and optimisations
  39. Luboš Luňák (Collabora) improved the backtrace functionality (code debugging), improved the performance of Calc’s COUNTIF function and made many code and build-related cleanups
  40. Andreas Heinisch added support for case-insensitive operations for non-ASCII characters in the VBA Collection object, made it so missing optional parameters in Basic code are handled properly, improved handling of CSV files in UTF-8 with BOM format, made it possible to set cell font colour from VBA macros and improved VBA error messaging
  41. Tünde Tóth (NISZ) fixed handling of password protection in XLSX and DOCX files
  42. Xisco Faulí (TDF) made a couple of dozen additions and improvements to automated tests
  43. Balázs Varga (NISZ) fixed losing images and shapes in charts upon OOXML export and made it possible to save ranges in a single Mail Merge document
  44. Attila Bakos (NISZ) added support for text in grouped shapes
  45. Caolán McNamara (Red Hat) improved robustness of Sidebar minimum widths, fixed issues with fonts in Base table views, content of Base Tablecontrols being invisible in PDF export, Windows spell checking underlines rendered with a black background and continued implementing the new GTK4 backend. He also made many cleanups and crash fixes
  46. Heiko Tietze (TDF) made it so Application colour Field Shading is respected with dark backgrounds, added colour palettes to integrated providing of additions, improved Calc’s Paste Special dialog and made it possible to access Writer table formula editing via context menu
  47. Miklos Vajna (Collabora) added support for ODT import and export of multi-level list paragraph style attributes, improved Writer layout XML dump (debugging feature), added support for linked character styles in Writer (including DOCX support), fixed unwanted shadow blurring in imported PPTX files, fixed image frame anchor type changing upon DOCX export and undo not restoring image anchor position
  48. Noel Grandin (Collabora) made it faster to load large Writer tables, insert large charts and export PDFs, optimised the parallel loading of spreadsheets and made many code cleanups and smaller optimisations

Kudos to Ilmari Lauhakangas for helping to elaborate this list.

Reported Bugs

591 bugs, 67 of which are enhancements, have been reported by 331 people.

Top 10 Reporters

  1. NISZ LibreOffice Team ( 41 )
  2. Telesto ( 38 )
  3. Mike Kaganski ( 18 )
  4. elias estatistics ( 11 )
  5. flywire ( 9 )
  6. Elmar ( 8 )
  7. John ( 8 )
  8. medmedin2014 ( 7 )
  9. Rafael Lima ( 7 )
  10. Luke Kendall ( 6 )

Triaged Bugs

571 bugs have been triaged by 88 people.

Top 10 Triagers

  1. Heiko Tietze ( 52 )
  2. Xisco Faulí ( 52 )
  3. Roman Kuznetsov ( 50 )
  4. Dieter ( 43 )
  5. Timur ( 42 )
  6. Buovjaga ( 39 )
  7. m.a.riosv ( 28 )
  8. Julien Nabet ( 27 )
  9. Mike Kaganski ( 26 )
  10. Telesto ( 16 )

Resolution of resolved bugs

589 bugs have been set to RESOLVED.

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

Fixed Bugs

186 bugs have been fixed by 43 people.

Top 10 Fixers

  1. Caolán McNamara ( 18 )
  2. Eike Rathke ( 8 )
  3. Andreas Heinisch ( 8 )
  4. Mike Kaganski ( 7 )
  5. László Németh ( 7 )
  6. Heiko Tietze ( 6 )
  7. Balazs Varga ( 6 )
  8. Julien Nabet ( 5 )
  9. Noel Grandin ( 5 )
  10. Miklos Vajna ( 5 )

List of critical bugs fixed

  1. tdf#144132 Crash when insert formula object in Writer ( Thanks to Noel Grandin )
  2. tdf#144184 Calc disables header/footer or looses footer content when saves a spreadsheet ( Thanks to Daniel Arato (NISZ) )
  3. tdf#144740 Criteria query (COUNTIF(), MATCH() et al) for numeric values broken considering number formats ( Thanks to Eike Rathke )

List of high severity bugs fixed

  1. tdf#143854 FILESAVE: Empty bullet added when saving from PPT to ODP ( Thanks to Xisco Fauli )
  2. tdf#144106 FILEOPEN: LibreOffice crashes on opening CSV file with “Trim spaces” option enabled ( Thanks to Stephan Bergmann )
  3. tdf#144155 CALC Row operations over 100 times slower in 7.2 compared to 7.1 ( Thanks to Xisco Fauli )
  4. tdf#144209 Result with “Precision as shown” with custom string+General number format becomes 0 ( Thanks to Eike Rathke )
  5. tdf#144249 Deleting 10.000 rows column in a spreadsheet: 15 sec with 4.1| 10 sec up to 300+ sec with 6.2| 130 sec with 7.3 ( Thanks to Luboš Luňák )
  6. tdf#144729 Crash when trying to modify a style (gtk3 only) ( Thanks to Caolán McNamara )

List of crashes fixed

  1. tdf#117842 Firebird: Enabling connection pooling for firebird:sdbc driver crashes Libo when creating connection to data engine ( Thanks to Mike Kaganski )
  2. tdf#140951 Base crashes as soon as I start an ‘Abfrage’ (Windows) ( Thanks to Julien Nabet )
  3. tdf#144106 FILEOPEN: LibreOffice crashes on opening CSV file with “Trim spaces” option enabled ( Thanks to Stephan Bergmann )
  4. tdf#144132 Crash when insert formula object in Writer ( Thanks to Noel Grandin )
  5. tdf#144135 Calc causes repeatable fatal crash when I attempted to sort columns ( Thanks to Eike Rathke )
  6. tdf#144139 LO crashes when trying to print a form ( Thanks to Caolán McNamara )
  7. tdf#144193 CRASH: importing document (gtk3) ( Thanks to Noel Grandin )
  8. tdf#144304 CRASH: Selecting all and cutting in specific document / Inserting section ( Thanks to Aron Budea )
  9. tdf#144340 A query against an embedded FB database fails, and then crashed program on close on Windows ( Thanks to Mike Kaganski )
  10. tdf#144376 Crash when triggering twice “Protected cells can not be modified” (reproducible) ( Thanks to Caolán McNamara )
  11. tdf#144564 CRASH When reloading mail merge documents ( Thanks to Caolán McNamara )
  12. tdf#144598 Crash in: SkRect::round() ( Thanks to Luboš Luňák )
  13. tdf#144624 LibreOffice with “gen” UI backend crashes on Linux of SVG icon theme is default ( Thanks to Aleksei Nikiforov )
  14. tdf#144729 Crash when trying to modify a style (gtk3 only) ( Thanks to Caolán McNamara )

List of performance issues fixed

  1. tdf#125892 Time to export a certain PDF increased with in 10 fold (previously 30 seconds (6.0) now 5 minutes (6.4) ( Thanks to Noel Grandin )
  2. tdf#143268 Slow response in document with many tables after Table tree is expanded in Navigator ( Thanks to Jim Raykowski )
  3. tdf#144155 CALC Row operations over 100 times slower in 7.2 compared to 7.1 ( Thanks to Xisco Fauli )
  4. tdf#144249 Deleting 10.000 rows column in a spreadsheet: 15 sec with 4.1| 10 sec up to 300+ sec with 6.2| 130 sec with 7.3 ( Thanks to Luboš Luňák )

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

  1. tdf#100777 Bind Ctrl+Up/Down to uno:GoToStartStartOfPara/EndOfPara (instead of next/prev. paragraph) ( Thanks to Ross Johnson )
  2. tdf#105689 Emoji toolbar button (bug 100100 emoji.json implementation) not functional on Windows ( Thanks to Julien Nabet )
  3. tdf#35129 Form spin button doesn’t expose ROLE_SPIN_BUTTON to AT-SPI ( Thanks to Michael Weghorn )
  4. tdf#39828 Writer table not calculating correctly if Tracked Changes shown ( Thanks to László Németh )
  5. tdf#45525 TABLES, Problem on adjust selected Row or Column to equal space ( Thanks to Justin Luth )
  6. tdf#50421 UI: “Check for Updates” menu leads to an unusable dialog (shows “%PERCENT%”) ( Thanks to Julien Nabet )
  7. tdf#73139 PRINTING: Content of Tablecontrols isn’t printed, when the whole Fonts are default (black) text color ( Thanks to Caolán McNamara )
  8. tdf#88163 [WMF] FILEOPEN Wrong size of fonts ( Thanks to Hossein )
  9. tdf#89383 Writer: Read-only passwords on OOXML files are not working ( Thanks to Tünde Tóth )
  10. tdf#95378 Navigator does not select/highlight names of images, objects, tables etc that get focus, also not with Content View activated ( Thanks to Jim Raykowski )


69 bugs have been retested by 36 people.

Top 10 testers

  1. Roman Kuznetsov ( 10 )
  2. Buovjaga ( 9 )
  3. Dieter ( 5 )
  4. Telesto ( 4 )
  5. Julien Nabet ( 4 )
  6. Xisco Faulí ( 3 )
  7. Heiko Tietze ( 3 )
  8. Alex Thurgood ( 2 )
  9. Elmar ( 2 )
  10. Samuel Mehrbrodt (allotropia) ( 2 )


154 bugs have been duplicated by 37 people.

Top 10 testers

  1. Timur ( 27 )
  2. Xisco Faulí ( 17 )
  3. Buovjaga ( 16 )
  4. NISZ LibreOffice Team ( 12 )
  5. m.a.riosv ( 10 )
  6. Heiko Tietze ( 7 )
  7. Mike Kaganski ( 7 )
  8. Telesto ( 6 )
  9. Jan-Marek Glogowski ( 5 )
  10. Ming Hua ( 5 )

Verified bug fixes


by x1sc0 at October 07, 2021 08:44 AM

October 04, 2021

LibreOffice Dev Blog

Getting Started (Video Tutorial)

LibreOffice development starts with setting up a development environment. After that, you can do the development in your favorite IDE. In this 80 minutes presentation, you will find everything you need to know to get started with LibreOffice development; from installing dependencies using distribution tools, LODE (LibreOffice Development Environment) or manual setup to compilation itself.
With this tutorial, you can build LibreOffice for yourself. Then we look at some simple tasks from LibreOffice EasyHacks. After that, you can try to get your submission merged into the LibreOffice code by submitting it to gerrit, and doing the fixes requested by the reviewers.

Please accept YouTube cookies to play this 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.

Presentation: Getting Started with LibreOffice Development Hossein Nourikhah

This talk was recorded presented in the LibreOffice Conference 2021 (LibOCon 2021) Slides

LibreOffice Conference 2021

LibreOffice Conference 2021

by Hossein Nourikhah at October 04, 2021 03:06 PM

LibreOffice Development blog has started!

This is the first post of the LibreOffice Development Blog!

To know more about what is going on in LibreOffice, you can refer to the main Document Foundation blog. Also, if you want to learn more about the LibreOffice design, you can refer to the LibreOffice Design Team blog. And now, we have created a new blog, dedicated to the LibreOffice development!

Important Topics

Here is a good place to get more information about ongoing development efforts. Alongside the Document Foundation Wiki and #libreoffice-dev IRC, we will provide development related information here. We will talk about LibreOffice internals, and modules, how to fix bugs, write tests, and many other things! If you want to start LibreOffice development, this is a good place familiarize yourself with LibreOffice code, tools and developers.

Do you know C++, Java, Python, SQL, or other programming languages? If so, you can find useful information about the latest development related news and other up-to-date information here. Although we emphasize using these programming languages,  you may find some areas that you can help and contribute, even without being an expert in programming.

LibreOffice core, a mix of many modules used in LibreOffice development

LibreOffice core, a mix of many modules used in LibreOffice development

We will focus on LibreOffice core development, which contains many modules that are listed in LibreOffice modules documentation. LibreOffice applications like Writer,  Calc, Impress, Draw, Math and Base that any user interact with will be part of our focus. Additionally, there are modules like VCL (UI toolkit for LibreOffice) that normal users may not fully understand. As a developer, you should know a lot about the LibreOffice internals, so we will discuss these modules.

Additionally, we will also talk about git, Gerrit, Jenkins, Bugzilla, compilers, IDEs and many other tools and techniques.

Above all, you can improve your development skills here, so stay tuned for interesting contents soon. We hope to see your name in the list of LibreOffice developers, here!

by Hossein Nourikhah at October 04, 2021 12:33 PM

October 01, 2021

Jean Hollis Weber

Workaround for a bug in Base on macOS

On macOS (but not on Windows or Linux), in versions 7.1.x and 7.2.x of LibreOffice, a bug in Base causes the Memo (LONGVARCHAR) field type to have a dark background, so the contents are not visible. Other field type [date, number, TEXT (VARCHAR), and so on] have a normal white background. When clicked, the black fields turn white and I can type into them, but when I click or Tab to another field, they return to black. When I use a form to enter data, the form fields are normal, but the results in the database itself have the black field background. The database otherwise works as it should.

This behaviour has been reported as Bug 140854. The workaround is to use an older version of LibreOffice, such as 7.0.x, where the bug does not occur. You can find a link to version 7.0.6 near the bottom of the download page.

Fortunately, it is easy to install more than one version of LibreOffice on macOS, so you don’t have to completely give up the latest version if you want to use it for other components. Simply rename the existing version to something else; I usually change “LibreOffice” to “LibreOffice721” or similar. Then install a second version as usual by double-clicking the downloaded DMG file. Both versions will share the same user profile, so it’s easy to switch among them. Note: You can set up separate user profiles (for example, for testing purposes), but that’s beyond the scope of this article; see this wiki page if you want to go there.

by Jean at October 01, 2021 10:53 PM

September 29, 2021

Miklos Vajna

Start of list level support in Writer paragraph styles

Writer now has the start of list level support in Writer paragraph styles. This improves ODT and DOCX compatibility, and it’ll improve the style previews and the UI in the future.

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


A paragraph might have an associated list in Writer and that list can have multiple levels. This is direct formatting. When it comes to paragraph styles, referring to a list was already possible, but defining a custom list level was not.

Loosing this information in Word documents was quite annoying, and it turned out that ODF also has markup for this, just LibreOffice didn’t implement it.

This work is currently done for the document model, scripting API and file filters: style previews & UI still needs finishing.

Results so far

Writer can at the moment preserve list level info from ODT and DOCX files. Here is how a file written by Writer looks like in Word:
Figure 1. Writer exporting a paragraph style with list level info

You can see that the style preview in Word takes the list level into account. Doing the same and applying the list level as part of applying the paragraph style on the Writer UI is still future work.

Thanks to Justin Luth who did the follow-up work to adapt the DOC filter accordingly, and also doing other related fixes.

How is this implemented?

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

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.3).

by Miklos Vajna at September 29, 2021 02:29 PM

September 28, 2021

Florian Effenberger

Happy Birthday, LibreOffice!

Eleven years ago, on 28 September 2010, a new chapter in the history of free office suites started: the creation of the LibreOffice project and the start of The Document Foundation as independent entity. Thanks truly to everyone who made this amazing journey possible. <3 Happy birthday!

(In 2016, I wrote some personal thoughts about this in German.)

Happy Birthday, LibreOffice!

by Florian Effenberger at September 28, 2021 07:05 AM

September 16, 2021


LibreOffice Master Document Fixes

Earlier this year, allotropia software GmbH was awarded a tender to fix a number of problems around the master document feature (Tender to implement master document fixes (#202106-02)) by The Document Foundation (TDF).

We have finished implementing the necessary changes, and all fixes will be available for testing in LibreOffice 7.2.2.

Using master documents is a somewhat hidden, but extremely useful feature of LibreOffice Writer, when producing longer documents (like books, or the help guides the LibreOffice documentation team is maintaining). With it, users can split a larger document into a number of smaller pieces, to work on independently. If this feature sounds interesting to you, the excellent Writer Guide has a chapter about it.

We’ve worked on the following bug reports:

Bug 103612 – Table of Contents never shown in Master Document

It turned out that the problem here was that one of the confusingly many flags that determine whether a document section is hidden was copied erroneously to a different one of these flags when copying a child section of a hidden parent section. We have removed the offending line of code, improved the in-line documentation of these flags in the class declaration, found 2 more places in the code that appeared to check the wrong hidden flag, and added a unit test (so any further changes in this area cannot break this feature again):

Bug 128106 – creating a master document from .odt breaks cross-reference links

Here the problem was that the function that splits the source document into multiple chapter document forgot to copy bookmarks out of the source document. So we took an ambitious approach and changed the function to call CopyWithFlyInFly() instead, which is the same function that is used during copying to the clipboard – and that one happens to copy bookmarks as well, among other things. We also added a unit test:

This fixed retaining references to ordinary bookmarks, but then it turned out that the selection from which the chapter documents are copied hits a corner case in the bookmark copying code for the heading cross-reference bookmarks. This is because their position is exactly at the start of the selection, so they were not copied. So we figured out how to handle this tricky corner case so that the cross-reference bookmarks are copied:

Bug 128106 before: screenshot with broken references
Bug 128106 fixed: screenshot with working references

Bug 142129 – Exported PDF of master document with hidden sections is broken

Unfortunately we were unable to reproduce this bug anymore. Fortunately it turned out that another developer had meanwhile already fixed it (thanks, Sweetshark). We resigned ourselves to at least adding a non-trivial unit test for the bug, which uses VCL’s PDF import features to read the outline of the exported PDF file:

We would like to thank The Document Foundation, and their countless donors, for funding these improvements to LibreOffice!

by mst43 at September 16, 2021 01:00 PM

Chris Sherlock

How to upset someone

 Here is how you upset someone:

  • You write a set of unit tests to test the moving of some files into a better directory and a way better name - say for instance renaming ImplDeviceFontList to PhysicalFontFaceCollection
  • You tell that person that they used the wrong vim modeline, but then you say that you don't know what a modeline is. But that's what you do, and to be sure you do it on all the files you have touched to try to reduce the build churn
  • You order them to add sal/config.h - which is a convention you don't know about - to source files. So you do this. Again, to reduce build churn you do it to all files you touch.
  • You add a header, so you regenerate the pch file. 
  • As you are adding sal/config.h, as so ordered, you fix the include guards and use #pragma once  

A few other things you can do:

  • Advise them to rename a class from PrinterOptions to Options, but then you get blowback because you made that change - on their recommendation. 
  • Tell them they aren't careful with their patches, even though you spend hours and hours ensuring that they are tested and working as best you can. 
  • Tell them, on numerous occasions, that they way that you reorders the VCL headers wasn't correct - then remember you had already asked about this and realised that you said it was OK.  

You do all of these things because that is what you were told to do in the past. It's not exactly easy to do this, as a lot of these things aren't necessarily needed in that patch - but hey, that's what you were told to do. 

Evidently, LO doesn't want unit tests, and the changes I'm making to try to make the codebase easier to read aren't needed. To hell with it. LibreOffice is becoming dominated by a bunch of corporates, and has no place for the enthusiastic amateur. 

Best of luck to LibreOffice!

by Chris Sherlock ( at September 16, 2021 02:33 AM

September 15, 2021


The transition of LibreOffice to ODF 1.3 is finished

Earlier this year, allotropia software GmbH was awarded the Tender to finish transition of LibreOffice to ODF 1.3 (ODF 1.3 delta) (#202010-01) by The Document Foundation (TDF).

The implementation is now finished, has received quite a bit of polishing and testing, and is available for production use in the LibreOffice 7.2 release.

While ODF 1.3 support is widely available across the LibreOffice ecosystem since the beginning of this year, there was a number of improvements now possible, after the ODF TC cleaned up and improved the standard.

We have implemented the following features:

Writer showing various indexes, and the mouse-over tooltip for a hyperlink to a document index entry mark
Writer showing pages with BackgroundFullSize on and off

Previously, the situation in Writer was that some types of background were always covering the entire page, others only within the margins, which required some work on the ODF import for compatibility with existing files (

Impress dialog showing new “Background covers margins” checkbox

Since this feature adds a new checkbox on a dialog, we also added some UITests (

  • Chart: Adding series name to data series label is now possible.
Before: No data labels
After: Data Labels visible

With this feature, you can now show the data series name in the chart on each data label, which makes reading a chart easier and also improves interoperability with Microsoft Excel (

  • Chart: For “Moving average” trend line, the type can now be selected
    • Prior (default)
    • Central
    • Averaged Abscissa
LibreOffice Calc 7.2 showing the trend line dialogue and a moving average of type “Averaged Abscissa”. It is now possible to choose from three types: Prior (the default), Central, and Averaged Abscissa.

This allows to calculate the trend line with different algorithms, and gives more flexibility to the chart creator ( (

As a bonus, this enabled us to fix a very long-standing bug of the text frame/shape duality in Writer not maintaining its invariants ( ( The benefits here is improved stability for a number of important corner-cases.

We would like to thank The Document Foundation, and their countless donors, for funding these improvements to LibreOffice!

by mst43 at September 15, 2021 01:17 PM

September 13, 2021

Tomaž Vajngerl

Document searching and indexing export - Part 3

Milestone 3 - Gluing everything together into a search solution

In the part 1 we looked into indexing XML export, and in the part 2 into rendering a search result as an image. In this part we will glue together both parts with an indexing search engine (Solr) into a full solution for searching and introduce a "proof of concept" application for searching of documents.

Thanks to NLnet Foundation for sponsoring this work.

Solr search platform

Apache Solr is a popular platform for searching and the idea is to use it as our search and indexing engine. First we need to figure out how to put the indexing data from our indexing XML into Solr. Solr uses the concept of documents (not to be confused with a LibreOffice document), which is an entry in the database, which can contain multiple fields. To add documents into the database, we can use a specially structured Solr XML file (many others are supported, like JSON) and simply send it using a HTTP POST request.   

So we need to convert our indexing XML into Solr structure, which is done like this:
  • Each paragraph or object is a Solr document.
  • All the attributes of a paragraph or object is an field of a Solr document.
  • The paragraph text is stored in a "content" field.
  • An additional field is "filename", which is the name of the source (Writer) document.
For example:
    <paragraph index="9" node_type="writer">Lorem ipsum</paragraph>

transforms to:
        <field name="filename">Lorem.odt</field>
        <field name="type">paragraph</field>
        <field name="index">9</field>
        <field name="node_type">writer</field>
        <field name="content">Lorem ipsum</field>

Searching using Solr

Solr has a extensive API for querying/searching, but for our needs we just need a small subset of those. Searching is done by sending a HTTP GET to Solr server. For example with the following URL in browser:


"documents" in the URL is the name of the collection (where we put our index data), "q" parameter is the query string, "content" is the field we want to search in (we put the paragraphs text in "content" field) and "Lorem*" is the expression we want to search for.

Proof of concept web application

Figure 1: Search "proof of concept" web application

The application is written in python for the server side processing and HTTP server and the client side HTML+JavaScript using AngularJS (for data binding, REST services) and Bootstrap (UI). The purpose of the web app is to demonstrate how to implement searching and rendering in other web applications.

The web app (see Figure 1) shows a list of documents in a configurable folder, where each document can be opened in Collabora Online instance. On top there is a edit filed and the "Search" button, with which we can search the documents, and a "Re-Index Documents" button, which triggers re-indexing of all the documents. 
Figure 2: Search "proof of concept" web application - Search Results

After we enter a search expression and click the "Search" button, we get a page with search results, which is a table of the document filename and the rendered image from the document, where in the document the search result has been found. See Figure 2 for an example.
There is a "Clear" button at the bottom, which clears the search results and shows the initial list of documents again.

About - REST and HTTP server

The server has the following services:
  • Provide the HTML and JS documents to the browser, so the web app can be shown
  • GET service "/document" - returns a list of documents
  • POST service "/search" - triggers a query in Solr and returns the result
  • POST service "/reindex" - triggers the re-indexing process
  • POST service "/image" - triggers rendering of an image for the input search result, and returns the image as base64 encoded string

Re-indexing service

Re-indexing glues together the "convert-to" service of the Collabora Online server, to get the indexing XML for a input document, conversion of the indexing XML to Solr supported XML and updating the entries in the Solr server.

Search service

Search service is using the Solr query REST service to search, and transforms the result to a JSON format, that we can use in the web app and is also compatible to use as an input to render a search result.

Image service

Sending a search result and the document to "render-search-result" HTTP POST service on Collabora Online server, the image of the search result is rendered and sent back. For easier use in the web client, the image is converted to base64 string. 

Demo video

Video showing searching in the WebApp:

Video showing re-indexing in the WebApp:

Proof of concept web app source location and relevant commits

The proof of concept web application is located in Collabora Online source tree inside the indexing sub-folder. Please check the README file on how to start it up.

Collabora Online:

Fixes and changes for LibreOffice core:

by Tomaž Vajngerl ( at September 13, 2021 09:10 AM

September 09, 2021

Jean Hollis Weber

Getting Started Guide 7.2 published

Cover of Getting Started Guide LibreOffice 7.2The latest user guide from the LibreOffice documentation team is Getting Started with LibreOffice 7.2, available in free PDF, ODT, or to read in a browser. Visit the Documentation page on the LibreOffice website for links.

Low-cost printed copies are available from

by Jean at September 09, 2021 07:22 AM

September 08, 2021

Chris Sherlock

Separating metafile processing from rendering in OutputDevice

The OutputDevice class is what we use for rendering a whole host of different things, and other classes inherit from it to do their rendering. Notably a little while ago Noel Grandin separated OutputDevice from Window, which is a huge boon for the codebase!

In an attempt to further separate the concerns of OutputDevice, I noticed a long time ago that not only does it do rendering, but it records actions in a metafile. These are two related and yet quite separate things. My goal is to shift out the rendering into a RenderContext class. I have already got a PoC on GitHub, which has already done much of the work, albeit in a messier way (basically it was a test to see if this was even feasible).  

Obviously migrating rendering functionality into its own class is not something to take lightly, so I have been writing smaller patches that test out the code. When I say "small", I really mean this. Currently I am testing out a bunch of code that sets state in OutputDevice, which can be found in the outdevstate topic branch in gerrit. 

Along with test the state functions of OutputDevice, I am also adding some tests to the bitmap functionality of OutputDevice. I recently landed a patch to move GetDownsampledBitmap() out of OutputDevice and into BitmapTools.cxx because it really didn't need to completely rely on OutputDevice. This bit of code will hopefully one day migrate it's way into the VCL backend modules. You can monitor the progress I'm making via the bitmap topic branch in gerrit. 

I have to say that writing tests is not always easy. Often there is no easy way of accessing the functions, especially if they are private, but luckily most of the functions are protected so I can at least write a mock class to expose these functions without having to modify the code.

Currently I have the following topic branches:

by Chris Sherlock ( at September 08, 2021 08:30 AM

September 07, 2021

LibreOffice QA Blog

QA/Dev Report: August 2021

General Activities

  1. LibreOffice 7.2 was released on August 19
  2. Hossein Nourikhah (TDF) published a series of posts explaining how he fixed an interoperability issue. Part 1, Part 2 and Part 3
  3. Alain Romedenne improved the Help content for the ScriptForge library
  4. Rafael Lima created Help pages for Development Tools, Search Commands, wildcards, removing duplicates in Calc, clarified and improved many pages and updated menu item references. He also added buttons for cloning and clearing direct formatting to Draw’s tabbed interface
  5. Olivier Hallot (TDF) updated the intro video for online Help, created a page for Multivariate Regression in Calc and updated many menu item references. He also made several fixes to extended tooltips
  6. Jean-Pierre Ledure worked on the ScriptForge library
  7. Daniel Arato (NISZ) fixed a shape rotation issue with XLSX import
  8. Miklos Vajna (Collabora) fixed the handling of linked background images and the rendering of graphic bullets with linked images, improved Writer’s bibliography feature, made it so list levels in paragraph styles are retained in DOCX files and fixed a shape property value entanglement issue
  9. Noel Grandin (Collabora) continued converting uses of the homegrown osl::Mutex to std::mutex (locks preventing race conditions in threaded code), fixed issues found by Thread Sanitizer (TSan), improved the loading speed of certain XLS files, DOC files with RTL content, DOCX files with massive tables and RTFs with coloured text. He also made complex Logo commands and SVGs with pattern fills render faster and made many code cleanups and smaller optimisations
  10. Attila Bakos (NISZ) fixed an issue with textboxes falling out of shapes in some cases
  11. Arnaud Versini made some code cleanups
  12. Heiko Tietze (TDF) made some accessibility improvements and made the colour of comments bar customisable
  13. Luboš Luňák (Collabora) made the Skia graphics engine integration work on macOS, including Metal acceleration support
  14. Muhammet Kara (Collabora) improved the redaction toolbar
  15. Kevin Suo fixed an issue with embedded fonts in imported PDFs
  16. Michael Warner fixed a problem with LibreOffice not closing when opened through the API
  17. Chris Sherlock continued VCL refactoring work
  18. Gábor Kelemen (NISZ) fixed table of contents heading style issues with DOCX files and added user-friendly names for UNO commands for opening Sidebar decks
  19. Bubli fixed Image toolbar not matching sidebar regarding Area Fill info
  20. Szymon Kłos (Collabora) made many improvements and additions to jsdialog used by Online
  21. Julien Nabet fixed a problem with MySQL/MariaDB data types, fixed a regression causing data loss upon saving to XLS(X) and improved some UI strings
  22. Hossein Nourikhah (TDF) improved developer documentation and made some code cleanups
  23. Tibor Nagy (NISZ) added support for exporting some slideshow settings in PPTX format and fixed a slide titling issue in imported PPTX files
  24. Dennis Francis (Collabora) fixed the display of some newline characters in imported XLSX files
  25. László Németh (NISZ) fixed several issues with change tracking
  26. Balázs Varga (NISZ) added support for handling named ranges in XLSX files and fixed an axis positioning issue with OOXML chart import
  27. Xisco Faulí (TDF) fixed a crash when saving large spreadsheets and added a couple of dozen automated tests
  28. Dante Doménech improved MathML support and made Calc summation code take advantage of AVX512 CPU instruction set extension for increased speed
  29. Vert D improved the template manager UI
  30. Vasily Melenchuk (CIB) made outline changes done via Tools -> Chapter Numbering be tracked by undo/redo, fixed a Writer anchor positioning issue when zooming and improved outline numbering
  31. DaeHyun Sung improved support for Korean number formats
  32. Roman Kuznetsov fixed an issue in the layout of the Windows installer
  33. Mike Kaganski (Collabora) fixed losing charts upon XLSX export, saving two-column setting in shapes to ODS and made many code cleanups and optimisations
  34. Samuel Mehrbrodt (allotropia) improved the support of hyperlinks in textboxes and shapes
  35. Andreas Heinisch fixed issues with return values and optional parameters in Basic, improved the sorting of custom document properties, fixed a layout issue with table control dialog elements and corrected the default width of CSV columns with multiline cells
  36. Michael Meeks (Collabora) fixed a crash related to UI widgets
  37. Tomaž Vajngerl (Collabora) improved Development Tools and Search Commands, continued working on the new searching and indexing feature and made some code cleanups and refactorings
  38. Eike Rathke (Red Hat) added support for Klingon and made several improvements to the handling of language tags and date formats, improved the robustness of Calc’s regex search, added an option ‘Evaluate formulas’ to CSV import and paste, added support for sep= separator setting in CSV import, improved the performance of CSV import preview and page break updates in certain cases, added handling of embedded null-characters in CSV import and fixed a name collision issue with named expressions and symbols in XMLSchema-2
  39. Caolán McNamara (Red Hat) fixed multiple style attributes being written into a single tag in HTML documents, fixed an issue with not being able to close Tip of the Day dialog when Impress Template dialog is also visible, fixed a performance issue with 1000 selected shapes in Draw and continued implementing the new GTK4 backend. He also made many cleanups and crash fixes
  40. Tünde Tóth (NISZ) fixed an issue with Calc’s Database Range dialog closing, if invalid name was inputted
  41. Regina Henschel fixed an issue with incorrect positioning of grouped shapes in DOCX import, fixed many issues with wrap settings in DOCX import, fixed DOCX export of Bezier curves and fixed an issue with messed up polylines in VML import
  42. Justin Luth (SIL) fixed an issue with comment markers affecting spellchecking, fixed an issue with outline level not being inherited from style assigned as Chapter Numbering in DOCX import and fixed issues with unwanted paragraph spacing in DOCX import
  43. Stephan Bergmann (Red Hat) made many code and build-related cleanups
  44. Jan-Marek Glogowski (allotropia) improved the robustness of the kf5 and qt5 UIs
  45. Bayram Çiçek finished the GSoC project “100 Paper Cuts”
  46. Sary Nasser finished the GSoC project “Integrate .ui dialogs with translation tooling/string search webservice to help translators”
  47. Akshit Kushwaha finished the GSoC project “Tests for the VCL graphic backends”
  48. Balázs Sántha finished the GSoC project “Implementing table styles DOCX support”
  49. Panos Korovesis finished the GSoC project “Make SVM (StarView Metafile) format independent of the VCL Metafile + tests of the format”
  50. Anshu Khare finished the GSoC project “Styles Highlighter”
  51. Tushar Kumar Rai finished the GSoC project “Implement Interface for external data source import into Calc”

Kudos to Ilmari Lauhakangas for helping to elaborate this list.

Reported Bugs

544 bugs, 52 of which are enhancements, have been reported by 320 people.

Top 10 Reporters

  1. Telesto ( 35 )
  2. NISZ LibreOffice Team ( 26 )
  3. TorrAB ( 11 )
  4. Regina Henschel ( 11 )
  5. Mike Kaganski ( 10 )
  6. Timur ( 10 )
  7. sophie ( 10 )
  8. Rafael Lima ( 9 )
  9. Robert Großkopf ( 8 )
  10. Colin ( 7 )

Triaged Bugs

698 bugs have been triaged by 96 people.

Top 10 Triagers

  1. Roman Kuznetsov ( 81 )
  2. Heiko Tietze ( 49 )
  3. Jean-Baptiste Faure ( 47 )
  4. Timur ( 44 )
  5. Buovjaga ( 40 )
  6. Julien Nabet ( 31 )
  7. steve ( 22 )
  8. Xisco Faulí ( 22 )
  9. Dieter ( 21 )
  10. Eleonora Govallo ( 20 )

Resolution of resolved bugs

553 bugs have been set to RESOLVED.

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

Fixed Bugs

182 bugs have been fixed by 39 people.

Top 10 Fixers

  1. Caolán McNamara ( 24 )
  2. Eike Rathke ( 12 )
  3. László Németh ( 7 )
  4. Regina Henschel ( 6 )
  5. Andreas Heinisch ( 6 )
  6. Miklos Vajna ( 6 )
  7. Julien Nabet ( 6 )
  8. Vasily Melenchuk ( 5 )
  9. Mike Kaganski ( 5 )
  10. Rafael Lima ( 4 )

List of critical bugs fixed

  1. tdf#143728 Certain presentation crashes Impress after starting slideshow (Win crashes, Linux hangs) ( Thanks to Noel Grandin )
  2. tdf#143896 FILESAVE XLSX 1001+ rows are lost after saving new file ( Thanks to Julien Nabet )
  3. tdf#143940 FILESAVE: add a new line in a large spreadsheet and save causes crash ( Thanks to Xisco Fauli )

List of high severity bugs fixed

  1. tdf#142003 FILEOPEN Tracked changes in .doc file footnotes shift to the right ( Thanks to Caolán McNamara )
  2. tdf#142264 charts lost by calc export to xlsx ( Thanks to Mike Kaganski )
  3. tdf#143023 Forms: Event “When losing focus” in tablecontrol appears when receiving focus ( Thanks to Caolán McNamara )
  4. tdf#143657 Tools → SQL: Command couldn’t be executed. ( Thanks to Caolán McNamara )
  5. tdf#143858 Outline numbering not showing any number, only the prefix/suffix ( Thanks to Vasily Melenchuk )
  6. tdf#143957 Crash when switching transitions (kf5) ( Thanks to Jan-Marek Glogowski )
  7. tdf#143990 Multilevel outline numbers not showing ( Thanks to Vasily Melenchuk )

List of crashes fixed

  1. tdf#143572 Crash clicking Shape 2 Text Frame ( Thanks to Jim Raykowski )
  2. tdf#143577 Crash on image delete with “Show outline-folding buttons” ( Thanks to Jim Raykowski )
  3. tdf#143728 Certain presentation crashes Impress after starting slideshow (Win crashes, Linux hangs) ( Thanks to Noel Grandin )
  4. tdf#143769 Calc crashes if a background for a sketch is selected ( Thanks to Caolán McNamara )
  5. tdf#143843 Crash in: weld::CustomWidgetController::SetPointer(PointerStyle) ( Thanks to Caolán McNamara )
  6. tdf#143940 FILESAVE: add a new line in a large spreadsheet and save causes crash ( Thanks to Xisco Fauli )
  7. tdf#143957 Crash when switching transitions (kf5) ( Thanks to Jan-Marek Glogowski )
  8. tdf#144008 LO crashes when macro tries to start a form document in Base (kf5 only) ( Thanks to Jan-Marek Glogowski )
  9. tdf#144022 Calc crashed in Copy & Paste Special ( Thanks to Mike Kaganski )
  10. tdf#144105 LO crashes during mail merge wizard when an address block is modified ( Thanks to Caolán McNamara )

List of performance issues fixed

  1. tdf#101083 Insert SVG with too small scaling causes LibreOffice to hang, consuming 100% cpu ( Thanks to Noel Grandin )
  2. tdf#131546 FILEOPEN DOCX: File takes longer to open in master ( Thanks to Balazs Santha )
  3. tdf#139220 Regression: Selection of elements is very slow ( Thanks to Caolán McNamara )
  4. tdf#143499 Slow response in document with many headings ( Thanks to Caolán McNamara )
  5. tdf#143852 FILEOPEN: files with images take longer to open ( Thanks to Mike Kaganski )

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

  1. tdf#100480 Improve the description of the “Match case” check box in the Find and Replace dialog ( Thanks to Rafael Lima )
  2. tdf#101083 Insert SVG with too small scaling causes LibreOffice to hang, consuming 100% cpu ( Thanks to Noel Grandin )
  3. tdf#102846 CSV import: very long loop in preview’s field detection ( Thanks to Eike Rathke )
  4. tdf#103612 ToC is never shown in Master Document if it is in ODT in a section with a hide condition ( Thanks to Michael Stahl )
  5. tdf#112057 Clarify what Cell Edit Mode in Calc means ( Thanks to Rafael Lima )
  6. tdf#50447 Text formatting changes (in docx-file) are not shown with track changes (and not recorded by the way) ( Thanks to László Németh )
  7. tdf#59820 FILEOPEN: default csv column width is wrong with multiline cells ( Thanks to Andreas Heinisch )
  8. tdf#64086 Fileopen: named cell ranges from MSO are not imported in charts (because not supported in LO) ( Thanks to Balazs Varga )
  9. tdf#64703 PRINTING: Problem with page break when autofilter is on ( Thanks to Attila Szűcs )
  10. tdf#66250 Use a Named range as data source for Chart ( Thanks to Balazs Varga )
  11. tdf#88205 Adapt uses of css::uno::Sequence to use initializer_list ctor ( Thanks to Zeynep Yavuz )
  12. tdf#91519 Jump of document canvas view to the top of the comment disrupts editing of long comments ( Thanks to Bayram Çiçek )
  13. tdf#96561 Fails to import CSV file created with CsvHelper ( Thanks to Eike Rathke )
  14. tdf#99932 Anchor “to Character”: Anchor changes position to the document when zoom-in or out ( Thanks to Vasily Melenchuk )


96 bugs have been retested by 35 people.

Top 10 testers

  1. Buovjaga ( 13 )
  2. Roman Kuznetsov ( 12 )
  3. Timur ( 6 )
  4. Aron Budea ( 6 )
  5. Telesto ( 6

by x1sc0 at September 07, 2021 11:08 AM

August 30, 2021

Miklos Vajna

Unshare shape properties for the same type before insertion in Impress

Shape properties were shared by shape type (e.g. shared between group shapes) before insertion into a document model in Impress. This is now fixed: the property names and types are still shared to help performance, but their values are no longer shared. This helps matching the user expectation that separate opened documents don’t share information with each other.

First, thanks to our partner SUSE for working with Collabora to make this possible.


I was working on a testcase for tdf#132696 when I noticed that the existing CppunitTest_oox_drawingml testsuite runs fine before my changes, also a newly added testGroupShapeSmartArt testcase runs fine in isolation, but if I run the whole testsuite, then it breaks.

Further investigation revealed that in case testGroupShapeSmartArt is executed first, then testTdf131082 fails. This means:

  • the first document is opened

  • the first document is closed

  • the second document is opened

  • the second document is saved

And at this point information from the first document is leaked to the second document, even if the first document was already closed by the time we performed the save. It turns out the root cause was i#114206 (reported in 2010), i.e. group shapes shared their property values till they got inserted to the document model. The first document import did not consume pending SmartArt properties on a to-be-inserted group shape, the second import was looking for pending properties, found them. And then the second document’s save wrote those pending properties to the file, leading to this unexpected leak.

Here is how the first document looks like, containing the blue rectangles (a SmartArt):
Figure 1. First document with a SmartArt

Here is how the second document looks like, without a SmartArt:
Figure 2. Second document after loading, no SmartArt

And here is how the second document looks, after saving to PPTX and reloading:
Figure 3. Second document after reloading, with a SmartArt

Results so far

The fix is to split out part of SvxItemPropertySet to a separate class, so that we can keep sharing SvxItemPropertySet between multiple instances of the same shape type (describing the name and type of the various properties), while introducing a new SvxItemPropertySetUsrAnys that is specific to each not-yet-inserted shape. This way each pending shape is independent, and in case they are not inserted to the document model later, that results in no side-effects.

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.3).

by Miklos Vajna at August 30, 2021 06:51 AM

Jean Hollis Weber

Writer Guide 7.2 published

Cover of Writer Guide 7.2The latest user guide from the LibreOffice documentation team is Writer Guide 7.2, available in free PDF, ODT, or to read in a browser. Visit the Documentation page on the LibreOffice website for links.

Low-cost printed copies are available from

by Jean at August 30, 2021 04:59 AM

August 25, 2021

Luboš Luňák

Skia on Mac

 So, current LibreOffice git version now has support for drawing based on Skia also for the Mac. Both Raster and Metal (the Mac GPU framework). Below is the obligatory screenshot, and here is the hey-it-can-be-faster video.

by llunak ( at August 25, 2021 12:44 PM


allotropia and Collabora announce partnership

Hamburg, Germany – Cambridge, United Kingdom – August 25, 2021Collabora, the driving force behind creating ‘Collabora Online’, and allotropia software, an IT service company that specializes in free and open source technologies (FLOSS), are proud to announce a partnership around Collabora Online.

We are excited to have allotropia as our partner,” said Michael Meeks, General Manager at Collabora Productivity. “We love their work, enjoy contributing together, and see this partnership as a natural extension of our long term collaboration.”

We are delighted to be able to offer Collabora Online as part of our services around the larger FLOSS office workplace solutions” said Thorsten Behrens, founder and CEO at allotropia. “With the rich editing and collaboration features in Collabora Online, we can deliver great LibreOffice Technology based value to our customers.”

allotropia provides innovative open source solutions for the digital collaboration age. Our customers value sovereignty over their data, and love the way Open Source software enables them to innovate with agency. Adding Collabora Online to our portfolio is the ideal addition, with highly compatible migration paths into hybrid and fully web-based product development.

Collabora Online is the powerful LibreOffice-based online office that supports all major documents, spreadsheets and presentation file formats, which can all be easily integrated in many infrastructures and solutions. Key features are collaborative editing and excellent office file formatting support. Collabora Online is excellent for enterprises that need a powerful office suite in the Cloud, or on-premises, that protects their privacy and allows them to keep full control of their sensitive corporate data. Collabora Online enables Hosting and Cloud businesses to include document viewing and collaborative editing functionality into their service offerings.
Collabora Online can also be used in combination with our PC based office suites: Collabora Office, as well as natively on iOS, Android and ChromeOS. This gives organizations flexibility to choose where to run their Office workloads, without being forced to use third party servers.

For more information about this press release, please contact or

About allotropia:

The company allotropia software GmbH provides services, consulting and products around LibreOffice and related opensource projects. Founded in 2020 with 5 long-time developers of the project, its stated mission is to make LibreOffice shine – in as many different shapes and forms as necessary to serve modern needs towards office productivity software.
Allotropia software GmbH is headquartered in Hamburg, Germany at the birthplace of the OpenOffice/LibreOffice code and project. For more information, visit or follow @allotropiaEN on Twitter.

About Collabora Productivity:
Collabora Productivity created Collabora Online and is the driving force behind putting LibreOffice in the Cloud. Collabora provides a wide range of products, as well as consulting services for enterprises and governments. Powered by the largest team of certified LibreOffice engineers in the world, Collabora is a leading contributor to the LibreOffice codebase and community. Collabora Office for Desktop and Collabora Online provide a business-hardened office suite with long-term support. Collabora’s multi-platform policy is completed with Collabora Office for iOS and Android. Collabora Productivity is a division of Collabora, the global software consultancy dedicated to providing benefits of Open Source to the commercial world, specializing in mobile, automotive and consumer electronics industries. For more information, visit or follow @CollaboraOffice on Twitter.

by allotropiasoft at August 25, 2021 12:00 PM

August 23, 2021

Bayram Çiçek

Final Report - GSoC - 100 Paper Cuts

About project

100 Paper Cuts project aims for improving user interface, implementing enhancement requests and solving most-annoying issues on the UX side of LibreOffice. 100 Paper Cuts is a list of bugs and enhancement requests relating to LibreOffice’s user experience:


Main goal was to solve as many bugs as I can, but at least 5 bugs, during GSoC.

My Work

  • In ‘Format > Page Style… > Area’ Tab, Mouseover effect added to the palettes on Color, Gradient, Bitmap, Pattern and Hatch sections.

  • Fixed opposite cropping issue on flipped images in Writer

  • In Writer, 3 issues about comment section fixed:

    • comment section scrolls to top of its view when clicking inside a comment view.

    • clicking inside a comment view, scrolls the view to old cursor location automatically (if old cursor out of the visible area)

    • comment section scrolls automatically to the old selected text (if it’s out of visible area) when clicking inside the Writer canvas view

  • In “Properties sidebar > Cell Appearance”, Calc shows preview of the selected cell borders. This feature also added for diagonal borders.

  • Calc: added diagonal borders in Toolbar>Borders

    • added diagonal left, diagonal right border and criss-cross border icon to Borders tab
    • added diagonal left and diagonal right borders feature
    • implemented removing diagonal borders when set “no border”
    • added criss-cross line feature
    • added a unit test for diagonal borders



Whats left to do or can be done?

  • tdf#51665: (WIP) Support diagonal borders in Writer-Tables
    • This bug has 2 step: a) implement diagonal borders, b) draw them.
    • I’m workink on this bug for ~4 weeks and it is Work in Progress. Writer-Tables doesn’t have diagonal borders feature. I implemented RES_BOX_TLBR attribute and added SID_ATTR_BORDER_DIAG_TLBR for now. After that, we should try to draw them. I’m trying to draw diagonal LEFT border first. If we can draw that, then it becomes easy to apply all the changes to diagonal RIGHT border.
    • If we can add diagonal borders feature, we can also implement criss-cross border feature.
    • In addition to drawing diagonal borders, we should also be able to change their color and style. To apply these 3 things (drawing, color, style), we have to change a lot of things in the codebase. Therefore I think tdf#51665 can be a standalone GSoC project itself :)

  • tdf#84099 - Calc can’t handle very high rows
    • Scrolling in spreadsheets on Calc is designed to snap to rows. Therefore, this makes it hard to work with spreadsheets with large row heights. This annoying issue is not only specific for vertical scroll but also affects horizontal scroll. If we can add smooth scroll feature, it will likely solve the height issue on both rows and columns.

  • tdf#90253 - Drawing a textbox in Impress doesn’t retain its height
    • And, this is another bug that I want to work on it.


  • total bugs : 8
  • fixed : 5
  • WIP : 1
  • worked on but couldn’t fix : 2

I learned lots of things even from the bugs that I couldn’t fix. At least, I informed the LibreOffice community about my research and shared the code pointers by commenting on the bug page. Therefore, someone who will work on the bugs that I commented, can easily see the code pointers and my works on it.


I’m very happy that we all reached the end of GSoC. During that time, I know that I had a responsibility for doing everything that I can. Therefore I worked hard, tried to get familiar with the LibreOffice community and worked on as many bugs as I can.

I learned a lot of things during the GSoC. Although GSoC is finished, I will definitely continue to contribute to LibreOffice. I am really happy to be a part of the LibreOffice community and GSoC.


I’m really thankful to LibreOffice and Google for providing us this such a great opportunity which helped me gain this amazing experience!

I always tried to be active on IRC #libreoffice-dev channel, and I want to thank for everybody who helped me about my questions.

And most importantly, greatly thankful to Muhammet Kara and Heiko Tietze which were my mentors throughout the GSoC period. They always guided me everything about my questions. Thank you so much for your guidance, code reviews, time and everything.

Thanks to everyone in the LibreOffice community for their help, I learned a lot from you :)

All weekly GSoC reports

Useful links:

by Bayram Çiçek at August 23, 2021 06:03 AM

August 17, 2021

Tomaž Vajngerl

Document searching and indexing export - Part 2

Milestone 2 - Rendering an image of the search result

In the part 1, I talked about the functionality added to LibreOffice to create indexing XML file from the document, which can be used to feed into a search indexing engine. After we search, we expect a search hit will contain the added internal node information from the indexing XML file. The next step is that with the help of that information, we now render that part of the document into an image.

Thanks to NLnet Foundation for sponsoring this work.

Figure 1: Example of a rectangle for a search string

Calculating the result rectangle

To render an image, we first need to get the area of the document, where the search hit is located. This is implemented in the SearchResultLocator class, which takes SearchIndexData that contains the internal model index of the hit location (object and paragraph). The algorithm then finds the location of the paragraph in the document model, and then it determines, what the rectangle of the paragraph is.

The search hit can span over multiple paragraphs, so we need to handle multiple hit locations. With that we get multiple rectangles, which need to be combine into the final rectangle (union of all rectangles). See figure 1 for an example.

Rendering the image from the rectangle in LOKit

This part is implemented for the LOKit API, which can already handle rendering part of the document with an existing API, using rendering of the tiles.

The new function added to the API is:
bool renderSearchResult(const char* pSearchResult, unsigned char** pBitmapBuffer, int* pWidth, int* pHeight, size_t* pByteSize);

The method renders an image for the search result. The input is the pSearchResult (XML), and pBitmapBufferpWidthpHeightpByteSize are output parameters.

If the command succeeded, the function returns true, the pBitmapBuffer contains the raw image, pWidth and pHeight contain the width and height of the image in pixels, and pByteSize the byte size of the image. 

What happens internally in the function is, that the content of pSearchResult is parsed with a XML parser, so that a SearchIndexData can be created and send to SearchResultLocator to get the rectangle of the search hit area. A call to doc_paintTile then renders the part of the document enclosed by the rectangle to the input pBitmapBuffer.  

See desktop/source/lib/init.cxx - function "doc_renderSearchResult"

Collabora Online service "render-search-result"

To actually be useful, we need to provide the functionality in a form that can be "glued" together with the search provider and indexer to show the rendered image of the search hit from the document. For this we have implemented a service in the Collabora Online. The service is a just a HTTP POST request/response, where the in the request we send the document and the search result to the service, and the response is the image.

What the service does is:
  • load the document
  • run the "renderSearchResult" with the search result XML
  • interpret the bitmap and encode into the PNG format
  • return the PNG image
As an example how the service can be used, see in Collabora Online repository: test/integration-http-server.cpp - test method HTTPServerTest::testRenderSearchResult 

The following commits are implementing this milestone 2 functionality:


by Tomaž Vajngerl ( at August 17, 2021 08:09 AM

August 15, 2021

Bayram Çiçek

Week #10 - GSoC Weekly Report - 100 Paper Cuts

GSoC progress for week #10.

Calc: Border preview doesn’t show the diagonal borders in Cell Appearance section

In (Sidebar Tab) Properties > Cell Appearance, Calc always shows preview of the selected cell borders.

For example; if LEFT border set in a cell, the preview shows LEFT border (as expected). But this feature doesn’t show the preview of diagonal borders. When we set (e.g.)diagonal RIGHT border in a cell, the preview doesn’t update itself to show diagonal RIGHT border.

Steps to Reproduce:

  1. open Calc and select a cell
  2. (in Sidebar) go to “Properties > Cell Appearance”
  3. select Diagonal Up (and/or Down) border

Actual Results: Preview doesn’t show diagonal borders

Expected Results: Diagonal borders should be shown in the preview (as other borders).

Code pointers:

Technical Details

Line preview is drawn in:

void CellAppearancePropertyPanel::UpdateCellBorder(bool bTop, bool bBot, bool bLeft, bool bRight,
                                                   bool bVer, bool bHor)
	/* ... */

        pVirDev->DrawLine( aTL,aBL );
        pVirDev->DrawLine( aTR,aBR );
        pVirDev->DrawLine( aTL,aTR );
        pVirDev->DrawLine( aBL,aBR );
        pVirDev->DrawLine( aVT,aVB );


DrawLine() method draws the lines. Here, lines for diagonal borders are missing. We need to add DrawLine() method for them and update the parameters of the UpdateCellBorder(...) function:

void CellAppearancePropertyPanel::UpdateCellBorder(bool bTop, bool bBot, bool bLeft, bool bRight,
                                                   bool bVer, bool bHor,
                                                   bool bTLBR, bool bBLTR)

    /* ... */

        pVirDev->DrawLine( aTL,aBR );
        pVirDev->DrawLine( aBL,aTR );

    /* ... */








Created a new commit for tdf#51665: (WIP) Support diagonal borders in Writer-Tables


  • implement RES_BOX_TLBR attribute


  • improve case SID_ATTR_BORDER_DIAG_TLBR (tabsh.cxx)
  • add diagonal left condition in ndtbl1.cxx
  • try to draw diagonal left border:
    • drawing in a cell seems complicated.
    • currently it draw TLBR line on the document layout, not in current cell.
    • we have to draw TLBR line in current cell. (needs improvement)

IMHO, I think tdf#51665 can be a standalone GSoC project itself. In addition to drawing diagonal borders, we should also be able to change their color and style. To apply these 3 things (drawing, color, style), we have to change a lot of things in the codebase and we need more time.

Summary of week #10

  • Fixed: tdf#143890 - Border preview doesn’t show the diagonal borders
  • Worked on diagonal borders in Writer-Tables, and published 2 new patchsets


Next Week TO-DO

  • Write “Final Report” blog post
  • Make last changes on patches that on gerrit
  • try to draw diagonal borders for Writer-Tables.

by Bayram Çiçek at August 15, 2021 10:01 PM

August 12, 2021

LibreOffice QA Blog

QA/Dev Report: July 2021

General Activities

  1. LibreOffice 7.1.5 was released on July, 22
  2. The Bug Hunting Session for LibreOffice 7.2 RC1 took place on July, 19
  3. Roman Kuznetsov is teaching a group of russian volunteers called ‘the hamsters QA Team” how to triage bugs in LibreOffice
  4. Alain Romedenne and Rafael Lima improved the Help content for the ScriptForge library – many Python examples were added. Rafael also improved the Advanced Filter and NUMBERVALUE help pages.
  5. Steve Fanning improved some Calc function help pages
  6. Olivier Hallot (TDF) updated the help page for Impress object transformations
  7. Bai Xiaochun replaced uses of homegrown math functions with standard library ones
  8. Vasily Melenchuk (CIB) fixed incorrect formatting being applied to Writer text fields while editing them and added delimiting to chapter fields
  9. Dante Doménech created a new version of the OpenSymbol font
  10. Jeff Huang cleaned out the unused code for collecting usage data
  11. Tomaž Vajngerl (Collabora) improved the Sidebar preview of theme colour sets by adding name display, continued working on the new searching and indexing feature and made some code cleanups and refactorings
  12. Luboš Luňák (Collabora) took the first step in getting Skia graphics engine integration to work on macOS and fixed an issue with image sizes in exported HTML
  13. Armin Le Grand (allotropia) improved the kf5 UI
  14. Daniel Arato (NISZ) added a “Same content on first page” option to Calc’s Header/Footer dialog
  15. Bubli added support for applying pattern fills from the toolbar and fixed unwanted jumping in Impress when applying animations
  16. Tibor Nagy (NISZ) added support for long slide names and presentation timing attribute in PPTX import and “Start from“ setting in PPTX export
  17. Szymon Kłos (Collabora) made many improvements and additions to jsdialog used by Online
  18. Deb Barkley-Yeung made the font features button show as disabled in the Character formatting dialog, if the font does not have features
  19. Arnaud Versini made some improvements to threaded code
  20. Rizal Muttaqin added icons for diagonal border line
  21. Michael Meeks (Collabora) fixed a couple of UI-related crashes
  22. Gábor Kelemen (NISZ) improved the find-unneeded-includes script used for optimising LibreOffice code
  23. Justin Luth (SIL) fixed an issue with numbering levels in imported DOC files, adapted the code for unique naming of custom hatches and gradients to Writer code, made a big rework for handling outline numbering in imported DOCX files and fixed a text alignment issue in RTF import
  24. Jun Nogata improved Japanese font support and added a PowerPoint-compatible screen size preset for Impress
  25. Kevin Suo fixed problems with importing bold and italic font properties from PDF files
  26. Hochwasser fixed a crash in Impress remote control
  27. Gülşah Köse (Collabora) added support for handling embedded OLE objects in PPTX import
  28. Christian Lohmaier (TDF) added support for new Google Drive authentication and also fixed OneDrive authentication
  29. Stephan Bergmann (Red Hat) made many code and build-related cleanups and fixed an old data corruption issue in UNO C++ bridge
  30. Todor Balabanov did some refactoring of the NLP solver code
  31. Hossein Nourikhah (TDF) improved some C++ SDK examples, ported C++/Java DocumentLoader SDK example to Python, fixed an issue with DOC/DOCX exported lines, fixed a regression causing Tabbed UI not working in Impress and Draw and added extra checks into SmartArt import tests
  32. Michael Weghorn made many improvements to the accessibility of the qt5 UI and also fixed a Windows accessibility issue of not announcing spinbox values
  33. Björn Michaelsen made some internal improvements to Writer code
  34. Gökçe Kuler made it so bullets are not automatically added to empty lines in bulleted lists in Impress – a preview is shown instead
  35. Baltasar made it so Basic’s Round function follows half-to-even rounding and wrote a unit test for it
  36. Mert Tumer (Collabora) made spellchecking wavy lines cached to improve performance
  37. Gizem Özgün fixed truncation of long class names in UNO object inspector
  38. Vert D made it so built-in categories in the Template Manager show deleting as disabled
  39. Tor Lillqvist (Collabora) made a build fix for iOS
  40. Heiko Tietze (TDF) clarified the AutoCorrect option to replace dashes, fixed “Get more dictionaries online“ not opening Extension dialog, made border style selection dropdown adapt to dark theme, made the infobar for “missing hyphenation data“ more user-friendly and made it so indices are not spellchecked
  41. DaeHyun Sung fixed Korean line breaking rules, numbering and date acceptance patterns
  42. Andrzej Hunt made many internal improvements to Impress Remote
  43. Mike Kaganski (Collabora) added DOC import support for fixed date/time fields, fixed DOCX importing of AM/PM time values, fixed unwanted bullet in PPTX WordArt after roundtrip, fixed some crashes and memory leaks and made many code cleanups
  44. Xisco Faulí (TDF) improved the Basic macro automated test suite and added many new tests to it. He also added several UI and unit tests for other areas.
  45. Michael Stahl (allotropia) fixed a window focus issue affecting Eclipse RCP applications on Windows and made it so unused page background images are removed from imported ODF files
  46. Regina Henschel fixed DOCX import of “Outside only“ wrap option, a positioning issue of child elements in group upon DOCX export, an issue with the distance of an image to text in DOCX import and improved DOCX import/export of contour wrap
  47. Bartosz Kosiorek made several improvements to EMF+ graphics support
  48. Eike Rathke (Red Hat) made a big rework to how Base handles date formatting, fixed an issue with Calc date acceptance patterns for Japanese and Chinese locales, fixed an XLSX roundtrip issue with booleans, added handling for Microsoft’s non-standard use of x-none language tag, added functionality to export all Calc sheets to CSV from the command line and made it so whitespace characters including LF and CR are preserved in Calc formula expressions
  49. Attila Szűcs and Tibor Nagy (NISZ) fixed DOCX import of negative page margins, zeroing of huge page sizes in imported DOCX files and fixed printing page breaks after hiding rows
  50. Jan-Marek Glogowski (allotropia) improved the qt5 UI
  51. László Németh (NISZ) added support for tracking changes in images and tables in imported DOCX files and improved removing personal info of comments and changes in DOCX export
  52. Attila Bakos (NISZ) fixed corrupt shape anchoring in text in DOCX export
  53. Jean-Pierre Ledure worked on the ScriptForge library
  54. Sarper Akdemir (Collabora) worked on PPTX header/footer field support
  55. Andreas Heinisch made Navigator tooltips show without URL encoding, made it so gallery item list accessed from Bullets and Numbering dialog only shows the filename, improved the implementations of Basic text search functions, made HTML tables in the Link to External Data Source list in order of their appearance and increased the precision of single-precision variables in Basic debugger
  56. Samuel Mehrbrodt (allotropia) made some file dialogs remember their last directory and added support for hyperlinks on shapes in Writer
  57. Tünde Tóth (NISZ) fixed several XLSX autofilter issues and an XLSX export hyperlink issue
  58. Noel Grandin (Collabora) made PDF exporting of very large spreadsheets much faster, improved the performance of formatting many comments at once, started converting uses of the homegrown osl::Mutex to std::mutex (locks preventing race conditions in threaded code), made it possible to use Thread Sanitizer (TSan) against the codebase, implemented logging access violations on Windows build boxes in order to get more useful feedback of issues and made many code cleanups and optimisations
  59. Caolán McNamara continued implementing the new GTK4 backend, fixed a memory use issue when selecting a shape in the gtk3 UI and improved the user experience of inputting hex colours. He also made many cleanups and crash fixes
  60. Julien Nabet updated HarfBuzz to 2.8.2 and fixed several regression and crashes
  61. Miklos Vajna (Collabora) made XLSX export support button form controls, fixed handling of named ranges referring to PathMissing sheets in imported XLSX files, improved the bibliography database UI and improved XHTML import of object elements containing images. He also made many code cleanups
  62. Bayram Çiçek worked on the GSoC project “100 Paper Cuts”. You can follow his work here
  63. Shubham Jain worked on the GSoC project “Write missing unit tests”
  64. Sary Nasser worked on the GSoC project “Integrate .ui dialogs with translation tooling/string search webservice to help translators”
  65. Akshit Kushwaha worked on the GSoC project “Tests for the VCL graphic backends”, adding support for viewing test results in the UI and storing results in a zip file
  66. Balázs Sántha worked on the GSoC project “Implementing table styles DOCX support”, fixing missing styles after copying & pasting, disappearing page breaks and redoing row insertions
  67. Panos Korovesis worked on the GSoC project “Make SVM (StarView Metafile) format independent of the VCL Metafile + tests of the format”, creating an SvmWriter class
  68. Anshu Khare worked on the GSoC project “Styles Highlighter”, adding a StyleList control
  69. Tushar Kumar Rai worked on the GSoC project “Implement Interface for external data source import into Calc”, completing his original project goal and adding a Find and Replace Transformation

Kudos to Ilmari Lauhakangas for helping to elaborate this list.

Reported Bugs

497 bugs, 65 of which are enhancements, have been reported by 276 people.

Top 10 Reporters

  1. Telesto ( 57 )
  2. NISZ LibreOffice Team ( 25 )
  3. Mike Kaganski ( 15 )
  4. Regina Henschel ( 13 )
  5. sophie ( 10 )
  6. R. Green ( 9 )
  7. Xisco Faulí ( 9 )
  8. Robert Großkopf ( 8 )
  9. Rafael Lima ( 7 )
  10. stragu ( 6 )

Triaged Bugs

804 bugs have been triaged by 88 people.

Top 10 Triagers

  1. Buovjaga ( 202 )
  2. Xisco Faulí ( 88 )
  3. Heiko Tietze ( 39 )
  4. Julien Nabet ( 38 )
  5. Roman Kuznetsov ( 37 )
  6. Timur ( 34 )
  7. Dieter ( 29 )
  8. V Stuart Foote ( 23 )
  9. Telesto ( 22 )
  10. BogdanB ( 21 )

Resolution of resolved bugs

571 bugs have been set to RESOLVED.

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

Fixed Bugs

199 bugs have been fixed by 47 people.

Top 10 Fixers

  1. Julien Nabet ( 12 )
  2. Andreas Heinisch ( 10 )
  3. Caolán McNamara ( 9 )
  4. László Németh ( 8 )
  5. Heiko Tietze ( 7 )
  6. Eike Rathke ( 7 )
  7. Tünde Tóth ( 7 )
  8. Mike Kaganski ( 6 )
  9. Justin Luth ( 6 )
  10. Regina Henschel ( 5 )

List of critical bugs fixed

  1. tdf#140506 REGRESSION Setting to repeat heading in writer tables no longer works ( Thanks to Bjoern Michaelsen )
  2. tdf#143398 When I click to add a single sheet. It makes automatically two sheets. ( Thanks to Caolán McNamara )
  3. tdf#143400 Query with most functions could not be created in GUI ( Thanks to Julien Nabet )

List of high severity bugs fixed

  1. tdf#139426 Update of Contents is freezing LibreOffice ( Thanks to Armin Le Grand (Allotropia) )
  2. tdf#142235 FILESAVE PPTX Textbox vertical top align becomes middle in PP ( Thanks to Attila Bakos (NISZ) )
  3. tdf#142923 Deleting comment in Writer leaves visual artifact behind ( Thanks to Noel Grandin )
  4. tdf#143291 Selecting the None slide transition has no effect ( Thanks to Caolán McNamara )
  5. tdf#143399 FILEOPEN DOCX Writer 7.2 doesn’t import Word endnotes ( Thanks to László Németh )
  6. tdf#143412 CRASH: converting images ( steps in comment 12 ) ( Thanks to Noel Grandin )
  7. tdf#59323 Impress conversion to PPTX doesn’t save (header and footer) fields – with sample or steps in Comment 7 ( Thanks to Sarper Akdemir )

List of crashes fixed

  1. tdf#119312 Remote control of impress; Crash in: sdext::presenter::PresenterSlideShowView::LateInit() ( Thanks to Hochwasser )
  2. tdf#143081 Basic Replace() function crashes LO ( Thanks to Julien Nabet )
  3. tdf#143125 EDITING Crash when closing Custom Slide Shows dialog ( Thanks to Tibor Nagy )
  4. tdf#143146 Crash by click on properties symbol for calc data in writer ( Thanks to Caolán McNamara )
  5. tdf#143149 Crash in: vcl::Window::GetParentWithLOKNotifier() ( Thanks to Caolán McNamara )
  6. tdf#143153 Editing Crash when grouping Text (Fit to Frame) and object ( Thanks to Caolán McNamara )
  7. tdf#143320 Crash at paste/undo paste again (swlo!BigPtrArray::Index2Block+0xc8) ( Thanks to Noel Grandin )
  8. tdf#143342 Crash when using “Search Command” feature ( Thanks to Julien Nabet )
  9. tdf#143355 crash with .uno:FontWork ( Thanks to Julien Nabet )
  10. tdf#143412 CRASH: converting images ( steps in comment 12 ) ( Thanks to Noel Grandin

by x1sc0 at August 12, 2021 08:50 AM

August 11, 2021

Roman Kuznetsov

What did Hamsters team do for last 20 days as LibreOffice QA?

As I wrote before, the Hamsters QA team is trying to decrease a number of unconfirmed bug reports in LibreOffice's Bugzilla. There are 20 persons in the team.

Let's see what they did for last 20 days:

1. They learned about LibreOffice

2. They know about QA process in our project now

3. They triaged around 200 bug reports

4. They confirmed around 100 bug reports

Next step as I see it is a getting knowledge about regression analize and doing bisect for bug reports with bibisectRequest keyword.

by Roman Kuznetsov ( at August 11, 2021 08:16 PM

August 10, 2021

Marius Popa Adrian

Rust Firebird Client updated to v0.17.0 with a few features and enhancements.

Rust Firebird Client updated to v0.17.0 with a few features and enhancements.New Features: - create_database() added CreateDatabase with embedded client #112 - Add support for create_database() method, aka isc_create_database #115Bug Fixes:- rsfbclient always recompiled #113 , #114

by Popa Adrian Marius ( at August 10, 2021 07:16 PM

August 08, 2021

Bayram Çiçek

Week #9 - GSoC Weekly Report - 100 Paper Cuts

GSoC progress for week #9.

Diagonal borders now accessible from “Table Toolbar > Borders” tab in Calc

Calc has diagonal borders feature in Format > Cells... > Borders tab and (Sidebar Tab) Properties > Cell Appearance. However, this feature wasn’t exist in “Table Toolbar > Borders” tab. With commit, Calc can draw diagonal left and diagonal right borders from table toolbar. \o/

This commit had “(WIP) Support diagonal borders in Writer-Tables” name before, and I sent 3-4 patchsets for Writer-diagonal-borders, but I made it Calc-specific and changed the title as “Calc: made diagonal borders accessible in Toolbar>Borders”. The reason of this change is: Writer and Calc use the same Border tab in Table toolbar (svx/source/tbxctrls/tbcontrl.cxx). Therefore I will leave the commit as Calc-specific and will submit a new commit just for Writer-specific. But first, I want to write UItest for Calc-diagonal-borders next week.

Additionaly I want to work on - UI scroll problem: Cell with dimensions exceeding screen dimensions impossible to work with.

Code pointers:

Summary of week #9

Next Week TO-DO

by Bayram Çiçek at August 08, 2021 08:34 AM