[gimp/nielsdg/gi-docgen: 12/12] docs: Migrate from gtk-doc to docgen
- From: Niels De Graef <nielsdg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/nielsdg/gi-docgen: 12/12] docs: Migrate from gtk-doc to docgen
- Date: Wed, 8 Dec 2021 08:47:17 +0000 (UTC)
commit f40e2301930dbe1ce1ce436f0fc69f3f00f266db
Author: Niels De Graef <nielsdegraef gmail com>
Date: Sun Nov 28 19:36:07 2021 +0100
docs: Migrate from gtk-doc to docgen
gtk-doc has been slowly dying for the past few years; with gi-docgen we
have a nice successor.
This also makes sure the C documentation also uses the GIR file, which
in turn means faster build times (since all the C code doesn't have to
be parsed and recompiled again), and has a clear dependency graph.
See the [gi-docgen tutorial] for more info on how the system works.
[gi-docgen tutorial]: https://gnome.pages.gitlab.gnome.org/gi-docgen/tutorial.html
.gitlab-ci.yml | 9 +-
CODING_STYLE.md | 4 +-
HACKING | 3 -
Makefile.am | 3 +-
autogen.sh | 42 -
build/flatpak/org.gimp.GIMP-nightly.json | 3 +-
configure.ac | 38 +-
data/images/meson.build | 1 +
devel-docs/Makefile.am | 33 +-
devel-docs/README.gtkdoc | 128 -
devel-docs/app/.gitignore | 20 -
devel-docs/app/Makefile.am | 128 -
devel-docs/app/app-docs.sgml | 1404 --
devel-docs/app/app-overrides.txt | 0
devel-docs/app/app-sections.txt | 13957 -------------------
devel-docs/app/app.types | 442 -
devel-docs/app/meson.build | 98 -
devel-docs/libgimp/Makefile.am | 85 -
devel-docs/libgimp/libgimp3-docs.sgml | 182 -
devel-docs/libgimp/libgimp3-include.c | 15 -
devel-docs/libgimp/libgimp3-overrides.txt | 0
devel-docs/libgimp/libgimp3-sections.txt | 1810 ---
devel-docs/libgimp/libgimp3.types | 39 -
devel-docs/libgimp/meson.build | 54 -
devel-docs/libgimpbase/.gitignore | 21 -
devel-docs/libgimpbase/Makefile.am | 65 -
devel-docs/libgimpbase/libgimpbase3-docs.sgml | 69 -
devel-docs/libgimpbase/libgimpbase3-overrides.txt | 0
devel-docs/libgimpbase/libgimpbase3-sections.txt | 552 -
devel-docs/libgimpbase/libgimpbase3.types | 17 -
devel-docs/libgimpbase/meson.build | 39 -
devel-docs/libgimpcolor/.gitignore | 20 -
devel-docs/libgimpcolor/Makefile.am | 58 -
devel-docs/libgimpcolor/libgimpcolor3-docs.sgml | 67 -
.../libgimpcolor/libgimpcolor3-overrides.txt | 0
devel-docs/libgimpcolor/libgimpcolor3-sections.txt | 212 -
devel-docs/libgimpcolor/libgimpcolor3.types | 3 -
devel-docs/libgimpcolor/meson.build | 21 -
devel-docs/libgimpconfig/.gitignore | 20 -
devel-docs/libgimpconfig/Makefile.am | 64 -
devel-docs/libgimpconfig/libgimpconfig3-docs.sgml | 69 -
.../libgimpconfig/libgimpconfig3-overrides.txt | 0
.../libgimpconfig/libgimpconfig3-sections.txt | 206 -
devel-docs/libgimpconfig/libgimpconfig3.types | 7 -
devel-docs/libgimpconfig/meson.build | 30 -
devel-docs/libgimpmath/.gitignore | 19 -
devel-docs/libgimpmath/Makefile.am | 50 -
devel-docs/libgimpmath/libgimpmath3-docs.sgml | 47 -
devel-docs/libgimpmath/libgimpmath3-overrides.txt | 0
devel-docs/libgimpmath/libgimpmath3-sections.txt | 119 -
devel-docs/libgimpmath/libgimpmath3.types | 0
devel-docs/libgimpmath/meson.build | 14 -
devel-docs/libgimpmodule/.gitignore | 20 -
devel-docs/libgimpmodule/Makefile.am | 59 -
devel-docs/libgimpmodule/libgimpmodule3-docs.sgml | 38 -
.../libgimpmodule/libgimpmodule3-overrides.txt | 0
.../libgimpmodule/libgimpmodule3-sections.txt | 57 -
devel-docs/libgimpmodule/libgimpmodule3.types | 6 -
devel-docs/libgimpmodule/meson.build | 23 -
devel-docs/libgimpthumb/.gitignore | 20 -
devel-docs/libgimpthumb/Makefile.am | 59 -
devel-docs/libgimpthumb/libgimpthumb3-docs.sgml | 40 -
.../libgimpthumb/libgimpthumb3-overrides.txt | 0
devel-docs/libgimpthumb/libgimpthumb3-sections.txt | 67 -
devel-docs/libgimpthumb/libgimpthumb3.types | 4 -
devel-docs/libgimpthumb/meson.build | 28 -
devel-docs/libgimpwidgets/.gitignore | 19 -
devel-docs/libgimpwidgets/Makefile.am | 89 -
.../libgimpwidgets/libgimpwidgets3-docs.sgml | 151 -
.../libgimpwidgets/libgimpwidgets3-overrides.txt | 0
.../libgimpwidgets/libgimpwidgets3-sections.txt | 1557 ---
devel-docs/libgimpwidgets/libgimpwidgets3.types | 52 -
devel-docs/libgimpwidgets/meson.build | 81 -
devel-docs/libgimpwidgets/tmpl/.gitignore | 58 -
devel-docs/libgimpwidgets/tmpl/gimpstock.sgml | 1553 ---
devel-docs/libgimpwidgets/visual-index.xml | 100 -
devel-docs/meson.build | 16 +-
devel-docs/{libgimp => reference}/.gitignore | 0
devel-docs/reference/Makefile.am | 7 +
devel-docs/reference/gimp-ui/Makefile.am | 26 +
devel-docs/reference/gimp-ui/gimp-ui-3.0.toml.in | 108 +
.../gimp-ui/images/browser.png} | Bin
.../gimp-ui/images/busy-box.png} | Bin
.../gimp-ui/images/button.png} | Bin
.../gimp-ui/images/chain-button.png} | Bin
.../gimp-ui/images/color-area.png} | Bin
.../gimp-ui/images/color-button.png} | Bin
.../gimp-ui/images/color-hex-entry.png} | Bin
.../gimp-ui/images/color-notebook.png} | Bin
.../gimp-ui/images/color-profile-combo-box.png} | Bin
.../gimp-ui/images/color-profile-view.png} | Bin
.../gimp-ui/images/color-scale.png} | Bin
.../gimp-ui/images/color-scales.png} | Bin
.../gimp-ui/images/color-select.png} | Bin
.../gimp-ui/images/color-selection.png} | Bin
.../gimp-ui/images/dialog.png} | Bin
.../gimp-ui/images/enum-combo-box.png} | Bin
.../gimp-ui/images/enum-label.png} | Bin
.../gimp-ui/images/file-entry.png} | Bin
.../gimp-ui/images/frame.png} | Bin
.../gimp-ui/images/hint-box.png} | Bin
.../gimp-ui/images/int-combo-box.png} | Bin
.../gimp-ui/images/memsize-entry.png} | Bin
.../gimp-ui/images/number-pair-entry.png} | Bin
.../gimp-ui/images/offset-area.png} | Bin
.../gimp-ui/images/page-selector.png} | Bin
.../gimp-ui/images/path-editor.png} | Bin
.../gimp-ui/images/pick-button.png} | Bin
.../gimp-ui/images/preview-area.png} | Bin
.../gimp-ui/images/ruler.png} | Bin
.../gimp-ui/images/string-combo-box.png} | Bin
.../gimp-ui/images/unit-combo-box.png} | Bin
devel-docs/reference/gimp-ui/meson.build | 37 +
devel-docs/reference/gimp-ui/widget-gallery.md | 36 +
devel-docs/reference/gimp/Makefile.am | 24 +
devel-docs/reference/gimp/gimp-3.0.toml.in | 74 +
devel-docs/reference/gimp/meson.build | 35 +
devel-docs/reference/meson.build | 4 +
devel-docs/tools/.gitignore | 6 -
devel-docs/tools/Makefile.am | 55 -
devel-docs/tools/README.shooter | 13 -
devel-docs/tools/meson.build | 28 -
devel-docs/tools/shadow.c | 149 -
devel-docs/tools/shadow.h | 8 -
devel-docs/tools/shooter.c | 178 -
devel-docs/tools/units.c | 102 -
devel-docs/tools/units.h | 8 -
devel-docs/tools/widgets.c | 873 --
devel-docs/tools/widgets.h | 25 -
libgimp/gimpplugin.c | 156 +-
libgimp/gimpplugin.h | 81 +-
meson_options.txt | 3 +-
132 files changed, 497 insertions(+), 25923 deletions(-)
---
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index dd3bebf977..1f578d72eb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -70,7 +70,8 @@ build-image:
- echo "FROM debian:testing" > Dockerfile
- echo "RUN apt-get update" >> Dockerfile
- echo "RUN apt-get install -y --no-install-recommends \\" >> Dockerfile
- - echo "at-spi2-core build-essential desktop-file-utils ffmpeg ghostscript git glib-networking
gobject-introspection graphviz graphviz-dev gtk-doc-tools hicolor-icon-theme intltool iso-codes
libappstream-glib-dev libbz2-dev libdbus-glib-1-dev libexif-dev libgexiv2-dev libgirepository1.0-dev
libgtk-3-bin libgtk-3-dev libgudev-1.0-dev libjson-glib-dev liblcms2-dev liblzma-dev libmng-dev
libmypaint-dev libopenexr-dev libpoppler-glib-dev libraw-dev libraw20 librsvg2-dev libspiro-dev
libsuitesparse-dev libtiff-dev libtiff5-dev libtool libumfpack5 libwebp-dev libwmf-dev libxmu-dev libxpm-dev
luajit meson mypaint-brushes poppler-data python3 valac xauth xvfb" >> Dockerfile
+ - echo "at-spi2-core build-essential desktop-file-utils ffmpeg ghostscript git glib-networking
gobject-introspection graphviz graphviz-dev hicolor-icon-theme intltool iso-codes libappstream-glib-dev
libbz2-dev libdbus-glib-1-dev libexif-dev libgexiv2-dev libgirepository1.0-dev libgtk-3-bin libgtk-3-dev
libgudev-1.0-dev libjson-glib-dev liblcms2-dev liblzma-dev libmng-dev libmypaint-dev libopenexr-dev
libpoppler-glib-dev libraw-dev libraw20 librsvg2-dev libspiro-dev libsuitesparse-dev libtiff-dev libtiff5-dev
libtool libumfpack5 libwebp-dev libwmf-dev libxmu-dev libxpm-dev luajit meson mypaint-brushes poppler-data
python3 python3-pip valac xauth xsltproc xvfb" >> Dockerfile
+ - echo "RUN pip3 install gi-docgen jinja2 Markdown markupsafe pygments toml typogrify" >> Dockerfile
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination
$CI_REGISTRY_IMAGE:build-debian-latest --cache=true --cache-ttl=120h
@@ -210,7 +211,7 @@ gimp-distcheck-debian:
- ../autogen.sh
--prefix="${INSTALL_PREFIX}"
--enable-debug
- --enable-gtk-doc
+ --enable-gi-docgen
--enable-windows-installer
- make -j "$(nproc)"
- make -j "$(nproc)" check
@@ -487,7 +488,7 @@ gimp-win64:
- export PATH="`pwd`/.local/bin:$PATH"
- mkdir _build && cd _build
- echo 'crossroad meson ..
- -Dgtk-doc=false && ninja && ninja install &&
+ -Dgi-docgen=false && ninja && ninja install &&
cp -fr $CROSSROAD_PREFIX/ ../gimp-prefix/
' |
crossroad w64 gimp --run="-"
@@ -552,7 +553,7 @@ gimp-win32:
- export PATH="`pwd`/.local/bin:$PATH"
- mkdir _build && cd _build
- echo 'crossroad meson ..
- -Dwmf=disabled -Dmng=disabled -Dgtk-doc=false && ninja && ninja install &&
+ -Dwmf=disabled -Dmng=disabled -Dgi_docgen=false && ninja && ninja install &&
cp -fr $CROSSROAD_PREFIX/ ../gimp-prefix/
' |
crossroad w32 gimp --run="-"
diff --git a/CODING_STYLE.md b/CODING_STYLE.md
index ec265be00f..7094e9cb86 100644
--- a/CODING_STYLE.md
+++ b/CODING_STYLE.md
@@ -645,8 +645,8 @@ which often revamp their design, breaking URLs, etc.).
#### Public API Documentation
All public APIs (i.e. any function exported in a header inside
-`libgimp*/` folders) **MUST** have proper gtk-doc comments. For
-functions, these should be placed in the source file directly above.
+`libgimp*/` folders) **MUST** have proper GObject-introspection (GIR) comments.
+For functions, these should be placed in the source file directly above.
These annotations are also relevant for [GObject
Introspection](https://gi.readthedocs.io/en/latest/annotations/giannotations.html)
diff --git a/HACKING b/HACKING
index 004cd2ac61..fb17479186 100644
--- a/HACKING
+++ b/HACKING
@@ -20,9 +20,6 @@ Beta software can be found at alpha.gnu.org.
* pkg-config 0.16.0 (or preferably a newer version)
- https://www.freedesktop.org/software/pkgconfig/
- * gtkdocize
- - https://ftp.gnome.org/pub/GNOME/sources/gtk-doc/
-
* xsltproc
- ftp://ftp.gnome.org/pub/GNOME/sources/libxslt/1.1/
diff --git a/Makefile.am b/Makefile.am
index 3d22f29089..d50c57fe9a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -87,10 +87,9 @@ EXTRA_DIST = \
config.h.win32 \
gimp-zip.in \
git-version.h \
- gtk-doc.make
-AM_DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --with-python=force --with-javascript=force --with-lua=force
+AM_DISTCHECK_CONFIGURE_FLAGS = --enable-gi-docgen --with-python=force --with-javascript=force
--with-lua=force
check-defs:
diff --git a/autogen.sh b/autogen.sh
index eb66aefb59..a7d21d1c9f 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -110,35 +110,6 @@ if test x$LIBTOOLIZE != x; then
check_version $VER $LIBTOOL_REQUIRED_VERSION
fi
-# check if gtk-doc is explicitly disabled
-for ag_option in $AUTOGEN_CONFIGURE_ARGS $@
-do
- case $ag_option in
- -disable-gtk-doc | --disable-gtk-doc)
- enable_gtk_doc=no
- ;;
- esac
-done
-
-if test x$enable_gtk_doc = xno; then
- echo "skipping test for gtkdocize"
-else
- printf "checking for gtkdocize ... "
- if (gtkdocize --version) < /dev/null > /dev/null 2>&1; then
- echo "yes"
- else
- echo
- echo " You must have gtk-doc installed to compile $PROJECT."
- echo " Install the appropriate package for your distribution,"
- echo " or get the source tarball at"
- echo " https://ftp.gnome.org/pub/GNOME/sources/gtk-doc/"
- echo " You can also use the option --disable-gtk-doc to skip"
- echo " this test but then you will not be able to generate a"
- echo " configure script that can build the API documentation."
- DIE=1
- fi
-fi
-
printf "checking for autoconf >= $AUTOCONF_REQUIRED_VERSION ... "
if ($AUTOCONF --version) < /dev/null > /dev/null 2>&1; then
VER=`$AUTOCONF --version | head -n 1 \
@@ -279,19 +250,6 @@ fi
$LIBTOOLIZE --force || exit $?
-if test x$enable_gtk_doc = xno; then
- if test -f gtk-doc.make; then :; else
- echo "EXTRA_DIST = missing-gtk-doc" > gtk-doc.make
- echo "CLEANFILES = " >> gtk-doc.make
- fi
- echo "WARNING: You have disabled gtk-doc."
- echo " As a result, you will not be able to generate the API"
- echo " documentation and 'make dist' will not work."
- echo
-else
- gtkdocize || exit $?
-fi
-
# optionally feature autoheader
($AUTOHEADER --version) < /dev/null > /dev/null 2>&1 && $AUTOHEADER || exit 1
diff --git a/build/flatpak/org.gimp.GIMP-nightly.json b/build/flatpak/org.gimp.GIMP-nightly.json
index 5025134aaa..ad290b52d8 100644
--- a/build/flatpak/org.gimp.GIMP-nightly.json
+++ b/build/flatpak/org.gimp.GIMP-nightly.json
@@ -36,7 +36,6 @@
"/share/aclocal",
"/man",
"/share/man",
- "/share/gtk-doc",
"/share/vala",
"*.la",
"*.a"
@@ -802,7 +801,7 @@
{
"name": "gimp",
"config-opts": [
- "-Dgtk-doc=false",
+ "-Dgi-docgen=false",
"-Dicc-directory=/run/host/usr/share/color/icc/",
"-Dbuild-id=org.gimp.GIMP.flatpak.nightly",
"-Dcheck-update=no"
diff --git a/configure.ac b/configure.ac
index b05ed166cd..6396dc7c2e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2738,22 +2738,20 @@ if test "x$platform_osx" = "xno" &&
AC_MSG_RESULT([$with_icc_directory])
fi
-######################################
-# Checks for gtk-doc and docbook-tools
-######################################
+########################################
+# Check for gi-docgen
+########################################
-# Check for GTK_DOC_CHECK availability. The GTK_DOC_CHECK invocation
-# must be on its own line, gtkdocize relies on it
-m4_ifdef([GTK_DOC_CHECK], [
-GTK_DOC_CHECK([1.0])
-])
+AC_ARG_ENABLE(gi-docgen, [ --enable-gi-docgen build gi-docgen documentation (default=yes)], ,
enable_gi_docgen=yes)
-# NOTE: We need to use a separate automake conditional for this
-# to make this work with the tarballs.
-AM_CONDITIONAL(ENABLE_GTK_DOC, test "x$enable_gtk_doc" = xyes)
+if test "x$enable_gi_docgen" = xyes; then
+ AC_PATH_PROG(GI_DOCGEN, gi-docgen, no)
+ if test "x$GI_DOCGEN" = xno; then
+ add_deps_error([gi-docgen], [Could not find gi-docgen in your PATH.])
+ fi
+fi
-AC_ARG_ENABLE(gtk-doc-app, [ --enable-gtk-doc-app build developer documentation for app (default=no)], ,
enable_gtk_doc_app=no)
-AM_CONDITIONAL(ENABLE_GTK_DOC_APP, test "x$enable_gtk_doc_app" = xyes)
+AM_CONDITIONAL(ENABLE_GI_DOCGEN, test "x$enable_gi_docgen" = xyes)
########################################
# Checks for gir-doc-tool and yelp-build
@@ -3099,19 +3097,11 @@ plug-ins/twain/Makefile
plug-ins/common/Makefile
modules/Makefile
devel-docs/Makefile
-devel-docs/version
-devel-docs/app/Makefile
devel-docs/g-ir-docs/Makefile
-devel-docs/libgimp/Makefile
-devel-docs/libgimpbase/Makefile
-devel-docs/libgimpconfig/Makefile
-devel-docs/libgimpcolor/Makefile
-devel-docs/libgimpmath/Makefile
-devel-docs/libgimpmodule/Makefile
-devel-docs/libgimpthumb/Makefile
-devel-docs/libgimpwidgets/Makefile
+devel-docs/reference/Makefile
+devel-docs/reference/gimp-ui/Makefile
+devel-docs/reference/gimp/Makefile
devel-docs/performance-logs/Makefile
-devel-docs/tools/Makefile
docs/Makefile
menus/Makefile
cursors/Makefile
diff --git a/data/images/meson.build b/data/images/meson.build
index 7ecce25387..a570661cf8 100644
--- a/data/images/meson.build
+++ b/data/images/meson.build
@@ -1,3 +1,4 @@
+gimp_logo_dir = meson.current_source_dir()
images = [
'gimp-splash.png',
diff --git a/devel-docs/Makefile.am b/devel-docs/Makefile.am
index 8062d27456..bd6d32501e 100644
--- a/devel-docs/Makefile.am
+++ b/devel-docs/Makefile.am
@@ -1,27 +1,13 @@
## Process this file with automake to produce Makefile.in
-if ENABLE_GTK_DOC_APP
-app = app
-endif
-
SUBDIRS = \
g-ir-docs \
- tools \
- libgimpbase \
- libgimpcolor \
- libgimpconfig \
- libgimpmath \
- libgimpmodule \
- libgimpthumb \
- libgimpwidgets \
- libgimp \
- $(app) \
+ reference \
\
performance-logs
EXTRA_DIST = \
README \
- README.gtkdoc \
contexts.txt \
debug-plug-ins.txt \
exif-handling.txt \
@@ -43,20 +29,3 @@ EXTRA_DIST = \
vbr.txt \
xcf.txt \
version.in
-
-
-# require gtk-doc when making dist
-#
-if ENABLE_GTK_DOC
-dist-check-gtk-doc:
-if ENABLE_GTK_DOC_APP
- @echo "*** gtk-doc-app must be disabled in order to make dist"
- @false
-endif
-else
-dist-check-gtk-doc:
- @echo "*** gtk-doc must be enabled in order to make dist"
- @false
-endif
-
-dist-hook: dist-check-gtk-doc
diff --git a/devel-docs/meson.build b/devel-docs/meson.build
index 48919e76c6..4f65f92edb 100644
--- a/devel-docs/meson.build
+++ b/devel-docs/meson.build
@@ -17,20 +17,8 @@ mkdb_args_common = [
]
-if get_option('gtk-doc')
- if get_option('gtk-doc-app')
- subdir('app')
- endif
-
- subdir('libgimp')
- subdir('libgimpbase')
- subdir('libgimpcolor')
- subdir('libgimpconfig')
- subdir('libgimpmath')
- subdir('libgimpmodule')
- subdir('libgimpthumb')
- subdir('libgimpwidgets')
- subdir('tools')
+if get_option('gi-docgen')
+ subdir('reference')
endif
if get_option('g-ir-doc')
diff --git a/devel-docs/libgimp/.gitignore b/devel-docs/reference/.gitignore
similarity index 100%
rename from devel-docs/libgimp/.gitignore
rename to devel-docs/reference/.gitignore
diff --git a/devel-docs/reference/Makefile.am b/devel-docs/reference/Makefile.am
new file mode 100644
index 0000000000..15a26c3e7a
--- /dev/null
+++ b/devel-docs/reference/Makefile.am
@@ -0,0 +1,7 @@
+## Process this file with automake to produce Makefile.in
+
+if ENABLE_GI_DOCGEN
+
+SUBDIRS = gimp gimp-ui
+
+endif
diff --git a/devel-docs/reference/gimp-ui/Makefile.am b/devel-docs/reference/gimp-ui/Makefile.am
new file mode 100644
index 0000000000..fe3a058bcc
--- /dev/null
+++ b/devel-docs/reference/gimp-ui/Makefile.am
@@ -0,0 +1,26 @@
+## Process this file with automake to produce Makefile.in
+
+GIMP_DOC_LOGO = $(abs_top_srcdir)/data/images/gimp-logo.ong
+
+gimp-ui-3.0.toml: gimp-ui-3.0.toml.in
+ $(AM_V_GEN) sed \
+ -e 's/@GIMP_VERSION[@]/$(GIMP_VERSION)/' \
+ -e 's/@GIMP_LOGO[@]/$(GIMP_DOC_LOGO)/' \
+ $< $@
+
+# Markdown content files
+content_files = \
+ widget-gallery.md \
+ $(NULL)
+
+GimpUi-reference: $(top_builddir)/libgimp/GimpUi-@GIMP_API_VERSION@.gir
$(top_builddir)/libgimp/Gimp-@GIMP_API_VERSION@.gir $(content_files) gimp-ui-3.0.toml
+ $(GI_DOCGEN) \
+ generate \
+ --quiet \
+ --fatal-warnings \
+ --config=gimp-ui-3.0.toml \
+ --output-dir=$(abs_builddir)/Gimp-3.0 \
+ --no-namespace-dir \
+ --content-dir=$(abs_srcdir) \
+ --add-include-path=$(top_abs_builddir)/gimp \
+ $<
diff --git a/devel-docs/reference/gimp-ui/gimp-ui-3.0.toml.in
b/devel-docs/reference/gimp-ui/gimp-ui-3.0.toml.in
new file mode 100644
index 0000000000..69a315bacd
--- /dev/null
+++ b/devel-docs/reference/gimp-ui/gimp-ui-3.0.toml.in
@@ -0,0 +1,108 @@
+[library]
+namespace = "GimpUi"
+version = "@GIMP_VERSION@"
+browse_url = "https://gitlab.gnome.org/GNOME/gimp/"
+repository_url = "https://gitlab.gnome.org/GNOME/gimp.git"
+website_url = "https://www.gimp.org"
+authors = "GIMP contributors"
+logo_url = "@GIMP_LOGO@"
+license = "GPL-3.0-or-later"
+description = "GIMP UI library"
+dependencies = [
+ 'Babl-0.1',
+ 'GLib-2.0',
+ 'GObject-2.0',
+ 'GdkPixbuf-2.0',
+ 'Gegl-0.4',
+ 'Gio-2.0',
+ 'Gtk-3.0',
+ 'cairo-1.0',
+]
+devhelp = true
+search_index = true
+
+ [dependencies."Babl-0.1"]
+ name = "Babl"
+ description = "Pixel encoding and color space conversion engine"
+ docs_url = "https://gegl.org/babl"
+
+ [dependencies."GLib-2.0"]
+ name = "GLib"
+ description = "C Utility Library"
+ docs_url = "https://developer.gnome.org/glib/stable"
+
+ [dependencies."GObject-2.0"]
+ name = "GObject"
+ description = "The base type system library"
+ docs_url = "https://developer.gnome.org/gobject/stable"
+
+ [dependencies."GdkPixbuf-2.0"]
+ name = "GdkPixbuf"
+ description = "Image loading and scaling"
+ docs_url = "https://docs.gtk.org/gdk-pixbuf/"
+
+ [dependencies."Gegl-0.4"]
+ name = "Gegl"
+ description = "Generic Graphics Library"
+ docs_url = "https://gegl.org/"
+
+ [dependencies."Gio-2.0"]
+ name = "Gio"
+ description = "GObject interfaces and objects"
+ docs_url = "https://developer.gnome.org/gio/stable"
+
+ [dependencies."Gtk-3.0"]
+ name = "GTK"
+ description = "The GTK toolkit"
+ docs_url = "https://developer.gnome.org/gtk3/stable"
+
+ [dependencies."cairo-1.0"]
+ name = "Cairo"
+ description = "A 2D graphics library with support for multiple output devices"
+ docs_url = "https://www.cairographics.org/manual/"
+
+[theme]
+name = "basic"
+show_index_summary = true
+show_class_hierarchy = true
+
+[source-location]
+base_url = "https://gitlab.gnome.org/GNOME/gimp/-/blob/master/"
+
+[extra]
+content_files = [
+ 'widget-gallery.md',
+]
+content_images = [
+ 'images/browser.png',
+ 'images/busy-box.png',
+ 'images/button.png',
+ 'images/chain-button.png',
+ 'images/color-area.png',
+ 'images/color-button.png',
+ 'images/color-hex-entry.png',
+ 'images/color-notebook.png',
+ 'images/color-profile-combo-box.png',
+ 'images/color-profile-view.png',
+ 'images/color-scale.png',
+ 'images/color-scales.png',
+ 'images/color-select.png',
+ 'images/color-selection.png',
+ 'images/dialog.png',
+ 'images/enum-combo-box.png',
+ 'images/enum-label.png',
+ 'images/file-entry.png',
+ 'images/frame.png',
+ 'images/hint-box.png',
+ 'images/int-combo-box.png',
+ 'images/memsize-entry.png',
+ 'images/number-pair-entry.png',
+ 'images/offset-area.png',
+ 'images/page-selector.png',
+ 'images/path-editor.png',
+ 'images/pick-button.png',
+ 'images/preview-area.png',
+ 'images/ruler.png',
+ 'images/string-combo-box.png',
+ 'images/unit-combo-box.png',
+]
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-browser.png
b/devel-docs/reference/gimp-ui/images/browser.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-browser.png
rename to devel-docs/reference/gimp-ui/images/browser.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-busy-box.png
b/devel-docs/reference/gimp-ui/images/busy-box.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-busy-box.png
rename to devel-docs/reference/gimp-ui/images/busy-box.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-button.png
b/devel-docs/reference/gimp-ui/images/button.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-button.png
rename to devel-docs/reference/gimp-ui/images/button.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-chain-button.png
b/devel-docs/reference/gimp-ui/images/chain-button.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-chain-button.png
rename to devel-docs/reference/gimp-ui/images/chain-button.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-color-area.png
b/devel-docs/reference/gimp-ui/images/color-area.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-color-area.png
rename to devel-docs/reference/gimp-ui/images/color-area.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-color-button.png
b/devel-docs/reference/gimp-ui/images/color-button.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-color-button.png
rename to devel-docs/reference/gimp-ui/images/color-button.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-color-hex-entry.png
b/devel-docs/reference/gimp-ui/images/color-hex-entry.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-color-hex-entry.png
rename to devel-docs/reference/gimp-ui/images/color-hex-entry.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-color-notebook.png
b/devel-docs/reference/gimp-ui/images/color-notebook.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-color-notebook.png
rename to devel-docs/reference/gimp-ui/images/color-notebook.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-color-profile-combo-box.png
b/devel-docs/reference/gimp-ui/images/color-profile-combo-box.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-color-profile-combo-box.png
rename to devel-docs/reference/gimp-ui/images/color-profile-combo-box.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-color-profile-view.png
b/devel-docs/reference/gimp-ui/images/color-profile-view.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-color-profile-view.png
rename to devel-docs/reference/gimp-ui/images/color-profile-view.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-color-scale.png
b/devel-docs/reference/gimp-ui/images/color-scale.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-color-scale.png
rename to devel-docs/reference/gimp-ui/images/color-scale.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-color-scales.png
b/devel-docs/reference/gimp-ui/images/color-scales.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-color-scales.png
rename to devel-docs/reference/gimp-ui/images/color-scales.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-color-select.png
b/devel-docs/reference/gimp-ui/images/color-select.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-color-select.png
rename to devel-docs/reference/gimp-ui/images/color-select.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-color-selection.png
b/devel-docs/reference/gimp-ui/images/color-selection.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-color-selection.png
rename to devel-docs/reference/gimp-ui/images/color-selection.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-dialog.png
b/devel-docs/reference/gimp-ui/images/dialog.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-dialog.png
rename to devel-docs/reference/gimp-ui/images/dialog.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-enum-combo-box.png
b/devel-docs/reference/gimp-ui/images/enum-combo-box.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-enum-combo-box.png
rename to devel-docs/reference/gimp-ui/images/enum-combo-box.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-enum-label.png
b/devel-docs/reference/gimp-ui/images/enum-label.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-enum-label.png
rename to devel-docs/reference/gimp-ui/images/enum-label.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-file-entry.png
b/devel-docs/reference/gimp-ui/images/file-entry.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-file-entry.png
rename to devel-docs/reference/gimp-ui/images/file-entry.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-frame.png
b/devel-docs/reference/gimp-ui/images/frame.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-frame.png
rename to devel-docs/reference/gimp-ui/images/frame.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-hint-box.png
b/devel-docs/reference/gimp-ui/images/hint-box.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-hint-box.png
rename to devel-docs/reference/gimp-ui/images/hint-box.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-int-combo-box.png
b/devel-docs/reference/gimp-ui/images/int-combo-box.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-int-combo-box.png
rename to devel-docs/reference/gimp-ui/images/int-combo-box.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-memsize-entry.png
b/devel-docs/reference/gimp-ui/images/memsize-entry.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-memsize-entry.png
rename to devel-docs/reference/gimp-ui/images/memsize-entry.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-number-pair-entry.png
b/devel-docs/reference/gimp-ui/images/number-pair-entry.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-number-pair-entry.png
rename to devel-docs/reference/gimp-ui/images/number-pair-entry.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-offset-area.png
b/devel-docs/reference/gimp-ui/images/offset-area.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-offset-area.png
rename to devel-docs/reference/gimp-ui/images/offset-area.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-page-selector.png
b/devel-docs/reference/gimp-ui/images/page-selector.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-page-selector.png
rename to devel-docs/reference/gimp-ui/images/page-selector.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-path-editor.png
b/devel-docs/reference/gimp-ui/images/path-editor.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-path-editor.png
rename to devel-docs/reference/gimp-ui/images/path-editor.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-pick-button.png
b/devel-docs/reference/gimp-ui/images/pick-button.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-pick-button.png
rename to devel-docs/reference/gimp-ui/images/pick-button.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-preview-area.png
b/devel-docs/reference/gimp-ui/images/preview-area.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-preview-area.png
rename to devel-docs/reference/gimp-ui/images/preview-area.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-ruler.png
b/devel-docs/reference/gimp-ui/images/ruler.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-ruler.png
rename to devel-docs/reference/gimp-ui/images/ruler.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-string-combo-box.png
b/devel-docs/reference/gimp-ui/images/string-combo-box.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-string-combo-box.png
rename to devel-docs/reference/gimp-ui/images/string-combo-box.png
diff --git a/devel-docs/libgimpwidgets/images/gimp-widget-unit-combo-box.png
b/devel-docs/reference/gimp-ui/images/unit-combo-box.png
similarity index 100%
rename from devel-docs/libgimpwidgets/images/gimp-widget-unit-combo-box.png
rename to devel-docs/reference/gimp-ui/images/unit-combo-box.png
diff --git a/devel-docs/reference/gimp-ui/meson.build b/devel-docs/reference/gimp-ui/meson.build
new file mode 100644
index 0000000000..aafc456bbc
--- /dev/null
+++ b/devel-docs/reference/gimp-ui/meson.build
@@ -0,0 +1,37 @@
+# Extra markdown files
+gimp_ui_doc_content_files = [
+ 'widget-gallery.md',
+]
+
+gimp_ui_doc_toml = configure_file(
+ input: 'gimp-ui-3.0.toml.in',
+ output: '@BASENAME@',
+ configuration: {
+ 'GIMP_VERSION': gimp_version,
+ 'GIMP_LOGO': gimp_logo_dir / 'gimp-logo.png',
+ },
+)
+
+gimp_ui_docs = custom_target('gimp-ui-docs',
+ input: libgimpui_gir[0],
+ output: 'GimpUi-@0@'.format(gimp_api_version),
+ command: [
+ gi_docgen,
+ 'generate',
+ '--quiet',
+ '--fatal-warnings',
+ '--config', gimp_ui_doc_toml,
+ '--output-dir=@OUTPUT@',
+ '--no-namespace-dir',
+ '--content-dir=@0@'.format(meson.current_source_dir()),
+ '--add-include-path=@0@'.format(meson.build_root() / 'gimp'),
+ '@INPUT@',
+ ],
+ depend_files: [
+ gimp_ui_doc_toml,
+ gimp_ui_doc_content_files,
+ ],
+ build_by_default: true,
+ install: true,
+ install_dir: get_option('datadir') / 'doc',
+)
diff --git a/devel-docs/reference/gimp-ui/widget-gallery.md b/devel-docs/reference/gimp-ui/widget-gallery.md
new file mode 100644
index 0000000000..b436f2c07a
--- /dev/null
+++ b/devel-docs/reference/gimp-ui/widget-gallery.md
@@ -0,0 +1,36 @@
+Title: Widget gallery
+
+Widget gallery
+==============
+
+[![Browser](browser.png)](class.Browser.html)
+[![Button](button.png)](class.Button.html)
+[![BusyBox](busy-box.png)](class.BusyBox.html)
+[![ChainButton](chain-button.png)](class.ChainButton.html)
+[![ColorArea](color-area.png)](class.ColorArea.html)
+[![ColorButton](color-button.png)](class.ColorButton.html)
+[![ColorHexEntry](color-hex-entry.png)](class.ColorHexEntry.html)
+[![ColorNotebook](color-notebook.png)](class.ColorNotebook.html)
+[![ColorScale](color-scale.png)](class.ColorScale.html)
+[![ColorScales](color-scales.png)](class.ColorScales.html)
+[![ColorSelect](color-select.png)](class.ColorSelect.html)
+[![ColorSelection](color-selection.png)](class.ColorSelection.html)
+[![ColorProfileComboBox](color-profile-combo-box.png)](class.ColorProfileComboBox.html)
+[![ColorProfileView](color-profile-view.png)](class.ColorProfileView.html)
+[![Dialog](dialog.png)](class.Dialog.html)
+[![EnumComboBox](enum-combo-box.png)](class.EnumComboBox.html)
+[![EnumLabel](enum-label.png)](class.EnumLabel.html)
+[![FileEntry](file-entry.png)](class.FileEntry.html)
+[![Frame](frame.png)](class.Frame.html)
+[![HintBox](hint-box.png)](class.HintBox.html)
+[![IntComboBox](int-combo-box.png)](class.IntComboBox.html)
+[![MemsizeEntry](memsize-entry.png)](class.MemsizeEntry.html)
+[![NumberPairEntry](number-pair-entry.png)](class.NumberPairEntry.html)
+[![OffsetArea](offset-area.png)](class.OffsetArea.html)
+[![PageSelector](page-selector.png)](class.PageSelector.html)
+[![PathEditor](path-editor.png)](class.PathEditor.html)
+[![PickButton](pick-button.png)](class.PickButton.html)
+[![PreviewArea](preview-area.png)](class.PreviewArea.html)
+[![Ruler](ruler.png)](class.Ruler.html)
+[![StringComboBox](string-combo-box.png)](class.StringComboBox.html)
+[![UnitComboBox](unit-combo-box.png)](class.UnitComboBox.html)
diff --git a/devel-docs/reference/gimp/Makefile.am b/devel-docs/reference/gimp/Makefile.am
new file mode 100644
index 0000000000..c5bade5445
--- /dev/null
+++ b/devel-docs/reference/gimp/Makefile.am
@@ -0,0 +1,24 @@
+## Process this file with automake to produce Makefile.in
+
+GIMP_DOC_LOGO = $(abs_top_srcdir)/data/images/gimp-logo.ong
+
+gimp-3.0.toml: gimp-3.0.toml.in
+ $(AM_V_GEN) sed \
+ -e 's/@GIMP_VERSION[@]/$(GIMP_VERSION)/' \
+ -e 's/@GIMP_LOGO[@]/$(GIMP_DOC_LOGO)/' \
+ $< $@
+
+# Markdown content files
+content_files = \
+ $(NULL)
+
+Gimp-reference: $(top_builddir)/libgimp/Gimp-@GIMP_API_VERSION@.gir $(content_files) gimp-3.0.toml
+ $(GI_DOCGEN) \
+ generate \
+ --quiet \
+ --fatal-warnings \
+ --config=gimp-3.0.toml \
+ --output-dir=$(abs_builddir)/Gimp-3.0 \
+ --no-namespace-dir \
+ --content-dir=$(abs_srcdir) \
+ $<
diff --git a/devel-docs/reference/gimp/gimp-3.0.toml.in b/devel-docs/reference/gimp/gimp-3.0.toml.in
new file mode 100644
index 0000000000..f25364c830
--- /dev/null
+++ b/devel-docs/reference/gimp/gimp-3.0.toml.in
@@ -0,0 +1,74 @@
+[library]
+namespace = "Gimp"
+version = "@GIMP_VERSION@"
+browse_url = "https://gitlab.gnome.org/GNOME/gimp/"
+repository_url = "https://gitlab.gnome.org/GNOME/gimp.git"
+website_url = "https://www.gimp.org"
+authors = "GIMP contributors"
+logo_url = "@GIMP_LOGO_PATH@"
+license = "GPL-3.0-or-later"
+description = "GIMP library"
+dependencies = [
+ 'Babl-0.1',
+ 'GLib-2.0',
+ 'GObject-2.0',
+ 'GdkPixbuf-2.0',
+ 'Gegl-0.4',
+ 'Gio-2.0',
+ 'Gtk-3.0',
+ 'cairo-1.0',
+]
+devhelp = true
+search_index = true
+
+ [dependencies."Babl-0.1"]
+ name = "Babl"
+ description = "Pixel encoding and color space conversion engine"
+ docs_url = "https://gegl.org/babl"
+
+ [dependencies."GLib-2.0"]
+ name = "GLib"
+ description = "C Utility Library"
+ docs_url = "https://developer.gnome.org/glib/stable"
+
+ [dependencies."GObject-2.0"]
+ name = "GObject"
+ description = "The base type system library"
+ docs_url = "https://developer.gnome.org/gobject/stable"
+
+ [dependencies."GdkPixbuf-2.0"]
+ name = "GdkPixbuf"
+ description = "Image loading and scaling"
+ docs_url = "https://docs.gtk.org/gdk-pixbuf/"
+
+ [dependencies."Gegl-0.4"]
+ name = "Gegl"
+ description = "Generic Graphics Library"
+ docs_url = "https://gegl.org/"
+
+ [dependencies."Gio-2.0"]
+ name = "Gio"
+ description = "GObject interfaces and objects"
+ docs_url = "https://developer.gnome.org/gio/stable"
+
+ [dependencies."Gtk-3.0"]
+ name = "GTK"
+ description = "The GTK toolkit"
+ docs_url = "https://developer.gnome.org/gtk3/stable"
+
+ [dependencies."cairo-1.0"]
+ name = "Cairo"
+ description = "A 2D graphics library with support for multiple output devices"
+ docs_url = "https://www.cairographics.org/manual/"
+
+[theme]
+name = "basic"
+show_index_summary = true
+show_class_hierarchy = true
+
+[source-location]
+base_url = "https://gitlab.gnome.org/GNOME/gimp/-/blob/master/"
+
+[extra]
+content_files = [
+]
diff --git a/devel-docs/reference/gimp/meson.build b/devel-docs/reference/gimp/meson.build
new file mode 100644
index 0000000000..aa0af4ac48
--- /dev/null
+++ b/devel-docs/reference/gimp/meson.build
@@ -0,0 +1,35 @@
+# Extra markdown files
+gimp_doc_content_files = [
+]
+
+gimp_doc_toml = configure_file(
+ input: 'gimp-3.0.toml.in',
+ output: '@BASENAME@',
+ configuration: {
+ 'GIMP_VERSION': gimp_version,
+ 'GIMP_LOGO': gimp_logo_dir / 'gimp-logo.png',
+ },
+)
+
+gimp_docs = custom_target('gimp-docs',
+ input: libgimp_gir[0],
+ output: 'Gimp-@0@'.format(gimp_api_version),
+ command: [
+ gi_docgen,
+ 'generate',
+ '--quiet',
+ '--fatal-warnings',
+ '--config', gimp_doc_toml,
+ '--output-dir=@OUTPUT@',
+ '--no-namespace-dir',
+ '--content-dir=@0@'.format(meson.current_source_dir()),
+ '@INPUT@',
+ ],
+ depend_files: [
+ gimp_doc_toml,
+ gimp_doc_content_files,
+ ],
+ build_by_default: true,
+ install: true,
+ install_dir: get_option('datadir') / 'doc',
+)
diff --git a/devel-docs/reference/meson.build b/devel-docs/reference/meson.build
new file mode 100644
index 0000000000..e885a51a21
--- /dev/null
+++ b/devel-docs/reference/meson.build
@@ -0,0 +1,4 @@
+gi_docgen = find_program('gi-docgen')
+
+subdir('gimp')
+subdir('gimp-ui')
diff --git a/libgimp/gimpplugin.c b/libgimp/gimpplugin.c
index 86fd4975f4..f3ce17f1bc 100644
--- a/libgimp/gimpplugin.c
+++ b/libgimp/gimpplugin.c
@@ -38,70 +38,62 @@
/**
- * SECTION: gimpplugin
- * @title: GimpPlugIn
- * @short_description: The base class for plug-ins to derive from
+ * GimpPlugIn:
*
- * The base class for plug-ins to derive from. #GimpPlugIn manages the
- * plug-in's #GimpProcedure objects. The procedures a plug-in
- * implements are registered with GIMP by returning a #GList of their
- * names from either #GimpPlugInClass.query_procedures() or
- * #GimpPlugInClass.init_procedures().
+ * The base class for plug-ins to derive from.
*
- * Every GIMP plug-in has to implement a #GimpPlugIn subclass and make
- * it known to the libgimp infrastructure and the main GIMP
- * application by passing its #GType to GIMP_MAIN().
+ * GimpPlugIn manages the plug-in's [class@Procedure] objects. The procedures a
+ * plug-in implements are registered with GIMP by returning a list of their
+ * names from either [vfunc@GimpPlugIn.query_procedures] or
+ * [vfunc@GimpPlugIn.init_procedures].
*
- * GIMP_MAIN() passes the 'argc' and 'argv' of the platform's main()
- * function, along with the #GType, to gimp_main(), which creates an
- * instance of the plug-in's #GimpPlugIn subclass and calls its
- * virtual functions, depending on how the plug-in was called by GIMP.
+ * Every GIMP plug-in has to be implemented as a subclass and make it known to
+ * the libgimp infrastructure and the main GIMP application by passing its
+ * `GType` to [func@MAIN].
*
- * There are three different ways GIMP calls a plug-in, "query",
- * "init" and "run".
+ * [func@MAIN] passes the 'argc' and 'argv' of the platform's main() function,
+ * along with the `GType`, to [func@main], which creates an instance of the
+ * plug-in's `GimpPlugIn` subclass and calls its virtual functions, depending
+ * on how the plug-in was called by GIMP.
*
- * The plug-in is called in "query" mode once after it was installed,
- * or when the cached plug-in information in the config file
- * "pluginrc" needs to be recreated. In "query" mode,
- * #GimpPlugInClass.query_procedures() is called and returns a #GList
- * of procedure names the plug-in implements. This is the "normal"
- * place to register procedures, because the existence of most
- * procedures doesn't depend on things that change between GIMP
- * sessions.
+ * There are 3 different ways GIMP calls a plug-in: "query", "init" and "run".
+ *
+ * The plug-in is called in "query" mode once after it was installed, or when
+ * the cached plug-in information in the config file "pluginrc" needs to be
+ * recreated. In "query" mode, [vfunc@GimpPlugIn.query_procedures] is called
+ * and returns a list of procedure names the plug-in implements. This is the
+ * "normal" place to register procedures, because the existence of most
+ * procedures doesn't depend on things that change between GIMP sessions.
*
* The plug-in is called in "init" mode at each GIMP startup, and
- * #GimpPlugInClass.init_procedures() is called and returns a #GList
- * of procedure names this plug-in implements. This only happens if
- * the plug-in actually implements
- * #GimpPlugInClass.init_procedures(). A plug-in only needs to
- * implement #GimpPlugInClass.init_procedures() if the existence of
- * its procedures can change between GIMP sessions, for example if
- * they depend on the presence of external tools, or hardware like
- * scanners, or online services, or whatever variable circumstances.
+ * [vfunc@PlugIn.init_procedures] is called and returns a list of procedure
+ * names this plug-in implements. This only happens if the plug-in actually
+ * implements [vfunc@GimpPlugIn.init_procedures]. A plug-in only needs to
+ * implement init_procedures if the existence of its procedures can change
+ * between GIMP sessions, for example if they depend on the presence of
+ * external tools, or hardware like scanners, or online services, or whatever
+ * variable circumstances.
*
- * In order to register the plug-in's procedures with the main GIMP
- * application in the plug-in's "query" and "init" modes, #GimpPlugIn
- * calls #GimpPlugInClass.create_procedure() on all procedure names in
- * the exact order of the #GList returned by
- * #GimpPlugInClass.query_procedures() or
- * #GimpPlugInClass.init_procedures() and then registers the returned
- * #GimpProcedure using #GimpProcedureClass.register().
+ * In order to register the plug-in's procedures with the main GIMP application
+ * in the plug-in's "query" and "init" modes, [class@PlugIn] calls
+ * [vfunc@PlugIn.create_procedure] on all procedure names in the exact order of
+ * the list returned by [vfunc@PlugIn.query_procedures] or
+ * [vfunc@PlugIn.init_procedures] and then registers the returned
+ * [class@Procedure].
*
- * The plug-in is called in "run" mode whenever one of the procedures
- * it implements is called by either the main GIMP application or any
- * other plug-in. In "run" mode, one of the procedure names returned
- * by #GimpPlugInClass.query_procedures() or
- * #GimpPlugInClass.init_procedures() is passed to
- * #GimpPlugInClass.create_procedure() which must return a
- * #GimpProcedure for the passed name. The procedure is then executed
- * by calling gimp_procedure_run().
+ * The plug-in is called in "run" mode whenever one of the procedures it
+ * implements is called by either the main GIMP application or any other
+ * plug-in. In "run" mode, one of the procedure names returned by
+ * [vfunc@PlugIn.query_procedures] or [vfunc@PlugIn.init_procedures] is passed
+ * to [vfunc@PlugIn.create_procedure] which must return a [class@Procedure] for
+ * the passed name. The procedure is then executed by calling
+ * [method Procedure run].
*
- * In any of the three modes, #GimpPlugInClass.quit() is called before
- * the plug-in process exits, so the plug-in can perform whatever
- * cleanup necessary.
+ * In any of the three modes, [vfunc PlugIn quit] is called before the plug-in
+ * process exits, so the plug-in can perform whatever cleanup necessary.
*
* Since: 3.0
- **/
+ */
#define WRITE_BUFFER_SIZE 1024
@@ -230,6 +222,11 @@ gimp_plug_in_class_init (GimpPlugInClass *klass)
object_class->set_property = gimp_plug_in_set_property;
object_class->get_property = gimp_plug_in_get_property;
+ /**
+ * GimpPlugIn:read-channel:
+ *
+ * The [struct@GLib.IOChannel] to read from GIMP
+ */
props[PROP_READ_CHANNEL] =
g_param_spec_boxed ("read-channel",
"Read channel",
@@ -238,6 +235,11 @@ gimp_plug_in_class_init (GimpPlugInClass *klass)
GIMP_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY);
+ /**
+ * GimpPlugIn:write-channel:
+ *
+ * The [struct@GLib.IOChannel] to write to GIMP
+ */
props[PROP_WRITE_CHANNEL] =
g_param_spec_boxed ("write-channel",
"Write channel",
@@ -378,7 +380,7 @@ gimp_plug_in_get_property (GObject *object,
* gimp_plug_in_set_translation_domain:
* @plug_in: A #GimpPlugIn.
* @domain_name: The name of the textdomain (must be unique).
- * @domain_path: (nullable): A #GFile pointing to the compiled message catalog
+ * @domain_path: (nullable): A file pointing to the compiled message catalog
* (may be %NULL).
*
* Sets a textdomain for localisation for the @plug_in.
@@ -392,7 +394,7 @@ gimp_plug_in_get_property (GObject *object,
* location.
*
* This function can only be called in the
- * #GimpPlugInClass.query_procedures() function of a plug-in.
+ * [vfunc@PlugIn.query_procedures] function of a plug-in.
*
* Since: 3.0
**/
@@ -420,13 +422,13 @@ gimp_plug_in_set_translation_domain (GimpPlugIn *plug_in,
* Set a help domain and path for the @plug_in.
*
* This function registers user documentation for the calling plug-in
- * with the GIMP help system. The domain_uri parameter points to the
+ * with the GIMP help system. The @domain_uri parameter points to the
* root directory where the plug-in help is installed. For each
* supported language there should be a file called 'gimp-help.xml'
* that maps the help IDs to the actual help files.
*
* This function can only be called in the
- * #GimpPlugInClass.query_procedures() function of a plug-in.
+ * [vfunc@PlugIn.query_procedures] function of a plug-in.
*
* Since: 3.0
**/
@@ -492,19 +494,19 @@ gimp_plug_in_add_menu_branch (GimpPlugIn *plug_in,
*
* This function adds a temporary procedure to @plug_in. It is usually
* called from a %GIMP_PDB_PROC_TYPE_EXTENSION procedure's
- * #GimpProcedureClass.run().
+ * [vfunc Procedure run].
*
* A temporary procedure is a procedure which is only available while
* one of your plug-in's "real" procedures is running.
*
- * The procedure's type <emphasis>must</emphasis> be
+ * The procedure's type _must_ be
* %GIMP_PDB_PROC_TYPE_TEMPORARY or the function will fail.
*
* NOTE: Normally, plug-in communication is triggered by the plug-in
* and the GIMP core only responds to the plug-in's requests. You must
* explicitly enable receiving of temporary procedure run requests
- * using either gimp_plug_in_extension_enable() or
- * gimp_plug_in_extension_process(). See this functions' documentation
+ * using either [method@PlugIn.extension_enable] or
+ * [method@PlugIn.extension_process]. See their respective documentation
* for details.
*
* Since: 3.0
@@ -528,7 +530,7 @@ gimp_plug_in_add_temp_procedure (GimpPlugIn *plug_in,
/**
* gimp_plug_in_remove_temp_procedure:
* @plug_in: A #GimpPlugIn
- * @procedure_name: The name of a #GimpProcedure added to @plug_in.
+ * @procedure_name: The name of a [class@Procedure] added to @plug_in.
*
* This function removes a temporary procedure from @plug_in by the
* procedure's @procedure_name.
@@ -559,10 +561,10 @@ gimp_plug_in_remove_temp_procedure (GimpPlugIn *plug_in,
/**
* gimp_plug_in_get_temp_procedures:
- * @plug_in: A #GimpPlugIn
+ * @plug_in: A plug-in
*
* This function retrieves the list of temporary procedure of @plug_in as
- * added with gimp_plug_in_add_temp_procedure().
+ * added with [method@PlugIn.add_temp_procedure].
*
* Returns: (transfer none) (element-type GimpProcedure): The list of
* procedures.
@@ -580,7 +582,7 @@ gimp_plug_in_get_temp_procedures (GimpPlugIn *plug_in)
/**
* gimp_plug_in_get_temp_procedure:
* @plug_in: A #GimpPlugIn
- * @procedure_name: The name of a #GimpProcedure added to @plug_in.
+ * @procedure_name: The name of a [class@Procedure] added to @plug_in.
*
* This function retrieves a temporary procedure from @plug_in by the
* procedure's @procedure_name.
@@ -611,7 +613,7 @@ gimp_plug_in_get_temp_procedure (GimpPlugIn *plug_in,
/**
* gimp_plug_in_extension_enable:
- * @plug_in: A #GimpPlugIn
+ * @plug_in: A plug-in
*
* Enables asynchronous processing of messages from the main GIMP
* application.
@@ -622,18 +624,18 @@ gimp_plug_in_get_temp_procedure (GimpPlugIn *plug_in,
* plug-in are just answers to requests the plug-in made.
*
* If the plug-in however registered temporary procedures using
- * gimp_plug_in_add_temp_procedure(), it needs to be able to receive
+ * [method@PlugIn.add_temp_procedure], it needs to be able to receive
* requests to execute them. Usually this will be done by running
- * gimp_plug_in_extension_process() in an endless loop.
+ * [method@PlugIn.extension_process] in an endless loop.
*
- * If the plug-in cannot use gimp_plug_in_extension_process(), i.e. if
- * it has a GUI and is hanging around in a #GMainLoop, it must call
- * gimp_plug_in_extension_enable().
+ * If the plug-in cannot use [method@PlugIn.extension_process], i.e. if
+ * it has a GUI and is hanging around in a [class@GLib.MainLoop], it must call
+ * [method@PlugIn.extension_enable].
*
* Note that the plug-in does not need to be a
- * #GIMP_PDB_PROC_TYPE_EXTENSION to register temporary procedures.
+ * [const@PDBProcType.EXTENSION] to register temporary procedures.
*
- * See also: gimp_plug_in_add_temp_procedure().
+ * See also: [method@PlugIn.add_temp_procedure].
*
* Since: 3.0
**/
@@ -653,7 +655,7 @@ gimp_plug_in_extension_enable (GimpPlugIn *plug_in)
/**
* gimp_plug_in_extension_process:
- * @plug_in: A #GimpPlugIn.
+ * @plug_in: A plug-in.
* @timeout: The timeout (in ms) to use for the select() call.
*
* Processes one message sent by GIMP and returns.
@@ -662,10 +664,10 @@ gimp_plug_in_extension_enable (GimpPlugIn *plug_in)
* gimp_procedure_extension_ready() to process requests for running
* temporary procedures.
*
- * See gimp_plug_in_extension_enable() for an asynchronous way of
+ * See [method@PlugIn.extension_enable] for an asynchronous way of
* doing the same if running an endless loop is not an option.
*
- * See also: gimp_plug_in_add_temp_procedure().
+ * See also: [method@PlugIn.add_temp_procedure].
*
* Since: 3.0
**/
@@ -736,7 +738,7 @@ gimp_plug_in_extension_process (GimpPlugIn *plug_in,
/**
* gimp_plug_in_set_pdb_error_handler:
- * @plug_in: A #GimpPlugIn
+ * @plug_in: A plug-in
* @handler: Who is responsible for handling procedure call errors.
*
* Sets an error handler for procedure calls.
@@ -763,7 +765,7 @@ gimp_plug_in_set_pdb_error_handler (GimpPlugIn *plug_in,
/**
* gimp_plug_in_get_pdb_error_handler:
- * @plug_in: A #GimpPlugIn
+ * @plug_in: A plug-in
*
* Retrieves the active error handler for procedure calls.
*
diff --git a/libgimp/gimpplugin.h b/libgimp/gimpplugin.h
index 9cc9c521a0..14f20a8849 100644
--- a/libgimp/gimpplugin.h
+++ b/libgimp/gimpplugin.h
@@ -53,41 +53,10 @@ struct _GimpPlugIn
/**
* GimpPlugInClass:
- * @query_procedures: This method can be overridden by all plug-ins to
- * return a newly allocated #GList of allocated strings naming the
- * procedures registered by this plug-in. See documentation of
- * #GimpPlugInClass.init_procedures() for differences.
- * @init_procedures: This method can be overridden by all plug-ins to
- * return a newly allocated #GList of allocated strings naming
- * procedures registered by this plug-in.
- * It is different from #GimpPlugInClass.query_procedures() in that
- * init happens at every startup, whereas query happens only once in
- * the life of a plug-in (right after installation or update). Hence
- * #GimpPlugInClass.init_procedures() typically returns procedures
- * dependent to runtime conditions (such as the presence of a
- * third-party tool), whereas #GimpPlugInClass.query_procedures()
- * would usually return procedures that are always available
- * unconditionally.
- * Most of the time, you only want to override
- * #GimpPlugInClass.query_procedures() and leave
- * #GimpPlugInClass.init_procedures() untouched.
- * @create_procedure: This method must be overridden by all plug-ins
- * and return a newly allocated #GimpProcedure named @name. It will
- * be called for every @name as returned by
- * #GimpPlugInClass.query_procedures() and
- * #GimpPlugInClass.init_procedures() so care must be taken to
- * handle them all.
- * Upon procedure registration, #GimpPlugInClass.create_procedure()
- * will be called in the order of the lists returned by
- * #GimpPlugInClass.query_procedures() and
- * #GimpPlugInClass.init_procedures()
- * @quit: This method can be overridden by a plug-in which needs to
- * perform some actions upon quitting.
*
* A class which every plug-in should subclass, while overriding
- * #GimpPlugInClass.query_procedures() and/or
- * #GimpPlugInClass.init_procedures(), as well as
- * #GimpPlugInClass.create_procedure().
+ * [vfunc@PlugIn.query_procedures] and/or [vfunc@PlugIn.init_procedures], as
+ * well as [vfunc@PlugIn.create_procedure].
*
* Since: 3.0
**/
@@ -99,17 +68,33 @@ struct _GimpPlugInClass
* GimpPlugInClass::query_procedures:
* @plug_in: a #GimpPlugIn.
*
- * Returns: (element-type gchar*) (transfer full):
- * the names of the procedures registered by @plug_in.
- **/
+ * This method can be overridden by all plug-ins to return a newly allocated
+ * list of allocated strings naming the procedures registered by this
+ * plug-in. See documentation of [vfunc@PlugIn.init_procedures] for
+ * differences.
+ *
+ * Returns: (element-type gchar*) (transfer full): the names of the procedures registered by @plug_in.
+ */
GList * (* query_procedures) (GimpPlugIn *plug_in);
/**
* GimpPlugInClass::init_procedures:
* @plug_in: a #GimpPlugIn.
*
- * Returns: (element-type gchar*) (transfer full):
- * the names of the procedures registered by @plug_in.
+ * This method can be overridden by all plug-ins to return a newly allocated
+ * list of allocated strings naming procedures registered by this plug-in.
+ * It is different from [vfunc@PlugIn.query_procedures] in that init happens
+ * at every startup, whereas query happens only once in the life of a plug-in
+ * (right after installation or update). Hence [vfunc@PlugIn.init_procedures]
+ * typically returns procedures dependent to runtime conditions (such as the
+ * presence of a third-party tool), whereas [vfunc@PlugIn.query_procedures]
+ * would usually return procedures that are always available unconditionally.
+ *
+ * Most of the time, you only want to override
+ * [vfunc@PlugIn.query_procedures] and leave [vfunc@PlugIn.init_procedures]
+ * untouched.
+ *
+ * Returns: (element-type gchar*) (transfer full): the names of the procedures registered by @plug_in.
**/
GList * (* init_procedures) (GimpPlugIn *plug_in);
@@ -118,16 +103,28 @@ struct _GimpPlugInClass
* @plug_in: a #GimpPlugIn.
* @procedure_name: procedure name.
*
- * Returns: (transfer full):
- * the procedure to be registered or executed by @plug_in.
- **/
+ * This method must be overridden by all plug-ins and return a newly
+ * allocated #GimpProcedure named @name.
+ *
+ * This method will be called for every @name as returned by
+ * [vfunc@PlugIn.query_procedures] and [vfunc@PlugIn.init_procedures] so care
+ * must be taken to handle them all. Upon procedure registration,
+ * [vfunc@PlugIn.create_procedure] will be called in the order of the lists
+ * returned by [vfunc@PlugIn.query_procedures] and
+ * [vfunc@PlugIn.init_procedures]
+ *
+ * Returns: (transfer full): the procedure to be registered or executed by @plug_in.
+ */
GimpProcedure * (* create_procedure) (GimpPlugIn *plug_in,
const gchar *procedure_name);
/**
* GimpPlugInClass::quit:
* @plug_in: a #GimpPlugIn.
- **/
+ *
+ * This method can be overridden by a plug-in which needs to perform some
+ * actions upon quitting.
+ */
void (* quit) (GimpPlugIn *plug_in);
/* Padding for future expansion */
diff --git a/meson_options.txt b/meson_options.txt
index 6bb1c69afc..0f77c71850 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -52,8 +52,7 @@ option('xcursor', type: 'feature', value: 'auto', description: 'Xcurso
option('xpm', type: 'feature', value: 'auto', description: 'XPM support')
option('headless-tests', type: 'feature', value: 'auto', description: 'Use xvfb-run/dbus-run-session for
UI-dependent automatic tests')
-option('gtk-doc', type: 'boolean', value: true, description: 'Build developer documentation')
-option('gtk-doc-app', type: 'boolean', value: false, description: 'Build developer documentation for
app')
+option('gi-docgen', type: 'boolean', value: true, description: 'Build developer documentation
(uses gi-docgen)')
option('g-ir-doc', type: 'boolean', value: false, description: 'Build developer documentation for
introspected API')
option('linux-input', type: 'feature', value: 'auto', description: 'Linux input event controller
module')
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]