The Document Foundation Planet

 

December 07, 2023

Official TDF Blog

LibreOffice 7.6.4 and LibreOffice 7.5.9 available for download

Berlin, December 7, 2023 – LibreOffice 7.6.4 Community and LibreOffice 7.5.9 Community are immediately available from www.libreoffice.org/download for Windows (Intel/AMD/ARM processors), macOS (Apple Silicon and Intel processors), and Linux [1].

LibreOffice 7.6.4 Community is the most advanced version of the office suite, and offers the best in terms of productivity functions and interoperability with Microsoft Office proprietary formats.

LibreOffice 7.5.9 Community is the most thoroughly tested version of the suite, for productivity applications in the enterprise environment, but has now reached the end of its life, so users are invited to plan the upgrade to LibreOffice 7.6.4 Community, which has also been tested and sought after enough for production environments.

For enterprise-class deployments, TDF strongly recommends the LibreOffice Enterprise family of applications from ecosystem partners – for desktop, mobile and cloud – with a large number of dedicated value-added features and other benefits such as SLA (Service Level Agreements): www.libreoffice.org/download/libreoffice-in-business/.

Availability of LibreOffice 7.6.4 and LibreOffice 7.5.9

LibreOffice 7.6.4 Community and LibreOffice 7.5.9 Community are available from www.libreoffice.org/download/. Minimum requirements are Microsoft Windows 7 SP1 and Apple macOS 10.14. LibreOffice Technology-based products for Android and iOS are listed here: www.libreoffice.org/download/android-and-ios/

The Document Foundation does not provide technical support for users, although they can be helped by volunteers on user mailing lists and on the Ask LibreOffice website: ask.libreoffice.org

LibreOffice users, free software advocates and community members can support The Document Foundation with a donation at www.libreoffice.org/donate

[1] Change log pages: wiki.documentfoundation.org/Releases/7.6.4/RC1 and wiki.documentfoundation.org/Releases/7.5.9/RC1

by Italo Vignoli at December 07, 2023 01:23 PM

December 06, 2023

LibreOffice QA Blog

QA/Dev Report: November 2023

General Activities

  1. LibreOffice 7.5.8 was released on November 2
  2. LibreOffice 7.6.3 was released on November 23
  3. Olivier Hallot (TDF) updated menu item paths in Help pages and updated and restructured dozens of help pages
  4. Rafael Lima updated ScriptForge help
  5. Stanislav Horacek updated menu item paths in Help pages alongside other corrections
  6. Ilmari Lauhakangas (TDF) updated Help pages after UI string changes
  7. Gábor Kelemen (allotropia) did code cleanups in the area of unused config keys and includes
  8. Laurent Balland extended ODF to allow lowercase for exponent characters and blank expontent digits, did many fixed in Impress templates
  9. Miklós Vajna (Collabora) worked on multi-page floating tables in Writer. He also did code cleanups and build fixes
  10. Jean-Pierre Ledure worked on the ScriptForge library
  11. Szymon Kłos, Michael Meeks and Marco Cecchetti (Collabora) worked on LOKit used by Collabora Online
  12. Henry Castro (Collabora) made Calc’s background colour autofiltering more robust and added an automated test for PPTX master slides
  13. Attila Szűcs (Collabora) improved FontWork text placement
  14. Skyler Grey (Collabora) continued polishing STYLEREF field support for DOCX compatibility
  15. Eike Rathke (Red Hat) made several improvements to date & time functions and calculations in Calc
  16. Tomaž Vajngerl (Collabora) wrote automated tests in preparation for OOXML header/footer import refactoring
  17. Julien Nabet simplified Hyperlink dialog after FTP support removal, fixed crashes and did many code cleanups
  18. Andreas Heinisch made Hyperlink and Edit Index dialogs remember their changed settings and fixed non-working Reset to Parent button in Paragraph Style dialog
  19. László Németh continued polishing change tracking of case cycling, fixed gtk popup listbox positions in Sidebar under X11, made it so lost linked graphics are shown in Accessibility Checker, fixed lost character background of non-breaking spaces and added support for smart justify found in DOCX files
  20. Xisco Faulí (TDF) did some automated test additions and cleanups
  21. Michael Stahl (allotropia) removed support for FTP, reduced the file size of exported tagged PDFs, made curl use OpenSSL on Linux after a version upgrade removed support for NSS, fixed an issue with disappearing paragraphs before tables in RTF documents, implemented support for \spltpgpar in RTF import (page breaks) and fixed Delete Undo/Redo of bookmark positions
  22. Mike Kaganski (Collabora) made command line arguments accept Windows \\?\ path prefixes, improved the Visual Studio IDE integration, improved the handling of macros in signed documents, fixed Excel’s Range.Find and Range.Replace wildcard recognition, added the ability to detect a broken ZIP package (document container), did some improvements to remote use of LanguageTool and made document repair more robust. He also made some clarifications in Help pages as well as many code cleanups and build fixes
  23. Caolán McNamara (Collabora) optimised the speed of calendar conversions in Calc and made font handling on Linux more robust. He also did code cleanups and optimisations and fixed issues found by code analysers
  24. Stephan Bergmann (allotropia) did many code cleanups, for example in the area of strings and adapted the code to compiler changes
  25. Noel Grandin (Collabora) optimised the speed of spellchecking code and made UI tests easier to debug. He also did many code cleanups and optimisations, for example simplifying the drawing of gradients and creating a Clang plugin that looks for fields on objects that can be local variables
  26. Justin Luth (Collabora) fixed modifying hyperlinks in form controls and made mouse click targeting of hyperlinks in shapes more robust
  27. Heiko Tietze (TDF) made Start Center use system colours and made Quick Find and Find and Replace dialogs use a better icon
  28. Michael Weghorn (TDF) fixed accessibility issues in areas such as button toggling, Spelling dialog and radio buttons. He also did many updates to the LibreOffice Android Viewer, for example making it support Android system theme, resulting in a re-release in Google Play Store
  29. Balázs Varga (allotropia) continued working on proper indications for locked down items in Options
  30. Patrick Luby (NeoOffice) fixed many graphics and UI rendering glitches and improved the scrolling performance on macOS
  31. Jim Raykowski improved Navigator performance, fixed an issue with unwanted direct formatting being applied from Character Properties dialog, fixed an issue with Draw layer visibility settings, made it so sections can be shown as an expandable/collapsible hierarchy in the Writer Navigator and made it possible to protect and hide sections via Navigator
  32. Sarper Akdemir (allotropia) added a password policy and strength meter to Save with Password dialog
  33. Christian Lohmaier (TDF) fixed opening PDF files in the macOS appstore version and improved the MSI packaging code
  34. Chris Sherlock refactored text rendering code
  35. Regina Henschel implemented support for importing Wordprocessing Canvas, wpc:wpc element in DOCX files
  36. Sahil Gautam implemented highlighting the current row and column in spreadsheets
  37. Irgaliev Amin made the buttons in Impress navigation bar scalable
  38. Paris Oplopoios (Collabora) made rendering of conditional formats more robust and made chart background colour match with document colour
  39. Frank Steiner enabled using medium/full font hinting even with subpixel positioning on Linux
  40. Gökay Şatır (Collabora) improved localised keyboard shortcuts
  41. Khushi Gautam modernised the “Flowchart Alternate Process” shape to use circular corner rounding in all sizes
  42. Vasily Melenchuk (CIB) made exported RTF files leaner by dropping unnecessary fallback images for shapes
  43. Samuel Mehrbrodt (allotropia) moved various Impress options to more intuitive places, made it so expert configuration items show descriptions, added proper editing support for numbers in expert config and made lists editable in expert config
  44. Venetia Furtado made it so the Extensions button in Start Center leads to a reasonable URL even from translated interfaces
  45. Thorsten Behrens (allotropia) did code and build cleanups that improve build reproducibility
  46. Armin Le Grand (allotropia) continued with the rework of handling attributes and properties
  47. Oliver Specht (CIB) fixed an issue preventing pasting hyperlinks from PowerPoint to Impress and Draw by adding a new paste option: Simple HTML, implemented handling of paragraph attributes in RTF import and fixed an issue with disappearing footnotes after applying spelling corrections
  48. Matt K fixed an issue with Find and Replace applying the font attributes of the first character in the ‘find’ match to the entire replaced string, added AutoCorrect support for italic and strikethrough, fixed an off-by-one error in AutoCorrect with Track Changes active and made it so empty UNO listeners are not allowed, making macro code stabler
  49. Hossein Nourikhah (TDF) improved and expanded SDK example code and buildability
  50. Gülşah Köse (Collabora) worked on jsdialog used by Collabora Online

Kudos to Ilmari Lauhakangas for helping to elaborate this list.

Reported Bugs

454 bugs, 63 of which are enhancements, have been reported by 279 people.

Top 10 Reporters

  1. Gabor Kelemen (allotropia) ( 54 )
  2. Stéphane Guillou (stragu) ( 13 )
  3. Mike Kaganski ( 12 )
  4. Eyal Rozenberg ( 9 )
  5. Jérôme ( 9 )
  6. Kira Tubo ( 8 )
  7. Timur ( 6 )
  8. László Németh ( 5 )
  9. Regina Henschel ( 5 )
  10. David García ( 5 )

Triaged Bugs

482 bugs have been triaged by 71 people.

Top 10 Triagers

  1. Stéphane Guillou (stragu) ( 131 )
  2. Buovjaga ( 60 )
  3. m.a.riosv ( 39 )
  4. Heiko Tietze ( 32 )
  5. raal ( 22 )
  6. Mike Kaganski ( 18 )
  7. Julien Nabet ( 17 )
  8. Michael Weghorn ( 16 )
  9. Xisco Faulí ( 13 )
  10. Dieter ( 10 )

Resolution of resolved bugs

479 bugs have been set to RESOLVED.

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

Fixed Bugs

168 bugs have been fixed by 32 people.

Top 10 Fixers

  1. Balazs Varga ( 34 )
  2. Noel Grandin ( 9 )
  3. Mike Kaganski ( 8 )
  4. Michael Weghorn ( 7 )
  5. László Németh ( 6 )
  6. Michael Stahl ( 6 )
  7. Laurent Balland ( 5 )
  8. Andreas Heinisch ( 4 )
  9. Patrick Luby ( 4 )
  10. Jim Raykowski ( 4 )

List of high severity bugs fixed

  1. tdf#158341 FILEOPEN DOCX Endless loop on opening file ( Thanks to Miklos Vajna )

List of crashes fixed

  1. tdf#127547 Freeze/crash in Microsoft Print to PDF dialog when trying to paste (Ctrl-V) a filename in the ‘Save Print Output As’ dialog ( Thanks to Noel Grandin )
  2. tdf#158169 Crash when using multiple Views ( Thanks to Armin Le Grand (allotropia) )
  3. tdf#158171 Crash when double-clicking DeepL translation dialog OK button ( Thanks to Julien Nabet )
  4. tdf#158224 EDITING CRASH Cannot convert bitmap to polygons ( Thanks to Noel Grandin )
  5. tdf#158345 Opening Hyperlink dialog leads to crash ( Thanks to Julien Nabet )
  6. tdf#158459 Crash copying a range with tracked changes to clipboard ( Thanks to Mike Kaganski )

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

  1. tdf#104288 FILESAVE RTF: File size increases with factor 5 after re-saving a certain RTF-document ( Thanks to Vasily Melenchuk )
  2. tdf#108318 Copying a hyperlink into a textbox messes up its frame target ( Thanks to Justin Luth )
  3. tdf#112131 Unable to modify hyperlink target in document ( Thanks to Justin Luth )
  4. tdf#112661 NSAccessibility – RecentFiles button missing accessibility action support equivalent to click/tap inputs. ( Thanks to Michael Weghorn )
  5. tdf#112662 NSAccessibility – Templates button in StartCenter missing accessibility action support equivalent to click/tap inputs. ( Thanks to Michael Weghorn )
  6. tdf#115871 “Reset to Parent” button in Paragraph Style dialog does not revert to parent values for any of the controls in the Outline & List tab ( Thanks to Andreas Heinisch )
  7. tdf#119908 FILEOPEN: DOCX: Layout differences with justified paragraph. MS 2013 introduced a new “smart justify” that can shrink as well as expand. ( Thanks to László Németh )
  8. tdf#125580 Slightly off value when adding date plus time values ( Thanks to Eike Rathke )
  9. tdf#127498 TIMEVALUE() sometimes returns a slightly less or greater than expected value ( Thanks to Eike Rathke )
  10. tdf#127547 Freeze/crash in Microsoft Print to PDF dialog when trying to paste (Ctrl-V) a filename in the ‘Save Print Output As’ dialog ( Thanks to Noel Grandin )
  11. tdf#96401 FILEOPEN: DOCX – Specific file reported as corrupted (openable in MSO but not in other programs because of unzip error, backslash “\” as filename separator) ( Thanks to Mike Kaganski )

WORKSFORME bugs

50 bugs have been retested by 28 people.

Top 10 testers

  1. Stéphane Guillou (stragu) ( 11 )
  2. Buovjaga ( 6 )
  3. Dieter ( 5 )
  4. Julien Nabet ( 3 )
  5. Timur ( 2 )
  6. BogdanB ( 2 )
  7. Rainer Bielefeld Retired ( 2 )
  8. Steven Casey ( 1 )
  9. ikjt ( 1 )
  10. Heiko Tietze ( 1 )

DUPLICATED bugs

121 bugs have been duplicated by 29 people.

Top 10 testers

  1. Stéphane Guillou (stragu) ( 55 )
  2. Buovjaga ( 14 )
  3. Gabor Kelemen (allotropia) ( 9 )
  4. m.a.riosv ( 6 )
  5. Mike Kaganski ( 5 )
  6. Timur ( 4 )
  7. V Stuart Foote ( 4 )
  8. raal ( 3 )
  9. Justin L ( 2 )
  10. Xisco Faulí ( 2 )

Verified bug fixes

33 bugs have been verified by 8 people.

