The Document Foundation Planet


September 29, 2020

Michael Meeks

2020-09-29 Tuesday

September 29, 2020 03:02 PM

Official TDF Blog

openSUSE + LibreOffice Conference 2020 Diamond Sponsors

Collabora, SUSE and The Document Foundation are Diamond Sponsors for openSUSE + LibreOffice Conference 2020. The joint openSUSE + LibreOffice Conference 2020 will run from October 15 – 17, and will be fully virtual. LibreOffice and openSUSE advocates, supporters and contributors are invited to register now and take part! Although different from past conferences, the event will be rich in contents and will also provide the opportunity of open discussions in specific virtual spaces.

Collabora is one of the major contributors to the LibreOffice project: 37% of commits to the LibreOffice source code in the last two years were made by the company, which provides different products based on the LibreOffice Technology and targeted to enterprises such as a desktop and an online version with Long Term Support, plus mobile applications for Android and iOS.

Other conference sponsors are .riessapplications, datto, fedora and Tuxedo Computers, plus Admin and Linux Magazine as media partners.

Do not forget to register. We look forward to meeting you at the openSUSE + LibreOffice Conference 2020.

by Italo Vignoli at September 29, 2020 09:44 AM

September 28, 2020

Michael Meeks

2020-09-28 Monday

  • Mail chew, weekly planning calls, sync with Cor & Guy, built & checked contribution stats.

September 28, 2020 09:00 PM

September 27, 2020

Official TDF Blog

LibreOffice 10th Anniversary

Today is LibreOffice 10th Anniversary: it is a significant achievement for the project, and a date to remember for all community members.

We have created a video based on pictures of community members and a few events, in two versions: a long one, for blogs and websites, and a short version for social media.

Video LibreOffice Community 10th Anniversary (7 minutes): YouTube – PeerTube

Video LibreOffice 10th Anniversary Social Media (2 minutes): YouTubePeerTube

For Twitter, there is a MP4 version of the short video available on Nextcloud: Video x Twitter.

by Italo Vignoli at September 27, 2020 09:59 PM

Michael Meeks

2020-09-27 Sunday

  • All Saints, played violin & bass for communion. Back for lunch - watched Criminal Minds, and read bedtime stories to the babes.

September 27, 2020 09:00 PM

September 26, 2020

Michael Meeks

2020-09-26 Saturday

  • Lots of work at the house, cut-in ethernet box with E. Cut-in bathroom light box & cabling with M. Sortedout A/C isolator fixing with N. and started on hatch, dinner, finished the hatch surround with H.
  • Bit of LOTR with the babes, mail chew; blog pull-up; got some PCC minutes into some order.

September 26, 2020 09:00 PM

September 25, 2020

Michael Meeks

2020-09-25 Friday

  • Mail chew; TDF board call, customer call, built stats worked on admin variously. Plugged away at wiring, watched LOTR.

September 25, 2020 09:00 PM

Official TDF Blog

Get involved – Meet the TDF team

Joining a free and open source software project, such as LibreOffice, is a great way to build your skills, gain experience for future career options, meet new people – and have fun!

But sometimes, joining a large and well-established project can be a bit daunting at the start. So here we’ll introduce you to the small team at The Document Foundation, the non-profit entity behind LibreOffice. Most team members oversee certain sub-projects in the LibreOffice community – click on their names to learn more in interviews…

(Also, thanks to Stephan Ficht who recently joined TDF as our Administrative Assistant.)

Note that this is just the team at The Document Foundation; the LibreOffice community is made up of hundreds of people! Most of the new features are implemented by developers in our ecosystem and volunteers.

Now that you know who we are, click here to get involved and join our projects!

by Mike Saunders at September 25, 2020 09:25 AM

September 24, 2020

Official TDF Blog

Documentation Team Status

By Dave Barton

In recent times, the very small LibreOffice Documentation Team has been making real progress in revising and updating the user guides:

Release 6.4

Release 7.0

Calc Guide Published Work in progress
Base Guide Published Work in progress
Draw Guide Published Work in progress
Impress Guide Skipped Work in progress
Math Guide Published Awaiting volunteer contributors
Writer Guide Published Awaiting volunteer contributors
Getting Started Guide Published Awaiting volunteer contributors

While this progress in shortened documentation development time is fairly good, it can be substantially improved by having more contributors on the team.

It would be terrific if all contributors were a skilled technical writers, but in reality anyone with a reasonable command of the English language and an eye for detail can make a valuable contribution. No contributor is expected to rewrite entire guide books, although some of our most experienced, long term contributors do exactly that. In fact nothing is expected or demanded of any contributor, other than to let other members of the team know what they what they have chosen to work on.

In some cases, that might be to update a chapter of an existing guide, or reviewing the work of another team member. Reviewing can take the form of proof reading, or researching the accuracy of the guide information in relation to the software’s actual operation. By identifying yourself as a Docs Team contributor does not mean you are making any permanent or long term commitment – many contributors come and go over long periods according to the demands of their “real” life.

It can be seen in the documentation status above there are at least three guides where the input of new contributors would be very welcome. If you are interested in contributing these guides you can see the team guidelines here:

Or to get a wider view of the Documentation Team activities visit this page: where you will also find information about maintaining the LibreOffice Help pages and the documentation wiki.

If you have any questions you are welcome to post them to:  or you can also join our Telegram group for documentation at

The team also gather together in our open to all bi-weekly on-line meeting: see: for dates and times.

Join us! Happy documenting!

by Olivier Hallot at September 24, 2020 12:56 PM

September 22, 2020

Marius Popa Adrian

Firebird driver for Python 3– release 0.8.0

The driver is no longer beta, and is now considered as stable for Firebird 3.0 (support for Firebird 4 is still evolving till final release). Documentation is now complete.ChangeLog:Documentation, both in code and separate (especially Usage Guide).Added support for new FB4 data types in ARRAY fields.Refactoring in driver hooks.New Cursor.call_procedure() method.Refactoring and fixes in Server and

