1501 Commits
Author SHA1 Message Date
Andrea Gelmini 8ee79ac196 Fix typos
Change-Id: Ic7a97a5219d8a0d30b1753c2502995ea4c2cd32f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210563
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
Tested-by: Jenkins
2026-09-10 16:22:54 +02:00
Dennis Francis 84129dd550 chart2: draw the correlation circle plot
Each series gives one arrow, from the origin to the point whose

1. x-coordinate value is the correlation of that series' feature column
   with the first dimension column.
2. y-coordinate value is the correlation of that series' feature column
   with the second dimension column.

A symbol marks the tip and the feature name sits beside it. The circle
of radius one and the two lines through the origin are drawn behind the
arrows, and both axes are held at minus one to one on a square plot
area, so a length in the picture means the same in both directions and
the circle stays round.

The correlations are worked out while the shapes are made rather than kept
anywhere, so they follow the cells they come from. Working them out needs the
whole of the three columns.

The correlation coefficient code itself is in a small header of its own
with a test beside it. It leaves out the instances where either side is
missing, and it has no answer for a feature that does not vary or for
fewer than two instances. A feature without an answer gets no arrow,
as there is no direction to point in.

Error bars, trend lines and area properties are turned off for this chart
type, since a point stands for a worked out pair rather than for a value in a
cell, and symbols are turned on because the tip of each arrow carries one. The
arrows take the line colour and width of their series, and the template asks
for thin ones, which is what keeps a crowd of them apart. The legend hands out
the same symbol as the arrow tip, so a key can be matched to an arrow.

Grids are turned off by default for this chart as the user is more
interested in the direction/angles and the magnitude of the "rays" from
the origin.

Change-Id: I2d8b3aa6ef7d66bd9deb1f63a647767a1b62ac90
Signed-off-by: Dennis Francis <dennis.francis@collabora.com>
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/8103
Reviewed-by: Tomaž Vajngerl <tomaz.vajngerl@collabora.com>
Tested-by: Tomaž Vajngerl <tomaz.vajngerl@collabora.com>
(cherry picked from commit e096bfee9c85a22e8b8155944a63ee9d6f72f75a)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210465
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
2026-09-03 19:32:19 +02:00
Dennis Francis b0b4bad01f chart2: add a correlation circle chart type
A correlation circle plot shows how each feature of a table relates to the
first two dimensions of a decomposition of that table, which a user can now
work out in a spreadsheet with MSVD. One point per feature sits at the
correlation of that feature with the first dimension across and with the
second dimension up, inside a circle of radius one.

The data arrives as one series per feature. Each series holds its own feature
column under the new role values-feature, together with the two dimension
columns under values-x and values-y, which every series shares the way the
bubble chart shares its x column. Keeping the dimensions on the x and y roles
means the point count, the axis scaling and the label machinery need no
special case, and the series label comes from the feature column header, so
the legend and the point labels read as feature names.

The interpreter reads a flat list of columns as a feature table followed by
two dimension columns: the last two are the dimensions and every column before
them is a feature. One range holds the lot, which is what the wizard hands
over, and it is also the order the list comes in when a chart of another type
is turned into this one. A first column of instance names is kept out of the
features when the range says it has them, as it is for a bubble chart.

Both dimensions are numbers running from minus one to one, so the chart type
joins the scatter and the bubble chart in asking for a numeric axis across.
That answer is also what turns the axis of names back into a numeric one when
a chart of another type becomes this one, since the coordinate system the
other type left behind is kept and reused.

Change-Id: Id17d3a2a235c849c3dab9768159ddf1608da6d05
Signed-off-by: Dennis Francis <dennis.francis@collabora.com>
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/8102
Tested-by: Tomaž Vajngerl <tomaz.vajngerl@collabora.com>
Reviewed-by: Tomaž Vajngerl <tomaz.vajngerl@collabora.com>
(cherry picked from commit b30d992bba26428941f47f952baf338df3763065)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/209379
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Tested-by: Jenkins
2026-09-03 17:07:43 +02:00
Devansh Varshney eac1e807cc chart2: expose histogram bin settings in axis sidebar
Add histogram binning controls to the axis properties sidebar.

Expose automatic, fixed-width, and fixed-count modes together with
optional underflow and overflow bins. Read the current settings from
the histogram chart type and update the corresponding model properties
when the controls change.

Signed-off-by: Devansh Varshney <varshney.devansh614@gmail.com>
Change-Id: Ia252499454a0715b1de094de05158966769ec912
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/9284
Reviewed-by: Tomaž Vajngerl <tomaz.vajngerl@collabora.com>
Tested-by: Tomaž Vajngerl <tomaz.vajngerl@collabora.com>
(cherry picked from commit dc0a6a31ff7719cd697220eb173f5c15935096ad)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/209220
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
2026-09-01 15:41:57 +02:00
Devansh Varshney 22b73ccfdc chart2: keep histogram axis labels in sync with bin settings
Histogram bin-property changes regenerated the category sequence stored
on the data series, while the X axis continued referencing the previous
sequence. This left the chart bars updated but displayed stale bin
labels.

