Welcome to The Document Foundation Planet

This is a feed aggregator that collects what LibreOffice and Document Foundation contributors are writing in their respective blogs.

To have your blog added to this aggregator, please mail the website@global.libreoffice.org mailinglist or file a ticket in Redmine.


Tuesday
10 June, 2025


face

TDF Annual Report 2024 banner

LibreOffice stands out as a privacy-respecting open source office suite. Unlike proprietary alternatives, the software is designed with privacy, user control and transparency in mind.

(This is part of The Document Foundation’s Annual Report for 2024 – we’ll post the full version here soon.)

Introduction

Concerns about end user privacy in the digital world have grown significantly over the past two decades, with and increasing awareness of data collection, user tracking and online surveillance. Many proprietary applications, including office productivity tools, often collect vast amounts of user data, in most cases without clear user consent.

All this has been clearly documented by Shoshanna Zuboff in her book: The Age of Surveillance Capitalism, which is defined as a new economic strategy that uses the activities and experience of the individual as a free raw material for hidden commercial practices of extraction, prediction, profiling and selling.

In this context, open source software differs substantially because respect for the user and for privacy are part of the ethical principles that guide the development of all applications. And LibreOffice stands out as the only office suite – open source or not – that respects privacy. Unlike proprietary alternatives, LibreOffice is designed with privacy, transparency, and user control of content in mind. The software does not collect telemetry data by default, does not include intrusive tracking functions, and allows users to work completely offline.

The following is a list of LibreOffice features and settings which help ensure end-user privacy, making the software a preferred choice for individuals, businesses and government institutions that prioritise data security.

No data collection or telemetry by default

Infographic showing that LibreOffice doesn't mine your data

One of the most significant privacy benefits of LibreOffice is its lack of telemetry by default. Unlike proprietary office suites that constantly send usage data back to their developers, LibreOffice does not collect or send any personal data without the user’s consent.

  1. There are no background processes that track document usage, keystrokes or user activity.
  2. LibreOffice does not create a unique user ID or track document interactions like some proprietary office suites do.
  3. There is no built-in cloud storage requirement, ensuring that files remain on the user’s device unless manually uploaded elsewhere.

Optional telemetry with user consent

LibreOffice offers an optional telemetry feature, but it is entirely opt-in and requires explicit user consent. The collected data will only be used to improve the functionality of the software and will never be shared with third parties.

Full offline functionality

Unlike cloud-based office suites such as Google Docs, Microsoft 365 or Apple iWork, LibreOffice is a fully offline suite.

  1. No forced cloud storage: documents remain on the local computer, reducing the risk of unauthorised access.
  2. No dependence on an Internet connection: users can work in completely isolated environments.
  3. No third-party server involvement: documents are never stored on a corporate server unless explicitly uploaded by the user.

For security-conscious organisations such as government agencies, law firms and healthcare providers, this offline capability ensures that sensitive documents never leave the internal network.