by Popa Adrian Marius ( at September 22, 2020 06:54 AM

September 21, 2020

Marius Popa Adrian

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

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

by Popa Adrian Marius ( at September 21, 2020 06:58 PM

September 20, 2020

Björn Michaelsen

The great filter of open source projects

This is how you make yourself vanish into nothing
— 24 frames, Something More Than Free, Jason Isbell and the 400 unit

So, with the recent layoffs at Mozilla — among other things — a bit of discussion on the sustainability of open source projects has been reignited. There was a wide range of takes: from “FOSS is dead” (no) to “we need to re-decentralize the internet” (yes). I could not quite help putting forth opinions on the matter myself and did so on a short twitter thread. Fundamentally though, the opinions expressed on this matter seem to almost talk past each other — and I think the reasons for this might be found in history of open source(1).

users are contributors

In the beginning, pretty much all open source projects had an almost complete overlap of users and contributors. Or at least potential contributors. E.g. the original GNU projects pretty much solved the problems of their own contributors and even most of those that where not contributors (yet) where non the less in the majority able to contribute to all parts of them. You can also see it in the original announcement of Linux as

“just a hobby, won’t be big and professional like gnu”

and while Linux grew way beyond that, there are still indications of this being true today when the main (and only) collaboration tool of the project, the LKML, was down for an extended time in 2018, because a mail server in a cabinet at someones home was not booting through after an power outage and the person to kick it was on vacation. The Linux kernel project was still self-hosting its infrastructure in 2018.

Another — later — project, that I am assuming to have been quite resilient and which I am assuming will continue to be quite resilient is gentoo linux: By requiring users to compile all software themselves, this distribution makes their users either give up on their installs or gets them at least halfway to be packagers (and for a distribution, packagers are contributors) themselves. Also, by not having to deal with binaries, gentoo reduces its infrastructure needs to a minimum. And even while there are some signs of downsizing at gentoo, I am hopeful that the flexibility mentioned above makes gentoo more sustainable and self-reliant than others for quite some time to come.

users are not all contributors anymore

In the 2000-2010 decade, especially in the second half, a lot of open source projects joined the choir were only a minority of users were contributors too. For many, the majority of users were not even possible contributors across the project. For a few, contribution was even implicitly limited to a closed circle. This gave rise to the perception that something like an “open source product” exists — especially by users. Here are some examples:

projectcomplementcontributors goal
Mozillawebprevent Microsoft from monopolizing the web, later generalized
OpenOffice.orgenterprise productivity
Androidweb/appsprevent Apple from monopolizing the web, app and smartphone market
Chromewebprotect a cloud, an advertising business and a search engine
Ubuntu desktopmanychanged over time, my guesses: initially, make launchpad what github is today, then complement the Ubuntu phone, then cloud offerings, but now something new maybe up

Of course, no such thing as an “open source product” exists and all of the above are variations of Strategy Letter V, which — being from 2002 — was already old by the time most of those were started:

Smart companies try to commoditize their products’ complements.

All of the above projects, commoditized their complements and this allowed users, who were not contributors to still benefit from the work of those who were as these contributors were interested in protecting the complement. With technology moving to the web and the cloud you can see this pattern repeating there in a few examples:

projectcomplementcontributors goal
reactfacebookensure all browser stay compatible with own use by making the framework widely used
istiocloud hostingraising the barrier to entry for microservice hosting (embrace and extend style)

the great filter of open source

So, what does this have to do with the layoffs at Mozilla and the current struggles at other open source projects? Well, the complements from strategy letter V that might motivate contributors to work on projects beyond their own needs exist at a given point in time, but … panta rhei, and this gives different outlooks for projects depending on how broad the complements are that it is serving:

Ultimately, open source projects provide a commodity. If their infrastructure needs are limited and their users also contributing they should be quite resilient (see e.g. gentoo). If they have many non-contributing users but have multiple complementing products, they will likely do well too.

However, having non-contributing users and only one complement might just be the Great Filter for open source projects: Once this complement is vanishing, so will the project — at least for non-contributing users. The remaining contributors — those that work without the need for a product, a complement, a business or users — will not feel that too much. But the non-contributing users will, as they wont be relevant at all anymore when the project downsizes itself to serving its contributing hobbyists alone.

conclusions and unrequested advice

So, at least for Mozilla and LibreOffice, I have some opinions and unrequested advice. In general, I see an urgent need for open source projects to establish a shared understanding among contributors what currently is a commodity — and thus is governed by the project and its institutions — and what are the complements of the commodity. For Mozilla and LibreOffice this might mean:

  • Felix von Leitner recently suggested at that the German government could make earmarked donations to Mozilla so protect digital sovereignty: “Die Bundesregierung könnte der Mozilla-Stiftung zweckgebundene Spenden zukommen lassen.”
    While I agree with both the goal and concerns over spending the money on a “cyber agency” might dilute results, earmarked donations are a also a very painful device to use: The administrative friction between a donor and the foundation will imply a huge overhead.
    Mozillas projects might be better off opening themselves to outside contributions and diversifying its contributions(2). And if there is indeed money in the German or European government to spend on strategic goals like digital sovereignty, tendering those to capable local providers with a crystal clear purpose will have much better outcomes. Both FSFE and OSBA might contribute starting points and help find suitable partners.
    All of this might seem very local, but likely it is not: Mozilla should look globally into diversifying the contributions to their projects, even if it might reduce their control as sole maintainer of them.
  • LibreOffice needs to decide where it really wants to provide a commodity and what its complements are: Both in the dimension of online collaboration vs. desktop and enterprise users vs. home users. The space claimed for commodity should be broad enough to motivate non-commercial contributors and to allow to grow into new complements when they appear, but overextending will leave too little room for complements, products and ultimately users. When the space allocated to be a commodity is overextended, the project will downsize to be a project solely serving its most active contributors(3) leaving aside non-contributing users.
    I see this responsibility at the board of the Document Foundation and there alone. It is elected for this as representatives of the community of contributors for exactly decisions like this.

Maybe not all of the dream is lost.

(1) Note that I am no expert on the history of open source nor do I know the internal workings and politics of all the open source projects, so there is unfortunately a lot of conjecture over the limited body of my own experience.

(2) This is where I might disagree with Michael Meeks’ take on that.

(3) The Document Foundation receives significant donations from individuals compared to other open source projects. Michael Meeks has some numbers on the value of developer contributions in kind to compare them to and put them in perspective.

by bmichaelsen at September 20, 2020 08:49 PM

September 18, 2020

Roman Kuznetsov

The best LibreOffice extensions. Yaru icon theme

Paul Kepinski made a new nice LibreOffice icon theme. Its name is Yaru. He wanted include it into LibreOffice source code, but then he made an extension and now you can download it by the link. Just enjoy!

by Roman Kuznetsov ( at September 18, 2020 05:18 PM

Official TDF Blog

Spread the word – add LibreOffice to your email signature!

Love LibreOffice? Want to let more people know about it? An effective (and easy) way is to add a mention of the software to your email signature. This is the piece of text that’s automatically added to emails that you send, and typically includes some information about your job, or other contact details.

Many people also use their email signatures (aka “sigs”) to spread the word about causes they support – such as free and open source software projects. So, you could use your signature to raise awareness about LibreOffice, for instance! When people read your emails, if they also check out the signature, they’ll learn something. For instance, you could add:

LibreOffice – free and open source office suite:
Respects your privacy, and gives you back control over your data

What exactly you add is up to you, and depends on what you want to focus on. For instance, if you exchange emails with a lot of Microsoft Office users, you may want to mention that LibreOffice can work with .doc(x), .xls(x) files etc. Or perhaps you’re more focused on the ethics of free (as in freedom) software – and want to talk about the benefits to society it brings.

In any case, it’s best to keep it short (a couple of lines), and include a link so that readers can get more information. If the main LibreOffice website is too long for your sig, you can use as an alternative.

So, good luck, and if you have suggestions/ideas for signatures, post them in the comments below! Here are also some quick instructions for changing signatures in a few email clients and services…

Mozilla Thunderbird

Go to Tools > Account Settings in the menu, then choose your account, and scroll down to the “Signature text” box.

Google Mail (web view)

Click the Settings cog in the top-right, then “See all settings”. Under the General tab, scroll down to Signature, then click “Create new”. Give it a name and text, and underneath assign it to new emails in the “Signature defaults” option. Finally, scroll down and click “Save Changes” at the bottom of the page.

Google Mail (mobile app)

Tap the three-line “hamburger” menu in the top-left and go to Settings. Tap your account, then scroll down to “Mobile signature”.


Click Settings at the top, and go to Account in the left-hand menu. Under Identity, you’ll see a box to enter signature text.

Outlook (web view)

At the top of the browser window there is a “gear wheel” icon to access the settings. Click on this and a panel opens on the right-hand side. At the bottom of this panel is a link labelled “View All Outlook settings” – click on this. A new panel consisting of three columns appears. Click on the second item in the second column, labelled “Compose and reply”. This opens one further panel including the option to set the signature text, the font attributes and to insert a graphic if required.

Apple Mail

Go to Mail > Settings, then click the “Signatures” tab. In the middle row, choose the signature text to edit, and edit the text shown in the right row. You may also add a new signature text using the “+” button at the bottom of the middle row. If you did so then choose the mail account at the left row and select the new signature texts name at the bottom of the window. So you may toggle easily between different signatures.

Got instructions for other email clients/services? Let us know in the comments – thanks!

by Mike Saunders at September 18, 2020 08:43 AM

September 16, 2020

Miklos Vajna

Locale-independent Writer templates

The problem

Users create new documents in various ways. When they do so in Online or via Windows Explorer’s context menu (New → …) then actual templates are not involved in the process, technically. What happens instead is that there is a plain empty Writer (or Calc, Impress) document that gets copied. The reason for this is that by the time the document gets created, the WOPI-like protocol or Windows Explorer doesn’t have a running soffice process to create a document instance from a template: it’ll just copy a file.

With that aside, users expect that when they create new documents, the language of their new document matches the locale of Writer itself. This conflicts with the idea that languages in the documents are explicit, so if a German users writes a piece of German text, the spellcheck passes and the next user is English, then the text should remain German, not introducing new spellcheck errors.

Figure 1. Locale-indepentent Writer template

The solution to this problem is what Mike and Ezinne implemented: make these "templates" minimal, so they don’t refer to any language. Then Calc or Impress will fill the language from the locale of the soffice process and it’ll be part of the document on the first save. This solves the problem of multi-language templates while it does not break the spellcheck use-case.

Andras copied the same templates to various Online integrations to have the same problem solved in that use-case as well.

Writer was still problematic, though. sw: default to UI locale when language is missing now fixes this. You can see on the above screenshot that the stock soffice.odt was opened with a Hungarian locale and the status bar shows that the document language is Hungarian, not the confusing "multiple languages", as before.

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 is a major contributor to LibreOffice and all of this work will be available in TDF’s next release too (7.1).

by Miklos Vajna at September 16, 2020 08:46 AM

September 10, 2020

Eric Bright

A dollar per month contribution, and why LibreOffice needs it

By Eric Bright We need your help here at The Document Foundation. LibreOffice needs your support. In this article, I am going to ask you for help. I am going to ask you for a commitment to a monthly donation to The Document Foundation. If I am successful, at the end you will be convinced … Continue reading A dollar per month contribution, and why LibreOffice needs it

by Eric at September 10, 2020 07:29 PM

LibreOffice QA Blog

QA/Dev Report: August 2020

General Activities

  1. LibreOffice 7.0.0 was announced on August, 5
  2. LibreOffice 6.4.6 was announced on August, 13
  3. Olivier Hallot (TDF) updated the help for inserting layers and added a page for Comparison Options
  4. Stephan Bergmann (Red Hat) made renovations in the internal handling of strings. He also made many cleanups as well as build and test fixes
  5. Noel Grandin (Collabora) made many code cleanups, increased the use of the fast XML parser and fixed some memory leaks
  6. Justin Luth (Collabora/SIL) fixed issues with odd/even footers in exported DOCX, section breaks in exported DOCX, missing images in DOC/DOCX/RTF export and placement on images in table cells in imported DOCX
  7. Caolán McNamara (Red Hat) improved the behaviour of Area fill tab and fixed some very old issues with Writer table properties dialog. He also continued the crucial user interface backend work and did many cleanups and crash fixes
  8. Szabolcs Tóth and Regényi Balázs (NISZ) fixed some issues with imported and exported OOXML shapes and objects
  9. Dániel Arató (NISZ) fixed line spacing with inline pictures in imported DOCX
  10. Vasily Melenchuk (CIB) added support for paragraph mark formatting with character style for DOCX export
  11. Luboš Luňák (Collabora) continued polishing the Skia graphics engine integration. More information about the new feature can be found here
  12. Balázs Varga (NISZ) fixed some OOXML chart import issues
  13. Michael Warner improved DOCX table formula import
  14. Andreas Kainz improved Sidebar element alignment and positioning
  15. Samuel Mehrbrodt (CIB) fixed a chart text distortion issue seen on Windows
  16. Tünde Tóth (NISZ) fixed some issues with OOXML charts
  17. Attila Bakos (NISZ) fixed DOCX issues with page breaks, small capital hyphenation, text box overlapping and OLE object backgrounds
  18. Tor Lillqvist (Collabora) worked on the iOS app and did code cleanups
  19. Tibor Nagy (NISZ) fixed DOCX import/export issues with shape alignment and frames
  20. László Németh (NISZ) added Writer table functions ABS, COUNT, PRODUCT, SIGN for Word interoperability
  21. Rizal Muttaqin made many improvements in the icon themes
  22. Miklos Vajna (Collabora) has been working on improving smartart support
  23. Eike Rathke (Red Hat) improved support for arrays and matrices in Calc functions
  24. Julien Nabet improved the error handling of text file insert in Writer and fixed several crashes
  25. Attila Szűcs and Tibor Nagy (NISZ) fixed issues with XLSX headers and page numbers as well as DOCX frame widths. They also improved Calc autofilter behaviour
  26. Michael Stahl (CIB) continued improving change tracking and anchoring
  27. Samuel Thibault fixed an issue with text in an imported EPS graphic
  28. Tomoyuki Kubota fixed a sorting issue in Calc with Japanese Kanji
  29. Thorsten Behrens (CIB) made it so inserting from file in Writer does not overwrite the default style
  30. Maxim Monastirsky made many UI and icon handling related improvements
  31. Xisco Faulí (TDF) made several additions and fixes to unit tests. He also added git pre-commit hook that check the minimal gtk3 version remains 3.18, so users using that version don’t have crashes.
  32. Mike Kaganski (Collabora) fixed many regressions, improved internal graphics handling and made code cleanups
  33. Sarper Akdemir completed his GSoC project “Add Impress shape animations that use a real physics engine”
  34. Ahmed ElShreif completed his GSoC project “Extending the UITest framework”
  35. Ahmad Ganzouri completed his GSoC project “Blurry Shadows”
  36. Shivam Kumar Singh completed his GSoC project “Styles Inspector”
  37. Aditya Sahu completed his GSoC project “Move the gallery code to use ZIP files”
  38. Yusuf Keten completed his GSoC project “Additions – Tight integration of extensions!”

Reported Bugs

978 bugs, 83 of which are enhancements, have been reported by 458 people.

Top 10 Reporters

  1. Telesto ( 251 )
  2. NISZ LibreOffice Team ( 31 )
  3. andreas_k ( 19 )
  4. R. Green ( 16 )
  5. sawakaze ( 16 )
  6. Karl-Heinz Arkenau ( 15 )
  7. Rafael Lima ( 9 )
  8. Regina Henschel ( 8 )
  9. Mike Kaganski ( 8 )
  10. Lyndon Brown ( 8 )

Triaged Bugs

772 bugs have been triaged by 108 people.

Top 10 Triagers

  1. Buovjaga ( 127 )
  2. Xisco Faulí ( 110 )
  3. Julien Nabet ( 48 )
  4. Dieter ( 47 )
  5. Telesto ( 43 )
  6. Heiko Tietze ( 36 )
  7. BogdanB ( 33 )
  8. Roman Kuznetsov ( 31 )
  9. Aron Budea ( 23 )
  10. Mike Kaganski ( 22 )

Resolution of resolved bugs

630 bugs have been set to RESOLVED.

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

Fixed Bugs

221 bugs have been fixed by 44 people.

Top 10 Fixers

  1. Caolán McNamara ( 38 )
  2. László Németh ( 14 )
  3. Mike Kaganski ( 12 )
  4. Michael Stahl ( 10 )
  5. Rizal Muttaqin ( 9 )
  6. Justin Luth ( 7 )
  7. Shivam Kumar Singh ( 7 )
  8. Miklos Vajna ( 6 )
  9. Balazs Varga ( 6 )
  10. Tünde Tóth ( 5 )

List of critical bugs fixed

  1. tdf#124470 Table settings and borders are not saved if checked “Embed fonts” and “Only embed fonts that are used” ( Thanks to Mike Kaganski )
  2. tdf#135495 Crash when switching UI to Notebookbar variant ( Thanks to Caolán McNamara )

List of high severity bugs fixed

  1. tdf#130707 FILEOPEN: Writer document “Read Error. Format error discovered in the file in sub-document content.xml at 2,68950(row,col).” ( Thanks to Miklos Vajna )
  2. tdf#132892 Drag and drop to the left removes formatting ( Thanks to Caolán McNamara )
  3. tdf#134439 Page Break: editing “Text flow > Breaks” gives differing results depending on where the cursor is situated ( Thanks to Caolán McNamara )
  4. tdf#135313 Crash on opening the tight integration dialog ( Thanks to Yusuf Keten )
  5. tdf#136143 Regression Err:448 in Optional arguments ( Thanks to Andreas Heinisch )

List of crashes fixed

  1. tdf#129542 CRASH: Setting anchor for a formcontrol to character of pageheader leads to crash ( Thanks to Caolán McNamara )
  2. tdf#132160 Crash in swlo!SwRedlineData::SetSeqNo ( Thanks to Michael Stahl )
  3. tdf#132940 Crash mergedlo!vcl::Region::operator= (with really specific steps) ( Thanks to Noel Grandin )
  4. tdf#134847 Crash:select masterslide on inserted presentation from Writer ( Thanks to Jim Raykowski )
  5. tdf#135001 Crash delete/undo an resize shape ( Thanks to Michael Stahl )
  6. tdf#135018 CRASH: Track Changes: Accepting All Changes ( Thanks to Michael Stahl )
  7. tdf#135098 Writer crashes when merging horizontally cells in a table (GTK3) ( Thanks to Caolán McNamara )
  8. tdf#135313 Crash on opening the tight integration dialog ( Thanks to Yusuf Keten )
  9. tdf#135412 CRASH: Undoing paste of section with flys ( Thanks to Michael Stahl )
  10. tdf#135432 Crash when opening an ODT document written in Japanese/Chinese (Android viewer) ( Thanks to Michael Weghorn )
  11. tdf#135442 LO crashes when About Libreoffice is clicked ( Thanks to Caolán McNamara )
  12. tdf#135457 CRASH in a BASIC macro ( Thanks to Michael Stahl )
  13. tdf#135488 Crash double clicking Fonts in the Design sidebar (experimental) ( Thanks to Caolán McNamara )
  14. tdf#135491 Crash on opening redact with experimental settings enabled and style inspector tab selected ( Thanks to Shivam Kumar Singh )
  15. tdf#135495 Crash when switching UI to Notebookbar variant ( Thanks to Caolán McNamara )
  16. tdf#135528 CRASH running a macro (that changes text) from IDE, when StylesInspector is running ( Thanks to Shivam Kumar Singh )
  17. tdf#135568 Crash when opening the 3D View option for a chart. ( Thanks to Caolán McNamara )
  18. tdf#135603 CRASH: Renaming item in customize treewiew ( Thanks to Caolán McNamara )
  19. tdf#135639 Crash inspecting an array after Redim Statement with option VBASupport 1 ( Thanks to Mike Kaganski )
  20. tdf#135693 Crash opening table properties for embedded table ( Thanks to Caolán McNamara )
  21. tdf#135711 Crash saving a document with columns and image anchored to page to DOCX (since 7.1) ( Thanks to Attila Bakos )
  22. tdf#135755 Crash:right click to Manage Changes List on side bar ( Thanks to Julien Nabet )
  23. tdf#135942 crashtesting failure on export to docx ( Thanks to Mike Kaganski )
  24. tdf#136107 crash on export of selection ( Thanks to Julien Nabet )
  25. tdf#136127 Crash: Add Protected PDF file on Photo Album ( Thanks to Julien Nabet )
  26. tdf#136133 LibreOffice crash with GetInvolved and Donate infobar ( Thanks to Julien Nabet )
  27. tdf#136162 [UI] GtkMenuItem causes crash when accessible-description is used (for extended tips) ( Thanks to Caolán McNamara )

List of performance issues fixed

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

  1. tdf#58518 FILEOPEN: Missing Error Message, if you Try to Insert a Picture with “Insert > File…“ ( Thanks to Julien Nabet )
  2. tdf#77794 FILEOPEN: DOCX – incorrect placement of image inside a cell when position option “Layout in table cell” is set ( Thanks to Justin Luth )
  3. tdf#97618 FILEOPEN drawing object (flow chart shapes) distorted in DOCX because of drawing canvas ( Thanks to Regényi Balázs )


91 bugs have been retested by 27 people.

Top 10 testers

  1. Buovjaga ( 12 )
  2. Telesto ( 12 )
  3. Dieter ( 9 )
  4. Julien Nabet ( 8 )
  5. Timur ( 6 )
  6. Thomas Lendo ( 5 )
  7. Thomas Lendo QA ( 4 )
  8. Heiko Tietze ( 4 )
  9. Roman Kuznetsov ( 4 )
  10. mwtjunkmail ( 4 )


136 bugs have been duplicated by 36 people.

Top 10 testers

  1. Telesto ( 19 )
  2. Buovjaga ( 14 )
  3. Mike Kaganski ( 14 )
  4. Xisco Faulí ( 12 )
  5. Timur ( 9 )
  6. NISZ LibreOffice Team ( 7 )
  7. Julien Nabet ( 7 )
  8. V Stuart Foote ( 6 )
  9. Thomas Lendo ( 4 )
  10. Maxim Monastirsky ( 4 )

Verified bug fixes

80 bugs have been verified by 18 people.

Top 10 Verifiers

  1. Xisco Faulí ( 34 )
  2. BogdanB ( 16 )
  3. Dieter ( 4 )
  4. Roman Kuznetsov ( 4 )
  5. Thorsten Behrens (CIB) ( 3 )
  6. Julien Nabet ( 3 )
  7. baffclan ( 3 )
  8. Buovjaga ( 2 )
  9. Telesto ( 2 )
  10. Wolfgang Jäger ( 1 )

Categorized Bugs

759 bugs have been categorized with a metabug by 39 people.

Top 10 Categorizers

  1. Thomas Lendo QA ( 264 )
  2. Roman Kuznetsov ( 157 )
  3. Dieter ( 53 )
  4. NISZ LibreOffice Team ( 41 )
  5. Thomas Lendo ( 35 )
  6. Telesto ( 33 )
  7. Buovjaga ( 32 )
  8. Aron Budea ( 28 )
  9. V Stuart Foote ( 15 )
  10. andreas_k ( 12 )

Regression Bugs

150 bugs have been set as regressions by 19 people.

Top 10

  1. Telesto ( 80 )
  2. Xisco Faulí ( 24 )
  3. Buovjaga ( 11 )
  4. BogdanB ( 7 )
  5. Roman Kuznetsov ( 5 )
  6. Mike Kaganski ( 4 )
  7. Yotam Benshalom ( 3 )
  8. Robert Großkopf ( 3 )
  9. raal ( 2 )
  10. Terrence Enger ( 2 )

Bisected Bugs

86 bugs have been bisected by 10 people.

Top 10 Bisecters

  1. Xisco Faulí ( 28 )
  2. raal ( 14 )
  3. Telesto ( 14 )
  4. Buovjaga ( 12 )
  5. Aron Budea ( 6 )
  6. Attila Baraksó (NISZ) ( 5 )
  7. Terrence Enger ( 3 )
  8. Justin L ( 2 )
  9. Mike Kaganski ( 1 )
  10. Roman Kuznetsov ( 1 )

Evolution of Unconfirmed Bugs

Check the current list of unconfirmed bugs here

Evolution of Open Regressions

Check the current list of open regressions here

Evolution of Open bibisectRequests

Check the current list of open bibisectrequests here

Evolution of Highest Priority Bugs

Check the current list of highest priority bugs here

Evolution of High Priority Bugs

Check the current list of high priority bugs here

Thank you all for making Libreoffice rock!
Join us and help to keep LibreOffice super reliable!
Check the Get Involved page out now!

by x1sc0 at September 10, 2020 10:48 AM

September 09, 2020

Eric Bright

I don’t “need” LibreOffice

By Eric Bright I don’t need LibreOffice. I WANT LibreOffice. I am not exactly sure if anyone really “needs” LibreOffice as a product. LO is more an idea, an ideal, than it is a product. For one thing we have had exactly zero customer since the time of OpenOffice all the way to today. No … Continue reading I don’t “need” LibreOffice

by Eric Bright at September 09, 2020 09:26 PM

Marius Popa Adrian

Rust Firebird Client updated with Firebird wire protocol implemented

Rust Firebird Client updated with Firebird wire protocol implemented in pure Rust and ARM support

by Popa Adrian Marius ( at September 09, 2020 03:54 PM

September 05, 2020

Eric Bright

LibreOffice – Designed by Committee

By Eric Bright This is a post I wished I never had to write. LibreOffice has a lot of issues with its public image, marketing strategies, management, long-term vision, major code contributors, volunteer programmers, and code quality, in case you haven’t noticed by now. I will try to explain a few of those here. Word … Continue reading LibreOffice – Designed by Committee

by Eric Bright at September 05, 2020 11:16 PM

Marius Popa Adrian

New Firebird driver for Python – release 0.7.0

New Firebird driver for Python – release 0.7.0. This version provides support for new Firebird 4 data types: TIME/TIMESTAMP WITH TIMEZONE, DECFLOAT and extended DECIMAL/NUMERIC via internal INT128 storage.

by Popa Adrian Marius ( at September 05, 2020 10:44 AM

September 04, 2020

Roman Kuznetsov

The best LibreOffice extensions. Barcode

Possibly you know that you can insert a QR-code in your LibreOffice document using a main menu Insert->Object->QR-code. But, unfortunately, you still can't insert a barcode.

And there is a solution for you now! This is a Barcode extension.

 Bildschirmfoto von 2020 09 03 11 01 21

You should download it by link above and install it into your LibreOffice using Tools->Extension manager. Then you can use it using a main menu Insert->Object->Barcode. There are many options in the dialog. So, enjoy!

by Roman Kuznetsov ( at September 04, 2020 02:15 PM

LibreOffice QA Blog

Investing in bug reports pays off

Document compatibility between office suites is a common concern for LibreOffice users. People take sample documents, expecting a pixel-perfect similarity with other office applications and rightly so. While we cover most aspects of formats outside the OpenDocument Format specification, LibreOffice’s native format, there are pieces that have not been implemented yet (for example smooth shadows, which have been implemented recently and will be available in LibreOffice 7.1). Of course we sometimes fail as well, like any other software producer. Microsoft’s “transitional” formats often include undocumented or obscure content that is hard for other office suites to parse.

One enormous advantage of open source software is that you can talk more or less directly to the developers. All bug reports and enhancement requests are taken seriously and will receive immediate response unlike what happens when you complain about issues to companies without open development models. Unfortunately not everyone knows about this advantage so we thought it’s time to recall.

The people doing quality assurance for LibreOffice is an ever-changing group of around 30 contributors. They analyse user reports tirelessly and always appreciate problem descriptions delivered in a clear and understandable way. In a recent article about LibreOffice appearing on, several bugs were reported, but in a rather incomplete way. It is understandable, if a journalist does not want to create proper reports in our bug tracker on top of writing an article. Maybe there is a middle-ground, though.

Simply linking to the problematic Microsoft Office templates would have made the work of the quality assurance team much easier. Now the templates shown in the screenshots had to be discovered through detective work on the MSO template site. Particularly unfortunate was the case of a template, which refused to open properly. There is no way of figuring out the identity of the document and the author never replied to an email requesting for more information. On the other hand, it might be time for the QA team to again methodically go through every single template on the MSO site – such work has been done before, resulting in many solved incompatibilities.

Detailed comments on the document template issues described in the Dedoimedo article

Fashion newsletter template: Some obstacles need to be considered regarding cross-application and probably also cross-platform compatibility questions. Documents written on one system might use a font that is not available on another. The article mentioned above talks about the word FASHION breaking into two lines in the MSO Fashion newsletter template. The reason for this wrapping is that the author did not notice they were missing the Century Gothic font. This can be seen in the Formatting toolbar, where the font name appears in italics and hovering over it shows a tooltip saying that the font is not available and has been substituted.

The author refers to an image border missing on the first page. Probably they meant the whole page margin on the right. This issue was not seen on Windows or Linux by testers.

The image stretching issue had not been reported before. The newly-created report contains an analysis on a level that is typical to the QA team. However, the QA team will gladly conduct further analysis on reports with less details. The image stretching issue is the same that is seen in the restaurant newsletter template

An issue not mentioned in the article is the incorrect lengths of the fuchsia-coloured lines on the first page. This was analysed through binary bisecting and found to have been reported before. This issue is an unfortunate side effect of a complex internal improvement in the handling of shapes.

Restaurant newsletter template: Testers did not see the issue with the placement of the restaurant logo.

Based on data in our bug tracker, LibreOffice saw over 330 fixes or feature implementations for MSO and RTF document issues in 2019. The number for 2020 is already over 330 at this point. The real numbers are likely higher as not every code change is connected with a report. These statistics clearly indicate that document compatibility is seeing significant investments from the commercial ecosystem and volunteers alike.

LibreOffice quality assurance is aided by many automated systems. One of these is called “Office interoperability tools”. It compares the output of Microsoft Office and LibreOffice over a huge corpus of documents in order to find regressions. Manual testing and problem discovery is still needed – we can’t automate the testing of issues we don’t know about.

As mentioned, while Microsoft’s “transitional” formats continue to use undocumented or cryptic content, which makes life difficult for other office suites, there’s a limit to what we can do. Ultimately, it would be better if everyone used the OpenDocument Format, to ensure maximum interoperability.

If you want to learn how to create high quality bug reports, please read our dedicated guide in The Document Foundation wiki.…

by Ilmari Lauhakangas at September 04, 2020 12:42 PM

August 31, 2020

Marius Popa Adrian

Firebird ODBC documentation (English and German) is migrated to AsciiDoc

Firebird ODBC documentation (English and German) is migrated to AsciiDoc English:HTML:

by Popa Adrian Marius ( at August 31, 2020 08:14 AM

Sarper Akdemir

Physics Based Animation Effects Final Report


The project

The project’s main goal was to create at least three new animation effects on LibreOffice Impress that are simulated using 2D physics engine Box2D. Which would use the 2D physics engine’s capabilities to create some exciting animations that bounce around interact with each other and hopefully look cool.

My work

First thing to do was bundling Box2D with the build system of LO.

After that, worked on a wrapper that was going to be the backbone of the project and abstract all Box2D related stuff. This wrapper didn’t take it’s final shape until the end of the project since it is the main place where the magic happened – throughout the project it always changed.

Building it from the start was useful though, since it gave me a solid vision on how would the animation engine interact with it (or what kind of information from LO would the wrapper need to function properly).

Later, I’ve connected up the animation engine creating a new animation node for physics animation by following the implementation of path motion animation. And worked on making them saveable through SMIL hierarchies on content.xml.

Up till this point all shapes in the slide were approximated by their bounding box in the simulations, which was not ideal. Therefore, I’ve worked on representing the shapes as closely as possible to their original shape. Got that to work by getting the shape’s bezier/polygon representation (simplifying it as much as i can without losing the resemblance of the original shape), triangulating it and adding the collection of triangles to a single physics body.

In the hope of spicing things up a little, added some options that can be used on xml hierarchies that make it possible to create more exciting physics based animation effects that specify the bounciness, density, and the starting velocity of the physics body.

To finish up, created a total of 4 animation effect presets that use the physics based animation effects.

Demonstration video

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.

How does the current implementation function?

The Box2D wrapper lives in:

  • slideshow/source/engine/box2dtools.hxx
  • slideshow/source/engine/box2dtools.cxx

It manages the Box2D World and the Box2D Bodies. When a physics animation starts (if not initiated before by another physics animation) the Box2D World gets initiated and a physics body with an edge loop shaped fixture that represents the slide frame is created with it. This slide frame always has 100 meters width or height depending on which is actually greater in the current slide properties, and a scale factor is calculated depending on the slide size which is used in mapping the Box2D coordinates to LO coordinates and vice versa. Later, all the shapes in the current slide that are in the foreground (which are shapes that do not belong to the master slide and not a background shape) created as a static Box2D Body.

During this creation process if the shape is filled & closed it is created by triangulating the shape and adding the resulting triangles to the Box2D Body, this is necessary since a Box2D physics body can only have convex shaped fixtures.

If the shape isn’t a filled & closed one or is just an edge shape, it’s divided up into it’s edge segments and each edge segment is represented by a quadrilateral shaped fixture.

Here’s a visualization showing how a shape is represented in the Box2D world:

When a physics animation starts, it makes the corresponding physics body to it’s shape a dynamic one, and applies the density, bounciness, starting velocity parameters specified in the xml to it. On each update cycle physics animation steps through the simulation using box2DWorld::stepAmount.

If there are other type of animation effects going in parallel with a physics animation, those animation effects queue up updates on what property they have manipulated (position, rotation etc.) and to which value. And then when a physics animation calls box2DWorld::stepAmount, box2DWorld::processUpdateQueue is called and these updates are processed in a way that produce convincing simulations. For instance if it is a change in position, instead of just setting the corresponding physics body’s position, a linear velocity is calculated which will make the body travel to the given position in the time box2DWorld::stepAmount will step through and applied to the body.

When there are two physics animations going on in parallel, only one of them steps through the simulation. This is achieved using a simple lock mechanism. If the physics animation that was stepping the simulation ends, it unlocks and if there’s another one still going on it takes the lock.

Whats left to do or can be done?

  • Physics animations do not take in account animation effects that manipulate size and skew of the shapes.
  • Shapes that are self intersecting polygons/beziers are not handled properly.
  • Bounciness, density options can be added to the animation side panel so that the user can have more control over the animation effects.


Overall, working on this project was really fun! I’m pretty proud with the outcome, and hoping it is some nice eye candy that the community and the users of LibreOffice will like :). If you’d like the check out and play around with the physics based animations you can build from master or grab a nightly build!

I’m really thankful for Google and LibreOffice for providing me with such a great opportunity which helped me grow quite a bit! Thanks to everyone in the LibreOffice community for giving me a helping hand :). And most importantly, greatly thankful to Thorsten Behrens which was my mentor throughout the GSoC period, he has literally guided me everyday on what to do, what not to do and how to do, on top of it answered each of my silly newbie questions. You were the greatest mentor I could’ve asked for!

Since working with the LibreOffice community was great and now that I’m kind of warmed up working on LibreOffice, my plan is to keep hacking on LibreOffice and especially Impress from now on!


All of the commits I’ve sent at the GSoC period can be found at:

They are also listed below:

by quwex at August 31, 2020 07:50 AM

Yusuf Keten

LibreOffice GSoC Final Report

The idea of additions is to better integrate extensions. On various places it should be possible to get more content from external storage. It is an “addition” as it rather provides presets than extensions like macros or templates; but the procedure behind might be similar. On various places it should be possible to get more content such as macros or templates from external storage. This requirement is now fulfilled with the Additions Dialog.

by Yusuf Keten ( at August 31, 2020 12:00 AM

August 29, 2020

Ahmed ElShreif

GSoC'20 final report & Project Documentation



    The idea was about The UI testing framework in LibreOffice. The UITesting  Framework is based on introspection code in c++ interacting with a testing framework in python through a simple UNO interface. To identify objects we use the ids that we introduced for loading dialogs from UI files. We were having unsupported items list in LibreOffice UITesting Framework. So The project mainly goals is to Extend the ability of the existing UI testing framework to support the unsupported items that exist now. So the work done on this list to decrease number of items in it.

    As we also have a domain specific language that we used to log the events in its syntax and a Logger system that supports the UI elements of Visual Component Library and some application-specific events can also logged with the DSL syntax. Then to Increase the ability of the DSL that used for testing by Be able to log more complex events and the events of the new added items that were unsupported before. Also Be able to generate more meaningful test cases with the DSL not just replaying the user action from the Logger.


To understand how the project works you should know 3 things:
  • How UITesting Framework works?

    • The current UI testing framework is built using unittest which is Unit testing framework existing in python libraries. It supports test automation.

    • So as we can see here that our UITestCase class inherited from (unittest.TestCase) so mainly it has all the methods that unittest.TestCase has.

    • If we want to add support for new items in the UITesting framework that we have we should first add the introspection code then we should add functions that use this code in the python UITesting framework code then we should make sure that this code is working well.

    • The introspection code interacts with a testing framework in python through a simple mostly un-typed UNO interface.
    • So first let's discuss how we could extend the introspection part. There are two types of elements. First one is the one that UI elements that inherit from vcl::Window. And the other type is the non-vcl::Window UI objects.

    • For the objects that inherit from vcl::Window, so basically most of our GUI elements. Most of them are already done. But understanding how it works makes it easy to plan what to do for other items. On the introspection side the corresponding class is WindowUIObject, and all classes inheriting from vcl::Window provide the virtual method in this search GetUITestFactory that returns a factory function for the introspection library. So adding support requires three steps:  
      • adding a GetUITestFactory method to the UI object class. 
      • adding the corresponding factory method. 
      • implementing the introspection wrapper class.
    • for the objects that are non-vcl::Window UI objects that need to be wrapped which makes everything a bit more complicated. The basic idea behind supporting such pseudo objects is to hold a pointer to the corresponding vcl::Window based UI object through a VclPtr and a way to get the correct property that represents the object we want to cover. Then we can add the functions in C++ that will be called from the python code that will be written to test this item like for example what we have here.

    • After this point we need to add the functions in the python part to be able to use it and it will call the functions that we add in the introspection code in the C++ part. So we can check when replaying if the action is done so that means the item was added successfully.

  • How the DSL Works?

    • Domain-Specific-Language which is DSL is a way of defining new grammar for a new language to be used later by interpreting this langauge and generate another code or execute the code on specific hardware.

    • In my last year GSoC project with LibreOffice I implemented a DSL that is used now to log all the user action in it's syntax and convert these logs to a test case using the implemented interpreter. This vide talk more about the project.

    • Note that to run the project you need to have a python2.7 with textX library installed into it. We will descripe later how to use but this video will be very helpful.

    • If you need to understand how the project is written and mainly the part in this folder: I think you can easily see the tutorials here of TextX. The basics of this tutorial that you can understand with 30 mins can let you understand a lot of the project. Also The grammar descriped here.

  • How The Logger Works?
    • Logging in LibreOffice is mainly handled by a class called UITestLogger, defined here.The logger class logs the user actions only if the member flag mbValid is set to true. The flag can be turned on by setting the environment variable LO_COLLECT_UIINFO to a file name where the logs should be collected (see the constructor of UITestLogger, defined here). we make it equal test.log in last section.

    • Their is a pointer to an instance of UITestLogger class here. To use the logger object, the static function getInstance can be used to get access to the pointer.
    • The function logAction, defined in the same class, is used to log events from the classes which extend the class vcl::Control. The log statements corresponding to a particular class can be found in the function get_action of the UI wrapper classes. The log statements get generated when VCL events get broadcasted.
    • For other classes, we have functions named collectUIInformation spread in different places of the code (This OpenGrok search might be helpful) and these different places are the functions that execute the supported events in different applications. These functions collect information about an event and store it in a struct EventDescription (defined here) and pass it to another function of UITestLogger, called logEvent. The logEvent function constructs a log string using the information provided by the given event description, and finally logs the statement using the file stream maStream.


    The work was done by taking items from the list one by one. The time of working on each item vary so maybe an item takes 3 days another takes one week another one takes 3 weeks. So the Achievements was taking as much items as I could from the list.
    After adding an item I used to write a test case to test this item to make sure that the support working well now. Also if we have a bug that related to this part of the code I try to help on writing it's test case. I will provide here examples for each item how to use it and how to test it.
The added Items:

  • Calc - Set Zoom
    used by:
    • gridwin.executeAction("SET", mkPropertyValues({"ZOOM": "100"}))
    tested by:
    • self.assertEqual(get_state_as_dict(gridwin)["Zoom"], "100")

  • Calc / Format cell / background color selector
    used by:
    • color_selector.executeAction("CHOOSE", mkPropertyValues({"POS": "2"}))
    tested by:
    • self.assertEqual(get_state_as_dict(color_selector)["CurrColorId"], "2")
    • self.assertEqual(get_state_as_dict(color_selector)["CurrColorPos"], "1")
    • self.assertEqual(get_state_as_dict(color_selector)["ColorsCount"], "12")
    • self.assertEqual(get_state_as_dict(color_selector)["ColCount"], "12")
    • self.assertEqual(get_state_as_dict(color_selector)["ColorText"], "Chart 2")
    • self.assertEqual(get_state_as_dict(color_selector)["RGB"], "(255,66,14)")

  • ComboBoxUIObject - Select by Text - Set - Clear
    used by:
    • xpaletteselector.executeAction("SELECT", mkPropertyValues({"TEXT": "chart-palettes"}))
    • xpaletteselector.executeAction("SET", mkPropertyValues({"TEXT": "chart-palettes"}))
    • xpaletteselector.executeAction("CLEAR", mkPropertyValues({}))

  • Writer - comments
    used by:
    • xComment1.executeAction("TYPE", mkPropertyValues({"TEXT": "any Comment"}))
    • xComment1.executeAction("LEAVE", mkPropertyValues({}))
    • xComment1.executeAction("RESOLVE", mkPropertyValues({}))
    • xComment1.executeAction("SELECT", mkPropertyValues({"FROM": "0", "TO": "4"}))
    • xComment1.executeAction("HIDE", mkPropertyValues({}))
    • xComment1.executeAction("SHOW", mkPropertyValues({}))
    • xComment1.executeAction("DELETE", mkPropertyValues({}))
    tested by:
    • self.assertEqual(get_state_as_dict(xComment1)["Text"], "any Comment")
    • self.assertEqual(get_state_as_dict(xComment1)["SelectedText"], "any Comment")
    • self.assertEqual(get_state_as_dict(xComment1)["Resolved"], "false" )
    • self.assertEqual(get_state_as_dict(xComment1)["Author"], "Unknown Author" )
    • self.assertEqual(get_state_as_dict(xComment1)["ReadOnly"], "false" )
    • self.assertEqual(get_state_as_dict(xComment1)["Visible"], "true" )

  • Calc - Dropdown items
    used by:
    • gridwin.executeAction("LAUNCH", mkPropertyValues({"SELECTMENU": "", "COL": "2", "ROW": "9"})) Then Select the TreeList UI Object
    • xWin = self.xUITest.getTopFocusWindow()
    • xlist = xWin.getChild("list")
    • xListItem = xlist.getChild('0')
    • xListItem.executeAction("DOUBLECLICK" , mkPropertyValues({}) )

  • SvxNumValueSet
    used by:
    • obj_name.executeAction("CHOOSE", mkPropertyValues({"POS": "pos_num"}))
    tested by:
    • self.assertEqual(get_state_as_dict(color_selector)["ItemsCount"], "2")
    • self.assertEqual(get_state_as_dict(color_selector)["SelectedItemPos"], "1")
    • self.assertEqual(get_state_as_dict(color_selector)["SelectedItemId"], "12")
    • self.assertEqual(get_state_as_dict(color_selector)["ItemText"], "any")

  • Vertical TabControl
    used by:
    • xtab.executeAction("SELECT", mkPropertyValues({"POS": "0"}))
    tested by:
    • self.assertEqual(get_state_as_dict(xtab)["CurrPageTitel"], "Mail")
    • self.assertEqual(get_state_as_dict(xtab)["CurrPagePos"], "1")
    • self.assertEqual(get_state_as_dict(xtab)["PageCount"], "4")

  • Calc - Comments
    used by:
    • gridwin.executeAction("COMMENT",mkPropertyValues({"OPEN":""}))
    • gridwin.executeAction("TYPE",mkPropertyValues({"TEXT":"any"}))
    • gridwin.executeAction("COMMENT",mkPropertyValues({"CLOSE":""}))
    • gridwin.executeAction("COMMENT",mkPropertyValues({"SETTEXT":"any"}))  
    tested by:
    • get_state_as_dict(gridwind)["CurrentCellCommentText"]

  • ToolBox Objects
    used by:
    • variable_name.executeAction("CLICK", mkPropertyValues({"POS": poition_x }))
    tested by:
    • self.assertEqual(get_state_as_dict(xfind_bar)["CurrSelectedItemID"], "5")
    • self.assertEqual(get_state_as_dict(xfind_bar)["CurrSelectedItemText"], "Find All")
    • self.assertEqual(get_state_as_dict(xfind_bar)["CurrSelectedItemCommand"], ".uno:FindAll")
    • self.assertEqual(get_state_as_dict(xfind_bar)["ItemCount"], "14")

  • Menu Button objects
    used by:
    • var_name.executeAction("OPENLIST", mkPropertyValues({}))
    • var_name.executeAction("CLOSELIST", mkPropertyValues({}))
    • var_name.executeAction("OPENFROMLIST", mkPropertyValues({"POS": "0" })) 
    tested by:
    • get_state_as_dict(var_name)["Label"]

  • ValueSet
    used by:
    • obj_name.executeAction("CHOOSE", mkPropertyValues({"POS": "4"}))
    tested by:
    • self.assertEqual(get_state_as_dict(FontWorkSelector)["ItemsCount"], "36")
    • self.assertEqual(get_state_as_dict(FontWorkSelector)["SelectedItemId"], "3")
    • self.assertEqual(get_state_as_dict(FontWorkSelector)["SelectedItemPos"], "2")

The Support is already merged for all these types of objects and also I added a test case for each object in this list and Also the uiLogger and DSL support is added for all items in this list.


all my merged patches can be found here : merged patches

For more details :
  1.   uitest: Fix small issue in UI Logger DSL grammar  
  2.   uitest: Fix some issue in the UI Logger DSL core  
  3.   uitest: avoid defining the same object multiple time in in math  
  4.   uitest: Add support for Calc - Set Zoom  
  5.   uitest: Add support for Calc / Format cell / background color selector  
  6.   uitest: Add support for Writer comments  
  7.   uitest: Add demo for Writer-comments  
  8.   uitest : Add support for Dropdown items in grid window 
  9.   uitest: Fix small issue in UI Logger DSL grammar "EditUIObject"  
  10.   uitest : Add Support for SvxNumValueSet  
  11.   uitest : Add demo for SvxNumValueSet support  
  12.   uitest: Add support for vertical TabControl Object  
  13.   uitest : Add support to Calc - comments  
  14.   uitest : Add demo for Calc-comments  
  15.   uitest : Fix the old demo of writer comments
  16.   uitest : Add support for "ToolBox" Objects for example" "bottom find bar"  
  17.   uitest : Add demo for "bottom find bar" using ToolBox support  
  18.   uitest : extend the ComboBox UIObject
  19.   uitest : sw: Add UItest for Hyperlink Dialog  
  20.   uitest : Avoid any timing issue in test_insert_hyperlink  
  21.   uitest : Add support for Menu Button objects  
  22.   uitest : Add demo for gear button menu in Tools->Customize  
  23.   uitest : Add support for Normal ValueSet
  24.   Add demo for FontWork Selector  
  25.   uilogger : Add support in the Logger and DSL for the LAUNCHMENU in CALC  
  26.   uilogger : Add support in the Logger and DSL for the ToolBox  
  27.   uilogger : Add support in the Logger and DSL for ZOOM in CALC  
  28.   uilogger : Add support in the Logger and DSL for ValueSet  
  29.   uitest : Change all the ValueSet uitest statments to CHOOSE
  30.   uilogger : Add support in the Logger and DSL for Calc-Comments  
  31.   uilogger : Add support in the Logger and DSL for Writer-Comments  
  32.   uilogger : Add support in the Logger and DSL for MenuBtn  
  33.   uilogger : Add support in the Logger and DSL for Vertical Tab

When This project will be Helpful? 

This project will be really helpfull if:
  • You are tring to write a test case that test a specific part in LibreOffice and you don't know where to start.
    • You can open the logger.
    • start logging all the actions that you did around the part you will test. 
    • run the compiler and get an pre-test that you can build your work on it.
  • You want to know the ids of the dialog member and search with it in the code.
    • Log actions in this dialog and use OpenGrok for search.
  • You want to know all the called uno command when you press on anything.
    • You can do this by find all the uno commands in the generated pre-test.
The extention added this year by ading support for more items let us has more coverage on most of the UIObjects and more flexibility and power in using our UITest Framework also it let us make better test cases for all the open bugs in the future.

How to Use the logger?

First you should update the master branch:
1) use these lines in .bashrc or .cshrc:
  • export PYTHONPATH=/"Path of LibreOffice repo"/instdir/program/
  • export URE_BOOTSTRAP=file:///"Path of LibreOffice repo"/instdir/program/fundamentalrc
  • export SAL_USE_VCLPLUGIN=gen

2) Launch LibreOffice like
LO_COLLECT_UIINFO="test.log" SAL_USE_VCLPLUGIN=gen instdir/program/soffice

3) Simulate what you want to do with the mouse
4) Close LibreOffice

5) Open the resulting file in instdir/uitest/test.log

6) Enter the UI logger directory with this Command:
cd uitest/ui_logger_dsl/
7) make sure that your python has textX library installed:

8) Use the following Command
python <path_to_log_file> <path_to_a_new_python_file>
<path_to_log_file> should be replaced with something like SourceDirectory/core/instdir/uitest/test.log
and <path_to_a_new_python_file> can be a location of your choice where you would like to see the generated code.

You can follow all these steps in this youtube video.

Remaining Tasks

We still have some unfinished items in the unsupported item list and it maybe increased in the future. So some of these items need more work and investigation. i will try to work on my free time to empty all the items in this list.

Thank You!

Thank you for giving me the opportunity to work on this project. I learned a lot from this project. I will definitely like to spend more time with LibreOffice community in future. I like to thank also my mentors they help me and guide me to learn a lot and the community was always active and helpfull.

by Ahmed ElShreif ( at August 29, 2020 06:26 AM

August 28, 2020

Yusuf Keten

LibreOffice GSoC Final Report

The idea of additions is to better integrate extensions. On various places it should be possible to get more content from external storage. It is an “addition” as it rather provides presets than extensions like macros or templates; but the procedure behind might be similar. On various places it should be possible to get more content such as macros or templates from external storage. This requirement is now fulfilled with the Additions Dialog.

by Yusuf Keten ( at August 28, 2020 12:00 AM

August 27, 2020

Roman Kuznetsov

Finally we have nice soft shadows for shapes in LibreOffice

A GSoC 2020 student Ahmad Ganzouri have added into LibreOffice 7.1 a new nice feature - soft blurred shadows for shapes. 

It looks so:

So it looks awesome! Thanks Ahmad for your great work for our project!

by Roman Kuznetsov ( at August 27, 2020 07:23 PM

August 26, 2020

Andreas Kainz

Bright side of LibreOffice

LibreOffice has a very useful sidebar so it’s time to make them shiny even more. I made an proposal for an sidebar upgrade.

Sidebar layout proposal

Layout 1 vs Layout 2

LibreOffice use two different Sidebar layouts

  1. left: where widgets are in two columns and the label is above the widget
  2. right: where the labels are left and the widgets right

I’m happy with both layouts, but I would prefer to have for one specific task only one Layout.

  • For example, the text sections will be visible when you select text and when you write text in a table, so it should be natural that both sections use the same layout as you can see in the screenshot.
  • On the right there is a drawing selected so all sections should have the same layout as you can see in the left screenshot. If you think, true but where is the change request, start your LibreOffice and check out the sidebar.

I already start to write bug report’s for so that everybody can give transparent feedback.

So I hope to get some feedback the global [META] bug to see the improvement will be BUG 103459

by kdeonlinux at August 26, 2020 01:16 PM

August 25, 2020

Sarper Akdemir

Physics Based Animation Effects Week#12

Past week, all of the changes in my private experimental branch got merged to master \o/.

Since it is the last week of GSoC, I will be finalizing the project this week by creating some animation effect presets, documenting the code, fixing bugs and preparing a work product submission.

If you’re interested in creating some animation effects that use Physics Animation Effects, see the mail about it to the design list and hit me up 🙂

by quwex at August 25, 2020 07:01 AM

August 24, 2020

Yusuf Keten

LibreOffice GSoC Week 12 Report

Hello, I want to share with you the progress of this week. Last Week: Sort functions are done.Patch Rating images are implemented to UI, rating will be shown from the UI. Patch Install function is implemented. Path Documentation will be done today, or tomorrow at the latest Thanks to my mentors, Muhammet Kara and Heiko Tietze, and LibreOffice community.

by Yusuf Keten ( at August 24, 2020 12:00 AM

August 21, 2020

Muhammet Kara

LibreOffice on Pardus now in 53,000 Classrooms in Turkey

As part of FATIH project, run by Turkih Ministery of Education, and supported by National Academic Network and Information Centre (ULAKBİM); Pardus GNU/Linux (and LibreOffice as part of it) has been installed on more than 53,000 smart boards at classrooms in Turkey! :)

Pardus ETAP Map of Turkey

This number represents the smart boards which are connected to the Internet, and registered on the central management system. It keeps counting as we speak, and the status can be seen on the stats page of ETAP (Interactive Board Interface Project):

Pardus GNU/Linux

Pardus is a GNU/Linux distribution jointly developed by the Scientific & Technological Research Council of Turkey (TÜBİTAK) and National Academic Network and Information Centre (ULAKBİM). It started its life as a Gentoo-based project before developing its own unique identity. Since late 2012, the distribution is based on Debian.

Pardus 17.3 XFCE Screenshot

Pardus has open-source subprojects that meet institutional needs for easy dissemination in public institutions and organizations and SMEs. Leader Ahenk Central Management System, Viper Identity Management System, Octopus Integrated Cyber Security System, Interactive Board Interface Project (ETAP), ULAKBÜS Integrated University System are the main ones.

Interactive Board Interface Project (ETAP)

ETAP is aimed at developing a solution for the interactive smart boards at schools, based on Pardus. It is designed and developed to achieve easier and more effective usage of the devices with a touchscreen in the classrooms.

Pardus ETAP Desktop Screenshot

During its development, several schools were chosen as part of the pilot phase, and needs and requests of the teachers were taken into account. Its features include:

  • ETA Panel
  • ETA Keyboard
  • Interactive & Adjustable Screen Blanking
  • Custom touch gestures

by Muhammet Kara ( at August 21, 2020 10:00 AM

Collabora Community

Implementing Vulkan-capable LibreOffice user interface using the Skia library

This work by Collabora Productivity was possible thanks to AMD.

LibreOffice 7.0, just released, includes a new drawing backend based on the Skia library, which allows LibreOffice to use the modern Vulkan API to graphics operations. This Visual Class Library (VCL) backend is the default on the Windows platform, superseding the OpenGL-based backend.

Working on the future of graphics for office productivity

Having multiple VCL backends has its benefit to integrate with different operating systems, but each backend performing its own rendering implementation is far from optimal, since we cannot add new rendering functionality and assume that it will work cross-platform. Many backends across different platforms and toolkits miss optimized paths for various rendering tasks. This adds complexity and makes it hard to ensure that rendering objects happens in an accelerated way everywhere.

Another problem is that multiple backends regularly perform the same type of mapping from VCL’s APIs to what a modern toolkit provides these days. This duplication means not only maintenance cost, but also can lead to having to fix the same bug at multiple places.

Moving away from GDI and OpenGL

The VCL library is responsible for widgets (buttons, controls, etc.) and basic rendering. It does not implement the drawing directly, but it provides an internal API, which is implemented by various backends that implement the actual graphics operations. These backends usually adapt LibreOffice to each platform , for example the ‘win’ backend is used on Windows, the ‘kf5’ and ‘gtk3’ backends are for Unix-like platforms using the KDE Frameworks and the Gtk3 graphics toolkit respectively and there is a ‘headless’ backend used by tests that does not render to the screen.

Each VCL backend uses an underlying graphics API available on the platform to perform the graphics operations. The Cairo library is used by some Unix-like and ‘headless’ backends, the ‘osx’ backend uses the macOS Quartz. On Windows, the ‘win’ backend has several plugable drawing implementations:

  • GDI drawing. This code is relatively old and has several limitations, such as not being double-buffered.
  • OpenGL drawing. This code provides GPU-accelerated drawing. OpenGL is used directly, so all relevant code including OpenGL shaders needed to be implemented in LibreOffice. The OpenGL API is also slowly being phased out in the industry.
  • Skia drawing. The Skia library hides implementation details, and provides several rendering methods, including Vulkan API.

Integrating Skia and Vulkan

The Skia library is not shipped in a binary form, not even by 3rd-party providers such as Linux distributions. It is provided only as source and the usual way to use it in a project is to ship it with that project. LibreOffice includes Skia as a 3rd-party library and fortunately building it using the LibreOffice gbuild system is reasonably simple. An additional complication is that Skia provides a new release roughly every 6 weeks, and generally only the latest release receives any fixes, requiring repeated updates. Since Skia is continually evolving, each update may also require adjustments (although so far it seems they are generally small).

Collabora’s developers taking the first hurdles

The Skia API is generally well documented, but it appears to be mostly aimed at developers already working on a project using Skia, such as Chrome. Important classes have their API well described, but it can be difficult to find tutorials for them and some classes are harder to understand at the beginning (for example, SkPixmap, SkBitmap, SkImage and SkSurface are all classes representing a drawable, but it was unclear at the beginning what the suitable use cases would be for each for them).

Similarly, it is not obvious how to use Skia in a new project. There does not seem to be any actual developer introduction to Skia in the documentation, nor does thereseem to be any documentation on how to setup a new or standalone project using Skia. There is a Hello-World example in the examples/ directory that is based on platform integration code that is not part of the Skia library itself but is inside a sk_app/ directory in the tools/ directory. That code was usable for LibreOffice, but required patching to cover LibreOffice needs (for example, the code created a new graphics context for each toplevel window, and Skia requires proper graphic context to be used in drawing operations, but LibreOffice code sometimes does not know which toplevel window will use the result of a drawing).

LibreOffice is a fairly old codebase, and still uses relatively old concepts such as paletted bitmaps, low-resolution bitmaps (such as 4bpp) or drawing that uses the XOR operation on pixels. Skia, being a relatively new library, has features that assume modern concepts are used (for example, RGB bitmaps are required to be 32bpp with unused alpha channel, 24bpp RGB bitmaps are not supported).


AMD Skia / Vulkan integrated in a alpha-release of LibreOffice 7.0


Once the initial learning period is over, Skia is consistent in its API and reasonable flexible to use allowing progress to be relatively fast. Code using Skia is very readable, and using Skia makes future maintainance tasks easier to perform. Even some old concepts, such as LibreOffice using a separate bitmap for alpha channel, sometimes interpreted as 8bpp and sometimes as alpha, later blended with data bitmap to get the actual result, could be mostly implemented using Skia API, making them GPU-accelerated.

Nice performance and even room for improving

While there were some concerns about how performance would be affected by moving to Skia compared to OpenGL driver and and hardware implementations that have been heavily optimized over the past several decades, it turns out that performance within LibreOffice is at least equivalent to the OpenGL version and synthetic benchmarks show that there is room for improvement.

Benefits for LibreOffice-technology

While somewhat complicated at the beginning, using Skia in LibreOffice has been in general a rather pleasant experience. In the future LibreOffice’s use of Skia could be extended to other platforms, reducing the number of platform rendering APIs used, eliminating duplicated code, reducing bug count and generally improving quality.

For comparison, LibreOffice OpenGL drawing code is roughly 12k lines of code, while Skia drawing code is only 4k.

Apart from the immediate benefits, moving to Skia and Vulkan on Windows paves the way for a single, powerful, hardware-accelerated rendering API cross-platform.

Moving to Skia on Windows required about 7 person-months ol, which lets us use Vulkan acceleration without large implementation costs. It will be interesting to see how much time is saved in the next few years from the reduced maintenance cost. The resulting work is mature enough that there is no real negative change in performance, and we have not started heavily optimizing yet.

The post Implementing Vulkan-capable LibreOffice user interface using the Skia library appeared first on Collabora Productivity.

by Cor Nouws at August 21, 2020 08:01 AM

August 19, 2020

Miklos Vajna

SmartArt improvements in Impress, part 5

Impress now has support for considering rules next to constraints when it comes to lay out SmartArt graphics from PPTX files. This builds on top of the previous improvements around SmartArt support.

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


SmartArt allows declaring your content and requirements for a graphic, then the layout will take care of arranging that in a suitable way. It is allowed to declare conflicting requirements, and rules can specify how to resolve those conflicts. The below example document has shape widths defined in a way that multiple child shapes wants to have a width of 100%, but simply scaling down all child shapes does not give a correct result. Rules define what to scale down and what to leave unchanged.

Results so far

Here is how this works in practice:
Figure 1. Linear layout with multiple 100% width shapes, new output
Figure 2. Linear layout with multiple 100% width shapes, old output
Figure 3. Linear layout with multiple 100% width shapes, reference output

How is this implemented?

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

  • The initial heavy-lifting is done in this commit, which parses the rules from the XML input.

  • Then once we had rule info around, the linear algorithm was improved to scale down child shapes based on rules (and not just all of them, equally).

  • Then it was necessary to scale spacings (between child shapes) based on rules as well.

  • It was also needed to limit the height request of a shape, since they should not leave the canvas of the SmartArt.

  • Finally it was necessary to support the "top" child order. This can be declared using the following markup:

<dgm:layoutNode ... chOrder="t">

This declares that an earlier shape in a linear layout is on top of a later shapes, not the opposite. The default is that newer shapes are on top of older shapes. This is not a visible problem usually, but once you start using negative widths in a linear layout, you can have overlapping shapes. The above example has 3 text shapes, which are overlapping with the "background" arrow shape. This is expressed by having 100% width for child shapes (OK to scale down), then a -100% width for a dummy shape (not scaling) and finally a 100% width for the background arrow (not scaling).

All in all, now the background arrow shape has a good position and size, and the text on the arrow is readable.

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 is a major contributor to LibreOffice and all of this work will be available in TDF’s next release too (7.1).

by Miklos Vajna at August 19, 2020 07:24 AM

August 18, 2020

Ahmed ElShreif

Week 11 Report

 Hello LO Community,

The last week was the week 11 of coding weeks in GSoC program. I worked more on Adding support for new items in the uiLogger and the DSL.

 Report in points:
  •  Overall work.  
  •  FontWork Test case.
  •  How to Add support for Item in the UILogger and the DSL.  
  •  ToolBar Support.
  •  Calc LaunchMenu support.
  •  Patch Status.  
  • Next Week Tasks.

The last week I worked on this 3 things:
1) Make Sure that FontWork Features more well and add a test case for it.
2) Add Support for the ToolBar Actions.
3)Add Support for Launch Menu in Calc.

Also after investigation the Fontwork Gallery Dialog I found out that the selector of fontworks is also a ValueSet object. So the support is already added in this patch. I added here a demo has a test case to test the selector. You can find the test case in this patch. The Patch still under review. The Work was done to make sure that all Font Works items work. As while investigation I found that not all items respond to a change in the Main window. But the solution was just to add some configuration to the environment that I use for running the test cases to see the changes and it is working now and ready to be merged.

You should know first How to Add support for Item in the UILogger and the DSL. Logging in LibreOffice is mainly handled by a class called UITestLogger, defined here. The logger class logs the user actions only if the member flag mbValid is set to true. The flag can be turned on by setting the environment variable LO_COLLECT_UIINFO to a file name where the logs should be collected (see the constructor of UITestLogger, defined here).

We maintain a pointer to an instance of UITestLogger class here. To use the logger object, the static function getInstance can be used to get access to the pointer.
So to add logging support for a new item. You should make sure that the event that you want to log sending message to the logger. So if you don't have this you may get instance of the logger and log message that represent you event. Form the Logger end you receive this message and print what you want to have in the log file. Note that you can also send multiple parameters.

Also after this you will need to add the syntax of the new added element to your DSL grammar and add the handler that will handle this syntax to convert it to the corresponding line in the generated test case.


So For the ToolBar the problem was that TooBar handled as a Window not an Element so I made a change in the Logger to handle events from the VCl window to be able to log actions from the toolbar. And the patch is added but it still under review. The support is tested on the FindBar and it works well . For example the DSL syntax in the FindBar should be like:
 >>"Click on item number 3 in FindBar"


Also for the Launch Menu I added a support that generate a  log line that simmilar to what we get in AUTOFILTER line. Also I added the corrensponding syntax and handler for the logged line. The support is tested on some random test cases. For example the DSL syntax will be:
>>"Launch SELECTMENU from Col 3 and Row 5"

The patch could be found here. But It's still under review.
Patch Status:


Next week Tasks:
  • Add the support in the logger for all the new added items to the UITest Framework .
  • Finalize un-merged patches .
  • Start working on the documentation of the project .
Thanks for reading. And I am really interested to hear all your feedback and comments.

by Ahmed ElShreif ( at August 18, 2020 09:11 PM

Sarper Akdemir

Physics Based Animation Effects Week#11

Past week, I’ve mainly cleaned up some bugs in physics animations and added new options only available in xml that control starting velocity, bounciness, and density of the box2d body.

There are two velocity options velocity-x and velocity-y that control x and y starting velocity respectively for the box2d body.
Bounciness option takes values between [0,1]. 1 meaning no energy loss on collisions and has a default value of 0.1.
Density option specifies the box2d body density in kg/m².

All of the new xml options are imported/exported in the LO extension (loext) namespace.

Hopefully, these new xml options will make it possible to craft better & more exciting physics animation presets.

I’ve tried to come up with some animation effect presets which illustrate what’s possible that mix in these new options.
One animation effect each for entrance, emphasis and exit.

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.

Here’s the odp file and content.xml excerpt which only contain the animation hierarchies if you’re interested in giving a look:

<!-- emphasis example -->
<anim:par presentation:node-type="timing-root">
  <anim:seq presentation:node-type="main-sequence">
    <anim:par smil:begin="next">
      <anim:par smil:begin="0s">
	<anim:par smil:begin="0s" smil:fill="hold" presentation:node-type="on-click" presentation:preset-class="emphasis" presentation:preset-id="tumble-and-linear-glide">
	  <loext:animatePhysics smil:dur="4s" smil:fill="hold" smil:targetElement="id1" loext:velocity-x="10000" loext:bounciness="0.9"/>
	  <anim:animate smil:begin="4s" smil:dur="2s" smil:fill="hold" smil:decelerate="0.5" smil:targetElement="id1" smil:attributeName="x" smil:to="(x)"/>
	  <anim:animate smil:begin="4s" smil:dur="2s" smil:fill="hold" smil:decelerate="0.5" smil:targetElement="id1" smil:attributeName="y" smil:to="(y)"/>
	  <anim:animate smil:begin="4s" smil:dur="2s" smil:fill="hold" smil:decelerate="0.5" smil:targetElement="id1" smil:attributeName="rotate" smil:to="0"/>

<!-- entrance example -->
<anim:par presentation:node-type="timing-root">
  <anim:seq presentation:node-type="main-sequence">
    <anim:par smil:begin="next">
      <anim:par smil:begin="0s">
	<anim:par smil:begin="0s" smil:fill="hold" presentation:node-type="on-click" presentation:preset-class="entrance" presentation:preset-id="shoot-in-from-top-left">
	    <anim:set smil:begin="0s" smil:dur="0.001s" smil:fill="hold" smil:targetElement="id2" smil:attributeName="visibility" smil:to="visible"/>
	    <anim:animate smil:dur="0.001s" smil:fill="hold" smil:targetElement="id2" smil:attributeName="x" smil:to="width*.5"/>
	    <anim:animate smil:dur="0.001s" smil:fill="hold" smil:targetElement="id2" smil:attributeName="y" smil:to="height*.5"/>
	    <loext:animatePhysics smil:dur="4s" smil:fill="hold" smil:targetElement="id2" loext:velocity-x="10000" loext:velocity-y="10000" loext:bounciness="0.6"/>
	  <anim:transitionFilter smil:dur="1s" smil:targetElement="id2" smil:type="fade" smil:subtype="crossfade"/>
	  <anim:animate smil:begin="4s" smil:dur="2s" smil:fill="hold" smil:decelerate="0.5" smil:targetElement="id2" smil:attributeName="x" smil:to="(x)"/>
	  <anim:animate smil:begin="4s" smil:dur="2s" smil:fill="hold" smil:decelerate="0.5" smil:targetElement="id2" smil:attributeName="y" smil:to="(y)"/>
	  <anim:animate smil:begin="4s" smil:dur="2s" smil:fill="hold" smil:decelerate="0.5" smil:targetElement="id2" smil:attributeName="rotate" smil:to="0"/>

<!-- exit example -->
<anim:par presentation:node-type="timing-root">
  <anim:seq presentation:node-type="main-sequence">
    <anim:par smil:begin="next">
      <anim:par smil:begin="0s">
	<anim:par smil:begin="0s" smil:fill="hold" presentation:node-type="on-click" presentation:preset-class="exit" presentation:preset-id="tumble-and-disappear">
	  <loext:animatePhysics smil:dur="4s" smil:fill="hold" smil:targetElement="id3" loext:bounciness="0.8"/>
	  <anim:transitionFilter smil:begin="3s" smil:dur="1s" smil:targetElement="id3" smil:type="fade" smil:subtype="crossfade" smil:mode="out"/>
	  <anim:set smil:begin="4s" smil:dur="0.001s" smil:fill="hold" smil:targetElement="id3" smil:attributeName="visibility" smil:to="hidden"/>

<!-- emphasis example in a fuller slide -->
<anim:par presentation:node-type="timing-root">
  <anim:seq presentation:node-type="main-sequence">
    <anim:par smil:begin="next">
      <anim:par smil:begin="0s">
	<anim:par smil:begin="0s" smil:fill="hold" presentation:node-type="on-click" presentation:preset-class="emphasis" presentation:preset-id="tumble-and-linear-glide">
	  <loext:animatePhysics smil:dur="4s" smil:fill="hold" smil:targetElement="id4" loext:velocity-x="10000" loext:bounciness="0.7"/>
	  <anim:animate smil:begin="4s" smil:dur="2s" smil:fill="hold" smil:decelerate="0.5" smil:targetElement="id4" smil:attributeName="x" smil:to="(x)"/>
	  <anim:animate smil:begin="4s" smil:dur="2s" smil:fill="hold" smil:decelerate="0.5" smil:targetElement="id4" smil:attributeName="y" smil:to="(y)"/>
	  <anim:animate smil:begin="4s" smil:dur="2s" smil:fill="hold" smil:decelerate="0.5" smil:targetElement="id4" smil:attributeName="rotate" smil:to="0"/>

by quwex at August 18, 2020 05:33 PM

August 17, 2020

Yusuf Keten

LibreOffice GSoC Week 11 Report

Hello, I want to share with you the progress of this week. Last Week: Sorting menu UI is done.Patch There was a UI problem due to different length of texts. It is fixed.Patch Workin on Install functionpatch This Week TODO: Sorting implementation Install implementation Refactoring

by Yusuf Keten ( at August 17, 2020 12:00 AM

August 13, 2020

Ahmed ElShreif

Week 10 Report

Hello all,

The last week was the 10th week of coding weeks in GSoC program. I worked more on adding support for new objects from the unsupported list.

 Report in points:
  • Overall work. 
  • Select Presets and Shadow Styles in border tab ValueSet.
  •  Fontwork Selector.
  • "file properties- custom properties".

The last week I worked on this 3 entries from the unsupported items:
1) "Select Presets and Shadow Styles in border tab in format table or format cell".
2) "insert -> Fontwork".
3) "file properties- custom properties".
The first 2 are done but the third needs more investigation and debugging.

