[gimp/gimp-attributes-wip: 129/130] periodically merge with master to stay up to date



commit 79a2cfe13bbbfb54a36014197fdc8299d99504c7
Merge: 8f2ffb2 65960f1
Author: Hartmut Kuhse <hk_priv gmx de>
Date:   Sun Jun 28 07:52:21 2015 +0200

    periodically merge with master to stay up to date
    
    Conflicts:
        app/pdb/internal-procs.c
        libgimp/Makefile.am
        libgimp/gimp.h
        libgimp/gimpimage_pdb.h
        libgimpbase/gimpmetadata.c

 AUTHORS                                            |    5 +
 app/actions/context-commands.c                     |    6 +-
 app/actions/debug-commands.c                       |   54 +-
 app/actions/drawable-commands.c                    |   26 +-
 app/actions/edit-commands.c                        |    7 +-
 app/actions/filters-actions.c                      |    8 +-
 app/actions/image-actions.c                        |   38 +-
 app/actions/image-commands.c                       |   31 +
 app/actions/image-commands.h                       |   83 +-
 app/actions/layers-commands.c                      |   20 +-
 app/config/gimpcoreconfig.c                        |   18 +-
 app/config/gimpguiconfig.c                         |   14 +
 app/config/gimpguiconfig.h                         |    1 +
 app/config/gimprc-blurbs.h                         |    3 +
 app/core/Makefile.am                               |    3 +
 app/core/core-enums.c                              |   16 +-
 app/core/core-enums.h                              |   12 +-
 app/core/gimp-edit.c                               |   20 +-
 app/core/gimp-utils.c                              |   27 +-
 app/core/gimp-utils.h                              |    5 +-
 app/core/gimpbuffer.c                              |   50 +
 app/core/gimpbuffer.h                              |    9 +
 app/core/gimpdrawable-transform.c                  |   14 +-
 app/core/gimpdrawable.c                            |   14 +-
 app/core/gimpgrouplayer.c                          |    3 +
 app/core/gimpimage-convert-type.c                  |    4 +-
 app/core/gimpimage-item-list.c                     |   68 +-
 app/core/gimpimage-item-list.h                     |    4 +-
 app/core/gimpimage-merge.c                         |    1 +
 app/core/gimpimage-new.c                           |   47 +-
 app/core/gimpimage-profile.c                       |  449 +-
 app/core/gimpimage-profile.h                       |   44 +-
 app/core/gimpimage.c                               |   35 +-
 app/core/gimpitem-linked.c                         |   96 +-
 app/core/gimpitem.c                                |    7 +-
 app/core/gimpitemtree.c                            |   52 +-
 app/core/gimplayer-new.c                           |  227 +
 app/core/gimplayer-new.h                           |   52 +
 app/core/gimplayer.c                               |  122 -
 app/core/gimplayer.h                               |   21 -
 app/core/gimpselection.c                           |   11 +-
 app/core/gimpstrokeoptions.c                       |    3 +
 app/dialogs/preferences-dialog.c                   |    6 +-
 app/display/gimpdisplayshell-dnd.c                 |    1 +
 app/display/gimpdisplayshell-filter.c              |   13 +
 app/display/gimpdisplayshell-filter.h              |   11 +-
 app/display/gimpdisplayshell-handlers.c            |   19 +-
 app/display/gimpdisplayshell-profile.c             |   47 +-
 app/display/gimpdisplayshell-profile.h             |   16 +-
 app/display/gimpdisplayshell-render.c              |  197 +-
 app/display/gimpdisplayshell-title.c               |    4 +-
 app/display/gimpdisplayshell.c                     |    5 +-
 app/display/gimpdisplayshell.h                     |    1 +
 app/file/file-open.c                               |    2 +-
 app/gegl/gimp-gegl-nodes.c                         |    4 +
 app/operations/Makefile.am                         |    8 +
 app/operations/gimp-operations.c                   |    8 +
 app/operations/gimplayermodefunctions.c            |   21 +-
 app/operations/gimplayermodefunctions.h            |    3 +-
 app/operations/gimpoperationlchchromamode.c        |  204 +
 app/operations/gimpoperationlchchromamode.h        |   72 +
 app/operations/gimpoperationlchcolormode.c         |  193 +
 app/operations/gimpoperationlchcolormode.h         |   72 +
 app/operations/gimpoperationlchhuemode.c           |  204 +
 app/operations/gimpoperationlchhuemode.h           |   72 +
 app/operations/gimpoperationlchlightnessmode.c     |  187 +
 app/operations/gimpoperationlchlightnessmode.h     |   72 +
 app/paint/gimppaintcore-loops.c                    |    2 +-
 app/paint/gimppaintoptions.c                       |   56 +-
 app/pdb/Makefile.am                                |    2 +
 app/pdb/image-cmds.c                               |  476 -
 app/pdb/image-color-profile-cmds.c                 |  375 +
 app/pdb/image-transform-cmds.c                     |  522 +
 app/pdb/internal-procs.c                           |    4 +-
 app/pdb/internal-procs.h                           |  108 +-
 app/pdb/layer-cmds.c                               |   57 +-
 app/pdb/plug-in-compat-cmds.c                      |  309 +-
 app/plug-in/plug-in-menu-path.c                    |   11 +-
 app/plug-in/plug-in-params.c                       |    9 +-
 app/sanity.c                                       |    1 +
 app/tests/gimp-app-test-utils.c                    |    1 +
 app/text/gimp-fonts.c                              |    6 +
 app/tools/gimpcurvestool.c                         |  142 +-
 app/tools/gimpeditselectiontool.c                  |   29 +-
 app/tools/gimpfliptool.c                           |   15 +-
 app/tools/gimpgegltool.c                           |    1 +
 app/tools/gimpseamlessclonetool.c                  |   28 +-
 app/tools/gimptexttool-editor.c                    |  185 +-
 app/tools/gimptransformtool.c                      |   42 +-
 app/widgets/gimpcontainertreeview.c                |   18 +
 app/widgets/gimphelp-ids.h                         |    3 +
 app/widgets/gimpimageprofileview.c                 |    2 +-
 app/widgets/gimplayertreeview.c                    |    1 +
 app/widgets/gimptagentry.c                         |   20 +-
 app/widgets/gimpwidgets-constructors.c             |   12 +-
 app/xcf/xcf-load.c                                 |    1 +
 authors.xml                                        |   33 +-
 build/windows/jhbuild/glib.moduleset               |   13 +-
 build/windows/jhbuild/gtk+.moduleset               |   13 +-
 build/windows/jhbuild/misclibs.moduleset           |   18 +-
 .../jhbuild/patches/gtk-horiz-scrolling.patch      |   65 -
 .../windows/jhbuild/patches/iconv-fix-inline.patch |   12 +
 configure.ac                                       |    2 +-
 devel-docs/libgimp/libgimp-docs.sgml               |   37 +-
 devel-docs/libgimp/libgimp-sections.txt            |  122 +-
 devel-docs/libgimp/tmpl/gimpenums.sgml             |   98 -
 devel-docs/libgimpbase/libgimpbase-docs.sgml       |   32 +-
 devel-docs/libgimpbase/libgimpbase-sections.txt    |   12 +-
 devel-docs/libgimpcolor/libgimpcolor-docs.sgml     |   35 +-
 devel-docs/libgimpcolor/libgimpcolor-sections.txt  |   46 +-
 devel-docs/libgimpconfig/libgimpconfig-docs.sgml   |   27 +-
 .../libgimpconfig/libgimpconfig-sections.txt       |   11 +-
 devel-docs/libgimpmath/libgimpmath-docs.sgml       |   29 +-
 devel-docs/libgimpmodule/libgimpmodule-docs.sgml   |   30 +-
 devel-docs/libgimpthumb/libgimpthumb-docs.sgml     |   25 +-
 devel-docs/libgimpwidgets/Makefile.am              |    2 +-
 .../{gimp-browser.png => gimp-widget-browser.png}  |  Bin 6308 -> 6308 bytes
 .../{gimp-button.png => gimp-widget-button.png}    |  Bin 1973 -> 1973 bytes
 ...ain-button.png => gimp-widget-chain-button.png} |  Bin 4189 -> 4189 bytes
 ...p-color-area.png => gimp-widget-color-area.png} |  Bin 2411 -> 2411 bytes
 ...lor-button.png => gimp-widget-color-button.png} |  Bin 2728 -> 2728 bytes
 ...x-entry.png => gimp-widget-color-hex-entry.png} |  Bin 3330 -> 3330 bytes
 ...png => gimp-widget-color-profile-combo-box.png} |  Bin 3857 -> 3857 bytes
 ...color-scale.png => gimp-widget-color-scale.png} |  Bin 2395 -> 2395 bytes
 ...lection.png => gimp-widget-color-selection.png} |  Bin 36825 -> 36825 bytes
 .../{gimp-dialog.png => gimp-widget-dialog.png}    |  Bin 9839 -> 9839 bytes
 ...ombo-box.png => gimp-widget-enum-combo-box.png} |  Bin 3241 -> 3241 bytes
 ...p-enum-label.png => gimp-widget-enum-label.png} |  Bin 2536 -> 2536 bytes
 ...p-file-entry.png => gimp-widget-file-entry.png} |  Bin 4970 -> 4970 bytes
 .../{gimp-frame.png => gimp-widget-frame.png}      |  Bin 3752 -> 3752 bytes
 ...{gimp-hint-box.png => gimp-widget-hint-box.png} |  Bin 8112 -> 8112 bytes
 ...combo-box.png => gimp-widget-int-combo-box.png} |  Bin 3518 -> 3518 bytes
 ...ize-entry.png => gimp-widget-memsize-entry.png} |  Bin 5276 -> 5276 bytes
 ...entry.png => gimp-widget-number-pair-entry.png} |  Bin 2916 -> 2916 bytes
 ...offset-area.png => gimp-widget-offset-area.png} |  Bin 2742 -> 2742 bytes
 ...-selector.png => gimp-widget-page-selector.png} |  Bin 17466 -> 17466 bytes
 ...path-editor.png => gimp-widget-path-editor.png} |  Bin 15238 -> 15238 bytes
 ...pick-button.png => gimp-widget-pick-button.png} |  Bin 2692 -> 2692 bytes
 ...eview-area.png => gimp-widget-preview-area.png} |  Bin 9316 -> 9316 bytes
 ...bo-box.png => gimp-widget-string-combo-box.png} |  Bin 3708 -> 3708 bytes
 ...imp-unit-menu.png => gimp-widget-unit-menu.png} |  Bin 3028 -> 3028 bytes
 devel-docs/libgimpwidgets/libgimpwidgets-docs.sgml |   41 +-
 .../libgimpwidgets/libgimpwidgets-sections.txt     |   88 +-
 devel-docs/libgimpwidgets/libgimpwidgets.types     |    2 +
 devel-docs/libgimpwidgets/tmpl/.gitignore          |    3 +
 devel-docs/libgimpwidgets/tmpl/gimpstock.sgml      |  557 +-
 devel-docs/libgimpwidgets/visual-index.xml         |   44 +-
 devel-docs/tools/widgets.c                         |   52 +-
 docs/gimprc.5.in                                   |    8 +-
 etc/gimprc                                         |    8 +-
 icons/16/gimp-selection-grow.png                   |  Bin 275 -> 226 bytes
 icons/16/gimp-selection-shrink.png                 |  Bin 284 -> 212 bytes
 libgimp/Makefile.am                                |    9 +-
 libgimp/gimp.c                                     |   10 +-
 libgimp/gimp.def                                   |    4 +
 libgimp/gimp.h                                     |    1 +
 libgimp/gimp_pdb.c                                 |   10 +-
 libgimp/gimp_pdb_headers.h                         |    2 +
 libgimp/gimpaspectpreview.c                        |    4 +-
 libgimp/gimpbrush_pdb.c                            |   44 +-
 libgimp/gimpbrushselectbutton.c                    |   18 +-
 libgimp/gimpbuffer_pdb.c                           |   14 +-
 libgimp/gimpchannel_pdb.c                          |    2 +-
 libgimp/gimpcolor_pdb.c                            |    2 +-
 libgimp/gimpcontext_pdb.c                          |  162 +-
 libgimp/gimpdisplay_pdb.c                          |    4 +-
 libgimp/gimpdrawable.c                             |   10 +-
 libgimp/gimpdrawable_pdb.c                         |   10 +-
 libgimp/gimpdrawablecolor_pdb.c                    |   28 +-
 libgimp/gimpdrawablepreview.c                      |    8 +-
 libgimp/gimpdrawabletransform_pdb.c                |   32 +-
 libgimp/gimpdynamics_pdb.c                         |    4 +-
 libgimp/gimpedit_pdb.c                             |   18 +-
 libgimp/gimpenums.c.tail                           |    8 +-
 libgimp/gimpenums.h                                |    6 +-
 libgimp/gimpexport.c                               |    4 +-
 libgimp/gimpfileops_pdb.c                          |   10 +-
 libgimp/gimpfontselectbutton.c                     |   12 +-
 libgimp/gimpgimprc.c                               |    2 +-
 libgimp/gimpgimprc_pdb.c                           |    4 +-
 libgimp/gimpgradient_pdb.c                         |   62 +-
 libgimp/gimpgradientmenu.c                         |    2 +-
 libgimp/gimpgradientselectbutton.c                 |   12 +-
 libgimp/gimpimage.c                                |   18 +-
 libgimp/gimpimage_pdb.c                            |  314 +-
 libgimp/gimpimage_pdb.h                            |  347 +-
 libgimp/gimpimagecolorprofile.c                    |  181 +
 libgimp/gimpimagecolorprofile.h                    |   46 +
 libgimp/gimpimagecolorprofile_pdb.c                |  212 +
 libgimp/gimpimagecolorprofile_pdb.h                |   51 +
 libgimp/gimpimagecombobox.c                        |    2 +-
 libgimp/gimpimageconvert_pdb.c                     |    4 +-
 libgimp/gimpimagegrid_pdb.c                        |   20 +-
 libgimp/gimpimageselect_pdb.c                      |   14 +-
 libgimp/gimpimagetransform_pdb.c                   |  303 +
 libgimp/gimpimagetransform_pdb.h                   |   62 +
 libgimp/gimpitem_pdb.c                             |   58 +-
 libgimp/gimpitemcombobox.c                         |   32 +-
 libgimp/gimpitemtransform_pdb.c                    |   18 +-
 libgimp/gimplayer.c                                |    4 +-
 libgimp/gimplayer_pdb.c                            |   10 +-
 libgimp/gimpmetadata.c                             |    8 +-
 libgimp/gimppainttools_pdb.c                       |    4 +-
 libgimp/gimppalette_pdb.c                          |   30 +-
 libgimp/gimppalettemenu.c                          |    6 +-
 libgimp/gimppaletteselectbutton.c                  |   12 +-
 libgimp/gimppattern_pdb.c                          |    4 +-
 libgimp/gimppatternselectbutton.c                  |   12 +-
 libgimp/gimppixbuf.c                               |    6 +-
 libgimp/gimpplugin_pdb.c                           |   14 +-
 libgimp/gimpprocbrowserdialog.c                    |    4 +-
 libgimp/gimpproceduraldb_pdb.c                     |    2 +-
 libgimp/gimpprocview.c                             |    2 +-
 libgimp/gimpprogress.c                             |   10 +-
 libgimp/gimpprogress_pdb.c                         |   14 +-
 libgimp/gimpprogressbar.c                          |    2 +-
 libgimp/gimpselectbutton.c                         |    2 +-
 libgimp/gimpselectiontools_pdb.c                   |    6 +-
 libgimp/gimptextlayer_pdb.c                        |   60 +-
 libgimp/gimpui.c                                   |    8 +-
 libgimp/gimpvectors.c                              |   28 +-
 libgimp/gimpvectors_pdb.c                          |   52 +-
 libgimp/gimpzoompreview.c                          |   16 +-
 libgimpbase/gimpbasetypes.c                        |   16 +-
 libgimpbase/gimpchecks.c                           |    2 +-
 libgimpbase/gimpcpuaccel.c                         |    4 +-
 libgimpbase/gimpenv.c                              |   16 +-
 libgimpbase/gimpmemsize.c                          |    8 +-
 libgimpbase/gimpmetadata.c                         |  519 +-
 libgimpbase/gimpparam.h                            |    8 +-
 libgimpbase/gimprectangle.c                        |    4 +-
 libgimpbase/gimpunit.c                             |   14 +-
 libgimpbase/gimputils.c                            |   28 +-
 libgimpbase/gimpvaluearray.c                       |   41 +-
 libgimpbase/gimpvaluearray.h                       |    2 +-
 libgimpbase/gimpwire.h                             |   30 +-
 libgimpcolor/Makefile.am                           |    6 +-
 libgimpcolor/gimpcairo.c                           |   29 +-
 libgimpcolor/gimpcairo.h                           |    8 +-
 libgimpcolor/gimpcolor.def                         |   33 +-
 libgimpcolor/gimpcolor.h                           |    2 +-
 libgimpcolor/gimpcolormanaged.c                    |   16 +-
 libgimpcolor/{gimplcms.c => gimpcolorprofile.c}    |  221 +-
 libgimpcolor/gimpcolorprofile.h                    |   68 +
 libgimpcolor/gimphsl.c                             |    4 +-
 libgimpcolor/gimplcms.h                            |   68 -
 libgimpcolor/gimppixbuf.c                          |   49 +-
 libgimpcolor/gimppixbuf.h                          |    7 +-
 libgimpcolor/gimprgb-parse.c                       |   10 +-
 libgimpcolor/gimprgb.c                             |   26 +-
 libgimpconfig/gimpcolorconfig.c                    |   52 +-
 libgimpconfig/gimpcolorconfig.h                    |   20 +-
 libgimpconfig/gimpconfig-deserialize.c             |    4 +-
 libgimpconfig/gimpconfig-error.c                   |    2 +-
 libgimpconfig/gimpconfig-iface.c                   |   36 +-
 libgimpconfig/gimpconfig-path.c                    |   18 +-
 libgimpconfig/gimpconfig-serialize.c               |   10 +-
 libgimpconfig/gimpconfig-utils.c                   |   10 +-
 libgimpconfig/gimpconfig.def                       |    8 +-
 libgimpconfig/gimpconfigwriter.c                   |   32 +-
 libgimpconfig/gimpscanner.c                        |   32 +-
 libgimpmath/gimpmatrix.c                           |   14 +-
 libgimpmath/gimpvector.c                           |    6 +-
 libgimpmodule/gimpmodule.c                         |    2 +-
 libgimpthumb/gimpthumb-utils.c                     |   12 +-
 libgimpthumb/gimpthumbnail.c                       |   12 +-
 libgimpwidgets/gimpbrowser.c                       |    8 +-
 libgimpwidgets/gimpcairo-utils.c                   |    4 +-
 libgimpwidgets/gimpcellrenderercolor.c             |    2 +-
 libgimpwidgets/gimpcellrenderertoggle.c            |    4 +-
 libgimpwidgets/gimpchainbutton.c                   |    2 +-
 libgimpwidgets/gimpcolorarea.c                     |    8 +-
 libgimpwidgets/gimpcolorbutton.c                   |   12 +-
 libgimpwidgets/gimpcolordisplay.c                  |    8 +-
 libgimpwidgets/gimpcolordisplaystack.c             |    4 +-
 libgimpwidgets/gimpcolorhexentry.c                 |    6 +-
 libgimpwidgets/gimpcolorprofilechooserdialog.c     |    4 +-
 libgimpwidgets/gimpcolorprofilecombobox.c          |   20 +-
 libgimpwidgets/gimpcolorprofilestore.c             |   10 +-
 libgimpwidgets/gimpcolorprofileview.c              |    4 +-
 libgimpwidgets/gimpcolorscale.c                    |    2 +-
 libgimpwidgets/gimpcolorselection.c                |    2 +-
 libgimpwidgets/gimpcolorselector.c                 |    2 +-
 libgimpwidgets/gimpdialog.c                        |    8 +-
 libgimpwidgets/gimpenumcombobox.c                  |    8 +-
 libgimpwidgets/gimpenumlabel.c                     |    8 +-
 libgimpwidgets/gimpenumstore.c                     |   14 +-
 libgimpwidgets/gimpenumwidgets.c                   |   20 +-
 libgimpwidgets/gimpframe.c                         |    2 +-
 libgimpwidgets/gimphelpui.c                        |    4 +-
 libgimpwidgets/gimphelpui.h                        |    2 +-
 libgimpwidgets/gimpintcombobox.c                   |   26 +-
 libgimpwidgets/gimpintstore.c                      |    6 +-
 libgimpwidgets/gimpnumberpairentry.c               |   26 +-
 libgimpwidgets/gimpoffsetarea.c                    |    2 +-
 libgimpwidgets/gimppageselector.c                  |   42 +-
 libgimpwidgets/gimppreview.c                       |   26 +-
 libgimpwidgets/gimppreviewarea.c                   |    6 +-
 libgimpwidgets/gimpruler.c                         |   20 +-
 libgimpwidgets/gimpscaleentry.c                    |    4 +-
 libgimpwidgets/gimpscrolledpreview.c               |    8 +-
 libgimpwidgets/gimpsizeentry.c                     |    4 +-
 libgimpwidgets/gimpstock.h                         |    4 +-
 libgimpwidgets/gimpstringcombobox.c                |   12 +-
 libgimpwidgets/gimpwidgets-error.h                 |    2 +-
 libgimpwidgets/gimpwidgetsutils.c                  |   56 +-
 menus/image-menu.xml.in                            |   15 +-
 modules/color-selector-cmyk.c                      |   14 +-
 modules/display-filter-lcms.c                      |   10 +-
 modules/display-filter-proof.c                     |    8 +-
 modules/gimpcolorwheel.c                           |   12 +-
 plug-ins/common/.gitignore                         |    2 -
 plug-ins/common/Makefile.am                        |   21 +-
 plug-ins/common/gimprc.common                      |    1 -
 plug-ins/common/lcms.c                             |  630 +-
 plug-ins/common/plugin-defs.pl                     |    3 +-
 plug-ins/common/wind.c                             | 1048 -
 plug-ins/file-jpeg/jpeg-load.c                     |   20 +-
 plug-ins/file-jpeg/jpeg-save.c                     |   38 +-
 plug-ins/file-psd/Makefile.am                      |    1 +
 plug-ins/file-psd/psd-load.c                       |  881 +-
 plug-ins/file-psd/psd-save.c                       |   54 +-
 plug-ins/gradient-flare/gradient-flare.c           |    4 +-
 plug-ins/script-fu/scripts/burn-in-anim.scm        |    2 +-
 plug-ins/script-fu/scripts/circuit.scm             |   13 +-
 plug-ins/script-fu/scripts/fuzzyborder.scm         |    4 +-
 plug-ins/script-fu/scripts/old-photo.scm           |    6 +-
 po-libgimp/POTFILES.in                             |    2 +-
 po-libgimp/ca.po                                   | 1403 +-
 po-libgimp/es.po                                   | 4636 ++--
 po-libgimp/hu.po                                   |  969 +-
 po-libgimp/oc.po                                   |16977 +--------
 po-libgimp/sk.po                                   | 1182 +-
 po-plug-ins/POTFILES.in                            |    1 -
 po-plug-ins/el.po                                  |  611 +-
 po-plug-ins/es.po                                  |26790 +++++++-------
 po-plug-ins/hu.po                                  | 4072 +--
 po-plug-ins/oc.po                                  |17853 ++--------
 po-python/es.po                                    |  926 +-
 po-python/oc.po                                    |15944 +--------
 po-python/sk.po                                    |  441 +-
 po-script-fu/es.po                                 | 4599 ++--
 po-script-fu/oc.po                                 | 2737 +-
 po-script-fu/sk.po                                 | 1802 +-
 po-tips/LINGUAS                                    |    1 +
 po-tips/oc.po                                      |  327 +
 po/POTFILES.in                                     |    2 +
 po/el.po                                           | 1799 +-
 po/es.po                                           |39150 ++++++++++----------
 po/it.po                                           |  567 +-
 po/oc.po                                           |15424 +++++---
 po/sk.po                                           | 1979 +-
 tools/pdbgen/Makefile.am                           |    7 +-
 tools/pdbgen/enumcode.pl                           |    4 +-
 tools/pdbgen/enums.pl                              |   32 +-
 tools/pdbgen/groups.pl                             |    2 +
 tools/pdbgen/lib.pl                                |    2 +-
 tools/pdbgen/pdb/image.pdb                         |  247 +-
 tools/pdbgen/pdb/image_color_profile.pdb           |  218 +
 tools/pdbgen/pdb/image_transform.pdb               |  276 +
 tools/pdbgen/pdb/layer.pdb                         |   57 +-
 tools/pdbgen/pdb/plug_in_compat.pdb                |  163 +-
 362 files changed, 71806 insertions(+), 103695 deletions(-)
