Commit graph

55951 commits

Author SHA1 Message Date
Jehan
6ac8031c95 Release GIMP 3.0.8.
The interface age set to 0 again, since we have 3 new functions.
2026-01-24 17:10:30 +01:00
Jehan
b8b6730a8b build: prepare snapcraft for stable release. 2026-01-24 17:10:30 +01:00
Jehan
7aac00b216 desktop: set release date. 2026-01-24 16:38:59 +01:00
Bruno Lopes
bc59bfc319 gitlab-ci: Make Homebrew builds scheduled only
Since the COMMIT_SHA, we default to build with MacPorts which is more native.

But it is wise to not be overly reliant on it, since it tends to be very flaky,
and Mac platform have very restrictive hardware with software always changing.

(cherry picked from commit 5abb249d1d)
2026-01-24 11:53:56 -03:00
Jacob Boerema
48cf3b8493 NEWS: update 2026-01-24 09:37:04 -05:00
Jacob Boerema
0e63f096fa plug-ins: Fix #15732 PSP File Parsing Integer Overflow...
Leading to Heap Corruption

An integer overflow vulnerability has been identified in the PSP
(Paint Shop Pro) file parser of GIMP. The issue occurs in the
read_creator_block() function, where the Creator metadata block is
processed. Specifically, a 32-bit length value read from the file is
used directly for memory allocation without proper validation.
Trigger -> when length is set to 0xFFFFFFFF

To fix this, we check that using that length doesn't exceed the end
of the creator block. If it does, we return with an error message.
2026-01-24 09:23:10 -05:00
Bruno Lopes
8c585864e5 build/macos: Add FIXME comment about ScreenCaptureKit
(cherry picked from commit 472dcb22ee)
2026-01-24 09:07:56 -03:00
Bruno Lopes
8ea18cd908 build/macos: Build GIMP with MacPorts targeting macOS 11 on our CI
We still need to implement cache and better timeouts in the future.

(cherry picked from commit 962291dbb7)
2026-01-23 23:05:59 -03:00
Jehan
d09747589d INSTALL: add bash-completion in optional packages list. 2026-01-23 23:44:28 +01:00
Jehan
7a3e5d05da desktop: add demo attribute to one item in the AppStream. 2026-01-23 23:44:28 +01:00
Jehan
94bff2a4f6 gimp-data: bump to fix splash image generation step.
Current splash image breaks the build when moving to stable version.
2026-01-23 23:44:28 +01:00
Anders Jonsson
a4cb62095e Update Swedish translation 2026-01-23 22:29:16 +00:00
Jehan
88b4f29ce7 etc, meson: new -Dbash-completion feature option.
Let's force having the bash-completion dependency when we want to enable
the feature. Then clearly shows the feature state in the final setup
summary.

Otherwise the risk is that GIMP may not use the correct path on a given
system and a packager who wants this script to be installed may miss
that it is installed in the wrong directory.
2026-01-23 23:08:52 +01:00
Jehan
42b55c1aff etc: fix invalid meson argument.
Fixes:

> ../etc/meson.build:31:39: ERROR: dependency.get_variable got unknown keyword arguments "define_variable"

This went unseen because this was not run when bash-completion.pc was
absent but this broke on our flathub build.
2026-01-23 22:38:56 +01:00
Bruno Lopes
8f1a661d6b build/linux: Change Snap grade to stable preparing to 3.0.8 release 2026-01-23 18:09:28 -03:00
Jehan
6c7e56f205 libgimp: 3 new functions backported for the 3.0.8 release.
And one function deprecated as of 3.0.8 too, in favor of one of the new
functions.
2026-01-23 21:44:32 +01:00
Jehan
f219e79043 desktop: adding AppStream metadata for GIMP 3.0.8. 2026-01-23 21:43:18 +01:00
Jehan
01df768b67 NEWS: update. 2026-01-23 21:34:14 +01:00
Bruno Lopes
84f81b503d build/macos: Other /opt/local check fix
(cherry picked from commit f62f8389ab)
2026-01-23 16:22:08 -03:00
Bruno Lopes
d01ae95697 build/macos: Fix /opt/local check
shell syntax requires spaces.