Top 10 Verifiers

  1. Dieter ( 11 )
  2. Stéphane Guillou (stragu) ( 11 )
  3. Gabor Kelemen (allotropia) ( 4 )
  4. BogdanB ( 2 )
  5. Gerald Pfeifer ( 2 )
  6. Buovjaga ( 1 )
  7. Timur ( 1 )
  8. Julien Nabet ( 1 )

 
 

Categorized Bugs

341 bugs have been categorized with a metabug by 26 people.

Top 10 Categorizers

  1. Stéphane Guillou (stragu) ( 137 )
  2. BogdanB ( 61 )
  3. Buovjaga ( 21 )
  4. Heiko Tietze ( 20 )
  5. Xisco Faulí ( 16 )
  6. Dieter ( 13 )
  7. Eyal Rozenberg ( 12 )
  8. Gabor Kelemen (allotropia) ( 11 )
  9. Jérôme ( 11 )
  10. László Németh ( 9 )

Regression Bugs

50 bugs have been set as regressions by 16 people.

Top 10

  1. Stéphane Guillou (stragu) ( 14 )
  2. m.a.riosv ( 7 )
  3. Xisco Faulí ( 5 )
  4. Gabor Kelemen (allotropia) ( 4 )
  5. Buovjaga ( 4 )
  6. raal ( 3 )
  7. Kira Tubo ( 2 )
  8. ady ( 2 )
  9. Sophie Sipasseuth ( 2 )
  10. W Cole ( 1 )

Bisected Bugs

39 bugs have been bisected by 10 people.

Top 10 Bisecters

  1. Stéphane Guillou (stragu) ( 13 )
  2. Buovjaga ( 6 )
  3. raal ( 6 )
  4. Xisco Faulí ( 5 )
  5. Kira Tubo ( 2 )
  6. BogdanB ( 2 )
  7. Gabor Kelemen (allotropia) ( 2 )
  8. Timur (

by x1sc0 at December 06, 2023 12:32 PM

December 05, 2023

Official TDF Blog

The Calc Guide 7.6 is Published

The Documentation Team is proud to announce the immediate availability of the Calc Guide release 7.6.

The Calc Guide 7.6 update was coordinated by Steve Fanning, with assistance of Olivier Hallot and B. Antonio Fernandez, and is based on the Calc Guide 7.5. Many accessibility issue were addressed and is work in progress.

Steve Fanning

Steve Fanning

This book has been updated from LibreOffice Calc Guide 7.5. It covers changes that are visible in the LibreOffice Calc user interface, including the following areas:
• Detect scientific notation option on Text Import dialog (Chapters 1 & 11).
• Confirmation dialog when deleting empty sheet(s) (Chapter 1).
• Data Entry Form tool (Chapter 2).
• Sort by Color option for AutoFilters (Chapters 2 & 14).
• Poisson distribution option for random numbers on the Fill tool (Chapter 2).
• Chart data tables (Chapter 3).
• Sparklines (Chapter 3).
• Drawing styles (Chapter 5).
• Document themes (Chapters 5 & 15).
• Formula indicator and hint option (Chapters 8 & 15).
• Removed unnecessary statement about taking particular care when using date information in the GETPIVOTDATA() function (Chapter 9).
• Pivot table compact layout (Chapter 9).
• Saving solver settings to file (Chapter 10).
• General comment facility (Chapter 12).
• Error codes (Appendix B).

LibreOffice 7.6 Community also includes many other changes, including improvements in accessibility, change tracking, spell checking, and interoperability with Microsoft’s proprietary file formats.

Release Notes are here: https://wiki.documentfoundation.org/ReleaseNotes/7.6

The guide is available for immediate download in PDF format as well as in source format (OpenDocument Format). Soon it will be available as printed book by LuLu inc. and in HTML format for online reading

Download the Calc Guide 7.6 from the documentation websites at: documentation.libreoffice.org and the bookshelf at books.libreoffice.org.

by Olivier Hallot at December 05, 2023 09:53 PM

LibreOffice community interview: Robert Cabane, QA project

Robert Cabane

Today we’re talking to Robert Cabane, who helps out in LibreOffice’s Quality Assurance (QA) community:

Tell us a bit about yourself!

I’m now retired (aged 71), living in Bordeaux, France. Formerly mathematics teacher, successively in Paris and Bordeaux, and as such involved in the teaching of computer science (named “informatics” in Europe).

Since my retirement, I have been an active member of the Société Informatique de France. I have also been co-author of some textbooks on mathematics.

In my free time I like to go hiking in the Pyrenées mountains.

What are you working on in the LibreOffice project right now?

I like to detect bugs and check for them in Bugzilla! When you encounter something strange using LibreOffice, it’s not immediately clear whether it’s a bug or a feature… so I first look in Ask LibreOffice or the forums.

After that, searching in Bugzilla for a specific bug is a unique experience, because LibreOffice is an enormous piece of software. You have to test various keywords in order to eventually find a more or less corresponding bug description. If the bug is referenced, consider adding useful comments; if it’s not the case, try to propose a new bug, as well-documented as possible.

Why did you choose to join the project, and how was the experience?

I started as a user with StarOffice 5.2 (1999), simply because I needed a good office suite running under Linux, and I followed with OpenOffice.org and LibreOffice since its beginning.

My experience was excellent with Calc, good with Draw, and more difficult with Writer, essentially because of two reasons: writing mathematics with Writer isn’t as easy as it is with LaTeX, and exchanging documents with people who use Microsoft Word can be very frustrating at times.

Anything else you plan to do in the future? What does LibreOffice really need?

I think that some activism is still useful at the citizen level: using LibreOffice instead of Microsoft Office is now very common in local, regional and national associations, and should increase for evident reasons. And making donations eligible to tax deductions (as is the case in Germany) would be fantastic!

Big thanks to Robert for all his contributions! Everyone is welcome to join our QA community and help to keep LibreOffice rock-solid.

by Mike Saunders at December 05, 2023 09:23 AM

December 04, 2023

Michael Meeks

2023-12-04 Monday

  • As part of my 4D chess / cunning plan to convince everyone I'm more foolish even than I seem - I got up super early, and took a train to London/St Pancras to discover I was a day early for my train; bother. Got some quiet code-reading in on the train home at least.
  • Planning call, sync with Naomi & Pedro, finalized annual reviews, and dispatched numbers left & right. Worked late.

December 04, 2023 05:42 PM

Miklos Vajna

Multi-page floating tables in Writer: UI improvements

This post is part of a series to describe how Writer now gets a feature to handle tables that are both floating and span over multiple pages.

This work is primarily for Collabora Online, but is useful on the desktop as well. See the 9th post for the previous part.

Motivation

Previous posts described the hardest part of multi-page floating tables: reading them from documents, so we layout and render them. In this part, you can read about UI improvements when it comes to creating, updating and deleting them in Writer.

Results so far

Regarding testing of the floating table feature in general, the core.git repository has 89 files now which are focusing on correct handling of floating tables (filenames matching floattable-|floating-table-). This doesn't count cases where the document model is built using C++ code in the memory and then we assert the result of some operation.

Here are some screenshots from the improvements this month:

Improved insertion of floating tables

The first screenshot shows that the underlying LibreOffice Insert Frame dialog is now async (compatible with collaborative editing) and is now exposed in the Collabora Online notebookbar.

There were other improvements as well, so in case you select a whole table and insert a new frame, the result is close to what the DOCX import creates to floating tables. This includes a default frame width that matches the table width, and also disabling frame borders, since the table can already have one.

Unfloating a floating table

The next screenshot shows an inserted floating table, where the context menu allows updating the properties of an already inserted floating table, and also allows to delete ("unfloat") it.

Several of these changes are shared improvements between LibreOffice and Collabora Online, so everyone benefits. For example, inserting a frame when a whole table was selected also cleared the undo stack, which is now fixed. Or unfloating table was only possible if some part of the table was clipped, but now this is always possible to do.

How is this implemented?

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

As usual, the high-level problem was addressed by a series of small changes:

Want to start using this?

You can get a snapshot / demo of Collabora Office 23.05 and try it out yourself right now: try the unstable snapshot. Collabora intends to continue supporting and contributing to LibreOffice, the code is merged so we expect all of this work will be available in TDF's next release too (24.2).

by Miklos Vajna at December 04, 2023 03:26 PM

December 03, 2023

Michael Meeks

2023-12-03 Sunday

  • Up early, off to visit Naomi in Loughborough; met her at Holywell Church and enjoyed the service together.
  • Out for a pub lunch together, and back to for a guided tour of engineering things - interesting. Out to visit Ruth & boys very briefly to drop some hardware off.
  • Bid 'bye to N. and drove home; dinner, bed early.

December 03, 2023 09:00 PM

Official TDF Blog

Winners in the Month of LibreOffice, November 2023 – Get your free sticker pack!

Month of LibreOffice stickers

At the beginning of November, we began a new Month of LibreOffice, celebrating community contributions all across the project. We do these every six months – so how many people got sticker packs this time? Check it out…

Fantastic work, everyone! Hundreds of people, all across the globe, have helped out in our projects and communities. We’re hugely thankful for your contributions – and, of course, everyone who’s listed on the wiki page can get a sticker pack, with the stickers shown above.

How to claim

If you see your name (or username) on this page, get in touch! Email mike.saunders@documentfoundation.org with:

  • your name (or username) from the wiki page
  • along with your postal address

and we’ll send you a bunch of stickers for your PC, laptop and other kit. (Note: your address will only be used to post the stickers, and will be deleted immediately afterwards.) If you contributed to the project in November but you’re not on the wiki page, please let us know what you did, so that we can add you!

There is one more thing…

And we have an extra bonus: nine contributors have also been selected at random to get an extra piece of merchandise – a LibreOffice hoodie, T-shirt, rucksack or snazzy glass mug. Here are the winners (names or usernames) – we’ll get in touch personally with the details:

  • Kira Tubo
  • Steph1
  • @makerblock@mastodon.social
  • Joanmarie Diggs
  • PaulL1
  • Bernd Wechner
  • @hack_the_planet@fosstodon.org
  • Xandru Martino Ruz
  • Sahil Gautam
  • TXDon

Congratulations to all the winners, and a big thanks once again to everyone who took part – your contributions keep the LibreOffice project strong. We plan to have another Month of LibreOffice in 2024, but everyone is welcome to see what they can do for LibreOffice at any time!

by Mike Saunders at December 03, 2023 10:53 AM

December 02, 2023

Michael Meeks

2023-12-02 Saturday

  • J. out to counselling training; slept exhaustedly for much of the morning; lunch with the babes, slugged. Cleaned up blog. To work!
  • Discovered lots of un-read and answered E-mail in the backlog; bother - worked on that.

December 02, 2023 09:00 PM

December 01, 2023

Michael Meeks

2023-12-01 Friday

  • Partner call, sync with Miklos; another partner sync. Got to some debugging and hacking finally - whoot; found a nasty incremental view update regression & eventually fixed it late.

December 01, 2023 09:00 PM

November 30, 2023

Michael Meeks

2023-11-30 Thursday

  • Technical planning call, sync with finance & Deirdre on end of year comp adjustments - monster spreadsheets of doom; good testing action: why is it that problems tend to only show up in the most confidential documents - and in the least debuggable places? fun.
  • Into the office quickly to free up some rack-space; wiped misc. hardware. Started working back through E-mail.

November 30, 2023 09:00 PM

LibreOffice QA Blog

LibreOffice 24.2 Alpha1 is available for testing

LibreOffice 24.2 will be released as final at the beginning of February, 2024 ( Check the Release Plan ) being LibreOffice 24.2 Alpha1 the first pre-release since the development of version 24.2 started in mid June, 2023. Since then, 4271 commits have been submitted to the code repository and more than 787 bugs were set to FIXED in Bugzilla. Check the release notes to find the new features included in this version of LibreOffice.

LibreOffice 24.2 Alpha1 can be downloaded for Linux, macOS and Windows, and it can be installed alongside the standard version.

In case you find any problem in this pre-release, please report it in Bugzilla ( You just need a legit email account in order to create a new account ).

For help, you can contact the QA Team directly in the QA IRC channel or via Matrix.

LibreOffice is a volunteer-driven community project, so please help us to test – we appreciate it!

Happy testing!!

Download it now!

by x1sc0 at November 30, 2023 10:15 AM

November 29, 2023

Official TDF Blog

LibreOffice in Sri Lanka

ICTer International Conference is the successor to the seminal International Information Technology Conference (IITC) held in Sri Lanka since 1998. We have been invited by the conference organizers, thanks to the connection established by Daniska Navin, a long time project member, to attend the 2023 event on November 8 and November 9, to present LibreOffice during a keynote speech, and to manage a two day workshop about LibreOffice and the Migration Protocol, on November 7 and November 10.

I attended the conference and provided the keynote speech about LibreOffice Technology, and together with Lothar Becker – Certification Co-Chair – managed the two day workshop. The conference was a huge success, as we met many interested people, including some students who asked to organize a similar workshop in 2024 at their universities in other cities of Sri Lanka. We will definitely be back next year to attend ICTer 2024, and to visit the other universities for a workshop.

During the workshop we covered many topics:

  1. Workshop Day 1: LibreOffice project’s history, the technical evolution of the development platform, LibreOffice’s six modules, with an introduction to main features, an introduction to open source software and open standards (for software and for documents), and free open-source licenses and business models.
  2. Workshop Day 2: LibreOffice Migration Protocol, fixing bugs and regressions, interoperability with proprietary document formats, conversion of document templates and macros, compatibility of VBA macros, and integration with third-party applications.

At the end of the workshop, we handed the basic LibreOffice Certified recognition to the following people (in alphabetical order by first name): BWRU Siriwardhana, CS Jayakody, DN Gunawardana, Dilani Sagarika, DMDC Kumari, Gayani Sadagiri, HK Jayarathna, HP Henegama, JKDI Thilakarathne, JRM Muthumalki, KDPM Kannangara, Malsha Katugampala, Mrs LC Karunasagara, Ms AS Gunathilake, Nisantha Ranathunga, NS Gajasinghe, R Prasanna, Rajika Dilrukshi, Renuka Matiwalakumbura, RMJM Rathnayake, Ruwan Jayalath, Sachini de Silva, Selani Ekenayake, Vimukthika Sewwuandi and WMNK Weerasooriya.

A big thank to all our hosts at the School of Computing of the University of Colombo: the Director Dr DAS Atukorale and the Deputy Director Prof Kasun de Zoysa, and all the other academic and administrative staff members who have welcomed us and made the conference memorable. A special thanks to Sanduni Thrimavithana, who made our stay as memorable as the conference. And a final thanks to all the other people we have met during the four days. See you all in 2024.

by Italo Vignoli at November 29, 2023 04:17 PM

November 25, 2023

LibreOffice Dev Blog

LibreOffice extensions with Python – part 1

Ever wondered how to create a LibreOffice extension? Here I discuss how to do that via Python programming language. It is possible to run and debug the resulting Python code in an IDE, and then package the content as an extension.

LibreOffice Extensions with Python

If you have used LibreOffice extensions, you know that many exciting things can be done with extensions. Extensions can open LibreOffice applications, create new documents, read and write text and images inside the documents, and convert them to all possible formats. They can have their own menus and toolbar buttons, and have nice looking GUIs to interact with the users.

To write an extension, the easiest way is to use LibreOffice BASIC language. You can refer to this tutorial for such an approach here:

But with Python, you will have access to a big set of packages, that is one of the many strengths of the Python programming language. You can do almost anything possible with a software with those packages. Furthermore, LibreOffice has its own Python interpreter! In this way, installing and using a Python extension would be much easier.

Handling Context in LibreOffice Extensions

First of all, you should know about context, and you should be able to have that variable to be able to use LibreOffice API.

There can be at least 3 different possibilities for running a Python program with LibreOffice:

  1. Running the Python program with APSO inside LibreOffice
  2. Running the Python program as an extension inside LibreOffice
  3. Running the Python program as a process outside LibreOffice

In each of these possibilities, the way to get the context and use them is different.

Structure of a LibreOffice Extension

Extensions are essentially zip files that have specific files known to LibreOffice inside them. This is the structure of a Python extension:

  • META-INF/ : required folder
    META-INF/manifest.xml: Specification of the script(s), menu/toolbar and language files
  • pkg-description/ : required folder
    pkg-description/pkg-description.en: Description of the extension in text, which can be also in languages other than English
  • registration/: required folder
    registration/license.txt: License of the extension
  • description.xml: Description of the extension in XML format, as displayed in the extension manager
  • main.py: The main script. Then name can be anything but it should
    be specified in the META-INF/manifest.xml

Contents of the Files

Most of the contents of the files are re-usable, so you can use the skeleton extension, and build your extension around that. But, the Python script is important and we will talk about it here.

From the above 3 possible situations for LibreOffice, in order to be able to use the code as extension, you should add these this 2 lines should be in the Python file

g_ImplementationHelper = unohelper.ImplementationHelper()
g_ImplementationHelper.addImplementation(MainJob,
"org.extension.sample.do",("com.sun.star.task.Job",), )

In addition, this import is also required:

from com.sun.star.task import XJobExecutor

Then, a Python class with this definition is needed:

class MainJob(unohelper.Base, XjobExecutor)

The program should have this method:

def trigger(self, args):

To be able to debug the program, the main function should be defined as something like this:

def main():
    try:
        ctx = XSCRIPTCONTEXT
    except NameError:
        ctx = officehelper.bootstrap()
        if ctx is None:
            print("ERROR: Could not bootstrap default Office.")
            sys.exit(1)
    job = MainJob(ctx)
    job.trigger("keywords")


if __name__ == "__main__":
    main()

This is a sample implementation of the MainJob class:

class MainJob(unohelper.Base, XJobExecutor):
    def __init__(self, ctx):
        self.ctx = ctx
        # handling different situations (inside LibreOffice / different process)
        try:
            self.sm = ctx.getServiceManager()
            self.desktop = XSCRIPTCONTEXT.getDesktop()
        except NameError:
            self.sm = ctx.ServiceManager
            self.desktop = self.ctx.getServiceManager().createInstanceWithContext(
                "com.sun.star.frame.Desktop", self.ctx)

And this is a sample trigger() function that opens Writer, and write a sample text consisting of the argument passed to it.

    def trigger(self, args):
        desktop = self.ctx.ServiceManager.createInstanceWithContext(
            "com.sun.star.frame.Desktop", self.ctx)
        model = desktop.getCurrentComponent()
        if not hasattr(model, "Text"):
            model = self.desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, ())
        text = model.Text
        cursor = text.createTextCursor()
        text.insertString(cursor, "Hello Extension argument -> " + args + "\n", 0)