---
diff --cc app/core/gimpimage-merge.c
index a779966,590a4c2..032f857
--- a/app/core/gimpimage-merge.c
+++ b/app/core/gimpimage-merge.c
@@@ -40,11 -40,10 +40,12 @@@
  #include "gimpgrouplayer.h"
  #include "gimpimage.h"
  #include "gimpimage-merge.h"
 +#include "gimpimage-metadata.h"
  #include "gimpimage-undo.h"
  #include "gimpitemstack.h"
 +#include "gimpitem-metadata.h"
  #include "gimplayer-floating-sel.h"
+ #include "gimplayer-new.h"
  #include "gimplayermask.h"
  #include "gimpmarshal.h"
  #include "gimpparasitelist.h"
diff --cc app/xcf/xcf-load.c
index a09f58d,a62b37c..75640a1
--- a/app/xcf/xcf-load.c
+++ b/app/xcf/xcf-load.c
@@@ -47,8 -47,8 +47,9 @@@
  #include "core/gimpimage-sample-points.h"
  #include "core/gimpimage-undo.h"
  #include "core/gimpitemstack.h"
 +#include "core/gimpitem-metadata.h"
  #include "core/gimplayer-floating-sel.h"
+ #include "core/gimplayer-new.h"
  #include "core/gimplayermask.h"
  #include "core/gimpparasitelist.h"
  #include "core/gimpprogress.h"
