Commit graph

56926 commits

Author SHA1 Message Date
Bruno Lopes
a30fc5fb7b .gitlab: Update security template 2026-02-25 11:46:26 -03:00
Jehan
75e665f0ed Issue #15824: better detect the first filter.
Ah my previous commit was working fine with a selection in the "Use the
selection as input" case, but was still hanging when "Use the entire
layer as input" was chosen.

The detection of whether we were the first filter was not working fine
when adding a new filter. Now this should work in all cases.

I don't revert the previous commit, because I think it's fine anyway.
When we have a selection, unconditionally adding a cropping-before node
on the selection boundaries seems logical to me.
Hopefully it doesn't bring back any of the cropping issues we had on
filters, but so far I could not reproduce any.
2026-02-25 15:44:29 +01:00
Jehan
d91a8b2abe Issue #15824: waterpixels filter on a selection appears to hang GIMP. 2026-02-25 15:38:23 +01:00
Bruno Lopes
d8e0f2780c .gitlab: Remove .testing subdomain from URLs
The updated bug report pages were merged on master branch of WGO.
2026-02-25 10:59:09 -03:00
Jehan
b602a63778 plug-ins: also introspect libgimpui enum values into Script-Fu.
Since libgimpui also use GIMP_ as prefix in C, we won't ever have name
clashing with libgimp, so I also remove this prefix in Script-Fu.

E.g. GIMP_ASPECT_SQUARE is ASPECT-SQUARE in Script-Fu.
2026-02-25 14:49:23 +01:00
Alx Sa
664729a55c text: Reverting 03443ffc
Resolves #11409
After Jehan's update to
gimp_drawable_filter_refresh_crop () in
0157a958, it no longer calls the cropping
functions which this commit was intended
to work around.

Additionally, thanks to other changes in
the filter code since then, reverting this
commit resolves an issue where some
Render filters would not update as you
typed more characters.
2026-02-25 13:01:25 +00:00
Jehan
0dc65755fe NEWS: update. 2026-02-24 23:12:52 +01:00
Jehan
7296099388 Issue #13368: pressure curve is missing from the GimpDeviceInfoEditor.
This was happening on Wayland in my tests, and apparently on Windows
too, according to the report. I widely simplified the code. Now we don't
list of axis anymore, and therefore we don't allow to change these
(which was not working anyway, for as long as I remember, at least on
Linux, both X11 and Wayland).