You can use this structure to create Python extension that you want to create.

A complete extension with the above files is available here, and the plan is to make it available among the other LibreOffice SDK examples:

https://gerrit.libreoffice.org/c/core/+/159938

Final Notes

This year we had an extensive workshop on LibreOffice development in LibreOffice conference 2023. If you want to know more about using LibreOffice API in Python, you can refer to the presentation:

by Hossein Nourikhah at November 25, 2023 09:55 AM

November 22, 2023

LibreOffice QA Blog

QA/Dev Report: October 2023

General Activities

  1. Olivier Hallot (TDF) continued adding Tabbed UI examples into help instructions and updated and restructured dozens of help pages
  2. Rafael Lima added support for hidden named ranges in Calc, fixed named ranges associated to sheets being lost upon XLSX export and made it so renaming a sheet updates ranges in solver models
  3. Bogdan Buzea made some UI string improvements
  4. Seth Chaiklin updated help after UI label change related to outline levels
  5. Stanislav Horacek improved the help for Firebird wizard
  6. Ilmari Lauhakangas (TDF) added a method to automated test for dealing with DPI variance, improved Search Commands result presentation, updated help after UI string changes and improved the accessibility of help navigation
  7. Alain Romedenne updated ScriptForge help
  8. Bartosz Kosiorek added handling for invalid records in Windows Metafile graphics
  9. Gábor Kelemen (allotropia) did code cleanups in the area of includes, created a script to find unused config groups/keys and improved some UI strings
  10. Laurent Balland did code cleanups
  11. Miklós Vajna (Collabora) worked on multi-page floating tables in Writer
  12. Jean-Pierre Ledure worked on the ScriptForge library
  13. Szymon Kłos (Collabora) worked on LOKit and jsdialog used by Collabora Online. He also worked on the simple conditional formatting dialog created by Paris Oplopoios
  14. Henry Castro (Collabora) worked on LOKit used by Collabora Online. He also improved the Python UI test system, fixed an issue with unused master slides not being imported from PPTX files and made handling of bidirectional text in Calc cells more robust
  15. Pranam Lashkari (Collabora) worked on LOKit and jsdialog used by Collabora Online
  16. Ashod Nakashian, Marco Cecchetti and Andras Timar (Collabora) worked on LOKit used by Collabora Online
  17. Pedro Silva worked on jsdialog used by Collabora Online
  18. Jaume Pujantell (Collabora) worked on Microsoft Office compatibility improvements in the area of content controls
  19. Attila Szűcs (Collabora) worked on LOKit used by Collabora Online. He also improved change tracking in Writer
  20. Skyler Grey (Collabora) worked on jsdialog used by Collabora Online and improved DOCX compatibility by adding full support for STYLEREF fields
  21. Eike Rathke (Red Hat) made date functions in Calc more robust and improved error propagation in Calc formulas
  22. Tomaž Vajngerl (Collabora) wrote some unit tests for Writer and did code cleanups
  23. Julien Nabet made it possible to use ProjectionMode and ShadeMode for extruded custom shapes via BASIC macros and did code cleanups
  24. Andreas Heinisch made the Slide/Page pane in Impress/Draw have the expected title when in Master view and made it possible to create new master slides in the Slide pane by pressing Enter
  25. László Németh improved change tracking of case cycling and made exported DOCX files compatible with Microsoft Office’s default paragraph justification algorithm
  26. Xisco Faulí (TDF) did a couple of dozen additions and changes to automated tests, fixed a Calc crash and added UNO commands for variable date/time fields
  27. Michael Stahl (allotropia) made many improvements and fixes to the export of accessible PDFs
  28. Mike Kaganski (Collabora) made exported HTML tables cleaner, fixed pasting sometimes losing wrapping information in Writer on Windows, added an option to avoid converting some fields into text during mail merge, added a PreserveSpaces option to HTML/ReqIF export that changes the handling of paragraphs with leading/trailing spaces or multiple sequential spaces, added a ExportFormulasAsPDF option to ReqIF export, fixed “Fit to page” printing option, fixed an issue with formula positions in printing and PDF export and made PDF importing more robust with “trailers”
  29. Caolán McNamara (Collabora) fixed many crashes, did code cleanups and optimisations and fixed issues found by code analysers
  30. Stephan Bergmann (Red Hat) started making heavy use of C++20 features in the area of text strings and made several fixes to automated tests
  31. Noel Grandin (Collabora) improved the performance of Calc UI and documents with lots of images and made automated UI tests more robust. He also did many code cleanups and optimisations, for example simplifying error reporting while making it easier for developers to debug problems
  32. Justin Luth (Collabora) made many improvements to Notebookbar UIs
  33. Heiko Tietze (TDF) improved the notification feedback for not found search keys and made the Security tab of the PDF export dialog behave more intuitively
  34. Michael Weghorn (TDF) fixed accessibility issues in areas such as status bar, spelling errors and text attributes. He also bumped Java build baseline from JDK 9 to 17 and did some cleanups and improvements related to Qt/Kf5 UI
  35. Balázs Varga (allotropia) added a UI to control personal information to be removed upon saving documents and a config option for building with or without unnecessary template files and started working on proper indications for locked down items in Options
  36. Patrick Luby (NeoOffice) fixed crashes and many issues related to UI and graphics rendering on macOS
  37. Jim Raykowski improved the accessibility checker, added UNO commands for style spotlight and made many improvements to Navigator
  38. Taichi Haradaguchi made it so bz2 module is included in the Python shipped with LibreOffice, updated several dependencies and did cleanups in makefiles
  39. Sarper Akdemir (allotropia) started working on a password strength meter
  40. Kohei Yoshida upgraded liborcus and added support for conditional loading of Apache Parquet files into Calc
  41. Christian Lohmaier (TDF) did build-related improvements and fixes
  42. Chris Sherlock refactored text and graphics rendering code
  43. Regina Henschel improved Microsoft Office compatibility regarding shape objects and made it so Connector dialog allows negative values for Line Skew
  44. Sahil Gautam added an automated test and did code cleanups
  45. Li Yang added an automated test
  46. Mihai Vasiliu fixed an issue causing Master Slides sidebar to open with zero width
  47. Omkar Acharekar added several automated tests
  48. Martin Gube made it so comments in Writer are kept when spell correction replaces a word
  49. Matthew Kogan made comparison of changed paragraph numbering optional
  50. Irgaliev Amin made it so the option to show slide pane in Impress is retained across sessions
  51. Mert Tumer (Collabora) made an optimisation to LanguageTool locale loading
  52. Paris Oplopoios (Collabora) added an easy to use conditional formatting menu to Calc

Kudos to Ilmari Lauhakangas for helping to elaborate this list.

Reported Bugs

456 bugs, 66 of which are enhancements, have been reported by 279 people.

Top 10 Reporters

  1. Gabor Kelemen (allotropia) ( 37 )
  2. Eyal Rozenberg ( 20 )
  3. Xisco Faulí ( 20 )
  4. Regina Henschel ( 10 )
  5. Mike Kaganski ( 10 )
  6. Gerald Pfeifer ( 8 )
  7. Stéphane Guillou (stragu) ( 7 )
  8. Tracey ( 7 )
  9. Robert Großkopf ( 6 )
  10. peter josvai ( 5 )

Triaged Bugs

639 bugs have been triaged by 71 people.

Top 10 Triagers

  1. Stéphane Guillou (stragu) ( 184 )
  2. Buovjaga ( 90 )
  3. m.a.riosv ( 54 )
  4. Heiko Tietze ( 43 )
  5. Xisco Faulí ( 34 )
  6. Dieter ( 29 )
  7. raal ( 20 )
  8. Mike Kaganski ( 19 )
  9. Kira Tubo ( 14 )
  10. Julien Nabet ( 12 )

Resolution of resolved bugs

604 bugs have been set to RESOLVED.

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

Fixed Bugs

166 bugs have been fixed by 30 people.

Top 10 Fixers

  1. Balazs Varga ( 18 )
  2. Patrick Luby ( 10 )
  3. Justin Luth ( 10 )
  4. Mike Kaganski ( 9 )
  5. Miklos Vajna ( 9 )
  6. Noel Grandin ( 9 )
  7. Michael Weghorn ( 8 )
  8. Caolán McNamara ( 8 )
  9. Jim Raykowski ( 7 )
  10. Michael Stahl ( 6 )

List of high severity bugs fixed

  1. tdf#152571 Very slow save (macOS, ARM) ( Thanks to Noel Grandin )
  2. tdf#156685 Default font color in tables is white over white background (font color should be black) ( Thanks to Heiko Tietze )
  3. tdf#157132 LibreOffice 7.6.0 copying of formulas in writer table – relative distance of cells in formula not preserved after copying to other lines ( Thanks to Xisco Fauli )
  4. tdf#157515 Crash on clicking Reset when modifying Background presentation style (gtk3) ( Thanks to Caolán McNamara )
  5. tdf#157613 Crash – Database Form – editing size of grid control causes hang requiring forced kill – SKIA raster rendering on (by default) ( Thanks to Patrick Luby )
  6. tdf#157680 Impress export corrupted pdf on MacOS ( Thanks to Patrick Luby )

List of crashes fixed

  1. tdf#101376 Wordcount Beanshell macro execution causes crash ( Thanks to Patrick Luby )
  2. tdf#154142 Crash in: SfxUndoManager::SetMaxUndoActionCount(unsigned __int64) ( Thanks to Caolán McNamara )
  3. tdf#157182 Crashes when exporting a certain presentation as PDF in Archival format PDF/A-1b ( Thanks to Michael Stahl )
  4. tdf#157515 Crash on clicking Reset when modifying Background presentation style (gtk3) ( Thanks to Caolán McNamara )
  5. tdf#157613 Crash – Database Form – editing size of grid control causes hang requiring forced kill – SKIA raster rendering on (by default) ( Thanks to Patrick Luby )
  6. tdf#157849 EDITING: crash on “Set Character Spacing” with custom value when hitting Enter (GTK3) ( Thanks to Caolán McNamara )