diff --cc libgimp/Makefile.am
index d027b93,a4cd0fa..0c1a267
--- a/libgimp/Makefile.am
+++ b/libgimp/Makefile.am
@@@ -206,8 -210,8 +210,10 @@@ libgimp_sources = 
        gimpgradientselect.h    \
        gimpimage.c             \
        gimpimage.h             \
+       gimpimagecolorprofile.c \
+       gimpimagecolorprofile.h \
 +      gimpitem.c              \
 +      gimpitem.h              \
        gimplayer.c             \
        gimplayer.h             \
        gimppalette.c           \
@@@ -329,7 -333,7 +335,8 @@@ gimpinclude_HEADERS = 
        gimpgradients.h                 \
        gimpgradientselect.h            \
        gimpimage.h                     \
+       gimpimagecolorprofile.h         \
 +      gimpitem.h                      \
        gimplayer.h                     \
        gimppalette.h                   \
        gimppalettes.h                  \
diff --cc libgimp/gimp.def
index dd0cd03,de42af0..fd53eba
--- a/libgimp/gimp.def
+++ b/libgimp/gimp.def
@@@ -493,8 -496,8 +496,9 @@@ EXPORT
        gimp_image_set_active_channel
        gimp_image_set_active_layer
        gimp_image_set_active_vectors
 +      gimp_image_set_attributes
        gimp_image_set_cmap
