Implement perspective cloning from a pattern. This needed quite some
refactoring, so GimpSourceCore would be able call its get_source()
vfunc also for a GimpClone subclass: essentially this commit adds a
new GimpSourceCore::use_source() vfunc that replaces the
source_options->use_source flag hack, and makes sure the graph used in
GimpPerspectiveClone's get_source() impl reads from the pattern
instead the drawable.
This version does not properly tile the pattern yet, so you can only
clone one copy of the pattern (gegl:tile is not quite doing the right
thing, so it's disabled).
Don't mark a procedure as file procedure just because a mime-type or
thumbnail loader is registered for it. Only registering as load or
save handler should set the file_proc flag. This prevents plug-ins
from doing wrong things and would also fix the behavior fixed in the
commits below.
Don't register a mime-type for the alternative file-tiff-save2
procedure, it's not supposed to be registered as file procedure, and
only usable from scripts anyway.
Don't register a second file procedure for extension-less exporting as
XMC, this approach is totally bogus. Fixes the duplicate XMC entry in
File->Export.
Don't allow to assign Modifier+Space shortcuts, there is so much code
dealing with Space in canvas event handling, we can't have it invoke
arbitrary actions at the same time.
gimp_tile_put(): make sure we don't free libgimp's tile data twice in
the non-SHM case. I could never reproduce the bug, but I'm pretty sure
this fixes it. The change in gimpprotocol.c is just cleanup.
It seems that when the undo action reverts a text -> mark-up change
(or v.v.) the notifications are inverted, first is emitted the new
value notification and successively the property becoming NULL. The
result is that gimp_text_buffer_set_{text,mark-up} is called last with
NULL, unsetting both text_buffer text and mark-up.
The right way to do it is to always prefer "markup" over "text" if
markup is present, no matter if the notification was for "markup" or
"text".
but only to the virtual function, not the public API. Implement it in
GimpSelection and GimpLayerMask, and pass the correct mask format down
to the parent class which does the actual conversion.
Add "layer_dither_type" and "mask_dither_type" to
GimpDrawable::convert_type(), pass around the dither type from the
dialog, and implement dithering using gegl:color-reduction.
Remove the privately added GimpItemComboBox class instead, it confuses
the hell out of python. Instead, use g_object_set,get_data() to manage
the newly needed members, and code duplication.
When a new toolbox is opened, don't remove all entries containing a
toolbox from the list of recently closed docks. Instead, check if
there is a toolbox already open when such an entry is chosen and tell
the user to close the existing toolbox first.