List of performance issues fixed

  1. tdf#157590 HANG: opening file with floating table ( Thanks to Miklos Vajna )

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

  1. tdf#100584 With an RTL sheet, make added sheets RTL as well ( Thanks to Andreas Heinisch )
  2. tdf#101376 Wordcount Beanshell macro execution causes crash ( Thanks to Patrick Luby )
  3. tdf#101970 [PACKAGING] Make default templates installation optional ( Thanks to Balazs Varga )
  4. tdf#106057 General input/output error loading pdf file (because of multiple trailers which is valid per PDF specification) ( Thanks to Mike Kaganski )
  5. tdf#111737 Not possible to create / add a new Master Slide with pressing Enter in slides/pages pane ( Thanks to Andreas Heinisch )
  6. tdf#116412 Bundled python fails to import bz2 on Windows ( Thanks to Taichi Haradaguchi )
  7. tdf#126449 Tables in DOC document are overlapping (one floating multipage table-in-table-in-table) ( Thanks to Miklos Vajna )
  8. tdf#127038 Tabbed toolbar: Unnecessary uno::InsertField redundancy in the “References” option group ( Thanks to Justin Luth )
  9. tdf#42787 Functionality request for Writer: Add deleting of Sections using the Delete function inside of the Navigator ( Thanks to Jim Raykowski )
  10. tdf#87638 Slide Pane should be titled ‘Master Slides’ when in master view ( Thanks to Andreas Heinisch )
  11. tdf#99822 FILEOPEN: Floating table objects in tables horizontal position relative to margin is wrong in Writer ( Thanks to Miklos Vajna )

WORKSFORME bugs

81 bugs have been retested by 34 people.

Top 10 testers

  1. Stéphane Guillou (stragu) ( 15 )
  2. Buovjaga ( 13 )
  3. Timur ( 6 )
  4. Kira Tubo ( 6 )
  5. Dieter ( 5 )
  6. Alex Thurgood ( 4 )
  7. Heiko Tietze ( 4 )
  8. BogdanB ( 3 )
  9. Xisco Faulí ( 2 )
  10. libreofficebugs ( 2 )

DUPLICATED bugs

172 bugs have been duplicated by 27 people.

Top 10 testers

  1. Stéphane Guillou (stragu) ( 83 )
  2. Buovjaga ( 24 )
  3. Heiko Tietze ( 11 )
  4. Mike Kaganski ( 9 )
  5. m.a.riosv ( 8 )
  6. V Stuart Foote ( 5 )
  7. Dieter ( 3 )
  8. raal ( 3 )
  9. Kira Tubo ( 3 )
  10. Justin L ( 2 )

Verified bug fixes

41 bugs have been verified by 13 people.

Top 10 Verifiers

  1. BogdanB ( 9 )
  2. Stéphane Guillou (stragu) ( 6 )
  3. Gerald Pfeifer ( 6 )
  4. Alex Thurgood ( 5 )
  5. Buovjaga ( 5 )
  6. Xisco Faulí ( 3 )
  7. Julien Nabet ( 1 )
  8. Roman Kuznetsov ( 1 )
  9. steve ( 1 )
  10. sdc.blanco ( 1 )

Categorized Bugs

558 bugs have been categorized with a metabug by 29 people.

Top 10 Categorizers

  1. BogdanB ( 241 )
  2. Stéphane Guillou (stragu) ( 180 )
  3. Eyal Rozenberg ( 27 )
  4. Dieter ( 14 )
  5. Heiko Tietze ( 13 )
  6. Buovjaga ( 12 )
  7. Roman Kuznetsov ( 11 )
  8. Gabor Kelemen (allotropia) ( 8 )
  9. Aron Budea ( 8 )
  10. Michael Weghorn ( 8 )

Regression Bugs

95 bugs have been set as regressions by 16 people.

Top 10

  1. Stéphane Guillou (stragu) ( 23 )
  2. Xisco Faulí ( 23 )
  3. Kira Tubo ( 11 )
  4. BogdanB ( 8 )
  5. raal ( 7 )
  6. Buovjaga ( 6 )
  7. Mike Kaganski ( 3 )
  8. Alex Thurgood ( 3 )
  9. m.a.riosv ( 2 )
  10. Gabor Kelemen (allotropia) ( 2 )

Bisected Bugs

85 bugs have been bisected by 11 people.

Top 10 Bisecters

  1. Xisco

by x1sc0 at November 22, 2023 08:59 AM

November 19, 2023

Stephan Bergmann

I like it here. Can I stay?

(And do you have a vacancy for a back-scrubber?)

Thank you, Red Hat, for generously letting me work for so long on stuff that is near and dear to my heart. At the intersection of theory and practice, of compiler technology and the LibreOffice code base. But, to keep doing what I love, I need to move on.

So, thank you, allotropia, for having me. I’m excited.

And, above all, thank you, LibreOffice, family of friends. Lets make sure to keep this a happy family, one that Tolstoy would have nothing to write home about. With quarrels and arguments, for sure; feud even. But happy at heart. I wish to keep meeting you all for years to come, virtually, and for a feast at FOSDEM or LOCon. And booze.

To paraphrase Hamburger Tafel (donations needed, btw), “Wir haben LibreOffice noch lange nicht satt.”

Have fun, stay safe, peace,
sberg

by stbergmann at November 19, 2023 10:58 AM

November 16, 2023

LibreOffice Dev Blog

String literals: C/C++ string data types part 2

In the first part of the series on string types in LibreOffice, I discussed some of the string data types that are in use in various places of the LibreOffice code. I discussed various character and string data types briefly: OString, OUString, char/char*, sal_Unicode, sal_Unicode*, rtl_String, rtl_uString and also std::string. Now I want to explain string literals.

String Literals

In C/C++, a string literal is a sequence of characters in double quotations, and represent read-only textual data. For example:

const char *str = "abc";

Please note that it is different from a character literal, which is a single character in single quotation marks:

const char c = 'a';

The non read-only version of these data types does not have const in it.

The char* data type is widely used in C programming language, but it is not the data type of choice in LibreOffice. As described in my previous post, OString is used for for 8-byte text, and OUStringis used for Unicode text in LibreOffice. It is worth noting that it is possible to store UTF-8 encoded Unicode text in OString.

In the past, it was possible to convert the const char* literal to OString/OUString like this: (it will not compile now)

OString sText = "abc";
OUString sUniText = u"abc";

It was not an efficient way to define and use such strings. A read-only memory is used to store the plain string literals. But then, a new dynamic memory chunk is allocated on the heap to store the new O[U]String object, and through the constructor, that read-only memory is copied into that memory. Also, the new OUString needs reference counting. These are non-necessary expensive operations, and we should avoid them.

O[U]StringLiteral

In LibreOffice, OStringLiteral and OUStringLiteral are the data types used to represent string literals for ASCII and Unicode data, respectively.

As an example, you can see lines like this in LibreOffice .cxx files:

static constexpr OUStringLiteral sStart = u"ABC";
static constexpr OStringLiteral sEnd("DEF");

The constexpr ensures that the expression is evaluated at compiled time, and this can improve the performance of the program. Also, avoiding reference counting in O[U]String helps to make the operation cheaper.

Later, OString/OUString variables are constructed from the OUStringLiterals. Or, they are passed to functions that expect OString/OUString parameters. The difference is that when static constexpr literals are used, the memory used for storing data is not the dynamic memory, it is allocated once, and it is read-only, which increases the performance. This approach is only usable when you work with strings that will be only initialized once, and will not be manipulated later.

String Literals in Headers

If you are working with a .hxx C++ header file, you have to use inline keyword to avoid creating duplicate copies of the global variable. For example:

inline constexpr OUStringLiteral ABC(u"abc");

Later we will see that we can re-write the above with a suffix as:

inline constexpr OUString ABC = u"abc"_ustr;

Essentially, that is a better replacement of the macro:

#define ABC "abc"

or, sometimes:

const char ABC[] = "abc";

These are no longer desirable in C++ having the string literals available with the latest C++ standard and new LibreOffice code. Also, it is important to know that the goal is eventually get rid of O[U]StringLiteral data types using the simpler form with suffixes.

Prefixes

String literals with no prefix are single byte strings which consist of 8-bit characters. Multi-byte Unicode string literals have various prefixes used to indicate their types. For example, to represent ABC in ASCII, UTF-8, UTF-16, UTF-32 and wide-char, you need to write:

// requires C++20
char ascii_cstr[] = "ABC";
char8_t utf8_cstr[] = u8"ABC";
char16_t utf16_cstr[] = u"ABC";
char32_t utf32_cstr[] = U"ABC";
wchar_t w_cstr[] = L"ABC";

Suffixes

Now that C++20 has become the baseline for LibreOffice source code, and thanks to Stephan Bergmann, it became possible to simplify the code, and avoid O(U)StringLiteral data type to write it it in a much shorter form, like:

static constexpr OUString sStr = u"abc"_ustr;
static constexpr OString sTransSource("def"_ostr);

As you can see in the above code snippet, for Unicode strings, _ustr is used, and for non-Unicode strings, _ostr.

Since C++14 standard, you can use s suffix to have a std C++ string out of the string literal, but you need to explicitly say that you will use the std::string_literals namespace first.

using namespace std::string_literals;

std::string ascii_str = "ABC"s;
std::u8string utf8_str = u8"ABC"s;
std::u16string utf16_str = u"ABC"s;
std::u32string utf32_str = U"ABC"s;
std::wstring wstring_str = L"ABC"s;

Final Words

Don’t be afraid of various string types that we discussed here! Most of the time, you will be using OUString. The other types will come up occasionally when you work with different parts the huge LibreOffice source code.

There are still other data types related to working with string like streams, buffers and stringview types that I will discuss in the next part of this series of blog posts.

If you want to know more, refer to the presentation from Stephan Bergmann in LibreOffice conference 2023. He talks about the improvements in C++20 (Class non-type template parameters) that made it possible to simplify the string literals in LibreOffice code:

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.

by Hossein Nourikhah at November 16, 2023 02:21 AM

November 12, 2023

Robert Riemann

Is developing word processing software hard?

Hello LibreOffice Planet!

This is my first blog post on the topic of LibreOffice. Let me quickly explain my link to LibreOffice. I work for a data protection authority in the EU and help navigate the digital transformation of our office with about 100 staff members. While many of our partner organisations adopt Microsoft 365, our office decided to pilot Nextcloud with Collabora Office Online.

In the future, I want to blog (in my personal capacity) about my thoughts related to the use of alternative word processing software in the public sector in general and in our specific case.

As there are no dedicated resources for training, preparation of templates etc., during the pilot of LibreOffice, the experience so far covers a large spectrum of user satisfaction. Generally, our staff has been spent years of their life using Microsoft Office and has the expectation that any other software works the same way. If it does not, they send an email to me (best case) or switch back to Microsoft Office.

During the week, I discussed again some smaller LibreOffice bugs. Then, I showed this weekend some FOSS Blender animated short videos to family members. It seems that Blender is more successful in its domain than LibreOffice. Is that possible? Or are animated short videos just more capturing due to their special effects? 😅

You can watch the 1min Blender animated short movie “CREST� on Youtube or the making-off. The latter you find here below.

I find it very inspiring to see what talented artists can do with Blender. For my part, I have once installed Blender and deinstalled it. Back then it was not easy to use for people not familiar with video animation software. Blender competes with proprietary software such as Maya or Cinema 4D. The latter is about 60 USD per month in the annual subscription plan. Not exactly cheap.

Then, I read in the fediverse about people working with LibreOffice:

I just tried to use #LibreOffice #Draw to draw some arrows and boxes onto JPEG images for emphasizing stuff.

The UX is really bad for somebody not working with Draw all the time.

Whatever I do, instead of drawing onto the image, the image gets selected instead.

Could not find any layer-sidebar.

Could not scale text without starting the “Character …� menu, modifying font size blindly + confirming > just to see its effect and then start all over.

Dear #FOSS, we really should do better.

— Author Karl Voit (12 November 2023 at 14:51)

In my past, I have worked on online voting systems. They are not very good yet despite years of efforts. xkcd dedicated a comic to voting software

Elections seem simple—aren’t they just counting? But they have a unique, challenging combination of security and privacy requirements. The stakes are high; the context is adversarial; the electorate needs to be convinced that the results are correct; and the secrecy of the ballot must be ensured. And they have practical constraints: time is of the essence, and voting systems need to be affordable and maintainable, and usable by voters, election officials, and pollworkers.

— Author Matthew Bernhard et al. in their paper Public Evidence from Secret Ballots from 2017

What is the unique challenge of developing word processing software? Happy to hear back from you in the blog comments or on the companion fediverse post!

by Robert Riemann (robert@riemann.cc) at November 12, 2023 10:20 PM

November 07, 2023

Miklos Vajna

Multi-page floating tables in Writer: wrap on all pages

This post is part of a series to describe how Writer now gets a feature to handle tables that are both floating and span over multiple pages.

This work is primarily for Collabora Online, but is useful on the desktop as well. See the 8th post for the previous part.

Motivation

Multi-page floating tables always wrapped their anchor text only on the last page, to be compatible with Word's default behavior. There is a special flag in DOCX files to wrap on all pages, though. In this part, you can read about handling of this flag in Writer.

Results so far

Regarding testing of the floating table feature in general, the core.git repository has 84 files now which are focusing on correct handling of floating tables (filenames matching floattable-|floating-table-). This doesn't count cases where the document model is built using C++ code in the memory and then we assert the result of some operation.

Here are some screenshots from the fixes this month:

Old, new and reference rendering of a 3 nested, multi-page floating tables

The first screenshot shows a case where multi-page floating tables are nested. For this document, we not only have an inner and an out table, but we also have a middle one, giving us 3 nesting tables. Some of the inner table frames had a bad position, leading to overlapping text, now fixed.

Old, new and reference rendering of wrapping on all pages

