Darshan Upadhyay
This week Calc gained a particle-swarm optimisation solver, funnel charts became a chart type you can pick like any other, the Linux desktop app learned to open documents in tabs, and a long run of Impress placeholder work made empty placeholders round-trip cleanly through ODF and OOXML. Here’s the roundup.
The Numbers
This week: 357 commits merged by 35 contributors, with 197 open changes on online/main. All-time since April 2nd: 7,868 commits merged from 74 contributors.
What Developers Are Building
Calc: A Swarm Solver and Formula Fidelity
The headline is a new particle swarm optimisation solver. Tomaž Vajngerl built it out end to end: naming the infeasibility penalty weight so the tuning is legible, letting the solver take a fixed random seed so runs are reproducible rather than merely repeatable-ish, restoring the document’s auto-calc state after a solve, reporting the objective value the solve actually reached, and adding a constrained linear-programming test plus tests that run from a drawn fixed seed. He also moved the swarm classes into sc and documented the Particle struct. Thank you Tomaž — building it to be verifiable is what makes a solver worth trusting. swarm solver · fixed seed · objective value
Tomaž also advanced the spilled-range work — wrapping the whole @ operand in _xlfn.SINGLE rather than part of it, parenthesising reference unions on OOXML save, and keeping the @ and # wrapper starts correct as text moves. Balázs Varga improved xlsx interoperability from both directions, exporting the pivot version MSO gates its extensions on and decoding _xHHHH_ escapes in table column names so headers survive the round-trip. spilled ranges · pivot version
Dennis Francis landed a run of correctness fixes: offering only the date periods an OOXML conditional format can hold, allowing whole-column insert or delete on a filtered sheet view, refreshing tiles after a sheet copy or move, and pasting a copied shape at the cell where the paste was issued. Samuel Mehrbrodt worked through the Calc UX backlog — the grid colour with Invert Background (cool#10790), the autofill tooltip staying put in a frozen pane (cool#10253), Tab cycling in the comment pop-up (cool#9479), and clearing formula reference highlights when editing ends (cool#15850). column insert · formula highlights
Gökay Şatır rebuilt the cell selection rectangles from the marked ranges, Gülşah Köse added labels to the Calc buttons so their function reads at a glance, and Pranam Lashkari made jumping to a comment bring its cell on screen. cell selection · button label
Charts: Funnel Charts Arrive
Kurt Nordback landed funnel chart support end to end — the initial rendering implementation, a follow-up fix, correct handling of effects without clipping, and the dialogs and icons that make it selectable like any other chart type. He also continued the data-label round-trip series (tdf#165742), improving chartData handling for pptx and docx and fixing data label visibility defaults. Thank you Kurt — that’s a new chart type in every user’s hands, built one reviewable step at a time. funnel rendering · funnel dialogs
Impress & Draw: Placeholders That Round-Trip
Mike Kaganski put in a sustained run on placeholders. Empty media placeholders now round-trip (cool#15754), a master’s picture placeholder no longer paints onto slides, content placeholders stay off the master, layouts import in the master’s order (cool#16080), a subtitle the layout holds is preserved (cool#16082), and an empty placeholder stays empty with its prompt no longer mistaken for slide content (cool#16083). Custom placeholder prompt text is now supported and preserved in ODF (tdf#166401), and Undo covers the placeholder mechanics. He also added SdrGrafClipPolyPolygonItem with ODF and OOXML round-trip plus drawing support. placeholder prompts · clip polygon · undo coverage
Armin Le Grand continued the SmartArt import work, handling Diagram ModelIDs as something other than ShapeNames and keeping the blip out of the root Point in data.xml. Regina Henschel improved cross-fading to work from styles (cool#16074) and added HSL-model interpolation to the colour tools, which gives cross-fades a more natural progression. SmartArt ModelIDs · HSL interpolation
Banobe Pascal kept the video frame ratio while resizing and gave media objects a play-button placeholder sized to the frame, with Szymon Kłos making it draw exactly like the full-size object. Samuel stopped the editing grid leaking into other pages’ tiles (cool#9019) and blocked F5 from reloading the browser mid-presentation (cool#4530) — a small change that saves a real moment of panic. Pranam made a comment box open when its marker is clicked, Pedro Silva gave the slide sorter expand toggle a per-state icon, and Caolán McNamara added P or Pause to pause a slideshow’s automatic advance. media placeholder · F5 during presentation
Writer
Mike Kaganski kept an RTF pict shape inside its cell (tdf#167713), Dennis recoded list bullets from the old StarOffice symbol fonts on docx import, and Aron Budea stopped a header background image being selectable from the body (cool#16086). Samuel made the line count show in Statistics right away (cool#7794). docx bullets · header image
The Desktop App: Documents in Tabs
Sarper Akdemir brought a tabbed interface to the Linux desktop app — open documents now live in tabs, keyboard focus stays on the document when the tab strip is clicked, tab-drag hover is tracked from native drag events, windows open at a sensible default size with proper GNOME integration, and Ctrl+Q quits the application. Thank you Sarper — this changes how the app feels to use all day. tabbed documents · Ctrl+Q
Areg Nakashian made pasting from the clipboard bring across all images rather than one, and fixed the missing Rename Sheet icon. Banobe kept the backstage home templates to a single row. paste all images
Mobile & Android
Karthik Godha had a substantial week. On Calc: the cell cursor scrolls into view when the keyboard is active and the canvas resizes back once it hides, “Protect Sheet” joined the tab context menu with the protected state and lock icon now visible, icons appear in the sheet tab menu, and the formula bar gained a context menu. On Android: the document theme follows the OS theme, editing goes straight into the selected cell with a hardware keyboard attached, a new document opens in a fresh activity with the typed extension, and the progress dialog is built on the main thread. He also stripped HTML from long-press menu entries, showed an edit icon for read-only files, and kept comments out of printed PDFs. Thank you Karthik — that’s a broad sweep of the daily mobile experience. Calc keyboard scroll · Android theme · protect sheet
Samuel taught Android to recognise the legacy ODF vendor MIME type (cool#7525), and Skyler continued the Android build modernisation on Gerrit, working through obsolete pieces, dependency versions and concurrent build issues.
Accessibility
Henry Castro built out sidebar accelerators — keying them on the document type, giving Writer’s Page deck its own set, showing the accelerator combinations in the UI, and covering it all with Cypress tests per document type. He also made the engine send an object’s kind as a name rather than a number, and made inserted objects — including charts — land where the client is actually looking. sidebar accelerators · insert where client looks
Năstasie Raul-Ionuț continued the macOS screen reader work: objects are announced with their name, moving to a new slide clears queued-up announcements instead of letting them pile up, transition and content announcements get longer delays so they aren’t cut off, and keyboard interaction works when a slide preview has focus via Shift+F6. Thank you Raul — this is what makes a presentation usable with VoiceOver rather than merely technically accessible. Shlok fixed truncated table reading in Impress and corrected the VoiceOver animation announcement order. screen reader names · queued announcements
Sidebar & Dialogs
Năstasie Raul-Ionuț landed the Extensions sidebar tabs, giving extensions their own home rather than stacking panels over the sidebar. He also split the Arrow Styles dropdown in the Line section, shortened the sidebar dropdowns, and made arrow styles show as previews in the Line Style dialog — so you pick a shape by looking at it instead of reading its name. extensions tabs · arrow previews
Pranam sized the notebookbar dropdowns to the entry they show, Gülşah kept accelerator info boxes above the notebookbar, and Samuel stopped the notebookbar jumping to the Home tab when entering an in-place edit (cool#7882).
AI Assistant
Gülşah made the ethical AI rating explanation hideable, gave the Tone picker a usable height in a very short panel, and made the whole sidebar scroll when the assistant outgrows the dock. Szűcs Attila fixed the tone dropdown’s arrow direction. Rashesh Padia drove the slide-command vocabulary from shared tables and followed through on the supporting cleanup. ethical AI rating · slide vocabulary
Rendering & Performance
Noel Grandin focused on PDF export of large presentations — improving scaling performance, reducing memory consumption on large decks, and cutting how often images get split during export. He also moved SvpSalBitmap resizing onto cairo and fixed a crash on shutdown. Mike Kaganski consolidated CreateAlphaMask and CreateColorBitmap into a single SplitIntoColorAndAlpha across the codebase, removing duplicated work and a class of redundant calls along the way. Chris Lord detached the tile preload map from the document canvas. PDF scaling · PDF memory · tile preload
Security: Landlock and SPIF
The Landlock containment work advanced substantially and reached the 26.04 branch, with Michael Stahl driving it forward — forbidding creation of named pipes and sockets, fixing shared-presets configuration in the kit, correcting localFilePath in DocumentBroker::doDownloadDocument, and adding a run-nocaps target so the no-capabilities path is easy to exercise. Michael Meeks contributed cleanups and got the adduser path right. This run of work is what turns a promising kernel sandboxing approach into something maintainable. landlock improvements · run-nocaps
Ashod Nakashian built out SPIF support — parsing the security policy, loading classification and category, policy-driven marking, excluded and required classes, min and max selection, and selection preservation and violation checks, with tests throughout. A complete labelling implementation delivered in reviewable steps. Caolán kept the admin page templates out of the served file tree and sent a Content Security Policy with the admin pages, and Samuel bracketed IPv6 hosts when rebuilding the canonical URI (cool#13411). SPIF policy parser · admin CSP
Caolán also kept up the fuzzing and crashtesting cadence — hardening emfio against bogus comment counts, applying one consistent key-per-page limit in the dbase .ndx index, and fixing a segv loading an RTF export. Mike fixed a use-after-free in editeng text edit painting. emfio hardening · editeng UAF
Build & Engine Cleanup
Stephan Bergmann continued the JS extensions work — removing the lo_* indirection for the COKitImpl functions, introducing comphelper::parseJsonToInferredAny, making it compile against the Android and Apple baselines, and presenting proper source information for exceptions thrown from cool.callRemote code. Noel continued modernising the COKit API to return std::string, and kept up the SAL_CALL removal and OUString literal migration across sw, sc, sd and chart2. Michael Stahl removed fundamental.override.ini support and stopped the kit writing gallery files. parseJsonToInferredAny · exception source info
Caolán made the MSVC pch checksum include #define directives, which cleared up a class of mystery link failures on cached ccache results — a fix several people felt immediately. He also bumped harfbuzz to 14.3.0 and stopped building the nss command line tools. Miklos Vajna made the prepare-commit-msg hook preserve trailers. On Matrix, Szymon shared that the Cypress clean pass is now at 40% and climbing daily — steady, visible progress on test reliability. pch checksum · harfbuzz 14.3.0
Integration & Admin
Samuel joined outbound WOPI options with & when WOPISrc already carries a query (cool#16040), made a template-format load use the filter matching its own extension (cool#12091), activated dictionaries supplied by the host (cool#12183), and made the admin console’s elapsed and idle time tick (cool#2499). Andras Timar localised counted strings with gettext plurals, which is the correct way to make counts read naturally in every language. WOPI options · gettext plurals
Translations
The Forum
Android testing dominated the forum this week, in the best way. A wave of detailed reports came in covering multi-select in Calc, connecting cells between sheets, selecting all data on a sheet, panning across cells, drafting in Writer, and the general mobile interface. Careful, reproducible feedback like this is exactly what makes a mobile release solid — thank you to everyone who took the time to write it up.
Elsewhere, the =PY() and NumPy thread ran to sixteen replies and remains one of the most interesting technical discussions on the forum, alongside threads on obsolete Android hooks, using std::lerp, and building the desktop app.
Design Discussion
The UX/UI Design Meeting on August 20 covered a full agenda:
Extensions sidebar — the stacked-panel problem is resolved: the Properties sidebar heading became a tab pair, Properties | Extensions, and it’s merged. Next up is a more emphasised visual treatment, which needs some icon resources.
Making edit mode discoverable in the desktop app — several directions on the table: animating the switcher when someone starts typing, a tooltip below it, a floating toolbar near a selection in read-only mode with editing as its primary action, and automatically switching to edit mode on a typing or double-click gesture with an obvious way back. A keyboard shortcut surfaced through the tooltip is a likely follow-up.
Sidebar structure — the team mapped out how the sidebar, comments, styles, AI, extensions and accessibility check panes should relate to each other, drawing several parallel threads of work together.
Impress slide sorter redesign — Ivana presented the structure: slide number, linked-slide indicator, collaborator avatars, and the existing hidden-slide indicator, plus an Impress onboarding flow concept.
Dialog navigation — Banobe’s proposal to use side navigation for dialogs with three or more primary tabs is waiting on design approval.
Pedro shared two resources worth bookmarking: the design system and the new icon compare tool.
Bayram’s smooth-scrolling toggle merged under File > Options > Interface Settings with multi-object selection frames
Community Calls
- Collabora Online Weekly Meeting #269 — release testing and mobile builds; Skyler working through the Android build modernisation, iOS builds available for testing on TestFlight, Attila on AI assistant fixes and backports, Bayram’s smooth-scrolling toggle merged under File > Options > Interface Settings with multi-object selection frames in review, Banobe investigating autofilter popup positioning and GIF drag-and-drop, Ivana on Impress mobile research and the slide sorter redesign
- UX/UI Design Meeting — extensions sidebar, edit-mode discoverability, sidebar structure, slide sorter, dialog navigation
All minutes on the forum under meeting-minutes.
Get Involved
74 contributors, 7,868 commits, and a new chart type in every user’s hands. Whether you write code, translate, test, design, or document, there’s a place for you.
Try the iOS TestFlight: testflight.apple.com/join/TEnBWi68
See the Community Pulse: collaboraoffice.org/post/pulse/
Find an easy hack: collaboraoffice.org/post/easyhacks/
Try the latest builds: collaboraoffice.com/downloads/CODA-Hd7wwbJWxm/
Help translate: hosted.weblate.org/projects/collabora-online/
Community page: collaboraonline.github.io/post/communicate/
Forum: forum.collaboraonline.com
Chat on Matrix: #cool-dev:matrix.org
Browse open changes: gerrit.collaboraoffice.com
See you in the code.