# HG changeset patch
# Node ID 63c80f790e37
# Parent  089c8a3a9ff4
diff --git a/convey.yaml b/convey.yaml
--- a/convey.yaml
+++ b/convey.yaml
@@ -47,7 +47,7 @@
     files:
       - build-docs/doc/reference/finch/finch/:finch3-docs
       - build-docs/doc/reference/libpurple/html/:purple3-docs
-      - build-docs/doc/reference/pidgin/html/:pidgin3-docs
+      - build-docs/doc/reference/pidgin/pidgin/:pidgin3-docs
       - build-docs/doc/reference/protocols/facebook/facebook/:facebook3-docs
 
   export:
diff --git a/doc/reference/pidgin/meson.build b/doc/reference/pidgin/meson.build
--- a/doc/reference/pidgin/meson.build
+++ b/doc/reference/pidgin/meson.build
@@ -1,54 +1,36 @@
-DOC_MODULE = 'pidgin'
-
-# Header files or dirs to ignore when scanning. Use base file/dir names
-ignore_hfiles = [
-    'pixmaps',
-    'plugins',
-    'themes',
-    'win32',
-    'gtkinternal.h',
-    'pidgin.gresource.h',
-    'pidginprivate.h',
-]
-
-# Extra options to supply to gtkdoc-scan.
-scan_args = [
-    '--deprecated-guards=PURPLE_DISABLE_DEPRECATED|PIDGIN_DISABLE_DEPRECATED',
-    '--rebuild-types',
-    '--rebuild-sections',
-    '--ignore-headers=' + ' '.join(ignore_hfiles),
-]
-
-# Extra options to supply to gtkdoc-mkdb.
-mkdb_args = [
-    '--ignore-files=' + ' '.join(ignore_hfiles),
+pidgin_doc_content_files = [
+	'signals_gtkaccount.md',
+	'signals_gtkblist.md',
+	'signals_gtkconv.md',
 ]
 
-# Extra options to supply to fixxref
-fixxref_args = [
-    '--extra-dir=../libpurple',
-]
-
-configure_file(
-    input : 'version.xml.in',
-    output : 'version.xml',
-    configuration : version_conf)
+if get_option('doc')
+	pidgin_toml = configure_file(
+		input : 'pidgin.toml.in',
+		output : 'pidgin.toml',
+		configuration : version_conf,
+		install : true,
+		install_dir : docs_dir / 'pidgin',
+	)
 
-# Extra SGML files that are included by $(DOC_MAIN_XML_FILE).
-content_files = [
-    'signals_gtkaccount.xml',
-    'signals_gtkblist.xml',
-    'signals_gtkconv.xml',
-    'signals_gtklog.xml',
-]
+	pidgin_doc = custom_target('pidgin-doc',
+		input : [ pidgin_toml, pidgin_gir[0] ],
+		output : 'pidgin',
+		command : [
+			gidocgen,
+			'generate',
+			'--quiet',
+			'--fatal-warnings',
+			'--config=@INPUT0@',
+			'--output-dir=@OUTPUT@',
+			'--no-namespace-dir',
+			'--content-dir=@0@'.format(meson.current_source_dir()),
+			'@INPUT1@'
+		],
+		depend_files : [ pidgin_doc_content_files ],
+		build_by_default : true,
+		install : true,
+		install_dir : docs_dir,
+	)
+endif
 
-pidgin_doc = gnome.gtkdoc(DOC_MODULE,
-    main_xml : DOC_MODULE + '-docs.xml',
-    src_dir : libpidgin_inc,
-    dependencies : libpidgin_dep,
-    install : true,
-    scan_args : scan_args,
-    mkdb_args : mkdb_args,
-    fixxref_args : fixxref_args,
-    gobject_typesfile : DOC_MODULE + '.types',
-    content_files : content_files)
diff --git a/doc/reference/pidgin/pidgin-docs.xml b/doc/reference/pidgin/pidgin-docs.xml
deleted file mode 100644
--- a/doc/reference/pidgin/pidgin-docs.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
-               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
-
-<!ENTITY % local.common.attrib "xmlns:xi  CDATA  #FIXED 'http://www.w3.org/2003/XInclude'">
-<!ENTITY version SYSTEM "version.xml">
-]>
-<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
-  <bookinfo>
-    <title>Pidgin Reference Manual</title>
-    <abstract>
-      <title>Pidgin &version;</title>
-      <para>
-        Pidgin is a GTK+ frontend to libpurple.
-      </para>
-    </abstract>
-  </bookinfo>
-
-  <part id="API">
-    <title>API Reference</title>
-
-      <xi:include href="xml/gtkaccount.xml" />
-      <xi:include href="xml/gtkblist.xml" />
-      <xi:include href="xml/gtkconn.xml" />
-      <xi:include href="xml/gtkconv.xml" />
-      <xi:include href="xml/gtkconvwin.xml" />
-      <xi:include href="xml/gtkdialogs.xml" />
-      <xi:include href="xml/gtkdnd-hints.xml" />
-      <xi:include href="xml/gtkicon-theme-loader.xml" />
-      <xi:include href="xml/gtkicon-theme.xml" />
-      <xi:include href="xml/gtkidle.xml" />
-      <xi:include href="xml/gtkmedia.xml" />
-      <xi:include href="xml/gtknotify.xml" />
-      <xi:include href="xml/gtkpluginpref.xml" />
-      <xi:include href="xml/gtkprivacy.xml" />
-      <xi:include href="xml/gtkrequest.xml" />
-      <xi:include href="xml/gtkroomlist.xml" />
-      <xi:include href="xml/gtksavedstatuses.xml" />
-      <xi:include href="xml/gtkstatus-icon-theme.xml" />
-      <xi:include href="xml/gtkstatusbox.xml" />
-      <xi:include href="xml/gtkutils.xml" />
-      <xi:include href="xml/gtkwhiteboard.xml" />
-      <xi:include href="xml/gtkxfer.xml" />
-      <xi:include href="xml/minidialog.xml" />
-      <xi:include href="xml/pidgin.xml" />
-      <xi:include href="xml/pidginabout.xml" />
-      <xi:include href="xml/pidginaccountactionsmenu.xml" />
-      <xi:include href="xml/pidginaccountchooser.xml" />
-      <xi:include href="xml/pidginaccountfilterconnected.xml" />
-      <xi:include href="xml/pidginaccountfilterprotocol.xml" />
-      <xi:include href="xml/pidginaccountsmenu.xml" />
-      <xi:include href="xml/pidginaccountstore.xml" />
-      <xi:include href="xml/pidginactiongroup.xml" />
-      <xi:include href="xml/pidginapplication.xml" />
-      <xi:include href="xml/pidginattachment.xml" />
-      <xi:include href="xml/pidginavatar.xml" />
-      <xi:include href="xml/pidgincellrendererexpander.xml" />
-      <xi:include href="xml/pidginclosebutton.xml" />
-      <xi:include href="xml/pidgincolor.xml" />
-      <xi:include href="xml/pidgincontactcompletion.xml" />
-      <xi:include href="xml/pidgincontactlist.xml" />
-      <xi:include href="xml/pidginconversationwindow.xml" />
-      <xi:include href="xml/pidgincore.xml" />
-      <xi:include href="xml/pidgincredentialproviderrow.xml" />
-      <xi:include href="xml/pidgincredentialspage.xml" />
-      <xi:include href="xml/pidgindebug.xml" />
-      <xi:include href="xml/pidgindialog.xml" />
-      <xi:include href="xml/pidgingdkpixbuf.xml" />
-      <xi:include href="xml/pidginiconname.xml" />
-      <xi:include href="xml/pidgininfopane.xml" />
-      <xi:include href="xml/pidgininvitedialog.xml" />
-      <xi:include href="xml/pidginmenutray.xml" />
-      <xi:include href="xml/pidginmessage.xml" />
-      <xi:include href="xml/pidginmooddialog.xml" />
-      <xi:include href="xml/pidginplugininfo.xml" />
-      <xi:include href="xml/pidginpluginsdialog.xml" />
-      <xi:include href="xml/pidginpluginsmenu.xml" />
-      <xi:include href="xml/pidginprefs.xml" />
-      <xi:include href="xml/pidginpresenceicon.xml" />
-      <xi:include href="xml/pidginprotocolchooser.xml" />
-      <xi:include href="xml/pidginprotocolstore.xml" />
-      <xi:include href="xml/pidginscrollbook.xml" />
-      <xi:include href="xml/pidginstock.xml" />
-      <xi:include href="xml/pidginstylecontext.xml" />
-      <xi:include href="xml/pidgintalkatu.xml" />
-  </part>
-
-  <part id="signals">
-    <title>Purple-signals Reference</title>
-
-      <xi:include href="signals_gtkaccount.xml" />
-      <xi:include href="signals_gtkblist.xml" />
-      <xi:include href="signals_gtkconv.xml" />
-      <xi:include href="signals_gtklog.xml" />
-  </part>
-
-  <part>
-    <title>Appendices</title>
-
-    <index id="api-index-full">
-      <title>API Index</title>
-      <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
-    </index>
-
-    <index id="api-deprecated">
-      <title>Index of deprecated symbols</title>
-      <xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
-    </index>
-
-    <index id="api-3.0.0">
-      <title>Index of new symbols in 3.0.0</title>
-      <xi:include href="xml/api-index-3.0.0.xml"><xi:fallback /></xi:include>
-    </index>
-    <index id="api-2.10.0">
-      <title>Index of new symbols in 2.10.0</title>
-      <xi:include href="xml/api-index-2.10.0.xml"><xi:fallback /></xi:include>
-    </index>
-
-    <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
-  </part>
-</book>
diff --git a/doc/reference/pidgin/pidgin.toml.in b/doc/reference/pidgin/pidgin.toml.in
new file mode 100644
--- /dev/null
+++ b/doc/reference/pidgin/pidgin.toml.in
@@ -0,0 +1,66 @@
+[library]
+version = "@PURPLE_VERSION@"
+browse_url = "https://keep.imfreedom.org/pidgin/pidgin/"
+repository_url = "https://keep.imfreedom.org/pidgin/pidgin/"
+website_url = "https://keep.imfreedom.org/pidgin/pidgin/"
+authors = "Pidgin Developers"
+logo_url = ""
+license = "GPL-2.0-or-later"
+description = "Pidgin Universal Chat Client"
+dependencies = [ "GLib-2.0", "GObject-2.0", "Gtk-3.0", "Purple-3.0", "GPlugin-1.0", "GPlugin-Gtk3-1.0", "Talkatu-0.0" ]
+devhelp = true
+search_index = true
+
+  [dependencies."GLib-2.0"]
+  name = "GLib"
+  description = "General-purpose, portable utility library."
+  docs_url = "https://docs.gtk.org/glib/"
+
+  [dependencies."GObject-2.0"]
+  name = "GObject"
+  description = "The base type system library"
+  docs_url = "https://docs.gtk.org/gobject/"
+
+  [dependencies."Gtk-3.0"]
+  name = "Gtk"
+  description = "The GTK toolkit"
+  docs_url = "https://docs.gtk.org/gtk3/"
+
+  [dependencies."Purple-3.0"]
+  name = "Purple"
+  description = "Purple Universal Chat Library"
+  docs_url = "https://docs.imfreedom.org/purple3/"
+
+  [dependencies."GPlugin-1.0"]
+  name = "GPlugin"
+  description = "GPlugin Plugin Library"
+  docs_urls = "https://docs.imfreedom.org/gplugin/"
+
+  [dependencies."GPlugin-Gtk3-1.0"]
+  name = "GPlugin-Gtk3"
+  description = "GPlugin Gtk3 Widget Library"
+  docs_urls = "https://docs.imfreedom.org/gplugin-gtk3/"
+
+  [dependencies."Talkatu-0.0"]
+  name = "Talkatu"
+  description = "Talkatu Gtk3 Chat Widgets"
+  docs_urls = "https://docs.imfreedom.org/talkatu/"
+
+[theme]
+name = "basic"
+show_index_summary = true
+show_class_hierarchy = true
+
+[source-location]
+base_url = "https://keep.imfreedom.org/pidgin/pidgin/file/default/"
+
+[extra]
+# The same order will be used when generating the index
+content_files = [
+	"signals_gtkaccount.md",
+	"signals_gtkblist.md",
+	"signals_gtkconv.md",
+]
+content_images = [
+]
+urlmap_file = "urlmap.js"
diff --git a/doc/reference/pidgin/signals_gtkaccount.xml b/doc/reference/pidgin/signals_gtkaccount.md
rename from doc/reference/pidgin/signals_gtkaccount.xml
rename to doc/reference/pidgin/signals_gtkaccount.md
--- a/doc/reference/pidgin/signals_gtkaccount.xml
+++ b/doc/reference/pidgin/signals_gtkaccount.md
@@ -1,41 +1,21 @@
-<?xml version='1.0' encoding="ISO-8859-1"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
-               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
-]>
-<chapter id="chapter-signals-gtkaccount">
-<title>Account signals</title>
+Title: Account Signals
+Slug: account-signals
+
+## Account Signals
 