The next screenshot shows the case where the magic allowTextAfterFloatingTableBreak flag is set. We used to wrap content of the anchor only on the last page, unconditionally. Now we either wrap on the last page (default) or on all pages (when this flag is present).

Old, new and reference rendering of overlapping floating tables.

The last screenshot shows a document full of floating tables. These used to be inline ones, and then they could not overlap by definition, but now extra effort was needed to position them in a way that no overlap happens between the tables. Now our render result matches Word.

How is this implemented?

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

As usual, the high-level problem was addressed by a series of small changes:

Want to start using this?

You can get a snapshot / demo of Collabora Office 23.05 and try it out yourself right now: try the unstable snapshot. Collabora intends to continue supporting and contributing to LibreOffice, the code is merged so we expect all of this work will be available in TDF's next release too (24.2).

by Miklos Vajna at November 07, 2023 01:35 PM

November 02, 2023

LibreOffice Dev Blog

Integer data types improvement – EasyHack

Many different data types are used in LibreOffice code. During the long history of the LibreOffice, and before that in OpenOffice, there were integer data types that are no longer in use today. The task I discuss here is to choose appropriate data types to use instead of sal_uLong and similar deprecated integer data types.

Integer Data Types in LibreOffice

One of the old deprecated integer data types is ULONG, which then converted to sal_uLong. The latter, sal_uLong is still problematic, because it can be different on distinct platforms. Being “long” does not mean that it can fit to everything. It should be reviewed one by one, and replaced by another suitable data type. This EasyHack is focused on this change:

As sal_uLong is unsigned, usually an unsigend type like size_t, sal_uInt16, sal_uInt32, or sal_uInt64 can be suitable, but this is not always the case. Sometimes you should use signed types according to context. There are even cases that using floating point types like double is the correct choice.

Finding Instances to Change

Finding instances is easy. You can simply use grep to find the remaining instances:

$ git grep sal_uLong

Using the count.sh script provided in the EasyHack page, you can count the number of remaining instances in each folder of the LibreOffice core source code. It would be good if you start from some of the folders with less number of changes required, in order to reduce the number of remaining folders.

$ ./count.sh | sort -h
1: dbaccess/
1: unotools/
2: desktop/
2: drawinglayer/
3: framework/
6: svl/
8: svx/
11: toolkit/
13: compilerplugins/
25: starmath/
33: svtools/
34: filter/
61: include/
111: sd/
416: vcl/
593: sc/
635: sw/

To find instances inside a specific folder like toolkit/, mention it after sal_uLong in grep command, like this:

$ git grep sal_uLong toolkit/

Beware to preserve the capital letter L in sal_uLong.

Choosing Data Types

The main issue here is to find a specific integer data type that can replace sal_uLong, so that it can handle all the possible values in foreseeable scenarios.

You should look into where the data type is used to get the idea of the possible values that are stored in the variable, and are read later. Sometimes, it is obvious from the context. For example, as describe in Bugzilla, in below commit, data type for the positions of a SvStream is chosen:

Here, sal_uInt64 is chosen because the files that are read and write via SvStream can be larger than 4 GB. As an example, 32 bit unsigned integer sal_uInt32 can only handle size as big as ~2^32 which equals to something around 4*10^9 B = 4 GB. With a 64 bit unsigned integer, the possible size is much larger, and suitable for the purpose.

Using Return Types of Functions

If the variable is filled from the output of a function, then the data type of that function can be suitable for the variable. This may not be always the case, and you should have in mind that sometimes you also need to change the return types of the functions.

Using auto keyword and an IDE

Sometimes, you can use auto for the data type, and use your IDE capabilities to conclude the data type, and use mouse over or similar actions to find the provided data types.

Many C/C++ IDEs support this feature. For more information on how to setup an IDE, please refer to this wiki article:

Doing the Change

To actually do the change, you have to replace sal_uLong with the integer data type that you have chosen. But this is not the end! Sometimes you have to change many other places, like data type for return types in functions, member variables in classes, and many other places. That may also trigger another set of changes, where those functions or variables are used.

To get a better understanding on what is needed to be change, you can use a very handy feature of your IDE: “find usages”. This feature may be provided with different names, but is usually available when you right click on the variable/identifier name. For example:

  • Qt Creator: “Find reference to symbol under cursor”
  • Visual Studio: “Find all references”
  • Visual Studio Code: “Go to references”

You should look for similar functionality in the IDE of your choice.

Keep the Change Minimal

Please try to keep the changes minimal, and limit the changes to 1 or at most a few files. Otherwise, you may end up modifying several files, facing a difficult to mange change. Such a change would not be suitable here. That is because the goal of the EasyHack is to give you the opportunity to change small parts of the code to gain better understanding of the LibreOffice developments at early stages.

There are rare cases, where such large changes succeed. For example, look at this change:

tdf#152431 Fix line count resets to zero after 65535

This is a huge change. Although it is a spin-off of this EasyHack, it was eventually done as a fix to another bug, visible with the symptom that the line count was resetting to zero after 65535. Therefore, please keep your change minimal in this EasyHack, and postpone larger changes to the time when you have accomplished several difficultyBeginner EasyHacks.

Compromise: Keeping Some Deprecated Integer Data Types

It is not always possible, or easy to remove all the deprecated data types like tools:Long. Sometimes, you have to keep them, and there are even situations that you have to convert sal_uLong to tools::Long. This is fine for now, as tools::Long and other tools:: data types are still in use extensively. You can count:

$ git grep tools::Long *.cxx *.hxx|wc -l
16481

Writing the Commit Message

In the commit message for this EasyHack, please justify your selection of data types briefly. Please do not describe the data types themselves, but the reasoning behind your actual choice of the data type for the variables in place of sal_uLong.

Final Words

To do this task, you need to be able to build LibreOffice from source code, and send your changes to Gerrit. To do that, you can refer to our getting started guide:

Getting Started (Video Tutorial)

by Hossein Nourikhah at November 02, 2023 02:19 PM

November 01, 2023

Marius Popa Adrian

Valgrind 3.22 is available

News via reddit : "We are pleased to announce a new release of Valgrind, version 3.22.0,available from https://valgrind.org/downloads/current.html.See the release notes below for details of changes.Our thanks to all those who contribute to Valgrind's development. Thisrelease represents a great deal of time, energy and effort on the partof many people.Happy and productive debugging and profiling,-

by Popa Adrian Marius (noreply@blogger.com) at November 01, 2023 02:01 PM

October 30, 2023

LibreOffice QA Blog

QA weekly focus: SVG

This week, we are kicking off a continuing “QA Weekly Focus” to attract attention to certain topics and areas.

For this first week, let’s look into issues related to our SVG support.

SVG stands for “Scalable Vector Graphics“, a widespread, open vector format and standard. It has become the most used vector format on the web, and it is for example used as the default format in Inkscape, the open source vector graphics editor.

LibreOffice supports importing and exporting SVGs in various places, and these issues are tracked in 3 meta bugs:

  • 88278: SVG import image filter (all modules)
  • 111450: SVG fileSave filter (Draw/Impress)
  • 156066: SVG filters

In recent months, the SVG topic got a fair amount of attention, in particular thanks to Xisco Fauli’s work on the import filter (see illustration).

Our friends at Inkscape have also recently voiced their interest in improving interoperability with LibreOffice (see Inkscape’s post on Mastodon).

So let’s keep the momentum going, test how well SVG files are handled by LibreOffice, and review existing reports! They might need to be clarified, consolidated, or even closed because of all the recent improvements.

The list of bugs to review is in this collaborative pad. You can join IRC to chat with the QA team, and ask questions.

Thanks everyone for your contributions!…

by Stéphane Guillou at October 30, 2023 11:18 AM

October 27, 2023

Naruhiko Ogasawara

LOUCA23 (LibreOffice Conference Asia x UbuCon Asia 2023)

Long time no see, readers!  Very sorry for my laziness.


I attended LibreOffice Conference Asia x UbuCon Asia 2023 (LOUCA23) in Surakarta, Indonesia, on October 7~8.

This was the second time LibreOffice Conference Asia has been held in Tokyo in 2019, as it could not occur due to the COVID-19 pandemic.  UbuCon Asia was first held online in 2021, and the first in-person event was held in Seoul, Korea in 2022, and this still was the second in-person event.

I was burnt out by the pandemic and had stopped most of my OSS activities, but I still had many friends in the OSS world, so I went to Indonesia to meet with them.  

Therefore, I had initially intended to be a general participant.  Still, a friend of the speaker was suddenly unable to attend due to illness, so I gave a presentation in his place.  Here is my slide:

As mentioned, I am halfway out of OSS activities, but I know what my friends are doing, so it was not so difficult to talk about this subject.

Although I cannot say that the presentation itself was a great success (due to my English language skills), I was pleased because the audience was very responsive and easy to talk to, and many people approached me after the presentation was over.

Other than my presentation, I was naturally interested in the two keynote speeches by The Document Foundation and was surprised and grateful when Franklin Weng mentioned my name as an "Asian activist to be featured at the LibreOffice Latin America Conference. "

I listened to Muhammad Syazwan Md Khusaini's "Hands-On on Translating in Ubuntu" with great interest; however, I was a bit surprised to hear from a friend that many Indonesians use English for desktop environments and applications like LibreOffice.  I recognized that this was quite different from Japan.

The event itself was just as enthusiastic. Unlike OSS events in Japan (laugh), the participants were young, and there were many women. I was also surprised to see junior high school students among the speakers.

Both lunch and dinner were complimentary, and the one-day Surakaruta city tour the day after the event was delightful.  I appreciated the hospitality of the local staff.

This was my first time in Indonesia, and although short, I enjoyed many things, including the train trip. In Yogyakarta, I visited a museum and learned a lot about the history of Indonesia. However, I was overcharged by the tuk-tuk in Yogya.



I know it was a lot of work for the organizers, but as I have many friends in LibreOffice and am also an Ubuntu user, I was very grateful that the two events were co-hosted. Thanks to all the sponsors, global/local organizers, and everyone who talked to me there.  See you soon!


by Naruhiko Ogasawara (noreply@blogger.com) at October 27, 2023 01:13 PM

October 26, 2023

LibreOffice Dev Blog

UNO API error reporting improvement – EasyHack

In this blog post, I discuss the EayHack for improving UNO API error reporting. EasyHacks are good if you want to become familiar with LibreOffice programming, and this specific task is a good choice for beginners as it is a difficultyBeginner task.

What is UNO API?

UNO API is the programming interface that you can use to access LibreOffice capabilities programmatically. This API is usable across different languages, from LibreOffice BASIC macro programming to Python, Java, C++ and many more.

UNO API provides many services and functions, and using them should be  according to the LibreOffice API documentation. The API is stable over different LibreOffice versions, and most of the API is even compatible with its older predecessor, OpenOffice!

Improving UNO API Error Reporting

Here I discuss improvement to error reporting in UNO API. While using the API, there can be situations with the incorrect use of API, or for any reason, some errors. Many of the functions already provide good error reports, but there are still places with primitive error reporting. In this cases, it is possible to provide improvements.

This suggested improvement is defined as an EasyHack:

Although it may look very easy at first, you have to be patient, and read more about it to make sure that your change is good and meaningful.

Finding Instances

First, you have to pick a C++ file to improve the UNO API error reporting inside it. You can use ‘grep’ tool to find instances. To do this, run this command in terminal:

$ git grep "throw .*RuntimeException *( *)" *.cxx

Then, pick one of the files, and work on it. You may have to change more than one instance of error reporting in a single C++ file. Using counter program ‘wc’, you can see that are are still more than 1400 instances of this change are remaining across more than 300 files.

Required Steps

It is important to do these steps to create a good patch to improve the UNO API reporting:

  1. Read and grasp the idea of the change from the similar commits from other people in the same EasyHack
  2. Read the code to understand the case where error occurs
  3. Choose appropriate Exception type
  4. Choose suitable constructor
  5. Understand and differentiate between the functions that are exported as API functions, and local functions.
  6. Provide good error messages that describe the situation.
  7. Reproduce and test the error message (if possible)

Similar Commits

There are similar commits, that are listed in the Bugzilla page of the issue tdf#42982. You can learn from them what Exception type to choose, how to write the error message, and many more things.

Please take a look at the this related commit, which improves error reporting for the UNO XPath API:

For example, consider the function registerExtensionInstance(). The API documentation is here:

It is defined as:

void registerExtensionInstance ([in] com::sun::star::xml::xpath::XXPathExtension aExtension)

So, we know that it should take one string parameter. If not, we need to explicitly say that this parameter is lacking.

Choosing Exception Type

RuntimeException is usually the best choice, but for example, in commit 7e8806cd728bf906e1a8f1d649bef7337f297b1c you see that in case a parameter is not initialized, NotInitializedException is used. If the argument is empty or Null, IllegalArgumentException is a good choice, and if there is are no elements as expected, you can choose NoSuchElementException. But, remember that you can only replace the RuntimeException with the Exception types that are derivatives of it, to give a more specific Exception. That rule prevents you from replacing RuntimeException for example with NoSuchElementException, which is not derived from RuntimeException.

For a complete list of exception types inherited from RuntimeException, refer to the UNO IDL API reference:

There are multiple constructors for the Exceptions, so you should make sure that you are using the right one. This is the comment from Stephan, experienced LO developer:

RuntimeException constructors either take no arguments or two arguments (Message, a string; and Context, a com::sun::star::uno::XInterface reference to the relevant UNO object or a null reference).

So, in basic/source/uno/namecont.cxx you would need a second argument

static_cast< cppu::OWeakObject * >(this)

(where the cast is necessary as this derives from XInterface multiple times), and in the later files you would need to move your new, third argument to be the first one instead, replacing the empty rtl::OUString().

As an example, you can see that RuntimeException is sometimes called with only a message, and better, with the context. Also, in namecont.cxx you can see this:

void NameContainer::replaceByName( const OUString& aName, const Any& aElement )
{
    const Type& aAnyType = aElement.getValueType();
    if( mType != aAnyType )
    {
        throw IllegalArgumentException("types do not match", getXWeak(), 2);
    }
...
}

The getXWeak() method provides the context, and 2 means that the 2nd parameter is problematic.

By looking into similar commits, you can also learn how to write error messages. For example, if a parameter is null, you can say that it does not exist, or is null.