+       gimp_image_set_color_profile
        gimp_image_set_colormap
        gimp_image_set_component_active
        gimp_image_set_component_visible
diff --cc libgimp/gimp.h
index eb78f6f,a681fd0..e7f83a1
--- a/libgimp/gimp.h
+++ b/libgimp/gimp.h
@@@ -44,7 -44,7 +44,8 @@@
  #include <libgimp/gimpgradients.h>
  #include <libgimp/gimpgradientselect.h>
  #include <libgimp/gimpimage.h>
+ #include <libgimp/gimpimagecolorprofile.h>
 +#include <libgimp/gimpitem.h>
  #include <libgimp/gimplayer.h>
  #include <libgimp/gimppalette.h>
  #include <libgimp/gimppalettes.h>
diff --cc libgimp/gimpimage.c
index 246aed4,9c87ec8..9e68720
--- a/libgimp/gimpimage.c
+++ b/libgimp/gimpimage.c
@@@ -101,31 -101,31 +101,31 @@@ gimp_image_get_thumbnail_data (gint32  
  }
  
  /**
 - * gimp_image_get_metadata:
 + * gimp_image_get_attributes:
   * @image_ID: The image.
   *
 - * Returns the image's metadata.
 + * Returns the image's attributes.
   *
 - * Returns exif/iptc/xmp metadata from the image.
 + * Returns attributes from the image.
   *
 - * Returns: The exif/ptc/xmp metadata, or %NULL if there is none.
 + * Returns: The attributes, or %NULL if there is none.
   *
-  * Since: GIMP 2.10
+  * Since: 2.10
   **/
 -GimpMetadata *
 -gimp_image_get_metadata (gint32 image_ID)
 +GimpAttributes *
 +gimp_image_get_attributes (gint32 image_ID)
  {
 -  GimpMetadata *metadata = NULL;
 -  gchar        *metadata_string;
 +  GimpAttributes *attributes        = NULL;
 +  gchar          *attributes_string = NULL;
  
 -  metadata_string = _gimp_image_get_metadata (image_ID);
 -  if (metadata_string)
 +  attributes_string = _gimp_image_get_attributes (image_ID);
 +  if (attributes_string)
      {
 -      metadata = gimp_metadata_deserialize (metadata_string);
 -      g_free (metadata_string);
 +      attributes = gimp_attributes_deserialize (attributes_string);
 +      g_free (attributes_string);
      }
  
 -  return metadata;
 +  return attributes;
  }
  
  /**
@@@ -140,22 -140,22 +140,22 @@@
   *
   * Returns: TRUE on success.
   *
-  * Since: GIMP 2.10
+  * Since: 2.10
   **/
  gboolean
 -gimp_image_set_metadata (gint32        image_ID,
 -                         GimpMetadata *metadata)
 +gimp_image_set_attributes (gint32          image_ID,
 +                           GimpAttributes *attributes)
  {
 -  gchar    *metadata_string = NULL;
 +  gchar    *attributes_string = NULL;
    gboolean  success;
  
 -  if (metadata)
 -    metadata_string = gimp_metadata_serialize (metadata);
 +  if (attributes)
 +    attributes_string = gimp_attributes_serialize (attributes);
  
 -  success = _gimp_image_set_metadata (image_ID, metadata_string);
 +  success = _gimp_image_set_attributes (image_ID, attributes_string);
  
 -  if (metadata_string)
 -    g_free (metadata_string);
 +  if (attributes_string)
 +    g_free (attributes_string);
  
    return success;
  }
diff --cc libgimp/gimpimage_pdb.h
index 642edb2,22f321c..8264058
--- a/libgimp/gimpimage_pdb.h
+++ b/libgimp/gimpimage_pdb.h
@@@ -32,195 -32,172 +32,172 @@@ G_BEGIN_DECL
  /* For information look into the C source or the html documentation */
  
  
- gboolean                 gimp_image_is_valid                 (gint32                  image_ID);
- gint*                    gimp_image_list                     (gint                   *num_images);
- gint32                   gimp_image_new                      (gint                    width,
-                                                               gint                    height,
-                                                               GimpImageBaseType       type);
- gint32                   gimp_image_new_with_precision       (gint                    width,
-                                                               gint                    height,
-                                                               GimpImageBaseType       type,
-                                                               GimpPrecision           precision);
- gint32                   gimp_image_duplicate                (gint32                  image_ID);
- gboolean                 gimp_image_delete                   (gint32                  image_ID);
- GimpImageBaseType        gimp_image_base_type                (gint32                  image_ID);
- GimpPrecision            gimp_image_get_precision            (gint32                  image_ID);
- gint                     gimp_image_width                    (gint32                  image_ID);
- gint                     gimp_image_height                   (gint32                  image_ID);
+ gboolean                 gimp_image_is_valid                 (gint32               image_ID);
+ gint*                    gimp_image_list                     (gint                *num_images);
+ gint32                   gimp_image_new                      (gint                 width,
+                                                               gint                 height,
+                                                               GimpImageBaseType    type);
+ gint32                   gimp_image_new_with_precision       (gint                 width,
+                                                               gint                 height,
+                                                               GimpImageBaseType    type,
+                                                               GimpPrecision        precision);
+ gint32                   gimp_image_duplicate                (gint32               image_ID);
+ gboolean                 gimp_image_delete                   (gint32               image_ID);
+ GimpImageBaseType        gimp_image_base_type                (gint32               image_ID);
+ GimpPrecision            gimp_image_get_precision            (gint32               image_ID);
+ gint                     gimp_image_width                    (gint32               image_ID);
+ gint                     gimp_image_height                   (gint32               image_ID);
  GIMP_DEPRECATED_FOR(gimp_drawable_free_shadow)