Open Document Format (ODF


Monday
02 June, 2025


face

Writer has some support for interdependent (or hierarchical) tracked changes: e.g. the case when you have a delete on top of an insert. While there were some working cases, handling of many combinations were missing. I started to make systematic improvements in this area in the recent past, this post gives you an overview what's done so far.

This work is primarily for Collabora Online, but the feature is available in desktop Writer as well.

Motivation

DOCX files in Word can often have overlapping tracked changes: Writer tries to split these up to make sure there is only one tracked change under the cursor at the same time. Still, it's possible that you have a tracked change with multiple types: e.g. a delete on top of an insert.

The focus in on 3 combinations which appear in DOCX files a lot: "insert, then delete", "insert, then format" and "delete, then format".

This mostly affects the UI and import/export filters of ODT and DOCX.

Results so far

Given an insert, then delete:

Interdependent tracked change: insert, then delete

Most operations worked nicely here, but in case your cursor was in the middle of AAA and you did a reject, followed by an undo, proper handling of that was missing, now implemented.

But then given an insert, then a format:

Interdependent tracked change: insert, then format

Then a handling of more actions were missing:

  1. DOCX import is now implemented.
  2. ODT import is now implemented.
  3. Accepting when you're inside AAA is now implemented: the insert is accepted for BBB but the format stays unchanged.
  4. Rejecting when you're inside AAA is now implemented: the insert is rejected and BBB is also removed, together with the format on top of it.
  5. Accepting the BBB now correctly operates on the insert type, so the format type remains after accept.
  6. If you accept BBB, now the surrounding AAA and CCC also get accepted as well, as expected.
  7. Now if you reject BBB, then it gets removed from the document, since you rejected an insert.
  8. When you reject BBB, the surrounding AAA and CCC also get rejected.

The combined implementation of these should give you a smooth feeling in case you're used to how Word works: if there is a format redline combined with an insert, then the operations act on the insert type, and format is only accepted/rejected when there is no insert "under" the format.

Similarly: it's a bit of an implementation detail that Writer splits redlines on DOCX import: so if you e.g. accept AAA then we combine that with BBB and CCC when it makes sense, so you need to click a lot less.

Finally, given a delete, then a format:

Interdependent tracked change: delete, then format

Then again handling of some actions were missing:

  1. DOCX import is now implemented.
  2. ODT import is now implemented.
  3. ODT export is now implemented.
  4. Accepting AAA now correctly operates on the delete type of BBB.
  5. Rejecting AAA

Wednesday
28 May, 2025


face

This deal unites the largest team of corporate Office engineers to deliver on Collabora Productivity’s mission to restore Digital Sovereignty to its users, while making Open Source Office Rock. It supercharges Collabora’s Online Office products and services portfolio with rich German language capability, deeper experience of vertical applications, new Web Assembly skills, and a wider unified partner ecosystem. Through improved product richness this sharpens the competitive edge of FLOSS Office productivity against mass-market proprietary alternatives.

CAMBRIDGE, UK – May 28th 12:00 CEST – 2025

Collabora Productivity, the world’s leading provider of collaborative Open Source Office editors have completed a merger with allotropia. Collabora has invested heavily in building Collabora Online (COOL) – a market leading, on-premise, secure, interoperable, open-source solution for document editing and collaboration deployed to any modern browser. This is complemented by desktop and mobile apps across Linux, Windows, Mac, Android, iOS and Chrome-OS. Collabora provides support subscriptions to enterprise customers worldwide via a network of hundreds of trusted partners. This is now augmented by allotropia’s partner and customer base. Together with our partners we deliver document and productivity excellence integrated with our partners product and service offerings.

allotropia’s expertise around Web Assembly combined with Collabora Online will we expect, in time, enable customer use-cases such as well as office-as-component embedding scenarios in vertical applications as well as off-line and end-to-end encrypted editing, and. This work builds on some visionary prototype funding from the Bundesministerium des Inneren (BMI) for a collaboration between the companies to enable the use of Collabora Online off-line in the browser.

Further details of product investment, and direction will be announced and decided in workshops with our key customers and partners at our annual COOL Days conference in Budapest next week where staff, community and our customer and partner-ecosystem meet, swap ideas, and hear about the latest work in our upcoming major release featuring improved performance, usability, interoperability and much more.

“Collabora is excited to welcome each member of the allotropia team today!” said Michael Meeks, CEO, Collabora Productivity, “We are excited to work together to accelerate our product development, enjoy our first COOL Days together, and plan the next features and possibilities to delight our customers.”

Collabora has invested in building a network of hundreds of partners and is approaching one hundred million docker image downloads of its document editing server software, with millions of paying users of its products, all of whom will start to benefit from this merger from today.We expect to bring the experience that allotropia has from it’s relationship with CIB around vertical desktop applications (Fachverfahren) to help partners and customers migrate their Windows & Microsoft Office based business process to easy to deploy multi-platform web applications.

“With our awesome team of engineers, and our WebAssembly know how, we can add significantly to Collabora’s powerhouse of Office engineering prowess & their product offerings”, says Thorsten Behrens, CEO of allotropia, “we’ve worked with them as partners for many years, and align perfectly in our goals


Monday
26 May, 2025


face

Yesterday I merged a fix for Writer’s tdf#165094. Not that it was something exceptional; something that often happens when we change the huge code: a regression. Something that we try to do for them: a fix. Why mention it here?

It happens to show something, that people underestimate. The complexity of what they call “proper testing” – you know, that “I found a bug! Do you even try to test your software???” rant you often see in discussions. Let’s look at this case.

The problem was, that in some specific document, where there was a manually inserted page break, that page break, defined in a hidden paragraph, disappeared after an upgrade. Sounds easy? Should be caught immediately in the release testing? But other page breaks weren’t lost.

Debugging showed, that the bug would only occur when all of the following happened:

  • The page break was defined in a hidden paragraph (something already known from the reporter – thank you Gabor!), and
  • There were at least 26 paragraphs before that hidden paragraph, all on the same page, and
  • The page break defined a paragraph style, and
  • That page break defined a page number, and
  • That assigned new page number happened to be the same “oddity” as the current one (i.e., either the number of that page with 26+ paragraphs was odd, and the new page number was odd; or the number of that page with 26+ paragraphs was even, and the new page number was even), and
  • After the hidden paragraph (which defined the page break), a table immediately followed.

I suppose, that’s a combination of factors, that any QA engineer would naturally test first, don’t you agree? (Disclaimer: no I don’t think so.)

Note that the complexity of this constellation of causing factors is, again, not uncommon in our codebase. In fact, it only needed less than ten features to take their specific forms, from thousands of features and options that the suite offers.

But it is completely unsurprising, that the bug, that requires such a constellation of factors, actually appeared in our bug tracker. Given the tens of millions of users, who work with who knows how many documents, every low-probability event will happen, sooner or later. This is good; and we are thankful to everyone who files bugs.

And let me say, that we at Collabora Productivity are glad to do many good things to make the office suite better for everyone.


Friday
23 May, 2025


face

Considera la historia del control sobre los archivos de los usuarios, ya sea por parte de organizaciones o de individuos.

Piensa en todos los documentos que has creado a lo largo de tu vida: Tareas escolares. Presentaciones e informes de …


Tuesday
20 May, 2025


face

LibreOffice 25.8 will be released as final at the end of August, 2025 ( Check the Release Plan ) being LibreOffice 25.8 Alpha1 the first pre-release since the development of version 25.8 started at the beginning of December, 2024. Since then, 3918 commits have been submitted to the code repository and 533 bugs were set to FIXED in Bugzilla. Check the release notes to find the new features included in this version of LibreOffice.

LibreOffice 25.8 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!


Wednesday
14 May, 2025


face

Uno de los resultados más interesantes del V Congreso Latinoamericano de LibreOffice en Montevideo fue el intercambio de conocimientos entre los miembros de la comunidad Ismael Fanlo, Xisco Faulí y Olivier Hallot.

Ismael es un reconocido miembro de la comunidad …


Friday
09 May, 2025


face

General Activities

  1. Olivier Hallot (TDF) fixed displaying help for a particular module from the command line, updated help after changes to object boundaries options, improved help on BASIC format codes and added type information to BASIC help pages, added help about multithreading in Calc, added help on saving only active sheet in Calc, explained case sensitivity in the help for Calc’s Validity and improved help for CSV import
  2. Gábor Kelemen (allotropia) worked on the script for finding unneeded includes and did many code cleanups
  3. Alain Romedenne fixed some Python code examples in Help
  4. Tomaž Vajngerl (Collabora) added support for embedded fonts in PowerPoint files, made graphics handling code more efficient and continued reworking slideshow rendering code
  5. Gökay Şatır, Marco Cecchetti, Pranam Lashkari, Parth Raiyani, Ashod Nakashian, Gülşah Köse, Szymon Kłos and Jaume Pujantell (Collabora) worked on LOKit used by Collabora Online. Jaume also added support for annotationRef elements in DOCX export to preserve the order of comments.
  6. Karthik Godha added all 3 Spotlight commands (Paragraph Style, Character Style, Direct Formatting) to Style Inspector, made it possible to rename objects from the Writer Navigator and fixed extended help tooltips being too wide in the Navigator
  7. Miklós Vajna (Collabora) continued polishing per-user change tracking in Writer, improved compatibility with DOCX’s character properties defined for “paragraph markers”, improved the handling of tracked changes that depend on each other and added support for reinstating changes
  8. Xisco Faulí (TDF) fixed exporting Writer table formulas with a sum of a range to DOCX, added a bunch of new automated tests, upgraded many dependencies, fixed crashes and did some code cleanups
  9. Michael Stahl (allotropia) made the line height for paragraphs that are empty due to hidden text compatible with MS Word and made replying to Writer comments and recovering broken ZIP files more robust
  10. Mike Kaganski (Collabora) did many code cleanups and optimisations
  11. Caolán McNamara (Collabora) fixed crashes and many issues found by static analysers and did code cleanups and optimisations
  12. Stephan Bergmann (allotropia) worked on the WASM build. He also adapted the code to compiler changes and did code cleanups
  13. Noel Grandin (Collabora) made handling large charts in Calc much faster when loading, toggling edit mode and switching sheets, improved the loading speed of large RTL Writer documents, improved the speed of calculating optimal row heights in Calc and improved the speed of image processing with Skia. He also did many code cleanups and optimisations
  14. Justin Luth (Collabora) made it so table cell margins get exported to PPTX, improved the DOCX compatibility of padding and border spacing in table cells and paragraph margins, improved object positioning in DOCX import and made it so preview thumnails are displayed for DOTX templates
  15. Michael Weghorn (TDF) continued cleaning up and reorganising accessibility-related code and fixed a crash in Qt-based UIs when inserting videos into Impress. He also worked on using native widgets in Qt UIs
  16. Balázs Varga (allotropia) polished the implementation of Calc’s XLOOKUP() function, fixed

Thursday
08 May, 2025


face

Writer has the concept of rejecting tracked changes: if a proposed insertion or deletion is not wanted, then one can reject it to push back on the proposal. So far such an action left no trace in the document, which is sometimes not wanted. Calling reinstate on a change behaves like reject, but with history: it reinstates the original state, with the rejected change preserved in the document.

This work is primarily for Collabora Online, but the feature is available in desktop Writer as well.

Motivation

When Alice works on a document to insert e.g. new conditions for a contract, then perhaps Bob is not happy with the proposal. But just rejecting the change "silently" would not be polite: the tracked change then disappears, so possibly Alice thinks it was accepted and Bob didn't communicate the pushback explicitly in the resulting document, either.

Reinstate is meant to improve this interaction: if an insert is reinstated, then an explicit delete is created on top of the insert, so Alice can see that Bob was not happy with the proposal. Or in case Alice proposed a delete, Bob can reinstate that by adding the same content again to the document, without typing the text manually after the delete.

This is a UI feature: the resulting model still only contains inserts and deletes, so it works even with DOCX files.

Results so far

Given an insert:

Reinstate: an insert

Now you can easily create a delete on top of the insert:

Reinstate: a reinstated insert

And given a delete:

Reinstate: a delete

Now you can easily create an insert right after the delete, preserving complex content:

Reinstate: a reinstated delete

As you can see, this creates the opposite of the original change as a new tracked change, so it will in the end still reject the change, but without deleting the original change.

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. Core side:

Online side:

Want to start using this?

You can get a development edition of Collabora Online 25


Thursday
01 May, 2025


face

Un hito para los formatos de documento abiertos y la soberanía digital.

Berlín, 1 de mayo de 2025 – The Document Foundation se une hoy a la comunidad del software de código abierto y los estándares abiertos para celebrar


Wednesday
30 April, 2025


face

This FirebirdSQL pull request introduces support for Windows ARM64 builds to the Firebird project. The changes cover updates to build scripts, configuration files, and Visual Studio solution/project files to accommodate ARM64 architecture, ensuring compatibility and enabling compilation and functionality on Windows ARM64 platforms.


face

This FirebirdSQL pull request introduces SQL-compliant aliases GREATEST and LEAST for the existing MAXVALUE and MINVALUE functions. These aliases align with the SQL:2023 standard and provide a more intuitive and widely recognized syntax. The changes include updates to documentation, keywords, parser tokens, and system function definitions to support these new aliases.


Sunday
27 April, 2025


face

«Cómo iniciarse con las macros de Python y BASIC con la ayuda de ScriptForge». Dos programadores rvisan el código en su computadora.Además del entorno de programación simplificada de EasyMacro, existe también el que fue desarrollado por otros entusiastas de LibreOffice. Esta vez son los señores Jean-Pierre Ledure, Alain Romedenne y Rafael Lima quienes le dieron luz a ScriptForge.[1] Ellos …


Friday
18 April, 2025


face

As a LibreOffice user, you have certainly seen the LibreOffice splash screen. It is displayed when you open LibreOffice, it has a progress bar, and when loading the application is finished it goes away. Here we discuss a suggested improvement for this splash screen.

Current Implementation Approach

Currently, the splash screen is implemented by creating a custom widget with a custom painting mechanism that draws the splash image and also the progress bar and moves the progress indicator.

This has some drawbacks:

1. The splash screen does not always scale to the same size as the main LibreOffice Window.

2. The style of the progress bar is somehow different from other UI elements, looks mostly like gen interface.

3. It needs and uses a custom paint code.

4. It does not conform to the dark/light theme.

5. It is not easily localize-able. In fact, the only text is from the displayed image, in English. When you build from sources, the image file is instdir/program/intro.png.

LibreOffice splash screen bitmap

LibreOffice splash screen bitmap

6. It is a separate binary (oosplash). You may run it with:

$ ./instdir/program/oosplash
LibreOffice dev splash screen

LibreOffice dev splash screen

VCL Weld Mechanism

I have previously written about VCL weld mechanism, which is based on creating user interface files (.ui) and loading them inside the application.

The weld mechanism greatly reduces the complexity of creating user interfaces, and also improves other aspects of the user interface, including the consistency.

Code Pointers

Most of the code for the current implementation resides in:
desktop/source/splash/splash.cxx.

The SplashScreenWindow class has an custom paint method, SplashScreenWindow::Paint(), which draws the bitmap, and also the progress. A new UI file is needed for this purpose, which should use GtkProgressBar, which will be considered a weld::ProgressBar. VCL then uses appropriate progress bar widget in different graphical plugins of VCL.

You may look into some dialogs like tip of the day to get some insight:

It would be interesting to avoid a separate binary, but it is fine to keep things as is, and just change to use .ui file.

Final Words

The above issue is tdf#166128. If you would like to work on fixing it, you can just follow the Bugzilla link to see more information.

You may also use ideas from a minimal weld application here:

VCL weld: create LibreOffice GUI from design files


Friday
11 April, 2025


face

General Activities

  1. LibreOffice 25.2.2 and LibreOffice 24.8.6 were announced on March 27
  2. Stanislav Horáček updated and improved UI and help texts
  3. Gábor Kelemen (allotropia) documented a new field that displays the page count for a range until the next numbering reset
  4. Alain Romedenne expanded help for ScriptForge and other scripting topics
  5. Tomaž Vajngerl (Collabora) reworked slideshow rendering code for robustness and simplicity
  6. Gökay Şatır, Marco Cecchetti and Szymon Kłos (Collabora) worked on LOKit used by Collabora Online
  7. Miklós Vajna (Collabora) implemented per-user change tracking in Writer and fixed unexpected list level change on inserting a new bullet in Writer
  8. Olivier Hallot (TDF) improved the UI and help pages for Calc’s Data Provider and improved help for Calc’s Duplicates command
  9. Xisco Faulí (TDF) added a bunch of new automated tests, upgraded many dependencies and did some code cleanups
  10. Michael Stahl (allotropia) improved the Accessibility Checker, improved MS Word compatibility with hiding empty paragraphs before tables in certain scenarios and fixed an issue with installing custom default templates via extensions
  11. Mike Kaganski (Collabora) greatly improved the performance of font preview in Calc, fixed Calc’s COUNTA() function returning 1 for empty ranges, fixed integer overflow in Writer’s Find & Replace match count, improved the loading speed of Writer documents with lots of bookmarks and tables and made the code for Underline Trailing Spaces compatibility option more robust
  12. Caolán McNamara (Collabora) improved spellchecking performance in multi-language spreadsheets, fixed many issues found by static analysers and did code cleanups and optimisations
  13. Stephan Bergmann (allotropia) worked on the WASM build. He also adapted the code to compiler changes and did code cleanups
  14. Noel Grandin (Collabora) made canvas rendering in Draw more robust, updated Skia through several versions, fixed slow switching of sheets in Calc when lots of drawing objects or lots of formatted cells are involved, improved spellchecking speed in Writer, made it faster to load complex XLSX spreadsheets, made it faster to delete very large tables in Writer, made it faster to load Writer documents with change tracked moves and improved the loading time of certain DOC files. He also did many code cleanups and optimisations
  15. Justin Luth (Collabora) fixed a line spacing issue in table cell content in PPTX files and fixed endnotes and footnotes data becoming lost when roundtripping glossary relations to DOCX
  16. Michael Weghorn (TDF) continued cleaning up and reorganising accessibility-related code, made Quick Find more accessible and made gtk4 file dialog show all the extra controls. He also worked on using native widgets in Qt UIs
  17. Balázs Varga (allotropia) worked on the WASM build, fixed unwanted table border lines in PPTX export, added an accessibility check for links and references in header/footer, fixed Quickstarter being visible in options even if the feature is not installed and made it so the Online Update page is not visible, if the feature was not selected to be installed
  18. Patrick Luby made the macOS Start Center displaying logic more

Tuesday
08 April, 2025


face

Here is the description : "The range-based FOR statement is used to iterate over a range of numeric values. The iteration is performed in increasing order when used with TO clause and in decreasing order when used with DOWNTO clause"Syntax[<label> :]  FOR <variable> = <initial value> {TO | DOWNTO} <final value> [BY <by value>] DO      &


Monday
07 April, 2025


face

We are happy to announce the release of Jaybird 6.0.1 and Jaybird 5.0.7. Both releases provide a number of performance improvements to blob handling, and some bug fixes.We plan to offer more blob performance improvements in upcoming releases of Jaybird 5 and 6, for Firebird 5.0.3 and higher (see also New Article: Data access methods used in Firebird).


Wednesday
02 April, 2025


face

Writer has the concept of recording tracked changes or not: if recording, typing into a document or deleting content will create tracked changes of type insertion or deletion. So far this was a per-document setting, but now individual users can enable or disable this as they wish.

This work is primarily for Collabora Online, but the feature is available in desktop Writer as well.

Motivation

When Alice keeps typing and Bob enables change tracking, then surprisingly the typed characters of Alice will form a tracked insertion, which is surprising, since that was not the case a second ago and Alice didn't do anything other than typing.

Giving users a choice if they enable recording for just this user or for all users fixes this problem.

Results so far

Here is how the per-user (technically per-view) tracked changes recording looks like:

Per-view tracked changes recording

As you can see, the user on the left has recording turned on and this doesn't influence the user on the right, while this was not possible before.

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. Core side:

Online side:

Want to start using this?

You can get a development edition of Collabora Online 25.04 and try it out yourself right now: try the development edition. 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 (25.8).


Sunday
23 March, 2025


face

La base de datos Firebird se distingue por sus características únicas dentro del ecosistema de bases de datos compatibles con LibreOffice Base.

¿Por qué considero que Firebird es especial? Porque es el único motor de bases de datos que admite …


Friday
21 March, 2025


face

por Gustavo Pacheco

El V Congreso Latinoamericano de LibreOffice se celebró en Montevideo, Uruguay, los días 5 y 6 de diciembre de 2024, en el Espacio Colabora de la Intendencia de Montevideo. Este evento reunió a miembros de la comunidad …


Thursday
13 March, 2025


face

Ha pasado poco más de un mes desde que se lanzó LibreOffice 25.2, la nueva versión de la suite ofimática de código abierto, y la recepción no podía ser mejor: más de un millón de descargas semanales está teniendo la …


Monday
10 March, 2025


face

General Activities

  1. LibreOffice 25.2.0 was announced on Feb 6. Three weeks later, LibreOffice 25.2.1 was announced on Feb, 27
  2. LibreOffice 24.8.5 was announced on Feb 20
  3. Olivier Hallot (TDF) improved the descriptions of new Calc functions shown in the UI, added a Help button to the Data Provider dialog, added help pages for new Calc functions CHOOSECOLS(), CHOOSEROWS(), VSTACK() and HSTACK(), added a help page for Calc’s Data Provider and improved help for Paste Special as well as labels and business cards
  4. Tomaž Vajngerl (Collabora) continued working on PDF 2.0 support and refactored graphics and animation handling code in VCL toolkit
  5. Miklós Vajna, Rashesh Padia, Darshan Upadhyay, Gökay Şatır, Attila Szűcs, Szymon Kłos (Collabora) worked on LOKit used by Collabora Online. Szymon also improved the user experience of the Currency dropdown by removing the need to click an OK button
  6. Andras Timar (Collabora) fixed an issue with importing WEEKNUM() functions from XLSX files, made Excel style cell reference syntax be respected in non-English UIs and made it so in read-only documents one can’t invoke the Search and Replace dialog, reset cell attributes or fill down cells
  7. Xisco Faulí (TDF) implemented new Calc functions CHOOSECOLS(), VSTACK() and HSTACK(), made UNIQUE() case-insensitive like its counterpart in Excel, added a couple of dozen automated tests, upgraded many dependencies and fixed a crash
  8. Michael Stahl (allotropia) fixed rendering of overlapping tracked formatting and deletions in imported DOCX files, fixed losing tracked changes when paragraph has a frame anchored to it, fixed truncation of tables in sections split across pages and improved compatibility with MS Word in the case of hidden text
  9. Mike Kaganski (Collabora) fixed an issue with the Alt+X Unicode conversion command when following a combining character, fixed Calc’s INFO() function giving unexpected results with some arguments, made BASIC’s Shell() function more robust and implemented a compatibility option for MS Word’s “Underline Trailing Spaces”. He also did many code cleanups and optimisations
  10. Caolán McNamara (Collabora) fixed sheet identifiers going out of sync sometimes with XLSX export, fixed crashes, fixed many issues found by static analysers and did code cleanups and optimisations
  11. Stephan Bergmann (allotropia) worked on the WASM build. He also adapted the code to compiler changes and did code cleanups
  12. Noel Grandin (Collabora) made it faster to load and display XLS and XLSX files with lots of conditional formatting. He also did many code cleanups and optimisations, especially in the area of graphics handling
  13. Justin Luth (Collabora) fixed an Excel compatibility issue with frozen cell zones, fixed unwanted empty paragraphs appearing in headings in DOCX files, fixed tabstops missing from paragraph styles in DOC import and made DOCX metadata compatible with MS Word (Word deviates from the OOXML specification in this area)
  14. Michael Weghorn (TDF) continued cleaning up and reorganising accessibility-related code, made Sidebar, Quick Find and editable comboboxes more accessible, fixed a visual glitch when resizing the window in certain cases affecting

Thursday
06 March, 2025


face

We’ve added a great new Vue.js-3 ZetaJS demo (source)! It showcases word processing and spreadsheets inside a single web app. Calc is being used as a data source for an HTML app, filling letter templates in Writer. You can even upload custom data spreadsheets or document templates! And have you seen the nice Writer toolbar, all done with Vue.js?

We’ve also updated the existing demos, showcasing Chrome PWA support with the Ping Monitor demo – just click the little install button at the top-right of the address bar, to get the Ping Monitor “installed” on your desktop!

new demo combining Writer, Calc and the complete toolbar

Talks

Meanwhile, our team was giving some great talks about our work for ZetaOffice and LibreOffice. Why not check out the recordings during your lunch break?

ZetaJS & ZetaOffice

FOSDEM LibreOffice DevRoom talks

News clippings

Look, we made some headlines! TheRegister was following up some earlier coverage about the WebAssembly port, after Thorsten gave Liam a demo during FOSDEM. Read up the full article here.

Next up

In case you’re around, meet us in two weeks at the FOSSAsia Summit in Bangkok, where Sarper Akdemir will give an update over our work. Dates are March 13-15.

If you’re based in Europe, you might instead enjoy Thorsten’s talk at the Chemnitz Linux Days (Germany) from March 22-23.

Looking forward to meet you there!

Feedback appreciated!

Please subscribe to our Newsletter or on Mastodon and let us know how you liked ZetaJS and the demos! If you’re playing with the code leave a star at the ZetaJS repo or if you hit any issues please file a report on GitHub.

Or just leave a comment and let us know directly – thanks for reading! 🙂


Monday
03 March, 2025


face

By Ndidi Folasade Ogboi

For the past two months, I’ve been working on adding more templates to LibreOffice Writer as part of my Outreachy project. My goal has been to create functional templates that users need the most.

I created these templates based on what you told us in our survey and your response was incredible!…


Wednesday
26 February, 2025


face

Firebird Project is happy to announce general availability of Firebird 5.0.2 — the latest minor release in the Firebird 5.0 series.This minor release offers bug fixes as well as a few improvements, please refer to the Release Notes for the full list of changes.Binary kits for Windows, Linux, MacOS and Android platforms are immediately available for download.


Monday
17 February, 2025


face

LibreOffice inherits a gigantic code base from its ancestors, StarOffice and OpenOffice. Here I discuss some notes for the newcomers on how to better understand the existing LibreOffice code, and improve the patches.

Studying the Existing Code

As said, LibreOffice is a huge code base, containing ~10 million lines of mostly C++ code. There are different assumptions, conventions and coding styles across ~200 modules that LibreOffice has.

Therefore, it is important to first, study the existing code, through reading and debugging LibreOffice source code, to understand the things that it does, and the way you can implement your ideas, including bug fixes and adding new features.

And although implementing some ideas seem to be straightforward at first sight, it is meaningful to study the details.

Quality Assurance Point of View

First of all, you should understand the thing that you want to implement. No matter if it is a bug, a new feature, or just an EasyHack, you should understand what is requested, what works and what does not work. This requires careful reading of the Bugzilla pages.

User Point of View

Then, you should try to run LibreOffice to understand the exact place in the application where you want to change. LibreOffice user interface has thousands of dialog boxes, so you need to make sure that you understand the thing that you want to do.

Developer Point of View

And at last, you get into implementing something in the code. Here are some questions that you can ask yourself about the details, when reading the existing code:

  • Why this statement is here, in the first place? (detail-oriented view)
    • You can use git blame to see the last author of a specific line
    • You can use git log to study the details by knowing the commit hash
    • What can this part of code actually does?
    • Can I see its effect?
git log

git log

Or, you may be interested in the code behavior in the big picture:

  • What does the code do as a whole? (holistic view)
  • There are many other statements, functions and other constructs in the code. What do they do?
  • What is the overall goal of the code?
  • Can I test that in action?

You can do some small changes, before even getting into implementing your idea:

  • What happens if I remove it? (small changes)
  • Does the removal prevent the code from working?
  • Is it incomplete, or does it actually do something useful, which
  • will be absent if I remove it?

Then, you can work on the actual implementation. Ask yourself:

  • How can I implement the idea in its simplest form? (straightforward change)
  • Does it have side effects?
  • How can I make sure every thing else works as before?
  • How can I write a test for it?

After understanding some of the basic details about the way things work, you may go into improving your implementation.

  • How can I make it better? (sophisticated change)
  • Can I make the code more robust where it is brittle?
  • Can I complete the

Tuesday
11 February, 2025


face

General Activities

  1. Olivier Hallot (TDF) added help pages for new Calc functions TOROW(), TOCOL(), WRAPROWS(), WRAPCOLS(), EXPAND(), TAKE() and DROP(), added dark mode support to the help interface, improved help for PDF/UA, did cleanups in the Xapian-based search in online help, added help for tables styles in Writer and improved help related to printing
  2. Dione Maddern added a help page for Cell Appearance Sidebar deck
  3. Stanislav Horáček did some cleanups in help
  4. Gábor Kelemen (allotropia) added a detailed list of allowed PDF password characters into help and improved the developer tools for finding unneeded includes and UI strings that might need to be translatable
  5. Tomaž Vajngerl (Collabora) continued working on PDF 2.0 support and document themes and fixed an Excel compatibility issue with empty values of defined names
  6. Miklós Vajna, Andras Timar, Henry Castro, Gökay Şatır, Attila Szűcs, Szymon Kłos and Pranam Lashkari (Collabora) worked on LOKit used by Collabora Online
  7. Xisco Faulí (TDF) implemented new Calc functions, TOCOL, TOROW, WRAPCOLS, WRAPROWS, TAKE, DROP, EXPAND and CHOOSEROWS, added support for setuptools and pip in Python scripting, upgraded many dependencies, added some unit tests and did many code stability improvements
  8. Michael Stahl (allotropia) continued improving the correctness of HTML import regarding formatting and fixed issues with table splitting in Writer’s layout
  9. Mike Kaganski (Collabora) fixed an issue with opening newly-created database forms, fixed Basic isNumeric() function giving incorrect results, fixed an installation issue affecting Active Directory setups on Windows, fixed issues with allowed characters in file name when exporting as PDF, fixed wrong number of results being reported when going over 1000 while executing Find All in Calc, fixed inability to pass a Date object to an UNO API method, fixed an issue with handling of Variant types in Basic, made handling of conditional formatting with colour conditions more robust when moving columns, made intercepting .uno:Open command work again, fixed a crash related to regular expressions in Basic and made SQL queries handle negative values
  10. Caolán McNamara (Collabora) fixed crashes, fixed many issues found by static analysers and did code cleanups and optimisations
  11. Stephan Bergmann (allotropia) worked on the WASM build. He also adapted the code to compiler changes and did code cleanups
  12. Noel Grandin (Collabora) improved the speed of inserting rotated images to Writer. He also did many code cleanups and optimisations
  13. Justin Luth (Collabora) fixed DOCX import issues with frames before tables getting anchored to a table cell instead of an empty paragraph and missing header properties in page styles
  14. Michael Weghorn (TDF) continued cleaning up and reorganising accessibility-related code, did refactoring in Linux printer code and fixed some crashes. He also worked on using native widgets in Qt UIs
  15. Balázs Varga (allotropia) fixed import of cropped vector graphic objects in PPTX files, improved warnings related to allowed characters in the PDF password input dialog, made it possible to show or hide the text in some password dialogs (more to be included), fixed broken cropped SVG

Thursday
06 February, 2025


face


Nova osrednja izdaja ponuja veliko število izboljšav vmesnika in dostopnosti, pa tudi običajnih funkcionalnosti medopravilnosti.

Berlin, 6. februar 2025 – LibreOffice 25.2, nova osrednja izdaja najboljšega odprtokodnega pisarniškega paketa za Windows (Intel, AMD in ARM), macOS (Apple in Intel) in Linux, ki jo podpirajo prostovoljci, je na voljo na naslovu https://sl.libreoffice.org/prenos LibreOffice je najboljši pisarniški paket za tiste uporabnike, ki želijo ohraniti nadzor nad svojimi lastnimi programskimi orodji in dokumenti, da zaščitijo svojo zasebnost in digitalno življenje pred komercialnim vmešavanjem in strategijami povzročanja odvisnosti velikih tehnoloških podjetij.

LibreOffice je edini pisarniški paket, zasnovan na potrebah uporabnika, ne le na pojavni všečnosti. Ponuja številne možnosti vmesnika, ki ustrezajo različnim navadam uporabnikov, od tradicionalnih do sodobnih, in kar najbolje izkorišča zaslone različnih mer, saj optimizira prostor, ki je na voljo na namizju, tako da je čim večje število funkcij le klik ali dva stran. Je tudi edino programje za ustvarjanje dokumentov, ki lahko vsebujejo osebne ali zaupne podatke, a tudi spoštuje zasebnost uporabnikov, s čimer zagotavlja, da se uporabnik lahko odloči, če in s kom je pripravljen deliti vsebino, ki jo je ustvaril, zahvaljujoč standardiziranemu in odprtemu zapisu, ki se ne uporablja kot orodje za povzročanje odvisnosti uporabnikov, ki vsiljuje periodične posodobitve programja. Vse to z naborom funkcionalnosti, primerljivim s tistim vodilnega programja na tržišču in daleč zmogljivejšim od vsega, kar ponujajo preostali tekmeci.

LibreOffice je edinstven zaradi platforme LibreOffice Technology, edine na tržišču, ki omogoča skladen razvoj namiznih, mobilnih in oblačnih različic – tudi tistih, ki jih ponujajo podjetja iz ekosistema – ki lahko izdela identične in povsem združljive dokumente na osnovi dveh obstoječih standardov ISO: odprtem zapisu ODF ali Open Document Format (ODT, ODS in ODP), in lastniški vrsti datotek Microsoft OOXML (DOCX, XLSX in PPTX). Slednje v sebi skrivajo mnogo umetne (in nepotrebne) zavezane kompleksnosti, kar lahko povzroča težave uporabnikom, ki so prepričani, da uporabljajo standardiziran zapis.

Končnim uporabnikom je na voljo tudi tehnična pomoč prve ravni prostovoljcev na uporabniških dopisnih seznamih ter spletišču Ask LibreOffice: https://ask.libreoffice.org

Novosti v LibreOffice 25.2


ZASEBNOST

  • Če je potrjena možnost odstranitve zasebnih podatkov pri shranjevanju, se osebni podatki ne bodo izvozili (imena avtorjev in časovni žigi, trajanje urejanja, ime tiskalnika in njegove nastavitve, predloga dokumenta, avtorji in datumi komentarjev ter sledi sprememb).
OSRČJE / SPLOŠNO
  • LibreOffice 25.2 lahko bere in zapisuje dokumente v zapisu ODF različice 1.4.
  • Mnogo izboljšav medopravilnosti z lastniškimi vrstami dokumentov OOXML.
  • Zdaj lahko samodejno podpisujete dokumente, ko določite privzeto potrdilo.
  • Windows 7 in 8/8.1 sta opuščeni platformi in podpora zanju bo odstranjena z različico 25.8.
  • Razširitve in funkcionalnosti, ki se zanašajo na Python, ne delujejo na sistemih Windows 7.
WRITER
  • Izboljšave upravljanja sprememb dokumentov, še posebej

Thursday
30 January, 2025


face

When you want to interact with users, sometimes simple dialog boxes are sufficient: a simple yes or no, or some info box. But in other cases, you may need more complex message boxes. Here I discuss how to use VCL Weld to create a custom one.

Simple Message Box

You can create a simple message box, using predefined templates like Info box using a code snippet like this:

std::unique_ptr<weld::MessageDialog> xInfoBox(Application::CreateMessageDialog(pParent, VclMessageType::Question, VclButtonsType::YesNo, u"Are you sure?"_ustr));
xInfoBox->run();

And, this is the result, which is very simple, without any title bar:

Yes / No message box

Yes / No message box

There are other predefined types, which can be used in different scenarios:

enum class VclMessageType
{
    Info,
    Warning,
    Question,
    Error,
    Other
};

But, if you want custom message boxes, you should be using weld mechanism, with its CreateBuilder function.

Custom Message Boxes

Below is the code from the source code sfx2/source/doc/QuerySaveDocument.cxx, which is inside sfx2 (framework) module. This dialog box is accessible across different modules, including Writer, Calc and Draw/Impress.

Let’s look into the code:

short ExecuteQuerySaveDocument(weld::Widget* _pParent, std::u16string_view _rTitle)
{
    ...
    std::unique_ptr<weld::Builder> xBuilder(
        Application::CreateBuilder(_pParent, u"sfx/ui/querysavedialog.ui"_ustr));
    std::unique_ptr<weld::MessageDialog> xQBox(
        xBuilder->weld_message_dialog(u"QuerySaveDialog"_ustr));
    xQBox->set_primary_text(xQBox->get_primary_text().replaceFirst("$(DOC)", _rTitle));
    return xQBox->run();
}

The code is using a UI file, named sfx/ui/querysavedialog.ui to create a message dialog, and then change the title of it.

QuerySaveDialog

QuerySaveDialog

If you look into the include file, include/vcl/weld.hxx inside Builder class, you may see functions like weld_… that are suitable to find various different UI elements from the UI, by mentioning the element ID. For example, to find a label with the ID equal to lable_id, you do this:

std::unique_ptr<weld::Label> m_pTextLabel label = m_xBuilder->weld_label(u"label_id"_ustr)

Result

This is the result, when you try to close an unsaved document.

QuerySaveDialog running

QuerySaveDialog running

Alternative Ways

This is not the only way you can create nice dialog boxes using VCL weld mechanism. There are some predefined message boxes that look nice which use weld mechanism, and are available for use via relevant C++ classes.

An interesting one here, is the QueryDialog, which is created by a factory method design pattern.

It uses a predefined dialog, using cui/uiconfig/ui/querydialog.ui as the UI file, and it contains a nice stock image! You can test it easily, by modifying a LibreOffice example, minweld.

IMPL_LINK_NOARG(TipOfTheDayDialog, OnNextClick, weld::Button&, void)
{
    VclAbstractDialogFactory* pFact = VclAbstractDialogFactory::Create();
    auto pDlg = pFact->CreateQueryDialog(getDialog(), u"Tips"_ustr, u"Tip of the day"_ustr, u"Are you sure you want to see the next tip of the day?"_ustr, false);
    sal_Int32 nResult = pDlg->Execute();
    pDlg->disposeOnce();

    if(nResult == RET_YES)
    {
        ++m_nCounter;
        m_pTextLabel->set_label(u"Here you will see tip of the day #"_ustr
+ OUString::number(m_nCounter) + ".");
    }
}

Assuming that you have a working build of LibreOffice, you can simply run the minweld workbench by invoking


Wednesday
29 January, 2025


face

We are pleased to announce the successful migration of Firebird Docker images to their new home:https://github.com/FirebirdSQL/firebird-dockerThe images are now published on Docker Hub athttps://hub.docker.com/r/firebirdsql/firebirdThanks to Adriano dos Santos Fernandes for his invaluable contributions and improvements throughout this process.

<- Current blog entries