Reading the Code

The code itself can show you the good choice for exception, and the error message. In the above patch related to XPathAPI, you have to understand what are the goal of the functions, and the meaning of the error.

For example, the first change is:

-        if (!pCNode) { throw RuntimeException(); }
+        if (!pCNode) { throw RuntimeException("Could not use the namespace node in order to collect namespace declarations."); }

The error message is: “Could not use the namespace node in order to collect namespace declarations”. That is because the namespace node is used to collect the namespace. The function name is lcl_collectNamespaces, which means a local function to collect namespace, and it also this comment is informative:

// get all ns decls on a node (and parent nodes, if any)

As this is only a local function, and is not exported using SAL_CALL, parameter names may not be understandable outside the code itself. But if you see SAL_CALL, you can use the paramter name in the error message.

In some cases, you have to read more to understand what is the parameter. For example, consider this code snippet:

        // get the node and document
        ::rtl::Reference<DOM::CDocument> const pCDoc(
                dynamic_cast<DOM::CDocument*>(xContextNode->getOwnerDocument().get()));
-        if (!pCDoc.is()) { throw RuntimeException(); }
+        if (!pCDoc.is()) { throw RuntimeException("Interface pointer for the owner document of the xContextNode does not exist."); }

In this case, get() function is used to get the interface pointer of the xContextNode->getOwnerDocument(), which can be described as the “owner document of the xContextNode”, and because pCDoc.is() is false, it means that it does not exist.

Testing UNO API Error Reporting

Using this BASIC code, you can see the error message in action:

Sub Main
    oXPath = createUnoService("com.sun.star.xml.xpath.XPathAPI")
    oXPath.registerExtensionInstance(Null)
End Sub

This is the error message, before the change:

<yoastmark class=

After the change, it becomes this:

Error message after the change

Error message after the change

The new error message is more understandable and meaningful. Please note that it is not always easy to generate such an error, because the exception may occur in specific situation that may not be easy to reproduce. But, when it is about lack of a parameter or similar situations, it is good to check the error message similar to the above BASIC code.

Final Words

Having good error messages in LibreOffice API helps macro programmers and developers who use LibreOffice programmatically. If you are interested in doing this EasyHack, make sure that you go through the above mentioned steps to improve the error reporting.

by Hossein Nourikhah at October 26, 2023 02:02 PM

October 11, 2023

Marius Popa Adrian

Firebird 5.0 Release Candidate 1 is available for testing

Firebird Project announces the first Release Candidate of Firebird 5.0, the next major version of the Firebird relational database, which is now available for testing on all supported platforms (Windows, Linux, MacOS, Android).This Release Candidate demonstrates the complete set of features and improvements developed for the new release. Release Candidates are generally considered stable enough

by Popa Adrian Marius (noreply@blogger.com) at October 11, 2023 02:47 PM

Flamerobin 0.9.9 Snapshot released with a few fixes

Flamerobin 0.9.9 Snapshot released with a few fixesWhat’s Changed :Fix Mac OS compilation by @rlakis in #328Fix saving style error and code scanning alert by @arvanus in #330Improve SQL statistics by @arvanus in #331New Contributors :@rlakis made their first contribution in #328

by Popa Adrian Marius (noreply@blogger.com) at October 11, 2023 02:46 PM

October 06, 2023

LibreOffice QA Blog

QA/Dev Report: September 2023

General Activities

  1. LibreOffice 7.5.6 and LibreOffice 7.5.7 were announced on September 14 and September 26 respectively
  2. LibreOffice 7.6.1 and LibreOffice 7.6.2 were announced on September 7 and September 26 respectively
  3. Olivier Hallot (TDF) continued adding Tabbed UI examples into help instructions, added a help page for editing styles, improved the help page for accessibility checker, added or updated help for commands found in Writer’s Table, Styles and Form menu as well as Tools menu for all applications
  4. Stéphane Guillou (TDF) added help for Impress’s Use Background fill and made some help cleanups
  5. Rafael Lima added search functionality to the Calc Functions sidebar
  6. Bogdan Buzea improved help for vertical positioning
  7. Seth Chaiklin changed some UI strings to be more clear and updated help pages accordingly
  8. Bartosz Kosiorek added Poisson distribution to help on Calc’s Random Number Generator
  9. Gábor Kelemen (allotropia) dropped HTML Export wizard help pages, improved the layout of Area dialog and did code cleanups in the area of includes
  10. Laurent Balland improved the Impress template Growing Liberty
  11. Miklós Vajna (Collabora) worked on multi-page floating tables in Writer
  12. Jean-Pierre Ledure worked on the ScriptForge library
  13. Szymon Kłos (Collabora) worked on LOKit and jsdialog used by Collabora Online. He also optimised the performance of data filtering in combination with conditional formats in Calc and fixed an issue with text-decoration property in exported SVGs
  14. Henry Castro and Skyler Grey (Collabora) worked on LOKit used by Collabora Online. Henry also improved Calc’s RTF filter and did fixes and improvements to database connectivity
  15. Áron Budea (Collabora) did some code cleanups
  16. Eike Rathke (Red Hat) improved the accuracy of Calc’s SUM() with mixed formula and value cells
  17. Tomaž Vajngerl (Collabora) continued polishing support for document themes. He also fixed an issue with importing row styles in XLSX spreadsheets and did some optimisations and code cleanups
  18. Julien Nabet fixed an off-by-one error in saving colour themes, made it possible to replace events set for objects, fixed an issue with changing database links while keeping original registered names and fixed a couple of database regressions. He also fixed many crashes
  19. Andreas Heinisch polished the pinned items feature and fixed an off-by-one error in navigating fields with GoToNextPlacemarker command
  20. László Németh improved Writer change tracking related to tables
  21. Xisco Faulí (TDF) dropped the HTML export wizard, improved and added automated test, did some SVG handling improvements and fixed an accessibility crash
  22. Michael Stahl (allotropia) fixed a hang with exporting accessible/tagged PDFs and optimised the size of exported tagged PDFs
  23. Mike Kaganski (Collabora) fixed issues with incorrectly imported DOCX plain text content control properties and LibreOffice Portable not starting from long paths. He also made it so the read-only attributes of directories on Windows are ignored as is the normal behaviour on the platform
  24. Caolán McNamara (Collabora) made it so SVG export of slides shows a progress indicator, improved the security of untrusted documents in relation to OLE objects and improved the speed of importing PDFs. He also did code cleanups and fixed issues found by code analysers
  25. Stephan Bergmann (Red Hat) raised the build baseline to C++20 alongside many tweaks and fixes that it required
  26. Noel Grandin (Collabora) improved the performance of selecting and dragging complex group objects and improved the stability of LibreOffice’s test suites by disabling unreliable tests. He also did many code cleanups and optimisations
  27. Justin Luth (Collabora) fixed an issue with unreliable display of shape properties and made it so unchangeable options are disabled in PDF export dialog
  28. Heiko Tietze (TDF) improved the Writer Compatibility options dialog and made activating overwrite mode for the first time display a notification
  29. Michael Weghorn (TDF) fixed accessibility issues in areas such as dialogs using multi-line edit controls, font colour toolbar item, search in options, print dialog, selection handling in macros and Calc’s SUMIF function. He also made the kf5 and qt6 UIs automatically use dark icon themes and dark document background colours when the system is in dark mode and made preparations for switching from JDK 9 to 17
  30. Balázs Varga (allotropia) improved the accessibility checker
  31. Samuel Mehrbrodt (allotropia) implemented importing slide background fill from PPT files and improved the accessibility checker
  32. Khaled Hosny (TDF) implemented support for right-to-left layout in Formula Editor while also polishing the Math visual editing feature and enabling it by default, made it possible to change Math font, added support for Arabic math expressions, made Tools -> Special Character work in Math and made it so symbols in Math Symbols Catalogue are rendered using document settings. He also updated Noto font versions and fixed saving of localized Italic Greek symbols and missing background colour in style preview
  33. Patrick Luby (NeoOffice) fixed some transparency to alpha rework fallout, fixed issues related to Skia graphics engine and PDF export of documents with embedded PDFs on macOS
  34. Jim Raykowski polished the Style Spotlight feature, improved the master document navigator context menu and expanded Navigator’s feature for bringing items to attention in the document when hovering over them
  35. Bayram Çiçek polished the search feature in Options dialog
  36. Hossein Nourikhah (TDF) made Calc’s Ctrl+End view jump behave better and ported some Developer’s Guide examples to Python and BASIC
  37. Arnaud Versini did some code cleanups
  38. Taichi Haradaguchi updated several dependencies
  39. Björn Michaelsen did some code cleanups
  40. Sarper Akdemir (allotropia) worked on adding XMP, Adobe PDF Schema and Dublin Core metadata support to PDF export, fixed PPTX issues with table shadows and image transparency and added JavaScript UNO bindings for WASM with Embind
  41. Kohei Yoshida upgraded liborcus to 0.19.0
  42. Armin Le Grand (allotropia) continued with the rework of handling attributes and properties
  43. Dan Horák (Fedora) fixed build and test issues related to powerpc64 and s390x architectures
  44. Gökay Şatır (Collabora) made it so authors can reply to their own comments in Writer
  45. Dennis Francis (Collabora) implemented sort by selection in Pivot Tables in non-manual mode
  46. Dung Saga made Search Commands also look for submenu names
  47. Darshan Upadhyay (Collabora) added an option to autoformat bulleted lists after space
  48. Christian Lohmaier (TDF) raised the Linux runtime baseline to RHEL 8 or CentOS 8 and comparable and build baseline to GCC 12 or Clang 12 with libstdc++ 8.5

Kudos to Ilmari Lauhakangas for helping to elaborate this list.

Reported Bugs

483 bugs, 67 of which are enhancements, have been reported by 319 people.

Top 10 Reporters

  1. Eyal Rozenberg ( 22 )
  2. Stéphane Guillou (stragu) ( 12 )
  3. Regina Henschel ( 10 )
  4. Xisco Faulí ( 9 )
  5. Jim Avera ( 8 )
  6. Gabor Kelemen (allotropia) ( 8 )
  7. Mike Kaganski ( 8 )
  8. Samuel Mehrbrodt (allotropia) ( 8 )
  9. Jeff Fortin Tam ( 8 )
  10. peter josvai ( 5 )

Triaged Bugs

590 bugs have been triaged by 74 people.

Top 10 Triagers

  1. Stéphane Guillou (stragu) ( 142 )
  2. Buovjaga ( 96 )
  3. m.a.riosv ( 66 )
  4. Heiko Tietze ( 41 )
  5. Xisco Faulí ( 34 )
  6. Julien Nabet ( 24 )
  7. Dieter ( 16 )
  8. Mike Kaganski ( 14 )
  9. Michael Weghorn ( 13 )
  10. Kira Tubo ( 11 )

Resolution of resolved bugs

507 bugs have been set to RESOLVED.

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

Fixed Bugs

161 bugs have been fixed by 35 people.

Top 10 Fixers

  1. Julien Nabet ( 13 )
  2. Khaled Hosny ( 10 )
  3. Michael Weghorn ( 9 )
  4. Miklos Vajna ( 7 )
  5. Caolán McNamara ( 7 )
  6. Xisco Fauli ( 6 )
  7. László Németh ( 6 )
  8. Samuel Mehrbrodt ( 5 )
  9. Patrick Luby ( 5 )
  10. Heiko Tietze ( 4 )

List of high severity bugs fixed

  1. tdf#156894 kf5/qt6: Dark system themes don’t automatically enable corresponding dark icon themes ( Thanks to Michael Weghorn )
  2. tdf#157115 crash on inserting chart (gtk3): Assertion `m_pBody != NULL’ failed ( Thanks to Noel Grandin )
  3. tdf#157174 LibreOffice crashes when clicking “Print Preview” ( Thanks to Julien Nabet )
  4. tdf#157231 webp 0-day CVE-2023-4863 affects LO ( Thanks to Caolán McNamara )
  5. tdf#157260 Test connection is not using the port specified in connection string for PostgreSQL using 5432 instead ( Thanks to Julien Nabet )
  6. tdf#157288 During Table editing, right click on a field doesn’t show “Primary Key” for other fields than those already primary key ( Thanks to Julien Nabet )
  7. tdf#157312 Current cell highlight doesn’t update with skia hardware rendering on macOS ( Thanks to Patrick Luby )

List of crashes fixed

  1. tdf#156126 Crash when using gpl color palette in debug build ( Thanks to Julien Nabet )
  2. tdf#156683 Crash in: comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing(unsigned int, com::sun::star::uno::Reference const&) ( Thanks to Michael Weghorn )
  3. tdf#156958 Crash in: (anonymous namespace)::TabBarEdit::LinkStubImplEndEditHdl(void*, void*) when renaming layer ( Thanks to Julien Nabet )
  4. tdf#157085 CRASH: fixing accessibility check of deleted image ( Thanks to Samuel Mehrbrodt )
  5. tdf#157088 qt6: Crash on exit after using font color toolbox item with Orca running ( Thanks to Michael Weghorn )
  6. tdf#157092 Using search feature in options dialog causes crash when NVDA is running ( Thanks to Michael Weghorn )
  7. tdf#157096 CRASH: removing everything in document ( Thanks to Michael Stahl )
  8. tdf#157115 crash on inserting chart (gtk3): Assertion `m_pBody != NULL’ failed ( Thanks to Noel Grandin )
  9. tdf#157131 CRASH: after pasting all and undoing ( Thanks to Michael Stahl )
  10. tdf#157160 [CRASH] New “Search” field in Options dialog crashes all the time ( Thanks to Michael Weghorn )
  11. tdf#157174 LibreOffice crashes when clicking “Print Preview” ( Thanks to Julien Nabet )
  12. tdf#157266 Crash when trying to use new Filter feature on Tools → Options ( Thanks to Bayram Çiçek )
  13. tdf#157277 CRASH Writer crashing when hiding Sidebar and using Navigator to go to bookmark ( Thanks to Julien Nabet )
  14. tdf#157299 Calc crashes when accessing cells containing a sumif formula with NVDA ( Thanks to Michael Weghorn )
  15. tdf#157304 Macro: Retrieving selected text in FocusIn event for column crashes LO ( Thanks to Michael Weghorn )

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

  1. tdf#105303 Drop html export wizard ( Thanks to Xisco Fauli )
  2. tdf#106663 GoToNextPlacemarker skips placeholder after header ( Thanks to Andreas Heinisch )
  3. tdf#111705 Allowing Arabic mathematical expressions ( Thanks to Khaled Hosny )
  4. tdf#122718 Sidebar Functions panel misses search like Function Wizard ( Thanks to Rafael Lima )
  5. tdf#124591 Update Noto Fonts to latest releases ( Thanks to Khaled Hosny )
  6. tdf#32418 Add an “insert symbol” to Math ( Thanks to Khaled Hosny )
  7. tdf#48083 FILEOPEN PPT: Slide Background Fill is none instead of slide color (PPTX fixed in 5.2) ( Thanks to Samuel Mehrbrodt )
  8. tdf#49895 Add a “search” field in (non-advanced) Options dialog ( Thanks to Bayram Çiçek )
  9. tdf#55160 Fileopen: docx layout not imported correctly – support for nested floating tables ( Thanks to Miklos Vajna )
  10. tdf#62174 Italic Greek symbols (iGreek set) fails if UI Language is changed ( Thanks to Khaled Hosny )
  11. tdf#85263 same shortcuts for Company and Cancel in “Tools/Options/User Data” ( Thanks to Gabor Kelemen )
  12. tdf#88744 Visual formula editor does not use system clipboard ( Thanks to Khaled Hosny )
  13. tdf#97710 SVG import cant fill overlapped polyline ( Thanks to Xisco Fauli )