- gboolean                 gimp_image_free_shadow              (gint32                  image_ID);
- gboolean                 gimp_image_resize                   (gint32                  image_ID,
-                                                               gint                    new_width,
-                                                               gint                    new_height,
-                                                               gint                    offx,
-                                                               gint                    offy);
- gboolean                 gimp_image_resize_to_layers         (gint32                  image_ID);
- gboolean                 gimp_image_scale                    (gint32                  image_ID,
-                                                               gint                    new_width,
-                                                               gint                    new_height);
- GIMP_DEPRECATED_FOR(gimp_image_scale)
- gboolean                 gimp_image_scale_full               (gint32                  image_ID,
-                                                               gint                    new_width,
-                                                               gint                    new_height,
-                                                               GimpInterpolationType   interpolation);
- gboolean                 gimp_image_crop                     (gint32                  image_ID,
-                                                               gint                    new_width,
-                                                               gint                    new_height,
-                                                               gint                    offx,
-                                                               gint                    offy);
- gboolean                 gimp_image_flip                     (gint32                  image_ID,
-                                                               GimpOrientationType     flip_type);
- gboolean                 gimp_image_rotate                   (gint32                  image_ID,
-                                                               GimpRotationType        rotate_type);
- gint*                    gimp_image_get_layers               (gint32                  image_ID,
-                                                               gint                   *num_layers);
- gint*                    gimp_image_get_channels             (gint32                  image_ID,
-                                                               gint                   *num_channels);
- gint*                    gimp_image_get_vectors              (gint32                  image_ID,
-                                                               gint                   *num_vectors);
- gint32                   gimp_image_get_active_drawable      (gint32                  image_ID);
- gboolean                 gimp_image_unset_active_channel     (gint32                  image_ID);
- gint32                   gimp_image_get_floating_sel         (gint32                  image_ID);
- gint32                   gimp_image_floating_sel_attached_to (gint32                  image_ID);
- gboolean                 gimp_image_pick_color               (gint32                  image_ID,
-                                                               gint32                  drawable_ID,
-                                                               gdouble                 x,
-                                                               gdouble                 y,
-                                                               gboolean                sample_merged,
-                                                               gboolean                sample_average,
-                                                               gdouble                 average_radius,
-                                                               GimpRGB                *color);
- gint32                   gimp_image_pick_correlate_layer     (gint32                  image_ID,
-                                                               gint                    x,
-                                                               gint                    y);
+ gboolean                 gimp_image_free_shadow              (gint32               image_ID);
+ gint*                    gimp_image_get_layers               (gint32               image_ID,
+                                                               gint                *num_layers);
+ gint*                    gimp_image_get_channels             (gint32               image_ID,
+                                                               gint                *num_channels);
+ gint*                    gimp_image_get_vectors              (gint32               image_ID,
+                                                               gint                *num_vectors);
+ gint32                   gimp_image_get_active_drawable      (gint32               image_ID);
+ gboolean                 gimp_image_unset_active_channel     (gint32               image_ID);
+ gint32                   gimp_image_get_floating_sel         (gint32               image_ID);
+ gint32                   gimp_image_floating_sel_attached_to (gint32               image_ID);
+ gboolean                 gimp_image_pick_color               (gint32               image_ID,
+                                                               gint32               drawable_ID,
+                                                               gdouble              x,
+                                                               gdouble              y,
+                                                               gboolean             sample_merged,
+                                                               gboolean             sample_average,
+                                                               gdouble              average_radius,
+                                                               GimpRGB             *color);
+ gint32                   gimp_image_pick_correlate_layer     (gint32               image_ID,
+                                                               gint                 x,
+                                                               gint                 y);
  GIMP_DEPRECATED_FOR(gimp_image_insert_layer)
- gboolean                 gimp_image_add_layer                (gint32                  image_ID,
-                                                               gint32                  layer_ID,
-                                                               gint                    position);
- gboolean                 gimp_image_insert_layer             (gint32                  image_ID,
-                                                               gint32                  layer_ID,
-                                                               gint32                  parent_ID,
-                                                               gint                    position);
- gboolean                 gimp_image_remove_layer             (gint32                  image_ID,
-                                                               gint32                  layer_ID);
+ gboolean                 gimp_image_add_layer                (gint32               image_ID,
+                                                               gint32               layer_ID,
+                                                               gint                 position);
+ gboolean                 gimp_image_insert_layer             (gint32               image_ID,
+                                                               gint32               layer_ID,
+                                                               gint32               parent_ID,
+                                                               gint                 position);
+ gboolean                 gimp_image_remove_layer             (gint32               image_ID,
+                                                               gint32               layer_ID);
  GIMP_DEPRECATED_FOR(gimp_image_insert_channel)
- gboolean                 gimp_image_add_channel              (gint32                  image_ID,
-                                                               gint32                  channel_ID,
-                                                               gint                    position);
- gboolean                 gimp_image_insert_channel           (gint32                  image_ID,
-                                                               gint32                  channel_ID,
-                                                               gint32                  parent_ID,
-                                                               gint                    position);
- gboolean                 gimp_image_remove_channel           (gint32                  image_ID,
-                                                               gint32                  channel_ID);
+ gboolean                 gimp_image_add_channel              (gint32               image_ID,
+                                                               gint32               channel_ID,
+                                                               gint                 position);
+ gboolean                 gimp_image_insert_channel           (gint32               image_ID,
+                                                               gint32               channel_ID,
+                                                               gint32               parent_ID,
+                                                               gint                 position);
+ gboolean                 gimp_image_remove_channel           (gint32               image_ID,
+                                                               gint32               channel_ID);
  GIMP_DEPRECATED_FOR(gimp_image_insert_vectors)
- gboolean                 gimp_image_add_vectors              (gint32                  image_ID,
-                                                               gint32                  vectors_ID,
-                                                               gint                    position);
- gboolean                 gimp_image_insert_vectors           (gint32                  image_ID,
-                                                               gint32                  vectors_ID,
-                                                               gint32                  parent_ID,
-                                                               gint                    position);
- gboolean                 gimp_image_remove_vectors           (gint32                  image_ID,
-                                                               gint32                  vectors_ID);
- gint                     gimp_image_get_item_position        (gint32                  image_ID,
-                                                               gint32                  item_ID);
- gboolean                 gimp_image_raise_item               (gint32                  image_ID,
-                                                               gint32                  item_ID);
- gboolean                 gimp_image_lower_item               (gint32                  image_ID,
-                                                               gint32                  item_ID);
- gboolean                 gimp_image_raise_item_to_top        (gint32                  image_ID,
-                                                               gint32                  item_ID);
- gboolean                 gimp_image_lower_item_to_bottom     (gint32                  image_ID,
-                                                               gint32                  item_ID);
- gboolean                 gimp_image_reorder_item             (gint32                  image_ID,
-                                                               gint32                  item_ID,
-                                                               gint32                  parent_ID,
-                                                               gint                    position);
- gint32                   gimp_image_flatten                  (gint32                  image_ID);
- gint32                   gimp_image_merge_visible_layers     (gint32                  image_ID,
-                                                               GimpMergeType           merge_type);
- gint32                   gimp_image_merge_down               (gint32                  image_ID,
-                                                               gint32                  merge_layer_ID,
-                                                               GimpMergeType           merge_type);
- G_GNUC_INTERNAL guint8*  _gimp_image_get_colormap            (gint32                  image_ID,
-                                                               gint                   *num_bytes);
- G_GNUC_INTERNAL gboolean _gimp_image_set_colormap            (gint32                  image_ID,
-                                                               gint                    num_bytes,
-                                                               const guint8           *colormap);
- G_GNUC_INTERNAL gboolean _gimp_image_set_attributes          (gint32                  image_ID,
-                                                               const gchar            *attributes_string);
- G_GNUC_INTERNAL gchar*   _gimp_image_get_attributes          (gint32                  image_ID);
- gboolean                 gimp_image_clean_all                (gint32                  image_ID);
- gboolean                 gimp_image_is_dirty                 (gint32                  image_ID);
- G_GNUC_INTERNAL gboolean _gimp_image_thumbnail               (gint32                  image_ID,
-                                                               gint                    width,
-                                                               gint                    height,
-                                                               gint                   *actual_width,
-                                                               gint                   *actual_height,
-                                                               gint                   *bpp,
-                                                               gint                   *thumbnail_data_count,
-                                                               guint8                **thumbnail_data);
- gint32                   gimp_image_get_active_layer         (gint32                  image_ID);
- gboolean                 gimp_image_set_active_layer         (gint32                  image_ID,
-                                                               gint32                  active_layer_ID);
- gint32                   gimp_image_get_active_channel       (gint32                  image_ID);
- gboolean                 gimp_image_set_active_channel       (gint32                  image_ID,
-                                                               gint32                  active_channel_ID);
- gint32                   gimp_image_get_active_vectors       (gint32                  image_ID);
- gboolean                 gimp_image_set_active_vectors       (gint32                  image_ID,
-                                                               gint32                  active_vectors_ID);
- gint32                   gimp_image_get_selection            (gint32                  image_ID);
- gboolean                 gimp_image_get_component_active     (gint32                  image_ID,
-                                                               GimpChannelType         component);
- gboolean                 gimp_image_set_component_active     (gint32                  image_ID,
-                                                               GimpChannelType         component,
-                                                               gboolean                active);
- gboolean                 gimp_image_get_component_visible    (gint32                  image_ID,
-                                                               GimpChannelType         component);
- gboolean                 gimp_image_set_component_visible    (gint32                  image_ID,
-                                                               GimpChannelType         component,
-                                                               gboolean                visible);
- gchar*                   gimp_image_get_filename             (gint32                  image_ID);
- gboolean                 gimp_image_set_filename             (gint32                  image_ID,
-                                                               const gchar            *filename);
- gchar*                   gimp_image_get_uri                  (gint32                  image_ID);
- gchar*                   gimp_image_get_xcf_uri              (gint32                  image_ID);
- gchar*                   gimp_image_get_imported_uri         (gint32                  image_ID);
- gchar*                   gimp_image_get_exported_uri         (gint32                  image_ID);
- gchar*                   gimp_image_get_name                 (gint32                  image_ID);
- gboolean                 gimp_image_get_resolution           (gint32                  image_ID,
-                                                               gdouble                *xresolution,
-                                                               gdouble                *yresolution);
- gboolean                 gimp_image_set_resolution           (gint32                  image_ID,
-                                                               gdouble                 xresolution,
-                                                               gdouble                 yresolution);
- GimpUnit                 gimp_image_get_unit                 (gint32                  image_ID);
- gboolean                 gimp_image_set_unit                 (gint32                  image_ID,
-                                                               GimpUnit                unit);
- gint                     gimp_image_get_tattoo_state         (gint32                  image_ID);
- gboolean                 gimp_image_set_tattoo_state         (gint32                  image_ID,
-                                                               gint                    tattoo_state);
- gint32                   gimp_image_get_layer_by_tattoo      (gint32                  image_ID,
-                                                               gint                    tattoo);
- gint32                   gimp_image_get_channel_by_tattoo    (gint32                  image_ID,
-                                                               gint                    tattoo);
- gint32                   gimp_image_get_vectors_by_tattoo    (gint32                  image_ID,
-                                                               gint                    tattoo);
- gint32                   gimp_image_get_layer_by_name        (gint32                  image_ID,
-                                                               const gchar            *name);
- gint32                   gimp_image_get_channel_by_name      (gint32                  image_ID,
-                                                               const gchar            *name);
- gint32                   gimp_image_get_vectors_by_name      (gint32                  image_ID,
-                                                               const gchar            *name);
- gboolean                 gimp_image_attach_parasite          (gint32                  image_ID,
-                                                               const GimpParasite     *parasite);
- gboolean                 gimp_image_detach_parasite          (gint32                  image_ID,
-                                                               const gchar            *name);
- GimpParasite*            gimp_image_get_parasite             (gint32                  image_ID,
-                                                               const gchar            *name);
- gchar**                  gimp_image_get_parasite_list        (gint32                  image_ID,
-                                                               gint                   *num_parasites);
+ gboolean                 gimp_image_add_vectors              (gint32               image_ID,
+                                                               gint32               vectors_ID,
+                                                               gint                 position);
+ gboolean                 gimp_image_insert_vectors           (gint32               image_ID,
+                                                               gint32               vectors_ID,
+                                                               gint32               parent_ID,
+                                                               gint                 position);
+ gboolean                 gimp_image_remove_vectors           (gint32               image_ID,
+                                                               gint32               vectors_ID);
+ gint                     gimp_image_get_item_position        (gint32               image_ID,
+                                                               gint32               item_ID);
+ gboolean                 gimp_image_raise_item               (gint32               image_ID,
+                                                               gint32               item_ID);
+ gboolean                 gimp_image_lower_item               (gint32               image_ID,
+                                                               gint32               item_ID);
+ gboolean                 gimp_image_raise_item_to_top        (gint32               image_ID,
+                                                               gint32               item_ID);
+ gboolean                 gimp_image_lower_item_to_bottom     (gint32               image_ID,
+                                                               gint32               item_ID);
+ gboolean                 gimp_image_reorder_item             (gint32               image_ID,
+                                                               gint32               item_ID,
+                                                               gint32               parent_ID,
+                                                               gint                 position);
+ gint32                   gimp_image_flatten                  (gint32               image_ID);
+ gint32                   gimp_image_merge_visible_layers     (gint32               image_ID,
+                                                               GimpMergeType        merge_type);
+ gint32                   gimp_image_merge_down               (gint32               image_ID,
+                                                               gint32               merge_layer_ID,
+                                                               GimpMergeType        merge_type);
+ G_GNUC_INTERNAL guint8*  _gimp_image_get_colormap            (gint32               image_ID,
+                                                               gint                *num_bytes);
+ G_GNUC_INTERNAL gboolean _gimp_image_set_colormap            (gint32               image_ID,
+                                                               gint                 num_bytes,
+                                                               const guint8        *colormap);
 -G_GNUC_INTERNAL gchar*   _gimp_image_get_metadata            (gint32               image_ID);
 -G_GNUC_INTERNAL gboolean _gimp_image_set_metadata            (gint32               image_ID,
 -                                                              const gchar         *metadata_string);