-<refsect1 id="gtkaccounts.signals" role="signal_proto">
-<title role="signal_proto.title">List of signals</title>
-<synopsis>
-  &quot;<link linkend="gtkaccounts-account-modified">account-modified</link>&quot;
-</synopsis>
-</refsect1>
+### account-modified
 
-<refsect1 id="gtkaccounts.signal-details" role="signals">
-<title role="signals.title">Signal details</title>
+```c
+void user_function(PurpleAccount *account, gpointer user_data);
+```
 
-<refsect2 id="gtkaccounts-account-modified" role="signal">
- <title>The <literal>&quot;account-modified&quot;</literal> signal</title>
-<programlisting>
-void                user_function                      (PurpleAccount *account,
-                                                        gpointer user_data)
-</programlisting>
-  <para>
 Emitted when the settings for an account have been changed and saved.
-  </para>
-  <variablelist role="params">
-  <varlistentry>
-    <term><parameter>account</parameter>&#160;:</term>
-    <listitem><simpara>The account that has been modified.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>user_data</parameter>&#160;:</term>
-    <listitem><simpara>user data set when the signal handler was connected.</simpara></listitem>
-  </varlistentry>
-  </variablelist>
-</refsect2>
+
+**Parameters:**
 
-</refsect1>
+**account**
+: The account that has been modified.
 
-</chapter>
+**user_data**
+: User data set when the signal handler was connected.
+
diff --git a/doc/reference/pidgin/signals_gtkblist.xml b/doc/reference/pidgin/signals_gtkblist.md
rename from doc/reference/pidgin/signals_gtkblist.xml
rename to doc/reference/pidgin/signals_gtkblist.md
--- a/doc/reference/pidgin/signals_gtkblist.xml
+++ b/doc/reference/pidgin/signals_gtkblist.md
@@ -1,146 +1,98 @@
-<?xml version='1.0' encoding="ISO-8859-1"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
-               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
-]>
-<chapter id="chapter-signals-gtkblist">
-<title>Buddy List signals</title>
+Title: Buddy List Signals
+Slug: blist-signals
+
+## Buddy List Signals
 
-<refsect1 id="gtkblist.signals" role="signal_proto">
-<title role="signal_proto.title">List of signals</title>
-<synopsis>
-  &quot;<link linkend="gtkblist-gtkblist-hiding">gtkblist-hiding</link>&quot;
-  &quot;<link linkend="gtkblist-gtkblist-unhiding">gtkblist-unhiding</link>&quot;
-  &quot;<link linkend="gtkblist-gtkblist-created">gtkblist-created</link>&quot;
-  &quot;<link linkend="gtkblist-drawing-tooltip">drawing-tooltip</link>&quot;
-  &quot;<link linkend="gtkblist-drawing-buddy">drawing-buddy</link>&quot;
-</synopsis>
-</refsect1>
+### gtkblist-hiding
 
-<refsect1 id="gtkblist.signal-details" role="signals">
-<title role="signals.title">Signal details</title>
+```c
+void user_function(PurpleBuddyList *blist, gpointer user_data);
+```
 
-<refsect2 id="gtkblist-gtkblist-hiding" role="signal">
- <title>The <literal>&quot;gtkblist-hiding&quot;</literal> signal</title>
-<programlisting>
-void                user_function                      (PurpleBuddyList *blist,
-                                                        gpointer user_data)
-</programlisting>
-  <para>
 Emitted when the buddy list is about to be hidden.
-  </para>
-  <variablelist role="params">
-  <varlistentry>
-    <term><parameter>blist</parameter>&#160;:</term>
-    <listitem><simpara>The buddy list.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>user_data</parameter>&#160;:</term>
-    <listitem><simpara>user data set when the signal handler was connected.</simpara></listitem>
-  </varlistentry>
-  </variablelist>
-</refsect2>
+
+**Parameters:**
+
+**blist**
+: The buddy list.
 
-<refsect2 id="gtkblist-gtkblist-unhiding" role="signal">
- <title>The <literal>&quot;gtkblist-unhiding&quot;</literal> signal</title>
-<programlisting>
-void                user_function                      (PurpleBuddyList *blist,
-                                                        gpointer user_data)
-</programlisting>
-  <para>
+**user_data**
+: User data set when the signal handler was connected.
+
+### gtkblist-unhiding
+
+```c
+void user_function(PurpleBuddyList *blist, gpointer user_data);
+```
 Emitted when the buddy list is about to be unhidden.
-  </para>
-  <variablelist role="params">
-  <varlistentry>
-    <term><parameter>blist</parameter>&#160;:</term>
-    <listitem><simpara>The buddy list.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>user_data</parameter>&#160;:</term>
-    <listitem><simpara>user data set when the signal handler was connected.</simpara></listitem>
-  </varlistentry>
-  </variablelist>
-</refsect2>
+
+**Parameters:**
+
+**blist**
+: The buddy list.
 
-<refsect2 id="gtkblist-gtkblist-created" role="signal">
- <title>The <literal>&quot;gtkblist-created&quot;</literal> signal</title>
-<programlisting>
-void                user_function                      (PurpleBuddyList *blist,
-                                                        gpointer user_data)
-</programlisting>
-  <para>
+**user_data**
+: User data set when the signal handler was connected.
+
+### gtkblist-created
+
+```c
+void user_function(PurpleBuddyList *blist, gpointer user_data);
+```
+
 Emitted when the buddy list is created.
-  </para>
-  <variablelist role="params">
-  <varlistentry>
-    <term><parameter>blist</parameter>&#160;:</term>
-    <listitem><simpara>The buddy list.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>user_data</parameter>&#160;:</term>
-    <listitem><simpara>user data set when the signal handler was connected.</simpara></listitem>
-  </varlistentry>
-  </variablelist>
-</refsect2>
+
+**Parameters:**
+
+**blist**
+: The buddy list.
+
+**user_data**
+: User data set when the signal handler was connected.
+
+### drawing-tooltip
+
+```c
+void user_function(PurpleBlistNode *node, GString *text, gboolean full, gpointer user_data);
+```
+
+Emitted just before a tooltip is displayed. `text` is a standard GString, so
+the plugin can modify the text that will be displayed.
+
+**Parameters:**
+
+**node**
+: The blist node for the tooltip.
+
+**text**
+: A pointer to the text that will be displayed.
 
-<refsect2 id="gtkblist-drawing-tooltip" role="signal">
- <title>The <literal>&quot;drawing-tooltip&quot;</literal> signal</title>
-<programlisting>
-void                user_function                      (PurpleBlistNode *node,
-                                                        GString *text,
-                                                        gboolean full,
-                                                        gpointer user_data)
-</programlisting>
-  <para>
-Emitted just before a tooltip is displayed. <literal>text</literal> is a standard GString, so the plugin can modify the text that will be displayed.
-  </para>
-  <note><para>
-Make sure to free <literal>*text</literal> before you replace it!
-  </para></note>
-  <variablelist role="params">
-  <varlistentry>
-    <term><parameter>node</parameter>&#160;:</term>
-    <listitem><simpara>The blist node for the tooltip.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>text</parameter>&#160;:</term>
-    <listitem><simpara>A pointer to the text that will be displayed.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>full</parameter>&#160;:</term>
-    <listitem><simpara>Whether we're doing a full tooltip for the priority buddy or a compact tooltip for a non-priority buddy.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>user_data</parameter>&#160;:</term>
-    <listitem><simpara>user data set when the signal handler was connected.</simpara></listitem>
-  </varlistentry>
-  </variablelist>
-</refsect2>
+**full**
+: Whether we're doing a full tooltip for the priority buddy or a compact
+tooltip for a non-priority buddy.
+
+**user_data**
+: User data set when the signal handler was connected.
+
+### drawing-buddy
+
+```c
+char *user_function(PurpleBuddy *buddy, gpointer user_data);
+```
 
-<refsect2 id="gtkblist-drawing-buddy" role="signal">
- <title>The <literal>&quot;drawing-buddy&quot;</literal> signal</title>
-<programlisting>
-char *              user_function                      (PurpleBuddy *buddy,
-                                                        gpointer user_data)
-</programlisting>
-  <para>
-Emitted to allow plugins to handle markup within a buddy's name or to override the default of no formatting for names shown in the buddy list.
-  </para>
-  <variablelist role="params">
-  <varlistentry>
-    <term><parameter>buddy</parameter>&#160;:</term>
-    <listitem><simpara>A pointer to the PurpleBuddy that will be displayed.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>user_data</parameter>&#160;:</term>
-    <listitem><simpara>user data set when the signal handler was connected.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><emphasis>Returns</emphasis>&#160;:</term>
-    <listitem><simpara>The text to display (must be allocated), or <literal>NULL</literal> if no changes to the default behavior are desired.</simpara></listitem>
-  </varlistentry>
-  </variablelist>
-</refsect2>
+Emitted to allow plugins to handle markup within a buddy's name or to override
+the default of no formatting for names shown in the buddy list.
+
+**Parameters:**
+
+**buddy**
+: A pointer to the PupleBuddy that will be displayed.
 
-</refsect1>
+**user_data**
+: User data set when the signal handler was connected.
 
-</chapter>
+**Returns:**
+
+The text to display (must be allocated), or `NULL` if no changes to the default
+behavior are desired.
+
diff --git a/doc/reference/pidgin/signals_gtkconv.xml b/doc/reference/pidgin/signals_gtkconv.md
rename from doc/reference/pidgin/signals_gtkconv.xml
rename to doc/reference/pidgin/signals_gtkconv.md
--- a/doc/reference/pidgin/signals_gtkconv.xml
+++ b/doc/reference/pidgin/signals_gtkconv.md
@@ -1,273 +1,189 @@
-<?xml version='1.0' encoding="ISO-8859-1"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
-               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
-]>
-<chapter id="chapter-signals-gtkconv">
-<title>Conversation signals</title>
+Title: Conversation Signals
+Slug: conversation-signals
 