(cherry picked from commit 5837be97d8)
2026-01-23 16:17:37 -03:00
Yuri Chornoivan
12614c630d Update Ukrainian translation 2026-01-23 18:25:05 +00:00
Ekaterine Papava
77cb46d012 Update Georgian translation 2026-01-23 07:06:48 +00:00
luming zh
39d1d15311 Update Chinese (China) translation 2026-01-23 02:47:15 +00:00
luming zh
6f777c37cf Update Chinese (China) translation 2026-01-23 02:36:16 +00:00
Bruno Lopes
bb827160f4 meson, tools: sys.executable is not the same as python.full_path()
This avoids using the python chosen by Meson's find_program(),
which is not the one from find_installation() and can not have GI.

(cherry picked from commit 61c078fa43)
2026-01-22 22:27:38 -03:00
Jehan
3e66da424d app, etc: do not hide --show-debug-menu.
This is a useful debugging function for developers. It is enough to hide
the menu by default on stable releases, I don't think we also need to
hide the CLI option. Developers don't know all these options by heart,
so we need to make them reasonably discoverable!

(cherry picked from commit 083360fac1)
2026-01-22 23:31:40 +01:00
Jehan
a931d4602f etc: make the new bash-completion file work for all variants of our executables.
In particular make it also work with the `gimp-console` and with all
symlink names.

Also rename the bash completion file using the full application version
so that it will be possible to install several such completion files
side by side.

(cherry picked from commit 24a69df9ab)
2026-01-22 23:31:40 +01:00
Niels De Graef
ff46b81f8d Add a Bash completion file
(cherry picked from commit b15538d2e6)
2026-01-22 23:31:40 +01:00
Martin
1125d0d603 Update Slovenian translation 2026-01-22 21:23:10 +00:00
Alx Sa
63979ec6bc widgets: Make Fx icon invisible when no filters
We use a GimpCellRenderToggle for the Fx icon
in the layer and channel docks. If you hover over it
when there's no filter, a square "checkbox" will appear
and give the impression you can click on it, even though
you currently can not.

This patch connects the "visible" property of the toggle to
the number of filters attached to the drawable, similar to
what we did for "active". This prevents the checkbox from
appearing, and will hopefully reduce user confusion.

(cherry picked from commit dd28bae44c)
2026-01-22 21:53:40 +01:00
Alx Sa
3aa13afdfd display, widgets: Change Navigation/Selection editor UI...
...for dark mode.

The Navigation and Selection Editor
docks use GIMP_ICON_TEXTURE as their
default background when there's no
active image. On dark mode, this creates
large bright areas in the UI.
This patch removes the calls to
gimp_view_renderer_set_background ()
for these docks so the theme background
is used instead.

(cherry picked from commit cf41831a58)
2026-01-22 21:53:13 +01:00
Jehan
c2dd142ee5 libgimp: coding style fix.
(cherry picked from commit ef69089881)
2026-01-22 21:48:59 +01:00
Jehan
208cbce475 app: take into account possibility of NULL error.
Normally the error should not be NULL if file_open_layers() returns no
layers. But just in case, in order not to crash when we could avoid it,
let's double-check.

(cherry picked from commit 76a255caa1)
2026-01-22 21:48:45 +01:00
Alx Sa
f98d394765 libgimpconfig: Save legacy XCF grid colors...
...in GimpRGB format.
Resolves #14754

GimpGrid properties are saved and loaded
in XCFs as GimpParasites. When we
converted from GimpRGB to GeglColor
for the fgcolor and bgcolor properties,
we caused those properties to be lost
when saving a 2.10 and below compatible
XCF in GIMP 3.0+.