WORKSFORME bugs

80 bugs have been retested by 25 people.

Top 10 testers

  1. Buovjaga ( 17 )
  2. Stéphane Guillou (stragu) ( 13 )
  3. Kira Tubo ( 13 )
  4. Faisal ( 4 )
  5. m.a.riosv ( 4 )
  6. Julien Nabet ( 4 )
  7. Xisco Faulí ( 3 )
  8. Mihai Vasiliu ( 3 )
  9. Dieter ( 2 )
  10. Telesto ( 2 )

DUPLICATED bugs

132 bugs have been duplicated by 31 people.

Top 10 testers

  1. Stéphane Guillou (stragu) ( 42 )
  2. Buovjaga ( 16 )
  3. Heiko Tietze ( 9 )
  4. Mike Kaganski ( 9 )
  5. m.a.riosv ( 8 )
  6. Gabor Kelemen (allotropia) ( 4 )
  7. Justin L ( 4 )
  8. Dieter ( 4 )
  9. Xisco Faulí ( 4 )
  10. Kira Tubo ( 3 )

Verified bug fixes

48 bugs have been verified by 12 people.

Top 10 Verifiers

  1. Stéphane Guillou (stragu) ( 22 )
  2. BogdanB ( 11 )
  3. Xisco Faulí ( 4 )
  4. Michael Weghorn ( 2 )
  5. Gerald Pfeifer ( 2 )
  6. Rizal Muttaqin ( 1 )

by x1sc0 at October 06, 2023 11:16 AM

October 05, 2023

LibreOffice Dev Blog

LibreOffice conference 2023 workshop presentation slides

LibreOffice conference (LibOCon) 2023 was held in Bucharest from 20 to 23 September 2023. Among the other programs, an important part was the workshop “Introduction to LibreOffice Development”. Here you will find the slides for the presentations.

LibOCon 2023 Bucharest

LibOCon 2023 Bucharest

LibreOffice Conference Workshop Program

The workshop was held in parallel with the main tracks in 3 days, and many different things around LibreOffice development were discussed in the workshop. You can see the detailed program of the workshop here:

Presentation SlidesSlides for the presentations can be found here:

Day One:
1. Office software, and the open source/free software development model (1 hour)
Presenter: Hossein Nourikhah

2. Effective communication in open source/free software projects (1 hour)
Presenter: Hossein Nourikhah

3. Bug reporting and triaging (2 hours)
Presenter: Stéphane Guillou

4. Git basics (2 hours)
Presenter: Stéphane Guillou

5. Gerrit for code reviews (2 hours)
Presenter: Xisco Faulí

Day Two:
6. Software localization (l10n) and internationalization (i18n) (1 hour)
Presenter: Hossein Nourikhah

7. LibreOffice automation via scripting (BASIC, Python) (3 hours)
Presenter: Rafael Lima / Alain Romedenne

8. Building LibreOffice from source code (4 hours)
Presenter: Hossein Nourikhah

Day Three
9. LibreOffice Documentation (1 hour)
Presenter: Olivier Hallot

10. LibreOffice SDK development (Java, Python) (2 hours)
Presenter: Hossein Nourikhah

11. Introduction to problem solving techniques (30 minutes)
Presenter: Michael Meeks

12. Introduction to LibreOffice Core (30 minutes)
Presenter: László Németh

13. LibreOffice core design (C++) (2 hours)
Presenter: Heiko Tietze

14. LibreOffice core development (C++) (1 hour)
Presenter: Hossein Nourikhah

15. Introduction into Writer development (1 hour)
Presenter: Miklos Vajna

by Hossein Nourikhah at October 05, 2023 02:11 PM

October 03, 2023

Miklos Vajna

Multi-page floating tables in Writer: nested tables

This post is part of a series to describe how Writer now gets a feature to handle tables that are both floating and span over multiple pages.

This work is primarily for Collabora Online, but is useful on the desktop as well. See the seventh post for the previous part.

Motivation

Multi-page floating tables and nested tables could not be combined so far. Instead we tried to lay out the outer table on multiple pages and all inner tables were still limited to a single page. In this part, you can read about removing this limitation.

Results so far

Regarding testing, the core.git repository has 73 files now which are focusing on correct handling of floating tables (filenames matching floattable-|floating-table-). This doesn't count cases where the document model is built using C++ code in the memory and then we assert the result of some operation.

Here are some screenshots from the fixes this month:

Old, new and reference rendering of a floating inner table in a floating outer table from DOCX.

The first screenshot shows a case where not only a single floating table is split across pages, but also the table's only cell hosts an inner multi-page floating table. This is more complicated at a layout level, because we can't just move part of the table to a next page, which has no parts of the outer table yet.

Old, new and reference rendering of nested, multi-page floating table at cell start.

The next screenshot shows a case where the inner floating table starts at the cell start of the outer table. The DOCX import case needed addition effort to get working, because as soon as the inner floating table's content is moved to the floating frame from the body text, the reference to the cell start at the outer table level was invalidated and the whole table conversion failed.

Old, new and reference rendering of multiple inner floating tables starting at cell start of an outer floating table.

This screenshot shows a bug where multiple inner floating tables started at the cell start of the outer table. Handling this correctly on our end had to ensure that each (potentially multi-page) floating table gets its own unique anchor point, and this can be combined with nesting, with the "at cell start" special case on top of it. Once all three can be combined, a real-world documents gets its table instead of just having the content the of the table in the body text.

Old, new and reference rendering of moving the table start to a new page.

The last screenshot shows an editing session where we keep inserting new paragraphs at the start of the document, so new items are created at the end of the fly chain as needed, and old items are deleted at the start of the fly chain as needed. We had a bug here so that the content we wanted to move forward was inserted at the end of the document, leading to a weird selection that started at the document end and continued on a previous page. Now this works correctly: once the first page is full of empty paragraphs, the second page hosts the first row and half of the second row. The third page then can host the second half of the second row and the third row.

How is this implemented?

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

As usual, the high-level problem was addressed by a series of small changes:

Want to start using this?

You can get a snapshot / demo of Collabora Office 23.05 and try it out yourself right now: try the unstable snapshot. Collabora intends to continue supporting and contributing to LibreOffice, the code is merged so we expect all of this work will be available in TDF's next release too (24.2).

by Miklos Vajna at October 03, 2023 06:26 AM

September 01, 2023

Miklos Vajna

Multi-page floating tables in Writer: overlap control, border and footnotes

This post is part of a series to describe how Writer now gets a feature to handle tables that are both floating and span over multiple pages.

This work is primarily for Collabora Online, but is useful on the desktop as well. See the sixth post for the previous part.

Motivation

The current post features sub-tasks for the multi-page floating table work that is around an explicit table overlap control that Word has (and Writer lacked so far), compatible border rendering of split tables and having footnotes in floating tables, which was not working previously.

Results so far

Regarding testing, the core.git repository has 60 files now which are focusing on correct handling of floating tables (filename matching floattable-|floating-table-). This doesn't count cases where the document model is built using C++ code in the memory and then we assert the result of some operation.

Here are some screenshots from the fixes this month:

Old, new and reference rendering after expanding an autotext.