-<refsect1 id="gtkconvs.signals" role="signal_proto">
-<title role="signal_proto.title">List of signals</title>
-<synopsis>
-  &quot;<link linkend="gtkconvs-conversation-dragging">conversation-dragging</link>&quot;
-  &quot;<link linkend="gtkconvs-displaying-im-msg">displaying-im-msg</link>&quot;
-  &quot;<link linkend="gtkconvs-displayed-im-msg">displayed-im-msg</link>&quot;
-  &quot;<link linkend="gtkconvs-displaying-chat-msg">displaying-chat-msg</link>&quot;
-  &quot;<link linkend="gtkconvs-displayed-chat-msg">displayed-chat-msg</link>&quot;
-  &quot;<link linkend="gtkconvs-conversation-switched">conversation-switched</link>&quot;
-  &quot;<link linkend="gtkconvs-conversation-displayed">conversation-displayed</link>&quot;
-</synopsis>
-</refsect1>
+## Conversation signals
 
-<refsect1 id="gtkconvs.signal-details" role="signals">
-<title role="signals.title">Signal details</title>
+### displaying-im-msg
 
-<refsect2 id="gtkconvs-conversation-dragging" role="signal">
- <title>The <literal>&quot;conversation-dragging&quot;</literal> signal</title>
-<programlisting>
-void                user_function                      (PidginConvWindow *source,
-                                                        PidginConvWindow *destination,
-                                                        gpointer user_data)
-</programlisting>
-  <para>
-Emitted when a conversation is being drag and dropped between windows.
-  </para>
-  <variablelist role="params">
-  <varlistentry>
-    <term><parameter>source</parameter>&#160;:</term>
-    <listitem><simpara>The window where the conversation is.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>destination</parameter>&#160;:</term>
-    <listitem><simpara>The window where the conversation will be moved to.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>user_data</parameter>&#160;:</term>
-    <listitem><simpara>user data set when the signal handler was connected.</simpara></listitem>
-  </varlistentry>
-  </variablelist>
-</refsect2>
+```c
+gboolean
+user_function(PurpleAccount *account,
+              const gchar *who,
+              gchar **message,
+              PurpleConversation *conv,
+              PurpleMessageFlags flags,
+              gpointer user_data);
+```
 
+Emitted just before a message is displayed in an IM conversation. `message` is
+a pointer to a string, so the plugin can replace the message that will be
+displayed. This can also be used to cancel displaying a message by returning
+`TRUE`.
+
+> **NOTE:** Make sure to free `*message` before you replace it!
+
+**Parameters:**
+
+**account**
+: The account.
 
-<refsect2 id="gtkconvs-displaying-im-msg" role="signal">
- <title>The <literal>&quot;displaying-im-msg&quot;</literal> signal</title>
-<programlisting>
-gboolean            user_function                      (PurpleAccount *account,
-                                                        const char *who,
-                                                        char **message,
-                                                        PurpleConversation *conv,
-                                                        PurpleMessageFlags flags,
-                                                        gpointer user_data)
-</programlisting>
-  <para>
-Emitted just before a message is displayed in an IM conversation. <literal>message</literal> is a pointer to a string, so the plugin can replace the message that will be displayed. This can also be used to cancel displaying a message by returning <literal>TRUE</literal>.
-  </para>
-  <note><para>
-Make sure to free <literal>*message</literal> before you replace it!
-  </para></note>
-  <variablelist role="params">
-  <varlistentry>
-    <term><parameter>account</parameter>&#160;:</term>
-    <listitem><simpara>The account.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>who</parameter>&#160;:</term>
-    <listitem><simpara>The name of the user.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>message</parameter>&#160;:</term>
-    <listitem><simpara>A pointer to the message.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>conv</parameter>&#160;:</term>
-    <listitem><simpara>The conversation.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>flags</parameter>&#160;:</term>
-    <listitem><simpara>Flags for this message.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>user_data</parameter>&#160;:</term>
-    <listitem><simpara>user data set when the signal handler was connected.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><emphasis>Returns</emphasis>&#160;:</term>
-    <listitem><simpara><literal>TRUE</literal> if the message should be canceled, or <literal>FALSE</literal> otherwise.</simpara></listitem>
-  </varlistentry>
-  </variablelist>
-</refsect2>
+**who**
+: The name of the user.
+
+**message**
+: A pointer to the message.
+
+**conv**
+: The conversation.
+
+**flags**
+: Flags for this message.
+
+**user_data**
+: User data set when the signal handler was connected.
 
-<refsect2 id="gtkconvs-displayed-im-msg" role="signal">
- <title>The <literal>&quot;displayed-im-msg&quot;</literal> signal</title>
-<programlisting>
-void                user_function                      (PurpleAccount *account,
-                                                        const char *who,
-                                                        char *message,
-                                                        PurpleConversation *conv,
-                                                        PurpleMessageFlags flags,
-                                                        gpointer user_data)
-</programlisting>
-  <para>
+**Returns:**
+
+`TRUE` if the message should be canceled, or `FALSE` otherwise.
+
+## displayed-im-msg
+
+```c
+void
+user_function(PurpleAccount *account,
+              const gchar *who,
+              gchar *message,
+              PurpleConversation *conv,
+              PurpleMessageFlags flags,
+              gpointer user_data);
+```
+
 Emitted after a message is displayed in an IM conversation.
-  </para>
-  <variablelist role="params">
-  <varlistentry>
-    <term><parameter>account</parameter>&#160;:</term>
-    <listitem><simpara>The account.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>who</parameter>&#160;:</term>
-    <listitem><simpara>The name of the user.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>message</parameter>&#160;:</term>
-    <listitem><simpara>The message.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>conv</parameter>&#160;:</term>
-    <listitem><simpara>The conversation.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>flags</parameter>&#160;:</term>
-    <listitem><simpara>Flags for this message.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>user_data</parameter>&#160;:</term>
-    <listitem><simpara>user data set when the signal handler was connected.</simpara></listitem>
-  </varlistentry>
-  </variablelist>
-</refsect2>
+
+**Parameters:**
+
+**account**
+: The account.
+
+**who**
+: The name of the user.
+
+**message**
+: The message.
+
+**conv**
+: The conversation.
+
+**flags**
+: Flags for this message.
+
+**user_data**
+: User data set when the signal handler was connected.
+
+### displaying-chat-msg
 
-<refsect2 id="gtkconvs-displaying-chat-msg" role="signal">
- <title>The <literal>&quot;displaying-chat-msg&quot;</literal> signal</title>
-<programlisting>
-gboolean            user_function                      (PurpleAccount *account,
-                                                        const char *who,
-                                                        char **message,
-                                                        PurpleConversation *conv,
-                                                        PurpleMessageFlags flags,
-                                                        gpointer user_data)
-</programlisting>
-  <para>
-Emitted just before a message is displayed in a chat. <literal>message</literal> is a pointer to a string, so the plugin can replace the message that will be displayed. This can also be used to cancel displaying a message by returning <literal>TRUE</literal>.
-  </para>
-  <note><para>
-Make sure to free <literal>*message</literal> before you replace it!
-  </para></note>
-  <variablelist role="params">
-  <varlistentry>
-    <term><parameter>account</parameter>&#160;:</term>
-    <listitem><simpara>The account the message is being displayed and sent on.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>who</parameter>&#160;:</term>
-    <listitem><simpara>The name of the user.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>message</parameter>&#160;:</term>
-    <listitem><simpara>A pointer to the message that will be displayed and sent.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>conv</parameter>&#160;:</term>
-    <listitem><simpara>The conversation the message is being displayed and sent on.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>flags</parameter>&#160;:</term>
-    <listitem><simpara>Flags for this message.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>user_data</parameter>&#160;:</term>
-    <listitem><simpara>user data set when the signal handler was connected.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><emphasis>Returns</emphasis>&#160;:</term>
-    <listitem><simpara><literal>TRUE</literal> if the message should be canceled, or <literal>FALSE</literal> otherwise.</simpara></listitem>
-  </varlistentry>
-  </variablelist>
-</refsect2>
+```c
+gboolean
+user_function(PurpleAccount *account,
+              const gchar *who,
+              gchar **message,
+              PurpleConversation *conv,
+              PurpleMessageFlags flags,
+              gpointer user_data);
+```
+
+Emitted just before a message is displayed in a chat. `message` is a pointer to
+a string, so the plugin can replace the message that will be displayed. This
+can also be used to cancel displaying a message by returning `TRUE`.
+
+> **NOTE:** Make sure to free `*message` before you replace it!
+
+**Parameters:**
+
+**account**
+: The account the message is being displayed and sent on.
+
+**who**
+: The name of the user.
+
+**message**
+: A pointer to the message that will be displayed and sent.
+
+**conv**
+: The conversation the message is being displayed and sent on.
+
+**flags**
+: Flags for this message.
+
+**user_data**
+: User data set when the signal handler was connected.
+
+**Returns:**
+
+`TRUE` if the message should be canceled, or `FALSE` otherwise.
 
-<refsect2 id="gtkconvs-displayed-chat-msg" role="signal">
- <title>The <literal>&quot;displayed-chat-msg&quot;</literal> signal</title>
-<programlisting>
-void                user_function                      (PurpleAccount *account,
-                                                        const char *who,
-                                                        char *message,
-                                                        PurpleConversation *conv,
-                                                        PurpleMessageFlags flags,
-                                                        gpointer user_data)
-</programlisting>
-  <para>
+### displayed-chat-msg
+
+```c
+void
+user_function(PurpleAccount *account,
+              const gchar *who,
+              gchar *message,
+              PurpleConversation *conv,
+              PurpleMessageFlags flags,
+              gpointer user_data);
+```
+
 Emitted after a message is displayed in a chat conversation.
-  </para>
-  <variablelist role="params">
-  <varlistentry>
-    <term><parameter>account</parameter>&#160;:</term>
-    <listitem><simpara>The account the message is being displayed and sent on.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>who</parameter>&#160;:</term>
-    <listitem><simpara>The name of the user.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>message</parameter>&#160;:</term>
-    <listitem><simpara>A pointer to the message that will be displayed and sent.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>conv</parameter>&#160;:</term>
-    <listitem><simpara>The conversation the message is being displayed and sent on.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>flags</parameter>&#160;:</term>
-    <listitem><simpara>Flags for this message.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>user_data</parameter>&#160;:</term>
-    <listitem><simpara>user data set when the signal handler was connected.</simpara></listitem>
-  </varlistentry>
-  </variablelist>
-</refsect2>
+
+**Parameters:**
+
+**account**
+: The account the message is being displayed and sent on.
+
+**who**
+: The name of the user.
+
+**message**
+: A pointer to the message that will be displayed and sent.
+
+**conv**
+: The conversation the message is being displayed and sent on.
+
+**flags**
+: Flags for this message.
 
-<refsect2 id="gtkconvs-conversation-switched" role="signal">
- <title>The <literal>&quot;conversation-switched&quot;</literal> signal</title>
-<programlisting>
-void                user_function                      (PurpleConversation *conv,
-                                                        gpointer user_data)
-</programlisting>
-  <para>
+**user_data**
+: User data set when the signal handler was connected.
+
+### conversation-switched
+
+```c
+void user_function(PurpleConversation *conv, gpointer user_data);
+```
+
 Emitted when a window switched from one conversation to another.