Keep the category sequence produced by HistogramDataInterpreter on both
the diagram axis and data series. Update its binning parameters in place
when histogram properties change, allowing existing listeners to
recalculate and redraw the axis labels.

Signed-off-by: Devansh Varshney <varshney.devansh614@gmail.com>
Change-Id: Ibd6679bddf29de5fa1fd903af9274259b2e9c243
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/9282
Reviewed-by: Tomaž Vajngerl <tomaz.vajngerl@collabora.com>
Tested-by: Tomaž Vajngerl <tomaz.vajngerl@collabora.com>
(cherry picked from commit 0103afa2a6a746ce54a0e3e4297e1fa60698ef03)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/209218
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
2026-09-01 14:00:42 +02:00
Andrea Gelmini 824c8c356e Fix typos
Change-Id: I68e74c81e3d53ca83ecb13f916aafdcdde989a02
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/210044
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
Tested-by: Jenkins
2026-08-27 20:46:37 +02:00
Kurt Nordback 94a1e0c05c tdf#165742 Step 5.17: Improve data label round-trip
Fix some aspects of chartex data label import and export, to improve round-trip fidelity

Signed-off-by: Kurt Nordback <kurt.nordback@collabora.com>
Change-Id: Ie74593709caee05dea4aa98bd42913f221fd5b71
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/7908
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Tomaž Vajngerl <tomaz.vajngerl@collabora.com>
(cherry picked from commit b1a365ec22cddbd74b1533b714043eb9cee9c576)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/209987
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Tested-by: Jenkins
2026-08-26 08:46:54 +02:00
Andrea Gelmini 7d28386f54 Fix typos
Change-Id: I2156c901502b3f021d920dbad1e210dc0579fa0b

Reviewed-on: https://gerrit.libreoffice.org/c/core/+/209777
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
Tested-by: Julien Nabet <serval2412@yahoo.fr>
2026-08-25 15:50:42 +02:00
Andrea Gelmini 7ec662d6e2 Fix typos
Change-Id: Ib1b4ee06e762b4cc4a7240b4ead79be2f70b6233

Reviewed-on: https://gerrit.libreoffice.org/c/core/+/209776
Tested-by: Jenkins
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2026-08-24 09:17:48 +02:00
Devansh Varshney 09823632bd chart2: add histogram underflow/overflow bin model support
Add model properties for optional underflow and overflow bins on
histogram chart types, and expose them through the HistogramDiagram
wrapper.

Pass the new settings through the existing histogram pipeline:
HistogramChartType snapshots the properties, HistogramDataSequence keeps
that snapshot, and HistogramCalculator creates optional edge bins around
the normal bin range.

Generated category labels now distinguish special bins from normal ranges,
e.g. "<= 11", "(11-13]", and "> 14".

Add a model-level test that sets fixed bin width together with underflow
and overflow bins, then verifies that the generated bin labels are rebuilt
correctly.

Signed-off-by: Devansh Varshney <varshney.devansh614@gmail.com>
Change-Id: I65eac9607daa4f4be6320304c9e9682549f479a6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207151
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Tested-by: Jenkins
2026-06-29 14:35:14 +02:00
Samuel Mehrbrodt 9cb4023fae Downgrade this warning to info
Does not hint at a real bug - still it shows up > 100 times
when saving a writer doc with chart. Silence this.

Change-Id: I6d1d3ce7071a1cdf1474e20db7cbc413521f4272
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/1450
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Noel Grandin <noel.grandin@collabora.com>
(cherry picked from commit 4d0eb2e9f7f6bf63db2daf7eaa57b16ad29b991c)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207072
Tested-by: Jenkins
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2026-06-21 21:40:13 +02:00
Mike Kaganski 79ec708230 Fix --enable-werror gcc build on Linux
... after changes that introduced and used OPropertyContainerHelper.

In file included from /home/mk/core/include/comphelper/propcontainerimplhelper.hxx:18,
                 from /home/mk/core/sc/inc/chartuno.hxx:34,
                 from /home/mk/core/sc/source/ui/unoobj/cellsuno.cxx:83:
/home/mk/core/include/comphelper/propcontainerimplhelper.hxx: In instantiation of ‘class comphelper::OPropertyContainerImplHelper<comphelper::WeakComponentImplHelper<com::sun::star::table::XTableChart, com::sun::star::document::XEmbeddedObjectSupplier, com::sun::star::container::XNamed, com::sun::star::lang::XServiceInfo>, ScChartObj>’:
/home/mk/core/sc/inc/chartuno.hxx:98:14:   required from here
   98 |       public SfxListener
      |              ^~~~~~~~~~~