This patch adds new
gimp_config_get_xcf_version () and
gimp_config_set_xcf_version () API to
libgimpconfig's interface. This allows us to
pass the intended XCF version to the
parasite serialization process, and save
as either GeglColor or GimpRGB compatible
formats based on that value.

(cherry picked from commit 5753ac75b4)
2026-01-22 21:47:39 +01:00
Jehan
6740842cab plug-ins: plug-in-busy-dialog arguments should not depend on run-mode.
In INTERACTIVE or WITH_LAST_VALS modes, the arguments were replaced by
the latest values, which is typically not acceptable for this specific
plug-in. Even in interactive mode, we still want file descriptors to be
set explicitly, and used by the plug-in.

This fixes such error I had on terminal:

> (busy-dialog:193133): GLib-WARNING **: 20:34:43.692: ../glib/giounix.c:414Error while getting flags for FD: Bad file descriptor (9)

And the worst part was that it sometimes prevented the busy dialog from
quitting (though sometimes it still exited fine despite the wrong file
descriptors 🤷).

(cherry picked from commit 7374da53da)
2026-01-22 21:45:26 +01:00
Jehan
b04893c08e app: add some further sanity check.
Though the crash in #14139 won't hopefully happen again, thanks to my
previous commit, these additional assert may help in debugging if ever
it does again. Because truth is that even with partly-loaded fonts, this
was weird. If we had a GimpFont already, why did we fail to get a pango
font, or to query its file path through fontconfig?

(cherry picked from commit 326358a76a)
2026-01-22 21:44:52 +01:00
Ondřej Míchal
a300885578 libgimp: Handle integer properties bound to GimpSpinScale in procedure dialogs
Setting a step/page size of less than one for a spin scale bound to an
integer property does not make sense. Similarly the number of decimal
digits shown can be set to 0.

(cherry picked from commit e735054347)
2026-01-22 21:44:02 +01:00
Jehan
23d20463f5 Issue #14139: wait for fonts to be loaded before loading files.
This was happening when trying to load a file before fonts were fully
loaded, which may happen when loading while starting GIMP (either from
CLI, or from a file browser, etc.), or simply just after start for
people with a lot of fonts, whose font loading may take a long time as
background task.

Note that I didn't manage to reproduce properly because from reports, it
seems like the problem appears where some fonts may be only partly
loaded so gimp_font_get_hash() fails to load the font and get a hash. I
never managed to trigger such a case and no reporters answered my call
for testing of debug builds.
As a consequence, I'll just assume that simply waiting for all fonts to
be loaded before starting to load images would work out.

Note that the crash was not happening when text layers were using the
older syntax (pre-XCF 19) of text layer data, since it was not storing
any font hash, which means that we were not trying to compare hashes. It
would also not crash if fonts were not fully loaded yet, but we didn't
have any weird intermediate state where fonts appeared in the list yet
their file were not hashable (cf. what I failed to reproduce, as
explained in previous paragraph). But both these cases were not ideal
either anyway because then we could load the XCF apparently OK… except
that the correct fonts would not be associated to the related text
layers (hence as soon as you start to edit said texts, the rendering
would break). So we should wait for fonts to be loaded, and that was a
bug even when you can't reproduce the crash.

When starting GIMP without loading an image, or simply when fonts are
loaded quickly enough, it won't make any difference. So it should not
make startup any slower for most common use cases and installations.

(cherry picked from commit bf6fcac0a9)
2026-01-22 19:58:06 +01:00
Jehan
187a91dfc0 app: fix gimp_get_data_factory() to support returning the tool preset…
… factory.

(cherry picked from commit 56a17c73eb)
2026-01-22 19:54:04 +01:00
Jehan
96cc5e0b22 app: move functions to look up GimpData into core.
These functions should not be for the PDB only. The core will soon need
these too (e.g. to load resources linked from a XCF file).