-  </para>
-  <variablelist role="params">
-  <varlistentry>
-    <term><parameter>new_conv</parameter>&#160;:</term>
-    <listitem><simpara>The now active conversation.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>user_data</parameter>&#160;:</term>
-    <listitem><simpara>user data set when the signal handler was connected.</simpara></listitem>
-  </varlistentry>
-  </variablelist>
-</refsect2>
+
+**Parameters:**
+
+**new_conv**
+: The now active conversation.
 
-<refsect2 id="gtkconvs-conversation-displayed" role="signal">
- <title>The <literal>&quot;conversation-displayed&quot;</literal> signal</title>
-<programlisting>
-void                user_function                      (PidginConversation *gtkconv,
-                                                        gpointer user_data)
-</programlisting>
-  <para>
+**user_data**
+: User data set when the signal handler was connected.
+
+### conversation-displayed
+
+```c
+void user_function(PidginConversation *gtkconv, gpointer user_data);
+```
+
 Emitted right after the Pidgin UI is attached to a new conversation.
-  </para>
-  <variablelist role="params">
-  <varlistentry>
-    <term><parameter>gtkconv</parameter>&#160;:</term>
-    <listitem><simpara>The PidginConversation.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>user_data</parameter>&#160;:</term>
-    <listitem><simpara>user data set when the signal handler was connected.</simpara></listitem>
-  </varlistentry>
-  </variablelist>
-</refsect2>
+
+**Parameters:**
 
-</refsect1>
+**gtkconv**
+: The PidginConversation.
 
-</chapter>
+**user_data**
+: User data set when the signal handler was connected.
diff --git a/doc/reference/pidgin/signals_gtklog.xml b/doc/reference/pidgin/signals_gtklog.xml
deleted file mode 100644
--- a/doc/reference/pidgin/signals_gtklog.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version='1.0' encoding="ISO-8859-1"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
-               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
-]>
-<chapter id="chapter-signals-gtklog">
-<title>Log signals</title>
-
-<refsect1 id="gtklogs.signals" role="signal_proto">
-<title role="signal_proto.title">List of signals</title>
-<synopsis>
-  &quot;<link linkend="gtklogs-log-displaying">log-displaying</link>&quot;
-</synopsis>
-</refsect1>
-
-<refsect1 id="gtklogs.signal-details" role="signals">
-<title role="signals.title">Signal details</title>
-
-<refsect2 id="gtklogs-log-displaying" role="signal">
- <title>The <literal>&quot;log-displaying&quot;</literal> signal</title>
-<programlisting>
-void                user_function                      (PidginLogViewer *viewer,
-                                                        PurpleLog *log,
-                                                        gpointer user_data)
-</programlisting>
-  <para>
-Emitted when a log is being displayed.
-  </para>
-  <variablelist role="params">
-  <varlistentry>
-    <term><parameter>viewer</parameter>&#160;:</term>
-    <listitem><simpara>The log viewer.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>log</parameter>&#160;:</term>
-    <listitem><simpara>The log being displayed.</simpara></listitem>
-  </varlistentry>
-  <varlistentry>
-    <term><parameter>user_data</parameter>&#160;:</term>
-    <listitem><simpara>user data set when the signal handler was connected.</simpara></listitem>
-  </varlistentry>
-  </variablelist>
-</refsect2>
-
-</refsect1>
-
-</chapter>
diff --git a/doc/reference/pidgin/urlmap.js b/doc/reference/pidgin/urlmap.js
new file mode 100644
--- /dev/null
+++ b/doc/reference/pidgin/urlmap.js
@@ -0,0 +1,13 @@
+// SPDX-FileCopyrightText: 2021 GNOME Foundation
+// SPDX-License-Identifier: LGPL-2.1-or-later
+
+// A map between namespaces and base URLs for their online documentation
+baseURLs = [
+    [ 'GLib', 'https://docs.gtk.org/glib/' ],
+    [ 'GObject', 'https://docs.gtk.org/gobject/' ],
+    [ 'GPlugin', 'https://docs.imfreedom.org/gplugin/' ],
+    [ 'GPlugin-Gtk3', 'https://docs.imfreedom.org/gplugin-gtk3/' ],
+    [ 'Gtk', 'https://docs.gtk.org/gtk3/' ],
+    [ 'Purple3', 'https://docs.imfreedom.org/purple3/' ],
+    [ 'Talkatu', 'https://docs.imfreedom.org/talkatu/' ],
+]
diff --git a/doc/reference/pidgin/version.xml.in b/doc/reference/pidgin/version.xml.in
deleted file mode 100644
--- a/doc/reference/pidgin/version.xml.in
+++ /dev/null
@@ -1,1 +0,0 @@
-@PURPLE_VERSION@
diff --git a/pidgin/gtkaccount.h b/pidgin/gtkaccount.h
--- a/pidgin/gtkaccount.h
+++ b/pidgin/gtkaccount.h
@@ -25,13 +25,6 @@
 
 #ifndef _PIDGINACCOUNT_H_
 #define _PIDGINACCOUNT_H_
-/**
- * SECTION:gtkaccount
- * @section_id: pidgin-gtkaccount
- * @short_description: <filename>gtkaccount.h</filename>
- * @title: Account Editor UI
- * @see_also: <link linkend="chapter-signals-gtkaccount">Account signals</link>
- */
 
 #include <purple.h>
 
diff --git a/pidgin/gtkblist.h b/pidgin/gtkblist.h
--- a/pidgin/gtkblist.h
+++ b/pidgin/gtkblist.h
@@ -21,13 +21,6 @@
 
 #ifndef _PIDGINBLIST_H_
 #define _PIDGINBLIST_H_
-/**
- * SECTION:gtkblist
- * @section_id: pidgin-gtkblist
- * @short_description: <filename>gtkblist.h</filename>
- * @title: Buddy List API
- * @see_also: <link linkend="chapter-signals-gtkblist">Buddy List signals</link>
- */
 
 #include <gtk/gtk.h>
 
@@ -121,11 +114,6 @@
  * GTK Buddy List API
  **************************************************************************/
 
-/**
- * pidgin_buddy_list_get_type:
- *
- * Returns: The #GType for the #PidginBuddyList boxed structure.
- */
 G_DECLARE_FINAL_TYPE(PidginBuddyList, pidgin_buddy_list, PIDGIN, BUDDY_LIST,
                      PurpleBuddyList)
 
diff --git a/pidgin/gtkconn.h b/pidgin/gtkconn.h
--- a/pidgin/gtkconn.h
+++ b/pidgin/gtkconn.h
@@ -25,12 +25,6 @@
 
 #ifndef _PIDGINCONN_H_
 #define _PIDGINCONN_H_
-/**
- * SECTION:gtkconn
- * @section_id: pidgin-gtkconn
- * @short_description: <filename>gtkconn.h</filename>
- * @title: Connection API
- */
 
 G_BEGIN_DECLS
 
diff --git a/pidgin/gtkconv.h b/pidgin/gtkconv.h
--- a/pidgin/gtkconv.h
+++ b/pidgin/gtkconv.h
@@ -25,13 +25,6 @@
 
 #ifndef _PIDGIN_CONVERSATION_H_
 #define _PIDGIN_CONVERSATION_H_
-/**
- * SECTION:gtkconv
- * @section_id: pidgin-gtkconv
- * @short_description: <filename>gtkconv.h</filename>
- * @title: Conversation API
- * @see_also: <link linkend="chapter-signals-gtkconv">Conversation signals</link>
- */
 
 typedef struct _PidginImPane       PidginImPane;
 typedef struct _PidginChatPane     PidginChatPane;
diff --git a/pidgin/gtkconvwin.h b/pidgin/gtkconvwin.h
--- a/pidgin/gtkconvwin.h
+++ b/pidgin/gtkconvwin.h
@@ -25,12 +25,6 @@
 
 #ifndef _PIDGIN_CONVERSATION_WINDOW_H_
 #define _PIDGIN_CONVERSATION_WINDOW_H_
-/**
- * SECTION:gtkconvwin
- * @section_id: pidgin-gtkconvwin
- * @short_description: <filename>gtkconvwin.h</filename>
- * @title: Conversation Window API
- */
 
 #include <gtk/gtk.h>
 
diff --git a/pidgin/gtkdialogs.h b/pidgin/gtkdialogs.h
--- a/pidgin/gtkdialogs.h
+++ b/pidgin/gtkdialogs.h
@@ -25,12 +25,6 @@
 
 #ifndef _PIDGINDIALOGS_H_
 #define _PIDGINDIALOGS_H_
-/**
- * SECTION:gtkdialogs
- * @section_id: pidgin-gtkdialogs
- * @short_description: <filename>gtkdialogs.h</filename>
- * @title: Pidgin Dialogs
- */
 
 #include <purple.h>
 
diff --git a/pidgin/gtkdnd-hints.h b/pidgin/gtkdnd-hints.h
--- a/pidgin/gtkdnd-hints.h
+++ b/pidgin/gtkdnd-hints.h
@@ -23,12 +23,6 @@
 
 #ifndef _PIDGIN_DND_HINTS_H_
 #define _PIDGIN_DND_HINTS_H_
-/**
- * SECTION:gtkdnd-hints
- * @section_id: pidgin-gtkdnd-hints
- * @short_description: <filename>gtkdnd-hints.h</filename>
- * @title: Drag-and-Drop Arrow Hints
- */
 
 #include <glib.h>
 #include <gtk/gtk.h>
diff --git a/pidgin/gtkicon-theme-loader.h b/pidgin/gtkicon-theme-loader.h
--- a/pidgin/gtkicon-theme-loader.h
+++ b/pidgin/gtkicon-theme-loader.h
@@ -25,12 +25,6 @@
 
 #ifndef PIDGIN_ICON_THEME_LOADER_H
 #define PIDGIN_ICON_THEME_LOADER_H
-/**
- * SECTION:gtkicon-theme-loader
- * @section_id: pidgin-gtkicon-theme-loader
- * @short_description: <filename>gtkicon-theme-loader.h</filename>
- * @title: Pidgin Icon Theme Loader Class
- */
 
 #include <glib.h>
 #include <glib-object.h>
@@ -44,11 +38,6 @@
 /**************************************************************************/
 G_BEGIN_DECLS
 
-/**
- * pidgin_icon_theme_loader_get_type:
- *
- * Returns: The #GType for an icon theme loader.
- */
 G_DECLARE_FINAL_TYPE(PidginIconThemeLoader, pidgin_icon_theme_loader, PIDGIN,
 		ICON_THEME_LOADER, PurpleThemeLoader)
 
diff --git a/pidgin/gtkicon-theme.h b/pidgin/gtkicon-theme.h
--- a/pidgin/gtkicon-theme.h
+++ b/pidgin/gtkicon-theme.h
@@ -25,12 +25,6 @@
 
 #ifndef PIDGIN_ICON_THEME_H
 #define PIDGIN_ICON_THEME_H
-/**
- * SECTION:gtkicon-theme
- * @section_id: pidgin-gtkicon-theme
- * @short_description: <filename>gtkicon-theme.h</filename>
- * @title: Icon Theme Class
- */
 
 #include <glib.h>
 #include <glib-object.h>