As for the pressure curve, we just show it unconditionally for any
device of type "Pen". It may mean that it might show on some rare stylus
devices with no pressure support, but in such case, it will just be a
bogus curve (it won't break the device).
And then we'll avoid all the flimsy heuristic trying to guess if a
device is supposed to have pressure sensitivity, which especially became
bad in Wayland as we have this information only on proximity. It means
that if you don't approach the stylus and were trying to set up your
pen's pressure curve with a mouse, no curve would appear!

Add to this that gdk_device_list_axes() seems very broken on Wayland and
was always returning GDK_NONE for all axis (even when only using it on
various device signal handlers, per advices by Carlos on IRC), at least
anyhow I tried to make it work, our heuristic to detect when an axis
should be ignored was completely broken on Wayland as well.

A simpler logic should work better and makes the code simpler to read
too.

It's also one less usage of GtkListStore, which is good for future GTK
versions where it got deprecated!
2026-02-24 22:54:48 +01:00
Alx Sa
1282384417 core: Update filter area if changed
Previously, we only updated an NDE filter's
`filter_area` if the filter itself contained a
width or height property.
However, the filter_area is also used by
GimpDrawableFilter to indicate where we
should draw the filter, and needs to be
updated if we scale/rotate/shear the layer
and change its dimensions.

This patch moves the code so that the
filter_area width and height is always
updated if we pass a GeglRectangle in to
gimp_drawable_filter_refresh_crop ().
2026-02-24 11:32:08 +00:00
Bruno Lopes
75ea18ad00 build/linux: Explain a bit type2-runtime peculiar check 2026-02-23 22:15:47 -03:00
Bruno Lopes
0ceff50cd9 build/linux: Add comment about colored output on Flatpak 2026-02-23 21:55:42 -03:00
Jehan
87810ae6fe app: make explicit that "White Balance" auto effect works in linear space.
This commit doesn't actually changes anything, but it fixes the
gimp_histogram_new() call, since the argument is supposed to be a
GimpTRCType, not a boolean. Yet GIMP_TRC_LINEAR is the first value in
the enum type, so it's indeed the same as FALSE.
I also set the "trc" property to "gimp:levels" config object explicitly,
to the same TRC value as the histogram, so that this doesn't depend on
the default anymore (which is linear too, right now; so this part
doesn't change a thing here again), and therefore would survive to any
possible default change in the future.

Note that it was considered to set this all to non-linear, just as it
used to be in 2.10, as requested in #15738. After discussing it with
Øyvind on IRC, we concluded that working in linear space may be a nicer
default for this feature, as we'd be doing a "meaningful rebalancing of
photon count per component". Now there may be cases where doing a
white-balancing in non-linear may yield better result, of course. For
these case, you may still go to "Levels", set to non-linear, and hit
"Auto Input Levels". This is exactly the same code runing (but in
non-linear space). The "White Balance" action still needs to be the
simple non-GUI option and keeping work in linear seems like the more
appropriate default here.
2026-02-24 01:36:32 +01:00
Alx Sa
bc02381f14 widgets: Hide move handle in Text Editor window
Since the Text Editor window uses the same
GimpTextStyleEditor widget as the on-canvas editor,
it also shows the Move handle (which doesn't work
in the Text Editor window). This patch simply hides it
so it doesn't confuse users.
2026-02-23 17:42:28 +00:00
Alx Sa
6755fa8b8d plug-ins: Fix warning in Qbist dialog_save ()
It is possible for qbist_info.path to be NULL, which
makes gtk_file_chooser_set_filename () throw a warning
about a NULL filename in save_dialog ().
This patch adds the same guard to that call as QBist
already has in load_dialog (), to make sure we have
an existing file name before trying to set it.
2026-02-23 15:40:12 +00:00
Bruno Lopes
9e392656ab build/linux: Update openexr and libwmf modules 2026-02-22 18:02:00 -03:00
Alx Sa
b9d4e315e8 core: Adjust logic for gimp_drawable_filter_refresh_crop ()
In 0157a958, we prevent the NDE crop refresh
code from running unless the filter's crop
enabled is TRUE. However, this prevents
the width and height settings built into
certain filters from running, separate from
the crop nodes in GimpDrawableFilter.
This patch moves the check to only cover
the calls to gimp_drawable_filter_set_crop ().
This should fix the width/height update issue
without causing a regression to #14442.
2026-02-22 18:10:15 +00:00
Bruno Lopes
21f88c1a72 .gitlab: Update performance template 2026-02-22 13:02:53 -03:00
Bruno Lopes
4a6dab23ca .gitlab: Update feature template
From https://gimp.org/bugs/report.html:

> Related to bug reports are enhancement requests. It is recommended to discuss enhancements with developers first, for instance on IRC or in the forums. This is to make sure that the enhancement requests that are filed are well-specified and aligned with the overall goals the developers have for GIMP.
2026-02-22 12:50:04 -03:00
Bruno Lopes
ee939f7d89 .gitlab: Detailed report instructions were moved to gimp-web
See: d2c4038abd

Our practice of writing everything on the template made the page on gimp-web
fall into oblivion. This was suboptiomal since the template got very big and
hard to read, with many reporters not filling it at all.

So, let's try to improve cleaning the template and directing them to gimp-web,
which have images and such that should clarify how to make good reports.
2026-02-22 12:28:23 -03:00
Alx Sa
581afd1516 core: Fix GEGL warning after bucket fill
In 6279d7b7, I did not free the GEGL buffer created
by gimp_pickable_get_buffer_with_effects ().
This resulted in an "EEEEeEeek! 1 GeglBuffers leaked"
warning on exit, which of course could cumulate.

This patch makes to sure to clear out the src_buffer
both times it's used.
2026-02-22 00:28:16 +00:00
Bruno Lopes
693f46dc67 gitlab-ci: Only push image to Registry if it was changed
This is pretty obvious and will speed up Snap builds a bit,
since the Ubuntu/Snap image is the biggest on Container Registry.
2026-02-21 21:11:13 -03:00
Bruno Lopes
eecd0cdd14 gitlab-ci: Build Docker images without OCI runtime
chroot is closer to how Kaniko behaved and it is how the FD
ci-templates behave on gimp-web and gimp-web-devel CI.
2026-02-21 21:10:42 -03:00
Alexander Alexandrov Shopov
24f1dd6956 Update Bulgarian translation 2026-02-21 18:07:02 +00:00
Alexander Alexandrov Shopov
53d55f0e1d Update Bulgarian translation 2026-02-21 17:44:58 +00:00
Alexander Alexandrov Shopov
1394b43fd6 Update Bulgarian translation 2026-02-21 17:27:14 +00:00
Jehan
9849f2eff7 app, pdb: factorize code for allowed filters.
The code to ban some filters for non-destructive usage was duplicated in
a PDB file and in the XCF load code. Additionally to combining these 2
codes into a single gimp_gegl_op_nde_allowed(), this commit also moves
part of the logic into gimp_gegl_op_blacklisted() which improves the
following:

* It used to be possible to create filters for hidden operations which
  were not returned by gimp_drawable_filter_operation_get_available(),
  such as "gegl:color" or "gimp:equalize", which would create all sorts
  of problems. Now trying to create these filters through the API will
  not work and will properly warn with an explicit error message.
  I do not consider this an API break since the filters were not
  returned in the available lists and therefore were not considered
  usable. Anyone who would have used any of these hidden filters was
  just going around a weakness in our implementation.
* We make sure that our lists of allowed/forbidden filters are
  consistent across usages.
* When getting the list of filters with gimp_gegl_get_op_classes(), we
  don't need to do an additional validation step (as we were doing until
  now in the PDB call). This is meant to imply that all returned
  operations were already validated.
2026-02-21 14:50:19 +01:00
Lukas Oberhuber
cb730621e6 Issue #11998: do not steal focus from spin widget when double clicking 2026-02-21 13:48:16 +00:00
Jehan
06fafe6f71 plug-ins: change to Unix newlines with dos2unix. 2026-02-21 12:22:56 +01:00
Jehan
3b9b300252 plug-ins: make GimpUi global when imported from a local scope.
This fixes Spyro Plus not running interactively after commit a7f02d4ee1.
Note that this seems to be the only plug-in which got broken by this
commit AFAICS.
2026-02-21 12:21:32 +01:00
Jehan
68b231cdf8 NEWS: oups! I had not saved some changes before committing. 2026-02-20 23:50:05 +01:00
Jehan
e2ca5e6e2e NEWS: update. 2026-02-20 16:46:10 +01:00
Jehan
831cae29db app: let's hide gimp:equalize from API.
This operation cannot be run from the public API right now because it
requires the "histogram" argument whose type is currently unknown to
libgimp/PDB.
Furthermore even if we were to add this type, there are some fundamental
issues with this op which makes it unsuitable (for now) as a
non-destructive filter:

1. Since the histogram is computed only once at op construction, it
   wouldn't be rebuilt when the source buffer changes.
2. Using gimp_drawable_calculate_histogram() doesn't build from the
   source buffer of the node anyway, but from the drawable buffer. This
   would mean a broken histogram as soon as the filter is inserted in
   the middle of other filters (anywhere but in the bottom).

We will need to fix these 2 points to consider using this as NDE (and
therefore also make it available in the API).
2026-02-20 16:16:04 +01:00
Jehan
e026538477 Issue #14486: have gimp:equalize work in non-linear space again.
This completes the commit by Alx, 2 commits before, which was indeed
part of the fix, but not the full of it.
2026-02-20 15:00:39 +00:00
Jehan
f8b7429a6c app: do not let trc uninitialized.
The trc variable could be initialized by the "trc" property, but even
though this is processed inside GimpOperationPointFilter code, the
property is only set in some of the child classes (such as Curves or
Levels). As a consequence, this was left unitialized and even actually
used in other child operations (unless they overrode prepare()). This
was the case of GimpOperationEqualize which was always working in
linear mode since GIMP 3.0 (see #14486).

Since uninitialized variables may end up as 0, which would have been
GIMP_TRC_LINEAR enum case anyway, this probably doesn't really change
the behavior. This is not guaranteed by C, but IIRC GObject zero-ed
object structs. Yet it is always better to be explicit.
2026-02-20 15:00:39 +00:00
Alx Sa
6949400a03 core: Fix Equalize TRC compared to 2.10
In GIMP 2.10, gimp_histogram_new () takes a boolean
parameter to indicate if it should be rendered in a linear
or non-linear TRC. In GIMP 3.0, this function instead takes
a GimpTRCType where 0 is equal to the linear enum and 1
is equal to the non-linear enum.

Since gimp_drawable_equalize () still passes FALSE as it
did in 2.10, this is treated as 0 and thus setting it as a linear
operation.

This patch changes the FALSE to be GIMP_TRC_NON_LINEAR,
both for clarify and to better match the 2.10 behavior.
2026-02-20 15:00:39 +00:00
Alx Sa
2af5aa651a tools: Don't disconnect rasterized layer signals
In the path tool, when setting a new vector layer as
the editable path, we try to disconnect the old signal for
gimp_path_tool_vector_layer_path_changed () from the
vector layer options. However, if this code is triggered
because we rasterized the vector layer while the path
tool was active, it will throw a warning because the
layer options are NULL. This patch adds a check to make
sure the options exist before trying to disconnect their
"notify::path" signal.
2026-02-20 02:48:05 +00:00
Alx Sa
4bfa65d72d core: Refresh new vector layers when pasting it
When copying and pasting vector layers, if we needed
to add a new path then the layer was not redrawn.
This would require the user to move or edit the path
to see the correct view of it.

This patch adds a call to gimp_vector_layer_refresh ()
after pasting it if it is not rasterized, in order to correct
the initial view.
2026-02-19 23:18:39 +00:00
Alx Sa
6ab235dc20 tools: Grab display from correct path's image
When copying and pasting a vector layer into
another image, the display would jump back to
the original image. This also happened if you
re-selected the pasted vector layer in the new
image after choosing another layer.

This patch makes sure that when updating the
selected path in the Path tool, it grabs the display
from the pasted vector layer rather than the old
image's path.

Note that this may be a "symptom" rather than a
root cause, due to a number of remaining issues
with copying and pasting vector layers.
2026-02-19 18:57:40 +00:00
Alx Sa
7bebb1d36b dialog: Reorder options to match dialog
The Canvas Size dialogue and the default options
for it in the Preferences dialogue were listed in
opposite order. This patch puts them in the same
order as the Canvas Size dialogue (Fill with, then
Resize Layers) to keep them consistent.
2026-02-19 13:27:50 +00:00
Anders Jonsson
139e23ab8b themes: Define System theme style for GimpPivotSelector
Follow-up to ed1e71917b, removing the button offset the same
way as for Default theme.
2026-02-18 18:40:20 +01:00
Jacob Boerema
04f3030371 plug-ins: fix #15274 Imagemap create guides dialog is too wide
The create guides dialog of the imagemap plug-in shows up very wide
due to the hint text not being wrapped.

To fix this we enclose the hint box inside a scrolled window and set
horizontal policy to GTK_POLICY_EXTERNAL and a minimum vertical size
of 100, based on how we do this in the export procedure dialog for
the comment field.
2026-02-18 11:23:56 -05:00
Bruno Lopes
03f3b1a741 build/linux: Use mirror-urls for flaky intltool sake 2026-02-18 12:15:15 -03:00
Bruno Lopes
c4f1dc697c build/linux: Make mypaint-brushes .patch self-contained in the Flatpak manifest 2026-02-18 12:15:15 -03:00
Alx Sa
ed1e71917b widgets, themes: Define style for GimpPivotSelector
This patch adds a CSS class name to
GimpPivotSelector so we can define its
CSS style in the GUI.
It also defines the margin-right CSS property
to prevent it be affected by the general
GimpOverlayDialog style.
2026-02-18 14:52:49 +00:00
Jacob Boerema
bffa26d995 libgimp: fix #15877 crash in export dialog with long comment line
Our export dialog resizes the width of the dialog based on the size
of the longest comment line. Apparently certain programs save data
that can be very long. On Windows I did not experience a crash, but
the dialog is many screens wide and unusable in that state.

To fix this we change the horizontal scroll policy to
GTK_POLICY_EXTERNAL because GTK_POLICY_NEVER apparently stops GTK
from resizing the window at a reasonable size.

We also set wrap mode of the comment field to GTK_WRAP_WORD_CHAR
to make sure the lines that consist of only numbers without spaces
get wrapped at a reasonable length.
2026-02-18 09:20:47 -05:00
Bruno Lopes
90a91c1395 build/linux: Update openjph 0.26.1.tar.gz to 0.26.3
Synced from: b00eb15620
2026-02-18 07:27:57 -03:00
Bruno Lopes
b9c0d099fe build/linux: Make libiff/libilbm .patch self-contained in the Flatpak manifest
Following e22ae3bfda
2026-02-17 21:29:30 -03:00
Bruno Lopes
e22ae3bfda build/linux: Make json-c .patch self-contained in the Flatpak manifest 2026-02-17 19:00:34 -03:00
Alx Sa
64cf55da70 themes: Define NDE popover theme colors
When we switched the NDE popover to use
GimpRow instead of GtkTreeView, it inherited
the `list row` style which is inverted in comparison.
This resulted in the "selected" filter looking like an
unselected row and vice versa.

This patch adds a more specific version of the theme
to GimpRow when it exists in the NDE popover widget,
to prevent this confusion.
2026-02-17 12:37:18 +00:00
Bruno Lopes
8f5966398a build/windows: Add Thai isl on iso_639_custom.xml after Inno 6.7.1 2026-02-17 08:54:58 -03:00