After investigating format cell Dialog I found out that Presets and Shadow Styles used ValueSet for selection. So the work need to be done is to add support for the ValueSet.

I added the support for the ValueSet here in this patch. This patch will add support for all the normal valuesets inside any dialog. 
for example it will help in our case for Select Presets and Shadow Styles in borders tab to test tdf#133641
You can use the support by this line:

You can use these lines to check on your selection:

 >> get_state_as_dict(obj_name)["SelectedItemPos"]

 >> get_state_as_dict(obj_name)["SelectedItemId"]

 >> get_state_as_dict(obj_name)["ItemsCount"]

Also after investigation the Fontwork Gallery Dialog I found out that the selector of fontworks is also a ValueSet object. So the support is already added in this patch. I added here a demo has a test case to test the selector. You can find the test case in this patch. Here is a video shows how it works:


I also started this week working on "file properties- custom properties" entry from the list but it needs more investigation and debugging I will try to finish it within the next week. Also I will start working on the DSL and the logger this week beside adding support for new items. I will try to finish adding logger support for all the added new items before the last phase ends.


Next week Tasks:
  • Add the support for "file properties- custom properties" .
  • Start working on the DSL and Logger support .
Thanks for reading. And I am really interested to hear all your feedback and comments.

by Ahmed ElShreif ( at August 13, 2020 04:26 AM

August 11, 2020

Sarper Akdemir

Physics Based Animation Effects Week#10

This week, I was mainly working on cleaning up and migrating the patches from my experimental branch to LO master.

merged patches were:

there was also two minor patches that were merged [1] [2]

patches that are still in review are:

Here’s the file for last weeks demo but updated for this week (Simulated/Simulation was renamed to Physics across the whole implementation last week so it needed an update):

Here’s how the animation effect is expressed in the content.xml of the demo file:

<!-- excerpt from customshapesfalling.odp:content.xml -->
<anim:par smil:begin="0s" smil:fill="hold" presentation:node-type="on-click" presentation:preset-class="emphasis" presentation:preset-id="libo-physics-basic">
		  <loext:animatePhysics smil:dur="4s" smil:fill="hold" smil:targetElement="id1"/>

If you’d like to play around with animation effects and create new ones that combine physics based and existing ones. First you should pull the current implementation from my experimental branch. After that, you should create a dummy animation containing odp file and manually edit it’s content.xml creating an altered animation effect. Finally to see it in action use File -> Reload option.

Here is a file that has two example animations that I’ve created this way which combines physics animations with others:

Below I’ve tried to explain what’s going on in the smil hierarchies of two-example-animations-with-physics.odp:content.xml

<!-- excerpt from two-example-animations-with-physics.odp:content.xml that is padded with comments & prettified -->
	<anim:par presentation:node-type="timing-root">
	  <anim:seq presentation:node-type="main-sequence">
<!-- start of the first animation effect -->
	    <anim:par smil:begin="next">
	      <anim:par smil:begin="0s">
		<anim:par smil:begin="0s" smil:fill="hold" presentation:preset-property="Direction" presentation:node-type="on-click" presentation:preset-class="emphasis" presentation:preset-id="experimental-drop-and-wipe-out" presentation:preset-sub-type="horizontal">
<!-- animatePhysics: is the node for physics based animation effects.
     there's no smil:begin so it'll start with the parent node without a delay -->
		  <loext:animatePhysics smil:dur="4s" smil:fill="hold" smil:targetElement="id1"/>
<!-- blindsWipe that is delayed for 3.5s since smil:begin="3.5s" -->
		  <anim:transitionFilter smil:begin="3.5s" smil:dur="0.5s" smil:targetElement="id1" smil:type="blindsWipe" smil:subtype="horizontal" smil:mode="out"/>
<!-- making the shape disappear proper way at the end -->
		  <anim:set smil:begin="4s" smil:dur="0.001s" smil:fill="hold" smil:targetElement="id1" smil:attributeName="visibility" smil:to="hidden"/>
<!-- start of the second animation effect -->
	    <anim:par smil:begin="next">
	      <anim:par smil:begin="0s">
		<anim:par smil:begin="0s" smil:fill="hold" presentation:preset-property="Direction;Accelerate;Decelerate" presentation:node-type="on-click" presentation:preset-class="entrance" presentation:preset-id="experimental-fly-in-and-drop" presentation:preset-sub-type="from-bottom">
<!-- fly in animation effect -->
		  <anim:set smil:begin="0s" smil:dur="0.001s" smil:fill="hold" smil:targetElement="id2" smil:attributeName="visibility" smil:to="visible"/>
		  <anim:animate smil:dur="0.5s" smil:fill="hold" smil:targetElement="id2" smil:attributeName="x" smil:values="x;x" smil:keyTimes="0;1"/>
		  <anim:animate smil:dur="0.5s" smil:fill="hold" smil:targetElement="id2" smil:attributeName="y" smil:values="1+height/2;y" smil:keyTimes="0;1"/>
<!-- animatePhysics that starts at the end of fly in since smil:begin="0.5s" -->
		  <loext:animatePhysics smil:begin="0.5s" smil:dur="4s" smil:fill="hold" smil:targetElement="id2"/>

by quwex at August 11, 2020 03:43 AM