The first screenshot shows a case where the anchor paragraph of a floating table had some autotext (e.g. "dt", which stands for dummy text), and pressing the relevant shortcut (F3) expands that autotext with the actual content. This includes changing the anchor position of the floating table, which lead to overlapping text. (A multi-page floating table has multiple anchors, we have to make sure we don't set all of them to the new value as-is.)

Old, new and reference rendering of tables with the overlap=never markup.

The next screenshot shows a case where two tables are positioned in a way that they would overlap. Word has a flag that asks the layout to still re-position the second table so the overlap doesn't happen, and now Writer supports this as well.

Old, new and reference rendering of duplicated anchor text.

This screenshot shows a bug where the anchor text on the first page was also duplicated on the second page. Now we properly start the anchor text on the last page of the floating table, like Word does.

Old, new and reference rendering of a multi-page floating table with borders.

What you can see is a floating table that has 2 pages, but simply a split of the table would result in no bottom border on the first page and no top border for the second, like perhaps you would expect it, matching Word. This is now fixed, the layout infers the border style in those cases correctly.

Old, new and reference rendering of a footnote in a floating table.

The last screenshot shows a mini-feature: it was possible to float tables and to have footnotes in tables, but not both at the same time. The screenshot shows a case where a floating table is needed, so a specific paragraph is above the table. But we couldn't float the table, because it had a footnote and that would be lost as-is. Now you can have a correct position for that paragraph and the footnote is there as well, at the same time.

How is this implemented?

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

As usual, the high-level problem was addressed by a series of small changes:

Want to start using this?

You can get a snapshot / demo of Collabora Office 23.05 and try it out yourself right now: try the unstable snapshot. Collabora intends to continue supporting and contributing to LibreOffice, the code is merged so we expect all of this work will be available in TDF's next release too (24.2).

by Miklos Vajna at September 01, 2023 11:33 AM

August 26, 2023

Bayram Çiçek

Final Report - Google Summer of Code 2023 - Search Field in Options

About project

LibreOffice is a complex application with a large and growing number of options. It is not easy to find the right needle in the haystack. Like most other complex applications, it will be valuable and useful enhancement to add a search field to the “Tools > Options” dialog that iterates over the various tabs and filters where the search text is found. The Search Field in Options project aims to provide this search functionality in “Tools > Options” page.

Tasks

  •   Add search field to Options dialog - UI
  •   Implement search function
  •   Include Options TreeView’s parent and child node names into searching
  •   Add GetAllStrings() method to fetch strings from 69 dialogs step by step
  •   Include following element strings into searching:
    •   labels
    •   check buttons
    •   radio buttons
    •   toggle buttons
    •   link buttons
    •   buttons
  •   Include accessibility elements into searching:
    •   accessible-names
    •   accessible-descriptions
    •   tooltip-texts
  •   Include option pages from extensions into searching
  •   Initialize all dialogs at background if it’s possible (salhelper::Thread - asynchronously)
  •   Initialize all dialogs to get strings properly (not in background - synchronously)
    •   initialize ~half of them after opening the options
    •   and initialize remaining ones after doing a search
  •   Update Options TreeView properly after the searching done
  •   Expand the first node and select first child-node after search by default
  •   Remove Hyphen (_) and Tilde (~) symbols from fetched strings to make the search function work correctly

My Work during GSoC

During 13 weeks GSoC program, I added a search field in Options dialog and included the node names and their .ui strings into searching. Since sub-dialogs under the Options are not initialized at startup of Options dialog, it was not possible to access their .ui strings. To overcome this issue we had two options:

  • Option A: Extract .ui strings at build-time and fetch them at run-time
    This option requires working on file operations, LibreOffice’s build system, makefiles, localization etc. I worked on this option for ~5 weeks but this approach caused a lot of issues that took the project out of its scope. For example, how to deal with localization issue while extracting strings at build-time? This was another big problem…
  • Option B: Initialize all dialogs in some way and get their strings
    This option is more understandable and simple. Instructions are clear. No need to worry about localization. No need to work on file operations, extracting and fetching data, working with makefiles etc…

When I felt that Option A is just wasting my time (~5 weeks); I switched to Option B where I can -at least- make some progress. The main issue in Option B was initializing all dialogs which takes about 4-8 secs. I tried to initialize them at background but there was some errors on Win10 that I don’t reproduce the issue on my linux machine. Then I tried to see the errors on Win10 with a virtual machine, but it was too slow to test. Therefore I uninstalled Manjaro/Linux (which I’ve been using it more than 1.5 years) from my computer and had to install Win10 (which I last used 6 years ago) on my machine to see the problems in there. There was some visual inconsistencies while initializing sub-dialogs using salhelper::Thread at background.

After working long hours for weeks meanwhile the time was running out, I decided to initialize almost half of them at Options dialog startup and the remaining ones at the time of searching. In that way, time of initializing process is divided by ~2 which can be acceptable time in some degree in terms of user experience.

There is a single patch on Gerrit for this project: https://gerrit.libreoffice.org/c/core/+/152519. The patch has more than 30 patchsets and includes “+2255 -47” changes.

The most challenging part was implementing GetAllStrings() function for every ~69 dialogs step by step. Current implementation may not be the best solution for user experience, but at least searching through the numerous options is now possible.

options-dialog-on-Win10.png

Whats left to do or can be done?

Following tasks are left and can be implemented after GSoC:

  •   Include accessibility elements into searching:
    •   accessible-names
    •   accessible-descriptions
    •   tooltip-texts
  •   Include option pages from extensions into searching
  •   Initialize all dialogs at background if it’s possible (salhelper::Thread - asynchronously)

Additional hacks

  • Show modified options with some special indicator (as in KDE settings). (better to discuss this idea in a separate ticket)
  • Implement highlighting feature

Tasks I’ll be working on after GSoC

  • improvement on the initialization of the dialogs, maybe it can be possible to initialize them at background without encountering any visual inconsistencies - especially on Windows.
  • Implementing the remaining tasks:
    • Include accessibility elements into searching
    • Include option pages from extensions into searching
  • If everything works fine I’d like to work on the highlighting feature
  • Also it would be prettier if Options dialog have a modified options indicator (as in KDE settings)

Thanks

I’m very happy that we all reached the end of GSoC. During that time, I know that I had a responsibility for doing everything that I can. Therefore I worked hard and tried to complete as much tasks as I can.

I learned a lot of things during the GSoC. Although GSoC is finished, I will definitely continue to contribute to LibreOffice. I am really happy to be a part of the LibreOffice community and Google Summer of Code. I’m really thankful to LibreOffice and Google for providing us this such a great opportunity which helped me gain this amazing experience!

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

And most importantly, greatly thankful to Andreas Heinisch and Heiko Tietze who were my mentors throughout the GSoC period. They always guided me everything about my questions. Thank you endlessly for your time and effort. I appreciate that you always motivating and encouraging me in all that I attempt and do. I can never truly express how grateful I am. Your guidance, reviews, help and shared experiences have been invaluable. Thank you very much for everything.

I’d like to express my gratitude to everyone in the LibreOffice community for their help and kindness. They always tried to answer my questions on IRC. I fell very lucky to work with this amazing community. I have learned a lot from you and I will never forget this wonderful experience.

Regards,
Bayram Çiçek

All weekly GSoC reports:

Useful links:

# free as in freedom

by Bayram Çiçek at August 26, 2023 09:00 AM

August 25, 2023

Ahmed Gamal Eltokhy

Final Report

The past four months working on LibreOffice for Google Summer of Code 2023 have been an amazing learning experience. With the help of mentors Thorsten, Heiko, and Hossein, I implemented features to improve the user experience around digital signing and encryption like remembering recipients, better recipient selection UI, fast searching/filtering of keys, and documentation. My 12 patches were merged and it was incredible contributing to open source with the friendly LibreOffice community. I look forward to more FOSS contributions in the future!

August 25, 2023 12:25 PM

August 23, 2023

Caolán McNamara

Small Caps in Impress

Writer supports Small Caps, but Impress and drawing shapes in general never fully supported Small Caps. The option was available, and the character dialog provided a preview, but Small Caps was rendered the same as All Caps, as seen here.

 This has lingered for years and it's not easy as a user to try and manually workaround with varying font sizes because underline/overline/strike-through decorations won't link up, as seen in this example:


 but finally for Collabora Hack Week I was able to carve out some time to fix this. So in today's LibreOffice trunk we finally have this implemented as:

In addition a buggy case seen in the preview of double overlines for mixed upper/lower case was also fixed, from:

to:


Also noticed during all of this was the wrong width scaling used for the red wave line underneath incorrect spelling in impress when the text is superscript or subscript so the line didn't stretch over the whole text, as seen here: 

Now corrected as:

and finally added was a missing implementation in the RTF export of shape text to allow the small caps format to be copy and pasted into other applications from impress.

by caolan (noreply@blogger.com) at August 23, 2023 04:01 PM

August 21, 2023

Björn Michaelsen

How to survive being bought by Oracle

How to survive being bought by Oracle?

When I wrote Quo vadis with The Document Foundation? a month ago, that was mostly a side product of sorting out my thoughts on open source governance in general, and on LibreOffice in particular. And while that sparked some discussion on the identity of the LibreOffice project, mostly here on Board Discuss, it ultimately was preparation for a talk Thorsten and me had submitted for a vacation on Chaos Communication Camp 2023. Our preparation was somewhat chaotic -- because both Thorsten and me decided to get very creative about the "dont come by car" suggestion by the organizers and our talk being scheduled on the first day of the event -- so we ended up honouring the LibreOffice tradition of finishing slides only hours before the scheduled slot.

The session itself did not seem to have suffered too much by this -- it was more free form, which might actually have been a bonus. We ended up even being allowed to use some extra time for Q&A as there was quite some interest for that in the audience.

The video recording can be found on media.ccc.de and describes both bits of the history of the LibreOffice fork a decade ago and lessons learned that are still relevant for open source communities forking (or otherwise reorganizing themselves) today.

A huge thank you to all the volunteers that made #CCCamp23 (and therefore this talk) happen, especially c3voc for the recording and c3cert who did a great job in checking a minor injury I suffered due to my own stupidity during the event.

Comments? Feedback? Additions? Most welcome here on the fediverse !

August 21, 2023 06:00 AM

August 19, 2023

Ahmed Gamal Eltokhy

Week 10 11 Report

I'm providing an update after 10 weeks working on LibreOffice. I have successfully completed all the requirements I originally proposed related to improving the user interface for digital certificates and signatures. This includes developing a mechanism to remember selected recipients, improving the recipient selection UI, enabling intelligent searching of large keyrings, improving UI latency, and adding filtering for search results. I'm very pleased with the progress made so far. Going forward, I plan to focus on enhancing the documentation for the xmlsecurity module and addressing any bugs related to digital signatures. I'm very grateful to several LibreOffice developers, including Thorsten Behrens, Heiko Tietze, and Hossein Nourikhah, who provided excellent guidance during this project. While I'm sad this journey is nearly over, I achieved my goals and learned a lot along the way. I look forward to continuing to contribute to LibreOffice in the future.

August 19, 2023 04:18 PM

August 14, 2023

Bayram Çiçek

Week #7 - #11 - GSoC 2023 Weekly Report - Search Field in Options

Thanks to my ‘Search Field in Options’ project mentors Andreas Heinisch and Heiko Tietze for their time and guidance.

Project Report for Week #7 - #11

  • A lot of new patchsets submitted (between patchset 10 and 19): https://gerrit.libreoffice.org/c/core/+/152519

  • We decided to implement Plan B(initialize all strings at Options dialog start-up) instead of “extracting strings at build-time” approach.

  • all (visible) strings of 69 dialogs included in searching. Currently:

    • labels,
    • check buttons,
    • radio buttons and
    • buttons are included.

TODO: add accessible-names, accessible-descriptions and tooltip-texts into searching.

  • GetAllStrings() function returns all visible strings. e.g.:
OUString ScTpFormulaOptions::GetAllStrings()
{
    OUString sAllStrings;
    OUString labels[] = { "label1", "formulasyntaxlabel",
                          "label3", "label6",
                          "label7", "label8",
                          "label2", "label4",
                          "label9", "label10" };

    for (auto& label : labels)
    {
        if (m_xBuilder->weld_label(label)->is_visible())
            sAllStrings += m_xBuilder->weld_label(label)->get_label() + OUString(' ');
    }

    OUString radioButton[] = { "calcdefault", "calccustom" };

    for (auto& radio : radioButton)
    {
        if (m_xBuilder->weld_radio_button(radio)->is_visible())
            sAllStrings += m_xBuilder->weld_radio_button(radio)->get_label() + OUString(' ');
    }

    OUString button[] = { "reset", "details" };

    for (auto& btn : button)
    {
        if (m_xBuilder->weld_button(btn)->is_visible())
            sAllStrings += m_xBuilder->weld_button(btn)->get_label() + OUString(' ');
    }

    // check button
    if (mxCbEnglishFuncName->is_visible())
        sAllStrings += mxCbEnglishFuncName->get_label() + OUString(' ');

    return sAllStrings.replaceAll("_", "");
}


  • Some screenshots from the development

w-07-11-0-writer-basic-fonts.png


w-07-11-1-writer-color.png


w-07-11-2-writer-general.png


Summary

  • New patchsets submitted (between patchset 10 and 19): https://gerrit.libreoffice.org/c/core/+/152519
  • Implementation of Plan B is completed. (initialize all strings at Options dialog start-up)
  • all (visible) strings of 69 dialogs included in searching.:
    • labels,
    • check buttons,
    • radio buttons and
    • buttons are included.

***

Patch: https://gerrit.libreoffice.org/c/core/+/152519

Project Mentors: Andreas Heinisch and Heiko Tietze (Thanks for their time and guidance)

GSoC project page: https://summerofcode.withgoogle.com/programs/2023/projects/IKtSHIH1

Enhancement request on Bugzilla: https://bugs.documentfoundation.org/show_bug.cgi?id=49895

by Bayram Çiçek at August 14, 2023 09:18 AM

August 10, 2023

Baole Fang

Week 11

Model improvement

Now, the testfailure model no longer considers author features.

by Baole Fang at August 10, 2023 12:00 AM

August 08, 2023

Ahmed Gamal Eltokhy

Week 8 9 Report

Significant progress has been made on the project's final stages. Certificates caching has been successfully resolved, with the complexities of caching tackled through an effective implementation involving design patterns and a singleton approach. The initial project goals have been largely met. The coming weeks will be dedicated to documentation, final improvements, and addressing minor outstanding goals.

August 08, 2023 05:03 PM

August 03, 2023

Baole Fang

Week 10

Smart inference

Previously, jenkins only uses testfailure results to decide whether the patch will pass or fail. Since it is not very accurate and testselect is accurate, a better algorithm using its prediction is used to pass or fail a patch.

testoverall is proposed to integrate testselect’s predictions into testfailure. Compared to testfailure, its failure recall significantly increases from 54% to 71%, while pass recall slightly drops from 70% to 65%. Since failure recall is much more important than pass recall, the model is a huge improvement.

Due to testoverall outstanding performance, it replaces testfailure in inference.

Besides, a new condition is added to decide whether the patch should pass or fail. Originally, it only looks at whether the overall failing probability has reached a threshold (0.4). Now, the number of failed unit tests are counted. If it reaches the threshold (10), then the patch is also considered to be failed. With the improved algorithm, the inference is able to recall 91% failures, while reducing computation by 57%.

Jenkins integration

Currently, the model is integrated into Jenkins job gerrit_master_ml. It first runs the machine learning model to predict whether the patch will pass or fail. If the patch is likely to fail, then the fast track will be run. If it is likely to fail, then the normal build will be run.

by Baole Fang at August 03, 2023 12:00 AM

August 01, 2023

Miklos Vajna

Multi-page floating tables in Writer: hidden anchors and more

Writer now has continued steps to handle tables that are both floating and span over multiple pages.

This work is primarily for Collabora Online, but is useful on the desktop as well. See the fifth post for background.

Motivation

The previous post finished with an "almost done" state for overlapping tables: this is a cluster of problems where tables are allowed to overlap, but various other formatting make them not overlap in practice in Word, but they do overlap in Writer. In this post, we'll see what was necessary so an initial set of old documents now render perfectly, which started to work during the past month.

Results so far

The feature is enabled by default and the DOCX/DOC/RTF import makes use of it.

On the positive side, core.git repository has has 49 files now which are focusing on correct handling of floating tables (filename matching floattable-|floating-table-). Also, there are additional tests that quickly build a specific multi-page floating table in the memory and do some operation on it, e.g. delete the last row and assert what happens.

Here are some screenshots from the fixes this month (right click, open image in new tab for larger size):

Old, new and reference rendering of a floating table with negative vertical position, relative to an empty anchor.

The first case is about a document where the bottom of the page had a floating table, where the position (relative to the anchor) was a negative vertical offset. In this case Writer used to move the floating table to the next page, but now matches Word: the space in the previous page is used for the floating table. This fixed overlapping text on the next page.

Old, new and reference rendering of a floating table with a large bottom margin in the anchor paragraph. Notice how the old rendering had a larger spacing between footnotes, which resulted in a 2 page document. The new and reference renderings have smaller spacing between footnotes and are of 1 page.

The next case is about floating tables in footnotes, the anchor needs to have no visible margins to provide the correct layout.

Old, new and reference rendering of a floating table with an overlap due to vertical offsets. The old rendering had a big second table, it completely covered the first table. The new and reference renderings shift the second table to a next page to avoid overlap.

This case was about an unwanted overlap of floating tables. Incorrect handling of the vertical offsets meant that the second floating table was rendered on top of the first one, making the text in the first floating table unreadable. Now we shift down the second floating table, so no overlap happens.

New rendering of a floating table with anchor text that starts with a newline.

This document had a layout loop on load. The problem was specific to the case when the anchor text of a floating table started with a newline character, which has its own position in the document model, but doesn't really have a width at a layout level, so needs special handling. This is now fixed, the document loads and renders fine.

Old, new and reference rendering of a document with lots of floating tables.

This document had only 4 pages, but lots of floating tables, carefully positioned to not overlap in Word. You can see how the old Writer rendering result was hard to read and it now looks correct.

Old, new and reference rendering of a floating table with a hidden anchor.

Writer used to hide floating tables anchored inside hidden paragraphs, but Word shows them all the time, now we match this behavior.

Old, new and reference rendering of a floating table with an overlap.

The next document first had all of its tables in the first page, now fixed.

Old, new and reference rendering of a floating table with an overlap between the table and the footer area.

A remaining problem was that the second table and the footer area could still overlap. This is now fixed: Word sometimes does allow such an overlap, but it depends on the baseline of the anchor position, so in the current case we can detect that such an overlap is not wanted.

Old, new and reference rendering of a floating table with a half row on the first page.

The last problem with this document was a poor split of the floating table, the first half row of the second table still went to the first page. Now we correctly detect that such a split is not wanted and simply start the second floating table on the second page, which results in a pretty good rendering of this document.

And that's where we stand. Certainly more work is needed to fix rough edges, but we get there step by step -- the theme is slowly transitioning from overlap problems right after load to unexpected rendering problems during editing.

How is this implemented?

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

As usual, the high-level problem was addressed by a series of small changes:

Want to start using this?

You can get a snapshot / demo of Collabora Office 23.05 and try it out yourself right now: try the unstable snapshot. Collabora intends to continue supporting and contributing to LibreOffice, the code is merged so we expect all of this work will be available in TDF's next release too (7.6).

by Miklos Vajna at August 01, 2023 07:29 AM