@@ -49,11 +43,6 @@
 /**************************************************************************/
 G_BEGIN_DECLS
 
-/**
- * pidgin_icon_theme_get_type:
- *
- * Returns: The #GType for an icon theme.
- */
 G_DECLARE_DERIVABLE_TYPE(PidginIconTheme, pidgin_icon_theme, PIDGIN,
 		ICON_THEME, PurpleTheme)
 
diff --git a/pidgin/gtkidle.h b/pidgin/gtkidle.h
--- a/pidgin/gtkidle.h
+++ b/pidgin/gtkidle.h
@@ -25,12 +25,6 @@
 
 #ifndef _PIDGIN_IDLE_H_
 #define _PIDGIN_IDLE_H_
-/**
- * SECTION:gtkidle
- * @section_id: pidgin-gtkidle
- * @short_description: <filename>gtkidle.h</filename>
- * @title: Idle API
- */
 
 #include <purple.h>
 
diff --git a/pidgin/gtkmedia.h b/pidgin/gtkmedia.h
--- a/pidgin/gtkmedia.h
+++ b/pidgin/gtkmedia.h
@@ -25,12 +25,6 @@
 
 #ifndef __GTKMEDIA_H_
 #define __GTKMEDIA_H_
-/**
- * SECTION:gtkmedia
- * @section_id: pidgin-gtkmedia
- * @short_description: <filename>gtkmedia.h</filename>
- * @title: Media API
- */
 
 G_BEGIN_DECLS
 
diff --git a/pidgin/gtknotify.h b/pidgin/gtknotify.h
--- a/pidgin/gtknotify.h
+++ b/pidgin/gtknotify.h
@@ -25,12 +25,6 @@
 
 #ifndef _PIDGINNOTIFY_H_
 #define _PIDGINNOTIFY_H_
-/**
- * SECTION:gtknotify
- * @section_id: pidgin-gtknotify
- * @short_description: <filename>gtknotify.h</filename>
- * @title: Notification API
- */
 
 #include <purple.h>
 
diff --git a/pidgin/gtkpluginpref.h b/pidgin/gtkpluginpref.h
--- a/pidgin/gtkpluginpref.h
+++ b/pidgin/gtkpluginpref.h
@@ -26,12 +26,6 @@
 
 #ifndef _PIDGINPLUGINPREF_H_
 #define _PIDGINPLUGINPREF_H_
-/**
- * SECTION:gtkpluginpref
- * @section_id: pidgin-gtkpluginpref
- * @short_description: <filename>gtkpluginpref.h</filename>
- * @title: Plugin Preferences
- */
 
 #include <purple.h>
 
diff --git a/pidgin/gtkprivacy.h b/pidgin/gtkprivacy.h
--- a/pidgin/gtkprivacy.h
+++ b/pidgin/gtkprivacy.h
@@ -25,12 +25,6 @@
 
 #ifndef _PIDGINPRIVACY_H_
 #define _PIDGINPRIVACY_H_
-/**
- * SECTION:gtkprivacy
- * @section_id: pidgin-gtkprivacy
- * @short_description: <filename>gtkprivacy.h</filename>
- * @title: Privacy UI
- */
 
 #include <purple.h>
 
diff --git a/pidgin/gtkrequest.h b/pidgin/gtkrequest.h
--- a/pidgin/gtkrequest.h
+++ b/pidgin/gtkrequest.h
@@ -25,12 +25,6 @@
 
 #ifndef _PIDGINREQUEST_H_
 #define _PIDGINREQUEST_H_
-/**
- * SECTION:gtkrequest
- * @section_id: pidgin-gtkrequest
- * @short_description: <filename>gtkrequest.h</filename>
- * @title: Request API
- */
 
 #include <purple.h>
 
diff --git a/pidgin/gtkroomlist.h b/pidgin/gtkroomlist.h
--- a/pidgin/gtkroomlist.h
+++ b/pidgin/gtkroomlist.h
@@ -25,12 +25,6 @@
 
 #ifndef _PIDGINROOMLIST_H_
 #define _PIDGINROOMLIST_H_
-/**
- * SECTION:gtkroomlist
- * @section_id: pidgin-gtkroomlist
- * @short_description: <filename>gtkroomlist.h</filename>
- * @title: Room List UI
- */
 
 #include <purple.h>
 
diff --git a/pidgin/gtksavedstatuses.h b/pidgin/gtksavedstatuses.h
--- a/pidgin/gtksavedstatuses.h
+++ b/pidgin/gtksavedstatuses.h
@@ -25,12 +25,6 @@
 
 #ifndef _PIDGINSAVEDSTATUSES_H_
 #define _PIDGINSAVEDSTATUSES_H_
-/**
- * SECTION:gtksavedstatuses
- * @section_id: pidgin-gtksavedstatuses
- * @short_description: <filename>gtksavedstatuses.h</filename>
- * @title: Saved Status Editor UI
- */
 
 #include <purple.h>
 
diff --git a/pidgin/gtkstatus-icon-theme.h b/pidgin/gtkstatus-icon-theme.h
--- a/pidgin/gtkstatus-icon-theme.h
+++ b/pidgin/gtkstatus-icon-theme.h
@@ -25,12 +25,6 @@
 
 #ifndef PIDGIN_STATUS_ICON_THEME_H
 #define PIDGIN_STATUS_ICON_THEME_H
-/**
- * SECTION:gtkstatus-icon-theme
- * @section_id: pidgin-gtkstatus-icon-theme
- * @short_description: <filename>gtkstatus-icon-theme.h</filename>
- * @title: Pidgin Icon Theme Class
- */
 
 #include <glib-object.h>
 #include "gtkicon-theme.h"
@@ -42,11 +36,6 @@
 /**************************************************************************/
 G_BEGIN_DECLS
 
-/**
- * pidgin_status_icon_theme_get_type:
- *
- * Returns: The #GType for a status icon theme.
- */
 G_DECLARE_FINAL_TYPE(PidginStatusIconTheme, pidgin_status_icon_theme, PIDGIN,
 		STATUS_ICON_THEME, PidginIconTheme)
 
diff --git a/pidgin/gtkstatusbox.h b/pidgin/gtkstatusbox.h
--- a/pidgin/gtkstatusbox.h
+++ b/pidgin/gtkstatusbox.h
@@ -27,13 +27,6 @@
 #ifndef PIDGIN_STATUS_BOX_H
 #define PIDGIN_STATUS_BOX_H
 
-/**
- * SECTION:gtkstatusbox
- * @section_id: pidgin-gtkstatusbox
- * @short_description: <filename>gtkstatusbox.h</filename>
- * @title: Status Selection Widget
- */
-
 #include <gtk/gtk.h>
 
 #include <talkatu.h>
diff --git a/pidgin/gtkutils.h b/pidgin/gtkutils.h
--- a/pidgin/gtkutils.h
+++ b/pidgin/gtkutils.h
@@ -25,12 +25,6 @@
 
 #ifndef _PIDGINUTILS_H_
 #define _PIDGINUTILS_H_
-/**
- * SECTION:gtkutils
- * @section_id: pidgin-gtkutils
- * @short_description: <filename>gtkutils.h</filename>
- * @title: Utility functions
- */
 
 #include "gtkconv.h"
 
diff --git a/pidgin/gtkwhiteboard.h b/pidgin/gtkwhiteboard.h
--- a/pidgin/gtkwhiteboard.h
+++ b/pidgin/gtkwhiteboard.h
@@ -25,12 +25,6 @@
 
 #ifndef _PIDGINWHITEBOARD_H_
 #define _PIDGINWHITEBOARD_H_
-/**
- * SECTION:gtkwhiteboard
- * @section_id: pidgin-gtkwhiteboard
- * @short_description: <filename>gtkwhiteboard.h</filename>
- * @title: Whiteboard Frontend
- */
 
 G_BEGIN_DECLS
 
diff --git a/pidgin/gtkxfer.h b/pidgin/gtkxfer.h
--- a/pidgin/gtkxfer.h
+++ b/pidgin/gtkxfer.h
@@ -25,12 +25,6 @@
 
 #ifndef _PIDGINXFER_H_
 #define _PIDGINXFER_H_
-/**
- * SECTION:gtkxfer
- * @section_id: pidgin-gtkxfer
- * @short_description: <filename>gtkxfer.h</filename>
- * @title: File Transfer UI
- */
 
 #include <purple.h>
 
diff --git a/pidgin/meson.build b/pidgin/meson.build
--- a/pidgin/meson.build
+++ b/pidgin/meson.build
@@ -311,25 +311,17 @@
 	if enable_introspection
 		introspection_sources = libpidgin_headers + libpidgin_prefs_headers
 
-		Pidgin_gir_includes = [
-			'GObject-2.0', 'Gtk-3.0', 'GPlugin-1.0', 'GPluginGtk3-1.0',
-			'Talkatu-0.0',
-			# subproject needs to be before libpurple in the repo so that
-			# meson will use our variables and not try to discover them from
-			# libpurple.
-			libpurple_gir[0],
-		]
-
-		gnome.generate_gir(libpidgin,
+		pidgin_gir = gnome.generate_gir(libpidgin,
 			sources : introspection_sources,
-			includes : Pidgin_gir_includes,
+			header : 'pidgin.h',
+			includes : ['GLib-2.0', 'GObject-2.0', 'Gtk-3.0'],
 			namespace : 'Pidgin',
 			symbol_prefix : 'pidgin',
 			identifier_prefix : 'Pidgin',
 			export_packages : 'pidgin-@0@'.format(purple_major_version),
 			nsversion : '@0@.@1@'.format(purple_major_version,
 			                             purple_minor_version),
-			dependencies : [gplugin_dep, gplugin_gtk_dep, talkatu_dep],
+			dependencies : [gplugin_dep, gplugin_gtk_dep, talkatu_dep, libpurple_dep],
 			install : true,
 			extra_args : ['-DPIDGIN_COMPILATION', '--quiet'])
 	endif
diff --git a/pidgin/minidialog.h b/pidgin/minidialog.h
--- a/pidgin/minidialog.h
+++ b/pidgin/minidialog.h
@@ -25,12 +25,6 @@
 
 #ifndef PIDGIN_MINI_DIALOG_H
 #define PIDGIN_MINI_DIALOG_H
-/**
- * SECTION:minidialog
- * @section_id: pidgin-minidialog
- * @short_description: <filename>minidialog.h</filename>
- * @title: Mini Dialog Widget
- */
 
 #include <glib-object.h>
 #include <gtk/gtk.h>
@@ -95,12 +89,6 @@
 	GtkButton *button, gpointer user_data);
 
 /**
- * pidgin_mini_dialog_get_type:
- *
- * Get the GType of #PidginMiniDialog.
- */
-
-/**
  * pidgin_mini_dialog_new:
  *
  * Creates a new #PidginMiniDialog with a #GtkIconTheme icon. This is a
diff --git a/pidgin/pidginabout.h b/pidgin/pidginabout.h
--- a/pidgin/pidginabout.h
+++ b/pidgin/pidginabout.h
@@ -27,13 +27,6 @@
 #ifndef PIDGIN_ABOUT_H
 #define PIDGIN_ABOUT_H
 
-/**
- * SECTION:pidginabout
- * @section_id: pidgin-about
- * @short_description: <filename>pidginabout.h</filename>
- * @title: About Dialog
- */
-
 #include <gtk/gtk.h>
 
 G_BEGIN_DECLS