++G_GNUC_INTERNAL gboolean _gimp_image_set_attributes          (gint32               image_ID,
++                                                              const gchar         *attributes_string);
++G_GNUC_INTERNAL gchar*   _gimp_image_get_attributes          (gint32               image_ID);
+ gboolean                 gimp_image_clean_all                (gint32               image_ID);
+ gboolean                 gimp_image_is_dirty                 (gint32               image_ID);
+ G_GNUC_INTERNAL gboolean _gimp_image_thumbnail               (gint32               image_ID,
+                                                               gint                 width,
+                                                               gint                 height,
+                                                               gint                *actual_width,
+                                                               gint                *actual_height,
+                                                               gint                *bpp,
+                                                               gint                *thumbnail_data_count,
+                                                               guint8             **thumbnail_data);
+ gint32                   gimp_image_get_active_layer         (gint32               image_ID);
+ gboolean                 gimp_image_set_active_layer         (gint32               image_ID,
+                                                               gint32               active_layer_ID);
+ gint32                   gimp_image_get_active_channel       (gint32               image_ID);
+ gboolean                 gimp_image_set_active_channel       (gint32               image_ID,
+                                                               gint32               active_channel_ID);
+ gint32                   gimp_image_get_active_vectors       (gint32               image_ID);
+ gboolean                 gimp_image_set_active_vectors       (gint32               image_ID,
+                                                               gint32               active_vectors_ID);
+ gint32                   gimp_image_get_selection            (gint32               image_ID);
+ gboolean                 gimp_image_get_component_active     (gint32               image_ID,
+                                                               GimpChannelType      component);
+ gboolean                 gimp_image_set_component_active     (gint32               image_ID,
+                                                               GimpChannelType      component,
+                                                               gboolean             active);
+ gboolean                 gimp_image_get_component_visible    (gint32               image_ID,
+                                                               GimpChannelType      component);
+ gboolean                 gimp_image_set_component_visible    (gint32               image_ID,
+                                                               GimpChannelType      component,
+                                                               gboolean             visible);
+ gchar*                   gimp_image_get_filename             (gint32               image_ID);
+ gboolean                 gimp_image_set_filename             (gint32               image_ID,
+                                                               const gchar         *filename);
+ gchar*                   gimp_image_get_uri                  (gint32               image_ID);
+ gchar*                   gimp_image_get_xcf_uri              (gint32               image_ID);
+ gchar*                   gimp_image_get_imported_uri         (gint32               image_ID);
+ gchar*                   gimp_image_get_exported_uri         (gint32               image_ID);
+ gchar*                   gimp_image_get_name                 (gint32               image_ID);
+ gboolean                 gimp_image_get_resolution           (gint32               image_ID,
+                                                               gdouble             *xresolution,
+                                                               gdouble             *yresolution);
+ gboolean                 gimp_image_set_resolution           (gint32               image_ID,
+                                                               gdouble              xresolution,
+                                                               gdouble              yresolution);
+ GimpUnit                 gimp_image_get_unit                 (gint32               image_ID);
+ gboolean                 gimp_image_set_unit                 (gint32               image_ID,
+                                                               GimpUnit             unit);
+ gint                     gimp_image_get_tattoo_state         (gint32               image_ID);
+ gboolean                 gimp_image_set_tattoo_state         (gint32               image_ID,
+                                                               gint                 tattoo_state);
+ gint32                   gimp_image_get_layer_by_tattoo      (gint32               image_ID,
+                                                               gint                 tattoo);
+ gint32                   gimp_image_get_channel_by_tattoo    (gint32               image_ID,
+                                                               gint                 tattoo);
+ gint32                   gimp_image_get_vectors_by_tattoo    (gint32               image_ID,
+                                                               gint                 tattoo);
+ gint32                   gimp_image_get_layer_by_name        (gint32               image_ID,
+                                                               const gchar         *name);
+ gint32                   gimp_image_get_channel_by_name      (gint32               image_ID,
+                                                               const gchar         *name);
+ gint32                   gimp_image_get_vectors_by_name      (gint32               image_ID,
+                                                               const gchar         *name);
+ gboolean                 gimp_image_attach_parasite          (gint32               image_ID,
+                                                               const GimpParasite  *parasite);
+ gboolean                 gimp_image_detach_parasite          (gint32               image_ID,
+                                                               const gchar         *name);
+ GimpParasite*            gimp_image_get_parasite             (gint32               image_ID,
+                                                               const gchar         *name);
+ gchar**                  gimp_image_get_parasite_list        (gint32               image_ID,
+                                                               gint                *num_parasites);
  
  
  G_END_DECLS