/home/mk/core/include/comphelper/propimplhelper.hxx:499:1: error: ‘com::sun::star::uno::Any comphelper::OPropertyImplHelper<BaseClass, Ifc>::getFastPropertyValue(sal_Int32) [with BaseClass = comphelper::WeakComponentImplHelper<com::sun::star::table::XTableChart, com::sun::star::document::XEmbeddedObjectSupplier, com::sun::star::container::XNamed, com::sun::star::lang::XServiceInfo>; Ifc = {}; sal_Int32 = int]’ was hidden [-Werror=overloaded-virtual=]
  499 | OPropertyImplHelper<BaseClass, Ifc...>::getFastPropertyValue(sal_Int32 nHandle)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/mk/core/include/comphelper/propcontainerimplhelper.hxx:66:10: note:   by ‘void comphelper::OPropertyContainerImplHelper<BaseClass, Derived, Ifc>::getFastPropertyValue(std::unique_lock<std::mutex>&, com::sun::star::uno::Any&, sal_Int32) const [with BaseClass = comphelper::WeakComponentImplHelper<com::sun::star::table::XTableChart, com::sun::star::document::XEmbeddedObjectSupplier, com::sun::star::container::XNamed, com::sun::star::lang::XServiceInfo>; Derived = ScChartObj; Ifc = {}; sal_Int32 = int]’
   66 |     void getFastPropertyValue(std::unique_lock<std::mutex>&, css::uno::Any& rValue,
      |          ^~~~~~~~~~~~~~~~~~~~

and

/home/mk/core/chart2/source/tools/CachedDataSequence.cxx: In copy constructor ‘chart::CachedDataSequence::CachedDataSequence(const chart::CachedDataSequence&)’:
/home/mk/core/chart2/source/tools/CachedDataSequence.cxx:70:51: error: expected class-name before ‘(’ token
   70 |         : comphelper::OPropertyContainerImplHelper(),
      |                                                   ^
/home/mk/core/chart2/source/tools/CachedDataSequence.cxx:69:1: error: base class ‘class comphelper::OPropertyContainerImplHelper<comphelper::WeakComponentImplHelper<com::sun::star::chart2::data::XDataSequence, com::sun::star::chart2::data::XNumericalDataSequence, com::sun::star::chart2::data::XTextualDataSequence, com::sun::star::util::XCloneable, com::sun::star::util::XModifyBroadcaster, com::sun::star::lang::XInitialization, com::sun::star::lang::XServiceInfo>, chart::CachedDataSequence>’ should be explicitly initialized in the copy constructor [-Werror=extra]
   69 | CachedDataSequence::CachedDataSequence( const CachedDataSequence & rSource )
      | ^~~~~~~~~~~~~~~~~~

and similar.

Change-Id: I913e139744a452ea992d9f574997353a760f4722
Reviewed-on: https://gerrit.collaboraoffice.com/c/core/+/642
Tested-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
(cherry picked from commit 3917b082b9f4530d305cd947ab47658f6883c4f1)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/205669
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
2026-05-25 14:34:21 +02:00
Mike Kaganski f138be4686 Move UncachedDataSequence to use OPropertyContainerImplHelper
Simplifies the implementation, removing boilerplate.

Change-Id: I6746c75ac6a884db525defeb25557d4e8d6f3d03
Reviewed-on: https://gerrit.collaboraoffice.com/c/core/+/236
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
(cherry picked from commit a0ff800a69ccb7898043c294ba9a13016f176a58)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/205659
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Tested-by: Xisco Fauli <xiscofauli@libreoffice.org>
2026-05-25 14:32:53 +02:00
Mike Kaganski 31fecb70d0 Introduce OPropertyContainerImplHelper as replacement for OPropertyContainer2
Combines OPropertyImplHelper with OPropertyContainerHelper and
OPropertyArrayUsageHelper. Derived classes only need to implement
createArrayHelper() and call registerProperty().

Migrate CachedDataSequence to use it.

Change-Id: I7c9077f412303ab3ba4d2541c2b6673813193d5a
Reviewed-on: https://gerrit.collaboraoffice.com/c/core/+/235
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
(cherry picked from commit 480f2837def56b24b0c3b50dcd559dc785b59631)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/205658
Tested-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
2026-05-25 14:32:47 +02:00
Kurt Nordback 0fcb8f99b7 tdf#165742 Step 5.9f: Improve <cx:chartData> handling
Replace some temporary chartex parse and export code to handle chartData more
properly. This now round-trips at least some <cx:f> and <cx:nf> content,
and handles the various *DimensionType values.

Change-Id: Ie91ac845a911c5be1f7ad5d8ed872d091bd6a623
Signed-off-by: Kurt Nordback <kurt.nordback@collabora.com>
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/2644
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Tomaž Vajngerl <tomaz.vajngerl@collabora.com>
(cherry picked from commit 1d58d04fb96b9bd73affeaecf9d6dee35d6357b5)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/205578
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
2026-05-24 01:00:06 +02:00
Devansh Varshney 6829e82577 chart2: Implement Scott's Rule and Histogram Data Interpreter
This commit introduces the mathematical backend and data interpreter for
the Histogram chart, replacing the temporary raw value rendering.

- Adds HistogramCalculator, utilizing Scott's Rule to calculate optimal
bin widths and frequencies from raw data.
- Introduces HistogramDataSequence that listens to spreadsheet data
changes and automatically regenerates bin categories and frequencies
- Implements HistogramDataInterpreter to intercept raw values-y input,
and output the results into the calculated-y data sequence.

Change-Id: Iaf29ddd0b0824bd3f0808ffc91321cad9d5b877e
(cherry picked from commit 1ef619a998aba626d0ea7a9541109a7c9e145518)
Signed-off-by: Devansh Varshney <varshney.devansh614@gmail.com>
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/1879
Reviewed-by: Tomaž Vajngerl <tomaz.vajngerl@collabora.com>
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
(cherry picked from commit df68284255ccac4bd86583555986d9f7cbdddf9a)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/203747
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
2026-05-23 00:09:41 +02:00
Devansh Varshney 048b35b49d chart2: Add UI and basic rendering for Histogram chart
This commit introduces the structural foundation and user interface for
the new Histogram chart type. The rendering engine gracefully falls
back to plotting the raw values-y input data directly. As a result, the
chart currently renders identically to a standard bar/column chart.

- Adds UI entries in the Chart Type dialog.
- Adds HistogramChart to the view layer, inheriting from BarChart and
forcing a 0-gap width.

Change-Id: Ica5b15e9b7428d6c908e1b978259367fe8ff7aab
(cherry picked from commit 14a4a09b62fc283f9b629a2a317156efa6509054)
Signed-off-by: Devansh Varshney <varshney.devansh614@gmail.com>
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/1878
Reviewed-by: Tomaž Vajngerl <tomaz.vajngerl@collabora.com>
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
(cherry picked from commit 508c3456e85a88771ac5e264cee9460274685a22)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/203741
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
2026-05-23 00:09:33 +02:00
Andras Timar b8459392b3 chart2: fix crash in ControllerLockGuardUNO with null ChartModel
Many callers pass the result of Chart2ModelContact::getDocumentModel()
which resolves a WeakReference<ChartModel> and can return null if the
model has been destroyed. Add null checks matching the existing pattern
in ControllerLockHelper::lockControllers/unlockControllers.

The crash was caused by a race condition where the ChartModel weak
reference (held in Chart2ModelContact) had expired by the time the
chart wrapper code tried to lock controllers during a Copy operation.
The fix gracefully handles the null case instead of dereferencing
a null pointer.

Change-Id: I43294de12b84cefb062ada12e8a570ad3b7ea571
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200268
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
(cherry picked from commit e819e77fe79e8eb48bb3e977fadaffa9e99786f2)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/204885
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
2026-05-08 10:19:43 +02:00
Muhammad Naeem 71aa55e61a tdf#145538: Use range-based loops for palette and range fills
Replace index-only loops where we copy from containers into UNO or
diagram structures using an explicit sequence index / output pointer:

- BasicColorConfig: vector of property keys into Sequence OUString.
- ChartColorScheme: palette colors into uno color sequence buffer.
- RangeHighlighter: HighlightedRange list from OUString vectors.

Verified: make -j4 basctl chart2
Change-Id: If4a4a8747fadc772329d3ccc3f03778406b140ae
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/204659
Tested-by: Jenkins
Reviewed-by: Jonathan Clark <jonathan@libreoffice.org>
2026-05-06 18:15:36 +02:00
Michael Weghorn 52a86394b9 tdf#130857 chart: Don't hardcode size for chart color palettes icon view
Instead of hard-coding a size based on the icon size
for the icon views in ChartColorPalettes, rather let
the toolkit allocate a proper size.
Tweak some properties in the .ui file to achieve
proper auto-sizing.

Maybe, hard-coding the size was done because before

    commit 478b712ea1
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Thu Aug 7 09:45:15 2025 +0200

        tdf#167658 vcl: Honor GtkIconView::columns + calc size

, the vcl implementation didn't take the column count
set in the .ui file into account when the original
code was was introduced in

    commit a26c93a630
    Date:   Sun Aug 10 22:33:37 2025 +0200

        chart color palettes: switch from drawingarea to IconView

.

In any case, it seems unnecessary now, and not hard-coding
the size e.g. results in all rows being visible at once
when using the gen vcl plugin for the following dialog,
instead of showing only part of them and using a scrollbar
despite there being plenty of space below the icon view.

Steps to trigger a dialog using this:

* start Writer
* "Insert" -> "Chart"
* double-click on a bar in the chart to open the
  "Data Series" dialog.
* switch to the "Color Palette" tab

Now, all rows are shown at once for both, the gtk3
and the gen vcl plugins.

The code is also used in the chart palette popup
that can be triggered like this (and whose .ui
file is also tweaked in this commit a bit):

* start Writer
* "Insert" -> "Chart"
* click on a bar in the chart
* switch to the "Properties" sidebar deck
* in the "Colors" section, click on the arrow
  of the button to open the popup

This commit also prepares for supporting the
dialog mentioned above with native Qt widgets
in an upcoming commit.

Change-Id: Ibf1cb597bc93f29033ab76432ca08af0b029cc0d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/204209
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-04-24 14:25:25 +02:00
Michael Weghorn 9061bd0eee chart: Pass outdev by ref to ChartColorPaletteHelper::renderColorPalette
Change-Id: I8bcac85c115968a4949916a9dae24a02da851173
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/204208
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
2026-04-24 14:25:17 +02:00
Michael Weghorn 2a92613714 chart2: Simplify mouse move event handling in chart color palettes a bit
Instead of maintaining a ChartColorPalettes::mnHighlightedItemId
and passing an unused MouseEvent to the handlers, rather pass
the ID of the currently hovered-over item (or an empty string)
to the handlers (and convert to sal_uInt16/sal_uInt32 in
ChartColorPalettePopup::MouseMoveHdl instead.

No change in behavior intended or observed.

Sample steps to trigger the logic:

* start Writer
* insert a chart using the "Insert Chart" toolbar item
* click on one of the chart's bars
* in the "Properties" sidebar deck, in the "Colors" section,
  click on the arrow to open the color palette popup
* hover over the different palettes and notice how the
  colors in the chart show a corresponding preview using
  the colors of the currently hovered over palette

Change-Id: I78c7d3612e5e8e4607f5d78315694f6e0e7d33ef
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/203412
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
2026-04-11 09:10:05 +02:00
Michael Weghorn 859d124ca4 chart2: Drop MouseEventHandler typedef
... in preparation of changing the logic.

Change-Id: Ib5e478a68bfa6e463957597a1382247c6003f2dd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/203411
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-04-11 09:09:57 +02:00
Michael Weghorn 2dcc8cdb94 chart2: Stop using icon view tooltip handler for chart palette preview
So far, ChartColorPalettes was (ab)using the weld::IconView
tooltip handler to detect when mouse hovering over one of the
palettes happens. Stop doing so, and instead use the simple
mouse move event handler directly.

The API introduced in

    commit 0e323f194b
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Thu Dec 18 21:26:41 2025 +0100

        tdf#168594 weld: Add IconView::get_item_at_rect

can be used in there to determine the currently
hovered over item.

Sample steps to trigger the logic:

* start Writer
* insert a chart using the "Insert Chart" toolbar item
* click on one of the chart's bars
* in the "Properties" sidebar deck, in the "Colors" section,
  click on the arrow to open the color palette popup
* hover over the different palettes and notice how the
  colors in the chart show a corresponding preview using
  the colors of the currently hovered over palette

Change-Id: I711c600b80703c118ba3b5940084e3feb41903b8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/203409
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
2026-04-11 09:09:41 +02:00
Michael Weghorn f792e696b4 weld: Pass activated item in IconView::signal_item_activated
So far, the IconView::signal_item_activated was called
with the weld::IconView itself as a parameter, i.e.
the information what item was selected wasn't directly
passed to the signal handlers.

Change that to pass a weld::TreeIter param referring to the
activated item instead of the IconView itself.

The information what item was activated is relevant
and this way, there is no need to determine it some
other way in the handlers (e.g. by using the first
selected entry).

This also aligns this more with what UI toolkits
like GTK and Qt provide.

For GTK, the GtkIconView::item-activated signal [1]
has the path of the activated entry.

For Qt, the QAbstractItemView::activated signal [2]
has the QModelIndex of the activated item.

For the vcl implementation in SalInstanceIconView::DoubleClickHdl,
use the cursor/current item.

In LOKTrigger::trigger_item_activated, use the currently selected
entry (retrieved via weld::IconView::get_selected), because the
only caller in jsdialog::ExecuteAction uses weld::IconView::select
first to select an entry before triggering the signal.

Initially, leave the logic of the existing signal handlers/callbackes
(in dialog implementations) unchanged. At least some of them
will be simplified in upcoming commits.

[1] https://docs.gtk.org/gtk3/signal.IconView.item-activated.html
[2] https://doc.qt.io/qt-6/qabstractitemview.html#activated

Change-Id: I8ca62ac32108f01e2055d5ef9301de22eb5b1931
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/203317
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2026-04-09 10:19:36 +02:00
Noel Grandin 8d5a6870a7 InternalDataProvider constructor always has
bDefaultDataInColumns == true

Change-Id: I93c64a310852f1b823327874d9cc487c653c6222
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200860
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2026-03-03 07:58:19 +01:00
Mike Kaganski d8bf4ddc6d fix assorted VirtualDevice GDI handle leaks
Similar to commit e9392c0c86fcf373e00ede92f8ceeee2c7efd233 (fix
VirtualDevice GDI handle leaks across IconView callers, 2026-02-21).

Change-Id: Idae4f9e5fba0d5c46d32e35da5f84716616f59ba
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199936
Reviewed-by: Andras Timar <andras.timar@collabora.com>
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199948
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2026-02-21 18:51:04 +01:00
Noel Grandin d5483115cd loplugin:unusedfields
Change-Id: I24bdc3a0f0df439ad745151b3943ce1f8bf5da9c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/198534
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Tested-by: Jenkins
2026-02-02 13:11:30 +01:00
Gabor Kelemen 49cb3077fb tdf#146619 Use more forward declarations in include/vcl/outdev.hxx
these were skipped in previous runs, since they contain some code behind #if

After inspecting these, it seems like the removals should not cause trouble.

This also shaves off some 140M input

Change-Id: Ie1f57174dd6fec3ba5b0b91eb0688acdc1a8143d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197494
Tested-by: Jenkins
Reviewed-by: Gabor Kelemen <gabor.kelemen@collabora.com>
2026-01-23 21:27:08 +01:00
Kurt Nordback 2dba43e317 tdf#165742 Step 5.1: Support basic I/O for additional chartex types
Previous work on this project added support for Funnel charts, one of the
chartex types. This commit expands that to all the other chartex types,
including RegionMap. Largely this is parallel to what was done for Funnel,
but there are some namespace differences, and ParetoLine requires some special
handling because Microsoft Office seems to encode it as a combination of
clusteredColumn type and paretoLine type. ParetoLine support is incomplete,
especially on the export side.

Change-Id: Ib751632ec05f3fbf248e0f194f7a6f36f2fa6a88
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194933
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
2026-01-09 07:21:24 +01:00
Tomaž Vajngerl f15e0583c2 chart2: Add ComplexColor to many properties of chart elements
This adds ComplexColor to many of the color properties that are
available in charts. It also handles some import code in oox, so
the complex colors are set correctly to the chart elements if an
OOXML document is loaded. This doesn't yet handle export and if
a theme is changed, as well if a color is changed manually in
the chart.

Change the tests so they now assert the scheme color like it is
defined in the source document and not the calculated derived
color.

In addition change the WriteRunProperties to have a struct as
an input instead a number of parameters, which in most cases don't
need to be filled out and are using the default value.

This was needed for the new parameter bUseTextSchemeColors, which
is used for charts, so the text colors use tx1 and tx2 elements
instead dk1 and dk2, which are usually used in Impress.

Change-Id: Iaebbaea983c5232c51233c1a02bd8fe1da24d551
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194939
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
2025-12-04 08:21:07 +01:00
Tomaž Vajngerl 58d2a68530 tdf#164593 Revert "tdf#82716 Add initial implementation of the His.."
This reverts commit 07ae0e5ada.

As discussed in https://lists.freedesktop.org/archives/libreoffice/2025-November/093988.html

(cherry picked from commit 9693f1461c7d78c7461f8bbd7f421ba8c3f8452b)

Change-Id: Ifd4008d62f9816d995f97104ba432ebc8be89c97
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186407
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/193983
2025-11-14 08:44:54 +01:00
Michael Weghorn 42ee3c9a71 chart color palettes: No longer show palette names
commit a26c93a630
    Date:   Sun Aug 10 22:33:37 2025 +0200

        chart color palettes: switch from drawingarea to IconView

had switched to using weld::IconView for the color
palettes and added setting a text, "Palette <number>"
for each of the palettes. The text was only displayed
for the VCL/non-gtk implementation, however.
Showing the text for gtk3 as well could be implemented
by adding a corresponding model column (see implementation
in earlier change set 1 of this Gerrit change, [1])

As Marco Cecchetti mentions in [2]:

> Anyway, I think more appropriate to remove the name
> in both cases since it's not descriptive and especially
> in the sidebar case it ends up just wasting space.
> Maybe you could set only for the a11y description.

Previous commit

    Change-Id: I641afe5b54055e91048fec111751f0ba3dafbea0
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Fri Aug 29 13:43:40 2025 +0200

        a11y: Set a11y name for chart color palettes

implemented explicitly setting the a11y name to the
string that was previously set as the display text,
so the VCL fallback to use the display text for the
a11y name is no longer needed.

Therefore, drop the displayed text as suggested.

Sample steps to see the corresponding dialog page:

* start Writer
* click the "Insert Chart" toolbar item to insert
  a chart
* double-click on a bar in the chart
* switch to the "Color Palette" tab page

[1] https://gerrit.libreoffice.org/c/core/+/190367/1
[2] https://gerrit.libreoffice.org/c/core/+/190367/comments/d4b582df_0cc820cc

Change-Id: I5242219df6049ce8b6e99148d30cc9ea95485658
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190367
Tested-by: Jenkins
Reviewed-by: Marco Cecchetti <marco.cecchetti@collabora.com>
2025-09-03 22:56:47 +02:00
Michael Weghorn cee9cf5fef a11y: Set a11y name for chart color palettes
commit a26c93a630
    Date:   Sun Aug 10 22:33:37 2025 +0200

        chart color palettes: switch from drawingarea to IconView

had switched to using weld::IconView for the color
palettes.

Other than for the vcl IconView implementation, the gtk3
one does not use an item text for the accessible name
if no a11y name is explicitly set (even if an item text
were set, which is currently not the case for gtk3),
resulting in the Orca screen reader only announcing "icon"
when an item receives focus.

Explicitly set the accessible name for each item to the
same as the text set for the VCL variant to ensure an
a11y name is always set.

This now makes Orca e.g. announce "Palette 1, icon" when
that palette/item receives focus when using the gtk3
VCL plugin.

Sample steps to see the corresponding dialog page:

* start Writer
* click the "Insert Chart" toolbar item to insert
  a chart
* double-click on a bar in the chart
* switch to the "Color Palette" tab page

Change-Id: I641afe5b54055e91048fec111751f0ba3dafbea0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190368
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2025-09-03 22:56:32 +02:00
Noel Grandin 423f95aa13 tdf#168191 Incorrect labels of X-Axis in chart
revert
    commit eeb8ca44ac
    Author: Noel Grandin <noel.grandin@collabora.co.uk>
    Date:   Fri Apr 4 10:02:06 2025 +0200
    tdf#147874 slow sheet switching with large chart2 (2)

Change-Id: I67dcea417be01982b769dd2bea387b4d29f0e732
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190520
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Tested-by: Jenkins
2025-09-02 15:46:41 +02:00
Marco Cecchetti a26c93a630 chart color palettes: switch from drawingarea to IconView
Change-Id: Ie57acb02473ed5f51c4a2b969786418f6630bfb3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189536
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190037
Tested-by: Jenkins
Reviewed-by: Marco Cecchetti <marco.cecchetti@collabora.com>
2025-08-24 23:21:59 +02:00
Marco Cecchetti 25fa705165 chart preview color palette for data series on mouse over
Change-Id: I99b8adefe87cb54d886a7dcead72709568f72c57
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186338
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190036
Reviewed-by: Marco Cecchetti <marco.cecchetti@collabora.com>
Tested-by: Jenkins
2025-08-24 23:21:52 +02:00
Marco Cecchetti 3fafbb522b chart color palette: it fixes some minor issues
Change-Id: Idf40fc5360b8551a2e7ac28d193157b7ae69f488
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/185171
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190034
Reviewed-by: Marco Cecchetti <marco.cecchetti@collabora.com>
Tested-by: Jenkins
2025-08-24 23:21:33 +02:00
Caolán McNamara be6015e3c4 cid#1659971 silence Overflowed return value
and

cid#1659699 Overflowed return value
cid#1659759 Overflowed return value
cid#1659922 Overflowed return value
cid#1660190 Overflowed return value
cid#1660286 Overflowed return value
cid#1660457 Overflowed return value

Change-Id: Ie9fffe4994b10ed3d4feb14eaf7950e3f01714ef
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189927
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Tested-by: Jenkins
2025-08-20 15:08:44 +02:00
Gabor Kelemen 85f88d7196 tdf#146619 Run IWYU on chart2/
Change-Id: I2f0920df37ba14918e1325983309f9b77c8792cb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/188751
Tested-by: Jenkins
Reviewed-by: Gabor Kelemen <gabor.kelemen.extern@allotropia.de>
2025-08-18 20:19:39 +02:00
Caolán McNamara 23f77eb0e2 cid#1660546 suppress Division or modulo by float zero
in spreadsheet related code, similar to runtime cases of
bin/sanitize-excludelist.txt but probably more dubious.

also:

cid#1660554 Division or modulo by float zero
cid#1660545 Division or modulo by float zero
cid#1660527 Division or modulo by float zero
cid#1660501 Division or modulo by float zero
cid#1660485 Division or modulo by float zero
cid#1660442 Division or modulo by float zero
cid#1660396 Division or modulo by float zero
cid#1660241 Division or modulo by float zero
cid#1660134 Division or modulo by float zero
cid#1660066 Division or modulo by float zero
cid#1659994 Division or modulo by float zero
cid#1659979 Division or modulo by float zero
cid#1659964 Division or modulo by float zero
cid#1659940 Division or modulo by float zero
cid#1659913 Division or modulo by float zero
cid#1659893 Division or modulo by float zero
cid#1659890 Division or modulo by float zero
cid#1659868 Division or modulo by float zero
cid#1659745 Division or modulo by float zero
cid#1659721 Division or modulo by float zero
cid#1659711 Division or modulo by float zero
cid#1659611 Division or modulo by float zero
cid#1659814 Division or modulo by float zero

Change-Id: I29830cad3170e5e45348f7bd4e08f028d21a4543
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189823
Tested-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2025-08-17 15:34:28 +02:00
Caolán McNamara d02fde021c cid#1659748 Variable copied when it could be moved
and

cid#1659754 Variable copied when it could be moved
cid#1659755 Variable copied when it could be moved
cid#1659756 Variable copied when it could be moved
cid#1659766 Variable copied when it could be moved
cid#1659767 Variable copied when it could be moved
cid#1659769 Variable copied when it could be moved
cid#1659770 Variable copied when it could be moved
cid#1659777 Variable copied when it could be moved
cid#1659787 Variable copied when it could be moved
cid#1659790 Variable copied when it could be moved
cid#1659793 Variable copied when it could be moved
cid#1659802 Variable copied when it could be moved
cid#1659818 Variable copied when it could be moved
cid#1659822 Variable copied when it could be moved
cid#1659824 Variable copied when it could be moved
cid#1659825 Variable copied when it could be moved
cid#1659826 Variable copied when it could be moved
cid#1659842 Variable copied when it could be moved
cid#1659849 Variable copied when it could be moved
cid#1659850 Variable copied when it could be moved

Change-Id: I70729aaf6e229518a9a50ac18311286ab5b05b53
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189348
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Tested-by: Jenkins
2025-08-11 13:16:28 +02:00
Caolán McNamara 08dd90f9a5 null-deref of m_xChartDoc seen
#0  0x00007d2c10f56497 in rtl::Reference<chart::Diagram>::Reference (handle=..., this=<optimized out>)
     at include/rtl/ref.hxx:79
 #1  chart::ReferenceSizeProvider::setValuesAtAllDataSeries (this=0x7ffce60d8d70)
     at chart2/source/tools/ReferenceSizeProvider.cxx:95
 #2  0x00007d2c10cd6a1f in chart::ChartController::impl_adaptDataSeriesAutoResize (this=<optimized out>)
     at chart2/source/controller/main/ChartController_Tools.cxx:192
 #3  0x00007d2c10cb3cec in operator() (nResult=<optimized out>, __closure=<optimized out>)
     at chart2/source/controller/main/ChartController.cxx:1672
 #4  std::__invoke_impl<void, chart::ChartController::executeDispatch_SourceData()::<lambda(int)>&, int> (__f=...)
     at /opt/rh/devtoolset-12/root/usr/include/c++/12/bits/invoke.h:61
 #5  std::__invoke_r<void, chart::ChartController::executeDispatch_SourceData()::<lambda(int)>&, int> (__fn=...)
     at /opt/rh/devtoolset-12/root/usr/include/c++/12/bits/invoke.h:111
 #6  std::_Function_handler<void(int), chart::ChartController::executeDispatch_SourceData()::<lambda(int)> >::_M_invoke(const std::_Any_data &, int &&) (__functor=..., __args#0=<optimized out>) at /opt/rh/devtoolset-12/root/usr/include/c++/12/bits/std_function.h:290
 #7  0x00007d2c134e2268 in std::function<void (int)>::operator()(int) const (__args#0=<optimized out>, this=0x7ffce60d8de0)
     at /opt/rh/devtoolset-12/root/usr/include/c++/12/bits/std_function.h:591
 #8  Dialog::EndDialog (this=0x4abc7140, nResult=<optimized out>)
     at vcl/source/window/dialog.cxx:1213

(gdb) print m_xChartDoc
$3 = {m_pBody = 0x0}

Change-Id: I6f2cdb176cf1acc7b000e24fa314a6cbe344a525
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/187277
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2025-07-02 14:30:48 +02:00
Noel Grandin 5f69e0da74 use more concrete UNO classes
Change-Id: I50cc798040c691ef95d351ba3869eebbb912784a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186592
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2025-06-18 07:54:36 +02:00
Marco Cecchetti e85be68352 chart color palette for data series: sidebar panel
Change-Id: I6f661515e2de11ea1ead0b79435413d6a0e81c9d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/184264
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/185142
Tested-by: Jenkins
2025-05-13 14:29:46 +02:00
Noel Grandin 796f8ff332 Revert "use more concrete UNO in chart2"
This reverts commit 1886ecf7ee.

because reportdesign will pass in a OReportDefinition* and not a SvNumberFormatsSupplierObj*

Change-Id: Ic0068d18a10ce24ed74bb86cfef4cb9f34e9eeb2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/184437
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2025-04-22 15:45:50 +02:00
knordback 84d4a5dc21 tdf#165742 Step 3: Establish a narrow input path for chartex
This is a subtask of tdf#165742: Chartex charts are lost on input from OOXML
and re-export.

Build out the narrowest parsing path down to ChartType for funnel charts.
No other data or parameters are supported at this point other than the
chart type. This is a step towards more extensive support for I/O of chartex
charts to/from OOXML.

Change-Id: If33f4320c373262de19a7b0b31d28ce8f1de29e8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183463
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
2025-04-22 14:39:00 +02:00
Noel Grandin 1ada0279f7 fix crash in JunitTest_chart2_unoapi
fix crash seen on jenkins, likely as a result of

    commit eeb8ca44ac
    Author: Noel Grandin <noel.grandin@collabora.co.uk>
    Date:   Fri Apr 4 10:02:06 2025 +0200
    tdf#147874 slow sheet switching with large chart2 (2)

Change-Id: Ic3c58080cfd9a8dd36fe980ef36ac38e3890b069
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/184207
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Tested-by: Jenkins
2025-04-15 13:27:56 +02:00
Tomaž Vajngerl f355ddcbf2 chart2: fold isSupported* functions into ChartType
This moves isSupported* function from ChartTypeHelper to ChartType
where it better belongs to. We can access the concrete classes now
instead of accessing through UNO si this is possible to do.

Change-Id: Icc52a8ba0d8ab6d5907d7942a1834cc6f7093cce
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182712
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Tested-by: Jenkins
2025-04-14 02:48:06 +02:00
Noel Grandin 8734d375be use more concrete UNO in chart2
Change-Id: I3bd1202fc54d474f135d5d541ecca62b06e80d1b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/184120
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2025-04-13 17:12:10 +02:00