diff --git a/pidgin/pidginaccountactionsmenu.h b/pidgin/pidginaccountactionsmenu.h
--- a/pidgin/pidginaccountactionsmenu.h
+++ b/pidgin/pidginaccountactionsmenu.h
@@ -27,22 +27,19 @@
 #ifndef PIDGIN_ACCOUNT_ACTIONS_MENU_H
 #define PIDGIN_ACCOUNT_ACTIONS_MENU_H
 
-/**
- * SECTION:pidginaccountactionsmenu
- * @section_id: pidgin-account-actions-menu
- * @short_description: A menu for managing account actions
- * @title: Accounts Actions Menu
- *
- * #PidginAccountActionsMenu is a #GtkMenu that provides an interface for users
- * to edit accounts and activate the account's actions.
- */
-
 #include <gtk/gtk.h>
 
 #include <purple.h>
 
 G_BEGIN_DECLS
 
+/**
+ * PidginAccountActionsMenu:
+ *
+ * A #GtkMenu that provides an interface for users to edit accounts and
+ * activate the account's actions.
+ */
+
 #define PIDGIN_TYPE_ACCOUNT_ACTIONS_MENU (pidgin_account_actions_menu_get_type())
 G_DECLARE_FINAL_TYPE(PidginAccountActionsMenu, pidgin_account_actions_menu,
                      PIDGIN, ACCOUNT_ACTIONS_MENU, GtkMenu)
diff --git a/pidgin/pidginaccountchooser.h b/pidgin/pidginaccountchooser.h
--- a/pidgin/pidginaccountchooser.h
+++ b/pidgin/pidginaccountchooser.h
@@ -25,12 +25,6 @@
 
 #ifndef PIDGIN_ACCOUNT_CHOOSER_H
 #define PIDGIN_ACCOUNT_CHOOSER_H
-/**
- * SECTION:pidginaccountchooser
- * @section_id: pidgin-account-chooser
- * @short_description: A #GtkComboBox for choosing accounts
- * @title: Pidgin Account Chooser Combo Box Widget
- */
 
 #include <gtk/gtk.h>
 