So gimp_pdb_get_data_factory() is moved to gimp_get_data_factory() in
Gimp class. And gimp_pdb_get_data_factory_item() is moved to
gimp_data_factory_get_data() in GimpDataFactory class.

(cherry picked from commit 41a464cb9a)
2026-01-22 19:50:56 +01:00
Jehan
792afb4f6f app: small style cleanup.
(cherry picked from commit 2b369c1f19)
2026-01-22 19:43:03 +01:00
Jehan
85367df033 app: make sure main GIMP process is not frozen while waiting with gui_wait().
Even if we may have to wait for some feature, we may not want to freeze
the whole GUI. And this would also avoid the dreaded popup dialog from
the system which makes it look like the application is broken.

Finally in an upcoming commit, it will prevent the interface from not
being presented at all when loading images at startup (while fonts are
not loaded yet).

(cherry picked from commit 9f18afd2b6)
2026-01-22 19:42:46 +01:00
Jehan
a2c94d27fd plug-ins: make plug-in-busy-dialog transient to the calling GIMP window.
(cherry picked from commit bfd1ed0309)
2026-01-22 19:42:11 +01:00
Alx Sa
f66f45563b dialogs: Canvas Size fill combo set to insensitive...
...if layers won't be resized.
This patch adds code to check if the
"Resize layers" option is set to None and
"Resize Text Layers" is turned off. If so,
then the "Fill With" combobox is not
needed and will be set to insensitive to
reduce confusion. Otherwise, the fill combo
is set to enabled.

(cherry picked from commit 897ffd5702)
2026-01-22 19:37:20 +01:00
Jehan
d15ffc5d0f Issue #15501: g_close failed with EBADF. This is not a valid file descriptor.
I can't reproduce this issue, because when I set a fake font file as a
broken symlink, or a file without read access, it is simply not returned
as part of my font list to start with.

But from the issue discussion and traces, this should be the right fix.

(cherry picked from commit 98bd0d16fe)
2026-01-22 19:28:49 +01:00
Jehan
fc49a7a73d Issue #13709: wait we get our first surface focus before listing…
… input devices.

Per Carlos' advice on gtk#7534, I wait for us to get a focus, since the
pad devices are only created at that point.
Note that this is a Wayland-only issue, but since it doesn't matter too
much that input devices are not initialized before we have a focused GUI
anyway, let's make this simpler.

At the earliest, the splash focus can announce a focus, but since it is
possible to start GIMP without the splash, display shells will also
possibly announce the first focus (there will always be a display shell
focusing at some point for any GUI GIMP!).

(cherry picked from commit d92c237a17)
2026-01-22 19:24:36 +01:00
Jehan
77a006ffe2 app: minor spacing cleanup.
(cherry picked from commit a34907987f)
2026-01-22 19:10:34 +01:00
Jehan
83842168fc Issue #14442: undo crops layer rendering out of its off-border effects.
This was happening in multiple cases, such as undoing a "Rasterize
filters" action, but also with a "Layer to Image Size" being undone, and
probably any other undo cases.

In particular here the culprit was that upon undoing, we were setting
the GimpApplicator's "gimp:compose-crop" node, while it was a "gegl:nop"
before. We must be careful not to set a crop unexpectedly when the node
was not set already, explicitly.

(cherry picked from commit 0157a9581e)
2026-01-22 19:08:38 +01:00
Jehan
918a826906 app: remove unused variable and fix spaces.
(cherry picked from commit 38c33eb6a0)
2026-01-22 19:06:18 +01:00
Idriss Fekir
4497bf00c1 gimpfontfactory.c:Check for font type directy not through FT
Checking for valid font files thourgh harfbuzz or freetype (as it's done currently)
is slow, to speed up font loading a but, a less robust but faster check is done, which
is just reading and checking the first 4 bytes of every font file.

(cherry picked from commit c0e5107eee)
2026-01-22 19:05:29 +01:00