diff --cc libgimp/gimpmetadata.c
index 3e61fd1,2a49cfc..b022b1c
--- a/libgimp/gimpmetadata.c
+++ b/libgimp/gimpmetadata.c
@@@ -213,9 -195,9 +213,9 @@@ gimp_image_metadata_load_finish (gint3
   *
   * Returns: The image's metadata, prepared for saving.
   *
-  * Since: GIMP 2.10
+  * Since: 2.10
   */
 -GimpMetadata *
 +GimpAttributes *
  gimp_image_metadata_save_prepare (gint32                 image_ID,
                                    const gchar           *mime_type,
                                    GimpMetadataSaveFlags *suggested_flags)
diff --cc libgimpbase/gimpmetadata.c
index fab2842,131de6e..b05a4dc
--- a/libgimpbase/gimpmetadata.c
+++ b/libgimpbase/gimpmetadata.c
@@@ -171,6 -173,35 +171,38 @@@ gimp_metadata_new (void
    return metadata;
  }
  
++<<<<<<< HEAD
++=======
+ /**
+  * gimp_metadata_duplicate:
+  * @metadata: The object to duplicate, or %NULL.
+  *
+  * Duplicates a #GimpMetadata instance.
+  *
+  * Return value: The new #GimpMetadata, or %NULL if @metadata is %NULL.
+  *
+  * Since: 2.10
+  */
+ GimpMetadata *
+ gimp_metadata_duplicate (GimpMetadata *metadata)
+ {
+   GimpMetadata *new_metadata = NULL;
+ 
+   g_return_val_if_fail (metadata == NULL || GEXIV2_IS_METADATA (metadata), NULL);
+ 
+   if (metadata)
+     {
+       gchar *xml;
+ 
+       xml = gimp_metadata_serialize (metadata);
+       new_metadata = gimp_metadata_deserialize (xml);
+       g_free (xml);
+     }
+ 
+   return new_metadata;
+ }
+ 
++>>>>>>> remotes/origin/master
  typedef struct
  {
    gchar         name[1024];
@@@ -178,6 -209,290 +210,293 @@@
    GimpMetadata *metadata;
  } GimpMetadataParseData;
  
++<<<<<<< HEAD
++=======
+ static const gchar*
+ gimp_metadata_attribute_name_to_value (const gchar **attribute_names,
+                                        const gchar **attribute_values,
+                                        const gchar  *name)
+ {
+   while (*attribute_names)
+     {
+       if (! strcmp (*attribute_names, name))
+         {
+           return *attribute_values;
+         }
+ 
+       attribute_names++;
+       attribute_values++;
+     }
+ 
+   return NULL;
+ }
+ 
+ static void
+ gimp_metadata_deserialize_start_element (GMarkupParseContext *context,
+                                          const gchar         *element_name,
+                                          const gchar        **attribute_names,
+                                          const gchar        **attribute_values,
+                                          gpointer             user_data,
+                                          GError             **error)
+ {
+   GimpMetadataParseData *parse_data = user_data;
+ 
+   if (! strcmp (element_name, "tag"))
+     {
+       const gchar *name;
+       const gchar *encoding;
+ 
+       name = gimp_metadata_attribute_name_to_value (attribute_names,
+                                                     attribute_values,
+                                                     "name");
+       encoding = gimp_metadata_attribute_name_to_value (attribute_names,
+                                                         attribute_values,
+                                                         "encoding");
+ 
+       if (! name)
+         {
+           g_set_error (error, gimp_metadata_error_quark (), 1001,
+                        "Element 'tag' does not contain required attribute 'name'.");
+           return;
+         }
+ 
+       strncpy (parse_data->name, name, sizeof (parse_data->name));
+       parse_data->name[sizeof (parse_data->name) - 1] = 0;
+ 
+       parse_data->base64 = (encoding && ! strcmp (encoding, "base64"));
+     }
+ }
+ 
+ static void
+ gimp_metadata_deserialize_end_element (GMarkupParseContext *context,
+                                        const gchar         *element_name,
+                                        gpointer             user_data,
+                                        GError             **error)
+ {
+ }
+ 
+ static void
+ gimp_metadata_deserialize_text (GMarkupParseContext  *context,
+                                 const gchar          *text,
+                                 gsize                 text_len,
+                                 gpointer              user_data,
+                                 GError              **error)
+ {
+   GimpMetadataParseData *parse_data = user_data;
+   const gchar           *current_element;
+ 
+   current_element = g_markup_parse_context_get_element (context);
+ 
+   if (! g_strcmp0 (current_element, "tag"))
+     {
+       gchar *value = g_strndup (text, text_len);
+ 
+       if (parse_data->base64)
+         {
+           guchar *decoded;
+           gsize   len;
+ 
+           decoded = g_base64_decode (value, &len);
+ 
+           if (decoded[len - 1] == '\0')
+             gexiv2_metadata_set_tag_string (parse_data->metadata,
+                                             parse_data->name,
+                                             (const gchar *) decoded);
+ 
+           g_free (decoded);
+         }
+       else
+         {
+           gexiv2_metadata_set_tag_string (parse_data->metadata,
+                                           parse_data->name,
+                                           value);
+         }
+ 
+       g_free (value);
+     }
+ }
+ 
+ static  void
+ gimp_metadata_deserialize_error (GMarkupParseContext *context,
+                                  GError              *error,
+                                  gpointer             user_data)
+ {
+   g_printerr ("Metadata parse error: %s\n", error->message);
+ }
+ 
+ /**
+  * gimp_metadata_deserialize:
+  * @metadata_xml: A string of serialized metadata XML.
+  *
+  * Deserializes a string of XML that has been created by
+  * gimp_metadata_serialize().
+  *
+  * Return value: The new #GimpMetadata.
+  *
+  * Since: 2.10
+  */
+ GimpMetadata *
+ gimp_metadata_deserialize (const gchar *metadata_xml)
+ {
+   GimpMetadata          *metadata;
+   GMarkupParser          markup_parser;
+   GimpMetadataParseData  parse_data;
+   GMarkupParseContext   *context;
+ 
+   g_return_val_if_fail (metadata_xml != NULL, NULL);
+ 
+   metadata = gimp_metadata_new ();
+ 
+   parse_data.metadata = metadata;
+ 
+   markup_parser.start_element = gimp_metadata_deserialize_start_element;
+   markup_parser.end_element   = gimp_metadata_deserialize_end_element;
+   markup_parser.text          = gimp_metadata_deserialize_text;
+   markup_parser.passthrough   = NULL;
+   markup_parser.error         = gimp_metadata_deserialize_error;
+ 
+   context = g_markup_parse_context_new (&markup_parser, 0, &parse_data, NULL);
+ 
+   g_markup_parse_context_parse (context,
+                                 metadata_xml, strlen (metadata_xml),
+                                 NULL);
+ 
+   g_markup_parse_context_unref (context);
+ 
+   return metadata;
+ }
+ 
+ static gchar *
+ gimp_metadata_escape (const gchar *name,
+                       const gchar *value,
+                       gboolean    *base64)
+ {
+   if (! g_utf8_validate (value, -1, NULL))
+     {
+       gchar *encoded;
+ 
+       encoded = g_base64_encode ((const guchar *) value, strlen (value) + 1);
+ 
+       g_printerr ("Invalid UTF-8 in metadata value %s, encoding as base64: %s\n",
+                   name, encoded);
+ 
+       *base64 = TRUE;
+ 
+       return encoded;
+     }
+ 
+   *base64 = FALSE;
+ 
+   return g_markup_escape_text (value, -1);
+ }
+ 
+ static void
+ gimp_metadata_append_tag (GString     *string,
+                           const gchar *name,
+                           gchar       *value,
+                           gboolean     base64)
+ {
+   if (value)
+     {
+       if (base64)
+         {
+           g_string_append_printf (string, "  <tag name=\"%s\" encoding=\"base64\">%s</tag>\n",
+                                   name, value);
+         }
+       else
+         {
+           g_string_append_printf (string, "  <tag name=\"%s\">%s</tag>\n",
+                                   name, value);
+         }
+ 
+       g_free (value);
+     }
+ }
+ 
+ /**
+  * gimp_metadata_serialize:
+  * @metadata: A #GimpMetadata instance.
+  *
+  * Serializes @metadata into an XML string that can later be deserialized
+  * using gimp_metadata_deserialize().
+  *
+  * Return value: The serialized XML string.
+  *
+  * Since: 2.10
+  */
+ gchar *
+ gimp_metadata_serialize (GimpMetadata *metadata)
+ {
+   GString  *string;
+   gchar   **exif_data = NULL;
+   gchar   **iptc_data = NULL;
+   gchar   **xmp_data  = NULL;
+   gchar    *value;
+   gchar    *escaped;
+   gboolean  base64;
+   gint      i;
+ 
+   g_return_val_if_fail (GEXIV2_IS_METADATA (metadata), NULL);
+ 
+   string = g_string_new (NULL);
+ 
+   g_string_append (string, "<?xml version='1.0' encoding='UTF-8'?>\n");
+   g_string_append (string, "<metadata>\n");
+ 
+   exif_data = gexiv2_metadata_get_exif_tags (metadata);
+ 
+   if (exif_data)
+     {
+       for (i = 0; exif_data[i] != NULL; i++)
+         {
+           value = gexiv2_metadata_get_tag_string (metadata, exif_data[i]);
+           escaped = gimp_metadata_escape (exif_data[i], value, &base64);
+           g_free (value);
+ 
+           gimp_metadata_append_tag (string, exif_data[i], escaped, base64);
+         }
+ 
+       g_strfreev (exif_data);
+     }
+ 
+   xmp_data = gexiv2_metadata_get_xmp_tags (metadata);
+ 
+   if (xmp_data)
+     {
+       for (i = 0; xmp_data[i] != NULL; i++)
+         {
+           value = gexiv2_metadata_get_tag_string (metadata, xmp_data[i]);
+           escaped = gimp_metadata_escape (xmp_data[i], value, &base64);
+           g_free (value);
+ 
+           gimp_metadata_append_tag (string, xmp_data[i], escaped, base64);
+         }
+ 
+       g_strfreev (xmp_data);
+     }
+ 
+   iptc_data = gexiv2_metadata_get_iptc_tags (metadata);
+ 
+   if (iptc_data)
+     {
+       for (i = 0; iptc_data[i] != NULL; i++)
+         {
+           value = gexiv2_metadata_get_tag_string (metadata, iptc_data[i]);
+           escaped = gimp_metadata_escape (iptc_data[i], value, &base64);
+           g_free (value);
+ 
+           gimp_metadata_append_tag (string, iptc_data[i], escaped, base64);
+         }
+ 
+       g_strfreev (iptc_data);
+     }
+ 
+   g_string_append (string, "</metadata>\n");
+ 
+   return g_string_free (string, FALSE);
+ }
+ 
++>>>>>>> remotes/origin/master
  /**
   * gimp_metadata_load_from_file:
   * @file:  The #GFile to load the metadata from
@@@ -404,6 -719,191 +723,194 @@@ gimp_metadata_set_from_xmp (GimpMetadat
  }
  
  /**
++<<<<<<< HEAD
++=======
+  * gimp_metadata_set_pixel_size:
+  * @metadata: A #GimpMetadata instance.
+  * @width:    Width in pixels
+  * @height:   Height in pixels
+  *
+  * Sets Exif.Image.ImageWidth and Exif.Image.ImageLength on @metadata.
+  *
+  * Since: 2.10
+  */
+ void
+ gimp_metadata_set_pixel_size (GimpMetadata *metadata,
+                               gint          width,
+                               gint          height)
+ {
+   gchar buffer[32];
+ 
+   g_return_if_fail (GEXIV2_IS_METADATA (metadata));
+ 
+   g_snprintf (buffer, sizeof (buffer), "%d", width);
+   gexiv2_metadata_set_tag_string (metadata, "Exif.Image.ImageWidth", buffer);
+ 
+   g_snprintf (buffer, sizeof (buffer), "%d", height);
+   gexiv2_metadata_set_tag_string (metadata, "Exif.Image.ImageLength", buffer);
+ }
+ 
+ /**
+  * gimp_metadata_set_bits_per_sample:
+  * @metadata:        A #GimpMetadata instance.
+  * @bits_per_sample: Bits per pixel, per component
+  *
+  * Sets Exif.Image.BitsPerSample on @metadata.
+  *
+  * Since: 2.10
+  */
+ void
+ gimp_metadata_set_bits_per_sample (GimpMetadata *metadata,
+                                    gint          bits_per_sample)
+ {
+   gchar buffer[32];
+ 
+   g_return_if_fail (GEXIV2_IS_METADATA (metadata));
+ 
+   g_snprintf (buffer, sizeof (buffer), "%d %d %d",
+               bits_per_sample, bits_per_sample, bits_per_sample);
+   gexiv2_metadata_set_tag_string (metadata, "Exif.Image.BitsPerSample", buffer);
+ }
+ 
+ /**
+  * gimp_metadata_get_resolution:
+  * @metadata: A #GimpMetadata instance.
+  * @xres:     Return location for the X Resolution, in ppi
+  * @yres:     Return location for the Y Resolution, in ppi
+  * @unit:     Return location for the unit unit
+  *
+  * Returns values based on Exif.Image.XResolution,
+  * Exif.Image.YResolution and Exif.Image.ResolutionUnit of @metadata.
+  *
+  * Return value: %TRUE on success, %FALSE otherwise.
+  *
+  * Since: 2.10
+  */
+ gboolean
+ gimp_metadata_get_resolution (GimpMetadata *metadata,
+                               gdouble      *xres,
+                               gdouble      *yres,
+                               GimpUnit     *unit)
+ {
+   gint xnom, xdenom;
+   gint ynom, ydenom;
+ 
+   g_return_val_if_fail (GEXIV2_IS_METADATA (metadata), FALSE);
+ 
+   if (gexiv2_metadata_get_exif_tag_rational (metadata,
+                                              "Exif.Image.XResolution",
+                                              &xnom, &xdenom) &&
+       gexiv2_metadata_get_exif_tag_rational (metadata,
+                                              "Exif.Image.YResolution",
+                                              &ynom, &ydenom))
+     {
+       gchar *un;
+       gint   exif_unit = 2;
+ 
+       un = gexiv2_metadata_get_tag_string (metadata,
+                                            "Exif.Image.ResolutionUnit");
+       if (un)
+         {
+           exif_unit = atoi (un);
+           g_free (un);
+         }
+ 
+       if (xnom != 0 && xdenom != 0 &&
+           ynom != 0 && ydenom != 0)
+         {
+           gdouble xresolution = (gdouble) xnom / (gdouble) xdenom;
+           gdouble yresolution = (gdouble) ynom / (gdouble) ydenom;
+ 
+           if (exif_unit == 3)
+             {
+               xresolution *= 2.54;
+               yresolution *= 2.54;
+             }
+ 
+          if (xresolution >= GIMP_MIN_RESOLUTION &&
+              xresolution <= GIMP_MAX_RESOLUTION &&
+              yresolution >= GIMP_MIN_RESOLUTION &&
+              yresolution <= GIMP_MAX_RESOLUTION)
+            {
+              if (xres)
+                *xres = xresolution;
+ 
+              if (yres)
+                *yres = yresolution;
+ 
+              if (unit)
+                {
+                  if (exif_unit == 3)
+                    *unit = GIMP_UNIT_MM;
+                  else
+                    *unit = GIMP_UNIT_INCH;
+                }
+ 
+              return TRUE;
+            }
+         }
+     }
+ 
+   return FALSE;
+ }
+ 
+ /**
+  * gimp_metadata_set_resolution:
+  * @metadata: A #GimpMetadata instance.
+  * @xres:     The image's X Resolution, in ppi
+  * @yres:     The image's Y Resolution, in ppi
+  * @unit:     The image's unit
+  *
+  * Sets Exif.Image.XResolution, Exif.Image.YResolution and
+  * Exif.Image.ResolutionUnit @metadata.
+  *
+  * Since: 2.10
+  */
+ void
+ gimp_metadata_set_resolution (GimpMetadata *metadata,
+                               gdouble       xres,
+                               gdouble       yres,
+                               GimpUnit      unit)
+ {
+   gchar buffer[32];
+   gint  exif_unit;
+   gint  factor;
+ 
+   g_return_if_fail (GEXIV2_IS_METADATA (metadata));
+ 
+   if (gimp_unit_is_metric (unit))
+     {
+       xres /= 2.54;
+       yres /= 2.54;
+ 
+       exif_unit = 3;
+     }
+   else
+     {
+       exif_unit = 2;
+     }
+ 
+   for (factor = 1; factor <= 100 /* arbitrary */; factor++)
+     {
+       if (fabs (xres * factor - ROUND (xres * factor)) < 0.01 &&
+           fabs (yres * factor - ROUND (yres * factor)) < 0.01)
+         break;
+     }
+ 
+   gexiv2_metadata_set_exif_tag_rational (metadata,
+                                          "Exif.Image.XResolution",
+                                          ROUND (xres * factor), factor);
+ 
+   gexiv2_metadata_set_exif_tag_rational (metadata,
+                                          "Exif.Image.YResolution",
+                                          ROUND (yres * factor), factor);
+ 
+   g_snprintf (buffer, sizeof (buffer), "%d", exif_unit);
+   gexiv2_metadata_set_tag_string (metadata, "Exif.Image.ResolutionUnit", buffer);
+ }
+ 
+ /**
++>>>>>>> remotes/origin/master
   * gimp_metadata_is_tag_supported:
   * @tag:       A metadata tag name
   * @mime_type: A mime type


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]