diff --git a/pidgin/pidginaccountfilterconnected.h b/pidgin/pidginaccountfilterconnected.h
--- a/pidgin/pidginaccountfilterconnected.h
+++ b/pidgin/pidginaccountfilterconnected.h
@@ -23,21 +23,20 @@
 #ifndef PIDGIN_ACCOUNT_FILTER_CONNECTED_H
 #define PIDGIN_ACCOUNT_FILTER_CONNECTED_H
 
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
 /**
- * SECTION: pidginaccountfilterconnected
- * @section_id: pidgin-account-filter-connected
- * @short_description: A GtkTreeModelFilter that displays connected accounts.
- * @title: Account Connected Filter
+ * PidginAccountFilterConnected:
  *
  * #PidginAccountFilterConnected is a #GtkTreeModelFilter that will only show
  * accounts that are connected.  It's intended to be used with
  * #PidginAccountStore.
+ *
+ * Since: 3.0.0
  */
 
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
 #define PIDGIN_TYPE_ACCOUNT_FILTER_CONNECTED pidgin_account_filter_connected_get_type()
 G_DECLARE_FINAL_TYPE(PidginAccountFilterConnected,
                      pidgin_account_filter_connected, PIDGIN,
diff --git a/pidgin/pidginaccountfilterprotocol.h b/pidgin/pidginaccountfilterprotocol.h
--- a/pidgin/pidginaccountfilterprotocol.h
+++ b/pidgin/pidginaccountfilterprotocol.h
@@ -23,21 +23,20 @@
 #ifndef PIDGIN_ACCOUNT_FILTER_PROTOCOL_H
 #define PIDGIN_ACCOUNT_FILTER_PROTOCOL_H
 
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
 /**
- * SECTION:pidginaccountfilterprotocol
- * @section_id: pidgin-account-filter-protocol
- * @short_description: A GtkTreeModelFilter that displays the given protocol.
- * @title: Account Protocol Filter
+ * PidginAccountFilterProtocol:
  *
  * #PidginAccountFilterProtocol is a #GtkTreeModelFilter that will only show
  * accounts for the given protocol.  It's intended to be used with
  * #PidginAccountStore.
+ *
+ * Since: 3.0.0
  */
 
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
 #define PIDGIN_TYPE_ACCOUNT_FILTER_PROTOCOL pidgin_account_filter_protocol_get_type()
 G_DECLARE_FINAL_TYPE(PidginAccountFilterProtocol,
                      pidgin_account_filter_protocol, PIDGIN,
@@ -67,6 +66,8 @@
  * Gets the ID of the protocol that @filter is filtering for.
  *
  * Returns: The Protocol ID that @filter is filtering for.
+ *
+ * Since: 3.0.0
  */
 const gchar *pidgin_account_filter_protocol_get_protocol_id(PidginAccountFilterProtocol *filter);
 
diff --git a/pidgin/pidginaccountsmenu.h b/pidgin/pidginaccountsmenu.h
--- a/pidgin/pidginaccountsmenu.h
+++ b/pidgin/pidginaccountsmenu.h
@@ -27,23 +27,22 @@
 #ifndef PIDGIN_ACCOUNTS_MENU_H
 #define PIDGIN_ACCOUNTS_MENU_H
 
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
 /**
- * SECTION:pidginaccountsmenu
- * @section_id: pidgin-accounts-menu
- * @short_description: A menu for managing accounts and their actions
- * @title: Accounts Menu
+ * PidginAccountsMenu:
  *
  * #PidginAccountsMenu is a #GtkMenu that provides an interface to users to open
  * the account manager as well as activate account actions.
  *
  * It manages itself as accounts are created/deleted and enabled/disabled and
  * can be added as a submenu to any #GtkMenuItem.
+ *
+ * Since: 3.0.0
  */
 
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
 #define PIDGIN_TYPE_ACCOUNTS_MENU (pidgin_accounts_menu_get_type())
 G_DECLARE_FINAL_TYPE(PidginAccountsMenu, pidgin_accounts_menu, PIDGIN,
                      ACCOUNTS_MENU, GtkMenu)
diff --git a/pidgin/pidginaccountstore.h b/pidgin/pidginaccountstore.h
--- a/pidgin/pidginaccountstore.h
+++ b/pidgin/pidginaccountstore.h
@@ -23,21 +23,20 @@
 #ifndef PIDGIN_ACCOUNT_STORE_H
 #define PIDGIN_ACCOUNT_STORE_H
 
+#include <gtk/gtk.h>
+
+#include <purple.h>
+
 /**
- * SECTION:pidginaccountstore
- * @section_id: pidgin-account-store
- * @short_description: A GtkListStore that keeps track of accounts
- * @title: Account Store
+ * PidginAccountStore:
  *
  * #PidginAccountStore is a #GtkListStore that automatically keeps track of
  * what accounts are currently available in libpurple.  It's intended to be
  * used any time that you need to present an account selection to the user.
+ *
+ * Since: 3.0.0
  */
 
-#include <gtk/gtk.h>
-
-#include <purple.h>
-
 /**
  * PidginAccountStoreColumn:
  * @PIDGIN_ACCOUNT_STORE_COLUMN_ACCOUNT: This column holds a reference to the
diff --git a/pidgin/pidginactiongroup.h b/pidgin/pidginactiongroup.h
--- a/pidgin/pidginactiongroup.h
+++ b/pidgin/pidginactiongroup.h
@@ -27,21 +27,20 @@
 #ifndef PIDGIN_ACTION_GROUP_H
 #define PIDGIN_ACTION_GROUP_H
 
+#include <glib.h>
+
+#include <gio/gio.h>
+
 /**
- * SECTION:pidginactiongroup
- * @section_id: pidgin-action-group
- * @short_description: An action group for Pidgin
- * @title: Action Group
+ * PidginActionGroup:
  *
  * A #GSimpleActionGroup containing most of our actions.  A lot of this will
  * need to be added to the #GtkApplication, but I didn't want to do that part
  * quite yet, so I created this instead.
+ *
+ * Since: 3.0.0
  */
 
-#include <glib.h>
-
-#include <gio/gio.h>
-
 /**
  * PIDGIN_ACTION_SHOW_BUDDY_ICONS:
  *
diff --git a/pidgin/pidginapplication.h b/pidgin/pidginapplication.h
--- a/pidgin/pidginapplication.h
+++ b/pidgin/pidginapplication.h
@@ -27,21 +27,20 @@
 #ifndef PIDGIN_APPLICATION_H
 #define PIDGIN_APPLICATION_H
 
-/**
- * SECTION:pidginapplication
- * @section_id: pidgin-application
- * @short_description: A #GtkApplication subclass for Pidgin.
- * @title: Pidgin Application
- *
- * #PidginApplication is a subclass of #GtkApplication that holds all of the
- * application wide actions.
- */
-
 #include <glib.h>
 #include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
+/**
+ * PidginApplication:
+ *
+ * #PidginApplication is a subclass of #GtkApplication that holds all of the
+ * application wide actions.
+ *
+ * Since: 3.0.0
+ */
+
 #define PIDGIN_TYPE_APPLICATION (pidgin_application_get_type())
 G_DECLARE_FINAL_TYPE(PidginApplication, pidgin_application, PIDGIN,
                      APPLICATION, GtkApplication)
diff --git a/pidgin/pidginattachment.h b/pidgin/pidginattachment.h
--- a/pidgin/pidginattachment.h
+++ b/pidgin/pidginattachment.h
@@ -26,13 +26,6 @@
 #ifndef PIDGIN_ATTACHMENT_H
 #define PIDGIN_ATTACHMENT_H
 
-/**
- * SECTION:pidginattachment
- * @section_id: pidgin-pidginattachment
- * @short_description: <filename>pidginattachment.h</filename>
- * @title: Pidgin Attachment API
- */
-
 #include <purple.h>
 
 #include <talkatu.h>
diff --git a/pidgin/pidginavatar.h b/pidgin/pidginavatar.h
--- a/pidgin/pidginavatar.h
+++ b/pidgin/pidginavatar.h
@@ -27,16 +27,6 @@
 #ifndef PIDGIN_AVATAR_H
 #define PIDGIN_AVATAR_H
 
-/**
- * SECTION:pidginavatar
- * @section_id: pidgin-pidginavatar
- * @short_description: Avatars
- * @title: Avatar Widget
- *
- * #PidginAvatar is a widget that displays avatars for contacts or
- * conversations.
- */
-
 #include <glib.h>
 
 #include <gtk/gtk.h>
@@ -46,9 +36,12 @@
 G_BEGIN_DECLS
 
 /**
- * PIDGIN_TYPE_AVATAR:
+ * PidginAvatar:
  *
- * The standard _get_type macro for #PidginAvatar.
+ * #PidginAvatar is a widget that displays avatars for contacts or
+ * conversations.
+ *
+ * Since: 3.0.0
  */
 
 #define PIDGIN_TYPE_AVATAR (pidgin_avatar_get_type())
@@ -56,13 +49,6 @@
                      PIDGIN, AVATAR, GtkEventBox)
 
 /**
- * PidginAvatar:
- *
- * #PidginAvatar is an opaque data structure and should only be accessed via
- * its API.
- */
-
-/**
  * pidgin_avatar_new:
  *
  * Creates a new #PidginAvatar instance.
diff --git a/pidgin/pidgincellrendererexpander.h b/pidgin/pidgincellrendererexpander.h
--- a/pidgin/pidgincellrendererexpander.h
+++ b/pidgin/pidgincellrendererexpander.h
@@ -27,17 +27,14 @@
 #ifndef PIDGIN_CELL_RENDERER_EXPANDER_H
 #define PIDGIN_CELL_RENDERER_EXPANDER_H
 
+#include <gtk/gtk.h>
+
 /**
- * SECTION:pidgincellrendererexpander
- * @section_id: pidgin-cellrendererexpander
- * @short_description: <filename>pidgincellrendererexpander.h</filename>
- * @title: Cell Renderer Expander
+ * PidginCellRendererExpander:
  *
  * A #GtkCellRenderer that can hide its children.
  */
 
-#include <gtk/gtk.h>
-
 #define PIDGIN_TYPE_CELL_RENDERER_EXPANDER (pidgin_cell_renderer_expander_get_type())
 G_DECLARE_FINAL_TYPE(PidginCellRendererExpander, pidgin_cell_renderer_expander,
                      PIDGIN, CELL_RENDERER_EXPANDER, GtkCellRenderer)
diff --git a/pidgin/pidginclosebutton.h b/pidgin/pidginclosebutton.h
--- a/pidgin/pidginclosebutton.h
+++ b/pidgin/pidginclosebutton.h
@@ -26,22 +26,21 @@
 #ifndef PIDGIN_CLOSE_BUTTON_H
 #define PIDGIN_CLOSE_BUTTON_H
 
-/**
- * SECTION:pidginclosebutton
- * @section_id: pidgin-close-button
- * @short_description: A widget to close things.
- * @title: Close Button
- *
- * #PidginCloseButton is a transitional widget as we slowly migrate the
- * conversation window to glade.
- */
-
 #include <glib.h>
 
 #include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
+/**
+ * PidginCloseButton:
+ *
+ * #PidginCloseButton is a transitional widget as we slowly migrate the
+ * conversation window to glade.
+ *
+ * Since: 3.0.0
+ */
+
 #define PIDGIN_TYPE_CLOSE_BUTTON (pidgin_close_button_get_type())
 G_DECLARE_FINAL_TYPE(PidginCloseButton, pidgin_close_button, PIDGIN,
                      CLOSE_BUTTON, GtkButton)
diff --git a/pidgin/pidgincolor.h b/pidgin/pidgincolor.h
--- a/pidgin/pidgincolor.h
+++ b/pidgin/pidgincolor.h
@@ -24,15 +24,6 @@
 # error "only <pidgin.h> may be included directly"
 #endif
 
-/**
- * SECTION:pidgincolor
- * @section_id: pidgin-color
- * @short_description: Color related API
- * @title: Color API
- *
- * A collection of API to help with color.
- */
-
 #ifndef PIDGIN_COLOR_H
 #define PIDGIN_COLOR_H
 
diff --git a/pidgin/pidgincontactcompletion.h b/pidgin/pidgincontactcompletion.h
--- a/pidgin/pidgincontactcompletion.h
+++ b/pidgin/pidgincontactcompletion.h
@@ -26,11 +26,14 @@
 #ifndef PIDGIN_CONTACT_COMPLETION_H
 #define PIDGIN_CONTACT_COMPLETION_H
 
+#include <gtk/gtk.h>
+
+#include <purple.h>
+
+G_BEGIN_DECLS
+
 /**
- * SECTION:pidgincontactcompletion
- * @section_id: pidgin-contact-completion
- * @short_description: A GtkEntryCompletion for contacts
- * @title: Contact Name Completion
+ * PidginContactCompletion:
  *
  * #PidginContactCompletion should be treated like a normal
  * #GtkEntryCompletion, except it already does all of the setup for the
@@ -46,12 +49,6 @@
  * ]|
  */
 
-#include <gtk/gtk.h>
-
-#include <purple.h>
-
-G_BEGIN_DECLS
-
 #define PIDGIN_TYPE_CONTACT_COMPLETION  pidgin_contact_completion_get_type()
 
 G_DECLARE_FINAL_TYPE(PidginContactCompletion, pidgin_contact_completion, PIDGIN,
diff --git a/pidgin/pidgincontactlist.h b/pidgin/pidgincontactlist.h
--- a/pidgin/pidgincontactlist.h
+++ b/pidgin/pidgincontactlist.h
@@ -27,34 +27,18 @@
 #ifndef PIDGIN_CONTACT_LIST_H
 #define PIDGIN_CONTACT_LIST_H
 
-/**
- * SECTION:pidgincontactlist
- * @section_id: pidgin-contactlist
- * @short_description: The contact list widget.
- * @title: Contact list widget
- *
- * #PidginContactList is a transitional widget as we slowly migrate it into the
- * conversation window to make a single window application.
- */
-
 #include <glib.h>
 
 #include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
-/**
- * PIDGIN_TYPE_CONTACT_LIST:
- *
- * The standard _get_type method for #PidginContactList.
- *
- * Since: 3.0.0
- */
 
 /**
  * PidginContactList:
  *
- * A #GtkWindow that contains the main contact list.
+ * #PidginContactList is a transitional widget as we slowly migrate it into the
+ * conversation window to make a single window application.
  *
  * Since: 3.0.0
  */
diff --git a/pidgin/pidginconversationwindow.h b/pidgin/pidginconversationwindow.h
--- a/pidgin/pidginconversationwindow.h
+++ b/pidgin/pidginconversationwindow.h
@@ -27,21 +27,20 @@
 #ifndef PIDGIN_CONVERSATION_WINDOW_H
 #define PIDGIN_CONVERSATION_WINDOW_H
 
-/**
- * SECTION:pidginconversationwindow
- * @section_id: pidgin-pidginconversationwindow
- * @short_description: The main conversation window widget.
- * @title: Conversation window widget
- *
- * #PidginConversationWindow is a widget that contains #PidginConversations.
- */
-
 #include <glib.h>
 
 #include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
+/**
+ * PidginConversationWindow:
+ *
+ * #PidginConversationWindow is a widget that contains #PidginConversations.
+ *
+ * Since: 3.0.0
+ */
+
 #define PIDGIN_TYPE_CONVERSATION_WINDOW (pidgin_conversation_window_get_type())
 G_DECLARE_FINAL_TYPE(PidginConversationWindow, pidgin_conversation_window,
                      PIDGIN, CONVERSATION_WINDOW, GtkApplicationWindow)
diff --git a/pidgin/pidgincore.h b/pidgin/pidgincore.h
--- a/pidgin/pidgincore.h
+++ b/pidgin/pidgincore.h
@@ -25,14 +25,6 @@
 
 #ifndef PIDGIN_CORE_H
 #define PIDGIN_CORE_H
-/**
- * SECTION: pidgincore
- * @section_id: pidgin-pidgincore
- * @short_description: <filename>pidgincore.h</filename>
- * @title: UI Definitions and Includes
- *
- * The very core of Pidgin.
- */
 
 #include <glib.h>
 
diff --git a/pidgin/pidgindebug.h b/pidgin/pidgindebug.h
--- a/pidgin/pidgindebug.h
+++ b/pidgin/pidgindebug.h
@@ -25,12 +25,6 @@
 
 #ifndef PIDGIN_DEBUG_H
 #define PIDGIN_DEBUG_H
-/**
- * SECTION:pidgindebug
- * @section_id: pidgin-pidgindebug
- * @short_description: <filename>pidgindebug.h</filename>
- * @title: Debug API
- */
 
 #include <purple.h>
 
diff --git a/pidgin/pidgindialog.h b/pidgin/pidgindialog.h
--- a/pidgin/pidgindialog.h
+++ b/pidgin/pidgindialog.h
@@ -26,22 +26,19 @@
 #ifndef PIDGIN_DIALOG_H
 #define PIDGIN_DIALOG_H
 
-/**
- * SECTION:pidgindialog
- * @section_id: pidgin-dialog
- * @short_description: A base dialog widget.
- * @title: Dialog
- *
- * #PidginDialog is a transitional widget as we slowly migrate everything to
- * glade.
- */
-
 #include <glib.h>
 
 #include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
+/**
+ * PidginDialog:
+ *
+ * #PidginDialog is a transitional widget as we slowly migrate everything to
+ * glade.
+ */
+
 #define PIDGIN_TYPE_DIALOG (pidgin_dialog_get_type())
 G_DECLARE_FINAL_TYPE(PidginDialog, pidgin_dialog, PIDGIN,
                      DIALOG, GtkDialog)
diff --git a/pidgin/pidgingdkpixbuf.h b/pidgin/pidgingdkpixbuf.h
--- a/pidgin/pidgingdkpixbuf.h
+++ b/pidgin/pidgingdkpixbuf.h
@@ -31,13 +31,6 @@
 
 #include <purple.h>
 
-/**
- * SECTION:pidgingdkpixbuf
- * @section_id: pidgin-gdk-pixbuf
- * @short_description: <filename>pidgingdkpixbuf.h</filename>
- * @title: GDK Pixbuf Helpers
- */
-
 G_BEGIN_DECLS
 
 /**
diff --git a/pidgin/pidginiconname.h b/pidgin/pidginiconname.h
--- a/pidgin/pidginiconname.h
+++ b/pidgin/pidginiconname.h
@@ -27,16 +27,6 @@
 #ifndef PIDGIN_ICON_NAME_H
 #define PIDGIN_ICON_NAME_H
 
-/**
- * SECTION:pidginiconname
- * @section_id: pidgin-pidginiconname
- * @title: Icon Name Utilities
- * @short_description: Get icon names for objects.
- *
- * This API makes it easy to determine which icon should be used for different
- * objects.
- */
-
 #include <glib.h>
 
 #include <purple.h>
diff --git a/pidgin/pidgininfopane.h b/pidgin/pidgininfopane.h
--- a/pidgin/pidgininfopane.h
+++ b/pidgin/pidgininfopane.h
@@ -27,16 +27,6 @@
 #ifndef PIDGIN_INFO_PANE_H
 #define PIDGIN_INFO_PANE_H
 
-/**
- * SECTION:pidgininfopane
- * @section_id: pidgin-pidgininfopane
- * @short_description: The information pane
- * @title: Information Pane Widget
- *
- * #PidginInfoPane is a widget that displays information above
- * #PidginConversations.
- */
-
 #include <glib.h>
 
 #include <gtk/gtk.h>
@@ -45,6 +35,15 @@
 
 G_BEGIN_DECLS
 
+/**
+ * PidginInfoPane:
+ *
+ * #PidginInfoPane is a widget that displays information above
+ * #PidginConversations.
+ *
+ * Since: 3.0.0
+ */
+
 #define PIDGIN_TYPE_INFO_PANE (pidgin_info_pane_get_type())
 G_DECLARE_FINAL_TYPE(PidginInfoPane, pidgin_info_pane, PIDGIN, INFO_PANE,
                      GtkBox)
diff --git a/pidgin/pidgininvitedialog.h b/pidgin/pidgininvitedialog.h
--- a/pidgin/pidgininvitedialog.h
+++ b/pidgin/pidgininvitedialog.h
@@ -26,11 +26,14 @@
 #ifndef PIDGIN_INVITE_DIALOG_H
 #define PIDGIN_INVITE_DIALOG_H
 
+#include <gtk/gtk.h>
+
+#include <purple.h>
+
+G_BEGIN_DECLS
+
 /**
- * SECTION:pidgininvitedialog
- * @section_id: pidgin-invite-dialog
- * @short_description: A dialog widget to invite others to chat
- * @title: Invite Dialog
+ * PidginInviteDialog:
  *
  * #PidginInviteDialog is a simple #GtkDialog that presents the user with an
  * interface to invite another user to a conversation.  Name completion is
@@ -60,14 +63,7 @@
  * ]|
  */
 
-#include <gtk/gtk.h>
-
-#include <purple.h>
-
-G_BEGIN_DECLS
-
 #define PIDGIN_TYPE_INVITE_DIALOG  pidgin_invite_dialog_get_type()
-
 G_DECLARE_FINAL_TYPE(PidginInviteDialog, pidgin_invite_dialog, PIDGIN,
 		INVITE_DIALOG, GtkDialog)
 
diff --git a/pidgin/pidginmenutray.h b/pidgin/pidginmenutray.h
--- a/pidgin/pidginmenutray.h
+++ b/pidgin/pidginmenutray.h
@@ -24,13 +24,6 @@
 #ifndef PIDGIN_MENU_TRAY_H
 #define PIDGIN_MENU_TRAY_H
 
-/**
- * SECTION:pidginmenutray
- * @section_id: pidgin-menu-tray
- * @short_description: <filename>pidginmenutray.h</filename>
- * @title: Tray Menu Item
- */
-
 #include <gtk/gtk.h>
 
 G_BEGIN_DECLS
diff --git a/pidgin/pidginmessage.h b/pidgin/pidginmessage.h
--- a/pidgin/pidginmessage.h
+++ b/pidgin/pidginmessage.h
@@ -27,21 +27,20 @@
 #ifndef PIDGIN_MESSAGE_H
 #define PIDGIN_MESSAGE_H
 
-/**
- * SECTION:pidginmessage
- * @section_id: pidgin-pidginmessage
- * @short_description: <filename>pidginmessage.h</filename>
- * @title: Pidgin Message API
- *
- * #PidginMessage maps a #PurpleMessage to a #TalkatuMessage.
- */
-
 #include <purple.h>
 
 #include <talkatu.h>
 
 G_BEGIN_DECLS
 
+/**
+ * PidginMessage:
+ *
+ * #PidginMessage maps a #PurpleMessage to a #TalkatuMessage.
+ *
+ * Since: 3.0.0
+ */
+
 #define PIDGIN_TYPE_MESSAGE (pidgin_message_get_type())
 G_DECLARE_FINAL_TYPE(PidginMessage, pidgin_message, PIDGIN, MESSAGE, GObject)
 
diff --git a/pidgin/pidginmooddialog.h b/pidgin/pidginmooddialog.h
--- a/pidgin/pidginmooddialog.h
+++ b/pidgin/pidginmooddialog.h
@@ -27,15 +27,6 @@
 #ifndef PIDGIN_MOOD_DIALOG_H
 #define PIDGIN_MOOD_DIALOG_H
 
-/**
- * SECTION:pidginmooddialog
- * @section_id: pidgin-mood-dialog
- * @short_description: A dialog for selecting moods
- * @title: Mood Dialog
- *
- * A simple dialog for selecting a global mood as well as a per account mood.
- */
-
 #include <glib.h>
 
 #include <gtk/gtk.h>
diff --git a/pidgin/pidginplugininfo.h b/pidgin/pidginplugininfo.h
--- a/pidgin/pidginplugininfo.h
+++ b/pidgin/pidginplugininfo.h
@@ -34,6 +34,14 @@
 
 G_BEGIN_DECLS
 
+/**
+ * PidginPluginInfo:
+ *
+ * A #GPluginPluginInfo subclass that adds some Pidgin specific properties.
+ *
+ * Since: 3.0.0
+ */
+
 #define PIDGIN_TYPE_PLUGIN_INFO (pidgin_plugin_info_get_type())
 G_DECLARE_FINAL_TYPE(PidginPluginInfo, pidgin_plugin_info, PIDGIN, PLUGIN_INFO, PurplePluginInfo)
 
diff --git a/pidgin/pidginpluginsdialog.h b/pidgin/pidginpluginsdialog.h
--- a/pidgin/pidginpluginsdialog.h
+++ b/pidgin/pidginpluginsdialog.h
@@ -27,17 +27,16 @@
 #ifndef PIDGIN_PLUGINS_DIALOG_H
 #define PIDGIN_PLUGINS_DIALOG_H
 
-/**
- * SECTION:pidginpluginsdialog
- * @section_id: pidgin-plugins-dialog
- * @short_description: A widget to display available plugins
- * @title: Plugins Dialog
- */
-
 #include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
+/**
+ * PidginPluginsDialog:
+ *
+ * A dialog that allows the user to configure their plugins.
+ */
+
 #define PIDGIN_TYPE_PLUGINS_DIALOG (pidgin_plugins_dialog_get_type())
 G_DECLARE_FINAL_TYPE(PidginPluginsDialog, pidgin_plugins_dialog, PIDGIN,
 		PLUGINS_DIALOG, GtkDialog)
diff --git a/pidgin/pidginpluginsmenu.h b/pidgin/pidginpluginsmenu.h
--- a/pidgin/pidginpluginsmenu.h
+++ b/pidgin/pidginpluginsmenu.h
@@ -27,23 +27,22 @@
 #ifndef PIDGIN_PLUGINS_MENU_H
 #define PIDGIN_PLUGINS_MENU_H
 
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
 /**
- * SECTION:pidginpluginsmenu
- * @section_id: pidgin-plugins-menu
- * @short_description: A menu for managing plugins and their actions
- * @title: Plugins Menu
+ * PidginPluginsMenu:
  *
  * #PidginPluginsMenu is a #GtkMenu that provides an interface to users to open
  * the plugin manager as well as activate plugin actions.
  *
  * It manages itself as plugins are loaded and unloaded and can be added as a
  * submenu to any #GtkMenuItem.
+ *
+ * Since: 3.0.0
  */
 
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
 #define PIDGIN_TYPE_PLUGINS_MENU (pidgin_plugins_menu_get_type())
 G_DECLARE_FINAL_TYPE(PidginPluginsMenu, pidgin_plugins_menu, PIDGIN,
                      PLUGINS_MENU, GtkMenu)
diff --git a/pidgin/pidginpresenceicon.h b/pidgin/pidginpresenceicon.h
--- a/pidgin/pidginpresenceicon.h
+++ b/pidgin/pidginpresenceicon.h
@@ -27,20 +27,19 @@
 #ifndef PIDGIN_PRESENCE_ICON_H
 #define PIDGIN_PRESENCE_ICON_H
 
+#include <gtk/gtk.h>
+
+#include <purple.h>
+
 /**
- * SECTION:pidginpresenceicon
- * @section_id: pidgin-pidginpresenceicon
- * @short_description: Icons for presences
- * @title: Presence Icons
+ * PidginPresenceIcon:
  *
  * A #GtkImage subclass that will automatically update when the given presence
  * changes.
+ *
+ * Since: 3.0.0
  */
 
-#include <gtk/gtk.h>
-
-#include <purple.h>
-
 #define PIDGIN_TYPE_PRESENCE_ICON (pidgin_presence_icon_get_type())
 G_DECLARE_FINAL_TYPE(PidginPresenceIcon, pidgin_presence_icon,
                      PIDGIN, PRESENCE_ICON, GtkImage)
diff --git a/pidgin/pidginprotocolchooser.h b/pidgin/pidginprotocolchooser.h
--- a/pidgin/pidginprotocolchooser.h
+++ b/pidgin/pidginprotocolchooser.h
@@ -28,13 +28,6 @@
 #ifndef PIDGIN_PROTOCOL_CHOOSER_H
 #define PIDGIN_PROTOCOL_CHOOSER_H
 
-/**
- * SECTION:pidginprotocolchooser
- * @section_id: pidgin-protocol-chooser
- * @short_description: A #GtkComboBox for choosing protocols
- * @title: Pidgin Protocol Chooser Combo Box Widget
- */
-
 #include <gtk/gtk.h>
 
 #include <purple.h>
diff --git a/pidgin/pidginprotocolstore.h b/pidgin/pidginprotocolstore.h
--- a/pidgin/pidginprotocolstore.h
+++ b/pidgin/pidginprotocolstore.h
@@ -27,14 +27,13 @@
 #define PIDGIN_PROTOCOL_STORE_H
 
 /**
- * SECTION:pidginprotocolstore
- * @section_id: pidgin-protocol-store
- * @short_description: A GtkListStore that keeps track of protocols
- * @title: Protocol Store
+ * PidginProtocolStore:
  *
  * #PidginProtocolStore is a #GtkListStore that automatically keeps track of
  * what protocols are currently available in libpurple.  It's intended to be
  * used any time that you need to present a protocol selection to the user.
+ *
+ * Since: 3.0.0
  */
 
 #include <gtk/gtk.h>
diff --git a/pidgin/pidginscrollbook.h b/pidgin/pidginscrollbook.h
--- a/pidgin/pidginscrollbook.h
+++ b/pidgin/pidginscrollbook.h
@@ -27,9 +27,7 @@
 #ifndef PIDGIN_SCROLL_BOOK_H
 #define PIDGIN_SCROLL_BOOK_H
 /**
- * SECTION:pidginscrollbook
- * @section_id: pidgin-pidginscrollbook
- * @title: Scrolling Notebook Widget
+ * PidginScrollBook:
  *
  * This widget is used to show error messages in the buddy list window.
  */
diff --git a/pidgin/pidginstock.h b/pidgin/pidginstock.h
--- a/pidgin/pidginstock.h
+++ b/pidgin/pidginstock.h
@@ -25,12 +25,6 @@
 
 #ifndef _PIDGIN_STOCK_H_
 #define _PIDGIN_STOCK_H_
-/**
- * SECTION:pidginstock
- * @section_id: pidgin-pidginstock
- * @short_description: <filename>pidginstock.h</filename>
- * @title: Stock Resources
- */
 
 #include <gtk/gtk.h>
 #include "gtkstatus-icon-theme.h"
diff --git a/pidgin/pidginstylecontext.h b/pidgin/pidginstylecontext.h
--- a/pidgin/pidginstylecontext.h
+++ b/pidgin/pidginstylecontext.h
@@ -24,15 +24,6 @@
 # error "only <pidgin.h> may be included directly"
 #endif
 
-/**
- * SECTION:pidginstylecontext
- * @section_id: pidgin-pidginstylecontext
- * @short_description: Dark theme helpers.
- * @title: GtkStyleContext Helpers
- *
- * A collection of API to help with handling dark themes.
- */
-
 #ifndef PIDGIN_STYLE_CONTEXT_H
 #define PIDGIN_STYLE_CONTEXT_H
 
diff --git a/pidgin/pidgintalkatu.h b/pidgin/pidgintalkatu.h
--- a/pidgin/pidgintalkatu.h
+++ b/pidgin/pidgintalkatu.h
@@ -26,13 +26,6 @@
 #ifndef PIDGIN_TALKATU_H
 #define PIDGIN_TALKATU_H
 
-/**
- * SECTION:pidgintalkatu
- * @section_id: pidgin-talkatu
- * @short_description: <filename>pidgintalkatu.h</filename>
- * @title: Talkatu Helpers
- */
-
 #include <gtk/gtk.h>
 
 #include <talkatu.h>
