pidgin/pidgin

Parents db971edd4b59
Children 89319cf6fa50
Add a doc-check unit test to libpurple and fix the issues it has found

Testing Done:
Ran ninja turtles

Reviewed at https://reviews.imfreedom.org/r/3050/
  • +24 -0
    doc/reference/libpurple/libpurple.toml.in
  • +13 -0
    doc/reference/libpurple/meson.build
  • +8 -0
    libpurple/action.h
  • +7 -0
    libpurple/blistnode.c
  • +2 -0
    libpurple/blistnode.h
  • +51 -0
    libpurple/buddy.c
  • +2 -0
    libpurple/buddyicon.h
  • +21 -0
    libpurple/chat.c
  • +28 -0
    libpurple/circularbuffer.c
  • +7 -0
    libpurple/circularbuffer.h
  • +2 -0
    libpurple/cmds.h
  • +52 -1
    libpurple/connection.c
  • +14 -0
    libpurple/contact.c
  • +10 -1
    libpurple/core.h
  • +21 -0
    libpurple/countingnode.c
  • +7 -0
    libpurple/group.c
  • +1 -0
    libpurple/idle.h
  • +21 -0
    libpurple/image.c
  • +0 -7
    libpurple/media/backend-iface.h
  • +16 -0
    libpurple/notify.h
  • +16 -0
    libpurple/plugins.h
  • +2 -0
    libpurple/prefs.h
  • +2 -0
    libpurple/purpleaccount.h
  • +1 -0
    libpurple/purpleaccountmanager.h
  • +7 -0
    libpurple/purpleaccountpresence.c
  • +2 -0
    libpurple/purpleattachment.h
  • +7 -0
    libpurple/purplebuddypresence.c
  • +2 -2
    libpurple/purplechatconversation.c
  • +28 -0
    libpurple/purplechatuser.c
  • +2 -0
    libpurple/purpleconnectionerrorinfo.h
  • +2 -9
    libpurple/purplecontactinfo.h
  • +28 -0
    libpurple/purpleconversation.c
  • +2 -0
    libpurple/purpleconversation.h
  • +1 -4
    libpurple/purpledebugui.h
  • +2 -0
    libpurple/purplefiletransfer.h
  • +1 -1
    libpurple/purpleidlemanager.c
  • +1 -1
    libpurple/purpleidleui.h
  • +7 -0
    libpurple/purpleimconversation.c
  • +7 -0
    libpurple/purplemenu.h
  • +3 -3
    libpurple/purplemessage.c
  • +1 -1
    libpurple/purplemessage.h
  • +19 -0
    libpurple/purplenotification.h
  • +2 -2
    libpurple/purpleperson.h
  • +7 -0
    libpurple/purpleplugininfo.c
  • +3 -0
    libpurple/purpleprotocol.h
  • +0 -18
    libpurple/purpleprotocolactions.h
  • +0 -30
    libpurple/purpleprotocolchat.h
  • +0 -65
    libpurple/purpleprotocolclient.h
  • +0 -9
    libpurple/purpleprotocolcontacts.h
  • +2 -2
    libpurple/purpleprotocolconversation.h
  • +0 -7
    libpurple/purpleprotocolfiletransfer.h
  • +0 -21
    libpurple/purpleprotocolim.h
  • +0 -25
    libpurple/purpleprotocolmedia.h
  • +3 -11
    libpurple/purpleprotocolroomlist.h
  • +0 -20
    libpurple/purpleprotocolroster.h
  • +0 -34
    libpurple/purpleprotocolserver.h
  • +0 -10
    libpurple/purpleprotocolwhiteboard.h
  • +7 -0
    libpurple/purpleproxyinfo.h
  • +28 -0
    libpurple/purpleroomlistroom.c
  • +3 -1
    libpurple/purpleroomlistroom.h
  • +20 -0
    libpurple/purpleversion.h
  • +28 -0
    libpurple/purplewhiteboard.c
  • +33 -1
    libpurple/request-datasheet.h
  • +39 -0
    libpurple/request.h
  • +2 -0
    libpurple/request/purplerequestfield.h
  • +1 -1
    libpurple/request/purplerequestfieldlist.c
  • +14 -0
    libpurple/roomlist.c
  • +7 -0
    libpurple/roomlist.h
  • +7 -0
    libpurple/savedstatuses.h
  • +5 -1
    libpurple/server.h
  • +21 -0
    libpurple/status.c
  • +8 -0
    libpurple/status.h
  • +28 -0
    libpurple/tests.h
  • +8 -0
    libpurple/util.h
  • +90 -2
    libpurple/xfer.c
  • +2 -6
    libpurple/xfer.h
  • --- a/doc/reference/libpurple/libpurple.toml.in Wed Apr 03 16:32:56 2024 -0500
    +++ b/doc/reference/libpurple/libpurple.toml.in Tue Apr 09 21:50:31 2024 -0500
    @@ -54,3 +54,27 @@
    content_images = [
    ]
    urlmap_file = "urlmap.js"
    +
    +[[object]]
    +pattern = "DEPRECATED_IN_*"
    +hidden = true
    +
    +[[object]]
    +name = "DEPRECATED_FOR"
    +hidden = true
    +
    +[[object]]
    +name = "UNAVAILABLE"
    +hidden = true
    +
    +[[object]]
    +name = "UNAVAILABLE_MACRO"
    +hidden = true
    +
    +[[object]]
    +name = "UNAVAILABLE_STATIC_INLINE"
    +hidden = true
    +
    +[[object]]
    +name = "UNAVAILABLE_TYPE"
    +hidden = true
    \ No newline at end of file
    --- a/doc/reference/libpurple/meson.build Wed Apr 03 16:32:56 2024 -0500
    +++ b/doc/reference/libpurple/meson.build Tue Apr 09 21:50:31 2024 -0500
    @@ -44,5 +44,18 @@
    install : true,
    install_dir : docs_dir,
    )
    +
    + test('doc-check',
    + gidocgen,
    + args: [
    + 'check',
    + '--config', libpurple_toml,
    + '--add-include-path=@0@'.format(meson.global_build_root() / 'subprojects/birb/birb'),
    + '--add-include-path=@0@'.format(meson.global_build_root() / 'subprojects/gplugin/gplugin'),
    + libpurple_gir[0],
    + ],
    + depends: libpurple_gir[0],
    + verbose: true,
    + )
    endif
    --- a/libpurple/action.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/action.h Tue Apr 09 21:50:31 2024 -0500
    @@ -37,6 +37,14 @@
    PURPLE_AVAILABLE_TYPE_IN_3_0
    typedef struct _PurpleProtocolAction PurpleProtocolAction;
    +/**
    + * PurpleProtocolActionCallback:
    + * @action: The action that was activated.
    + *
    + * The callback function for [type@ProtocolAction].
    + *
    + * Since: 3.0
    + */
    PURPLE_AVAILABLE_TYPE_IN_3_0
    typedef void (*PurpleProtocolActionCallback)(PurpleProtocolAction *action);
    --- a/libpurple/blistnode.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/blistnode.c Tue Apr 09 21:50:31 2024 -0500
    @@ -373,6 +373,13 @@
    obj_class->get_property = purple_blist_node_get_property;
    obj_class->set_property = purple_blist_node_set_property;
    + /**
    + * PurpleBlistNode:transient:
    + *
    + * If %TRUE the node will not be saved to the contact list.
    + *
    + * Since: 3.0
    + */
    properties[PROP_TRANSIENT] = g_param_spec_boolean("transient",
    "Transient",
    "Whether node should not be saved with the buddy list.",
    --- a/libpurple/blistnode.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/blistnode.h Tue Apr 09 21:50:31 2024 -0500
    @@ -319,6 +319,8 @@
    * purple_blist_node_get_extended_menu:
    * @n: The blist node for which to obtain the extended menu items.
    *
    + * Emits the blist-node-extended-menu signal and returns the results.
    + *
    * Returns: (element-type PurpleActionMenu) (transfer full): The extended menu
    * items for a buddy list node, as harvested by the
    * blist-node-extended-menu signal.
    --- a/libpurple/buddy.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/buddy.c Tue Apr 09 21:50:31 2024 -0500
    @@ -257,41 +257,92 @@
    NULL,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleBuddy:name:
    + *
    + * The name of the buddy.
    + *
    + * Since: 3.0
    + */
    properties[PROP_NAME] = g_param_spec_string(
    "name", "Name",
    "The name of the buddy.",
    NULL,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleBuddy:local-alias:
    + *
    + * An alias for the buddy created by the libpurple user.
    + *
    + * Since: 3.0
    + */
    properties[PROP_LOCAL_ALIAS] = g_param_spec_string(
    "local-alias", "Local alias",
    "Local alias of thee buddy.",
    NULL,
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleBuddy:server-alias:
    + *
    + * An alias that is created by the remote user.
    + *
    + * This is typically called a display name now.
    + *
    + * Since: 3.0
    + */
    properties[PROP_SERVER_ALIAS] = g_param_spec_string(
    "server-alias", "Server alias",
    "Server-side alias of the buddy.",
    NULL,
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleBuddy:icon:
    + *
    + * An avatar for the buddy.
    + *
    + * Since: 3.0
    + */
    properties[PROP_ICON] = g_param_spec_pointer(
    "icon", "Buddy icon",
    "The icon for the buddy.",
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleBuddy:account:
    + *
    + * The [class@Account] that this buddy belongs to.
    + *
    + * Since: 3.0
    + */
    properties[PROP_ACCOUNT] = g_param_spec_object(
    "account", "Account",
    "The account for the buddy.",
    PURPLE_TYPE_ACCOUNT,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleBuddy:presence:
    + *
    + * The [class@Presence] for this buddy.
    + *
    + * Since: 3.0
    + */
    properties[PROP_PRESENCE] = g_param_spec_object(
    "presence", "Presence",
    "The status information for the buddy.",
    PURPLE_TYPE_PRESENCE,
    G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleBuddy:media-caps:
    + *
    + * The media caps for this buddy.
    + *
    + * Since: 3.0
    + */
    properties[PROP_MEDIA_CAPS] = g_param_spec_enum(
    "media-caps", "Media capabilities",
    "The media capabilities of the buddy.",
    --- a/libpurple/buddyicon.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/buddyicon.h Tue Apr 09 21:50:31 2024 -0500
    @@ -59,6 +59,8 @@
    * @PURPLE_ICON_SCALE_DISPLAY: We scale the icon when we display it
    * @PURPLE_ICON_SCALE_SEND: We scale the icon before we send it to the server
    *
    + * Flags for when an icon should be scaled.
    + *
    * Since: 2.0
    */
    typedef enum /*< flags >*/
    --- a/libpurple/chat.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/chat.c Tue Apr 09 21:50:31 2024 -0500
    @@ -265,6 +265,13 @@
    obj_class->set_property = purple_chat_set_property;
    obj_class->constructed = purple_chat_constructed;
    + /**
    + * PurpleChat:alias:
    + *
    + * The alias of the chat.
    + *
    + * Since: 3.0
    + */
    properties[PROP_ALIAS] = g_param_spec_string(
    "alias",
    "Alias",
    @@ -273,6 +280,13 @@
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS
    );
    + /**
    + * PurpleChat:account:
    + *
    + * The account that the chat belongs to.
    + *
    + * Since: 3.0
    + */
    properties[PROP_ACCOUNT] = g_param_spec_object(
    "account",
    "Account",
    @@ -281,6 +295,13 @@
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS
    );
    + /**
    + * PurpleChat:components:
    + *
    + * The components for the chat.
    + *
    + * Since: 3.0
    + */
    properties[PROP_COMPONENTS] = g_param_spec_pointer(
    "components",
    "Components",
    --- a/libpurple/circularbuffer.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/circularbuffer.c Tue Apr 09 21:50:31 2024 -0500
    @@ -315,19 +315,47 @@
    buffer_class->max_read_size = purple_circular_buffer_real_max_read_size;
    buffer_class->mark_read = purple_circular_buffer_real_mark_read;
    + /**
    + * PurpleCircularBuffer:grow-size:
    + *
    + * The grow size of the buffer.
    + *
    + * Since: 3.0
    + */
    properties[PROP_GROW_SIZE] = g_param_spec_uint64(
    "grow-size", "grow-size", "The grow size of the buffer", 0,
    G_MAXSIZE, 0,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleCircularBuffer:buffer-used:
    + *
    + * How much of the buffer that has been used.
    + *
    + * Since: 3.0
    + */
    properties[PROP_BUFFER_USED] = g_param_spec_uint64(
    "buffer-used", "buffer-used", "The amount of the buffer used", 0,
    G_MAXSIZE, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleCircularBuffer:input:
    + *
    + * The input pointer of the buffer.
    + *
    + * Since: 3.0
    + */
    properties[PROP_INPUT] = g_param_spec_pointer("input", "input",
    "The input pointer of the buffer",
    G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleCircularBuffer:output:
    + *
    + * The output pointer of the buffer.
    + *
    + * Since: 3.0
    + */
    properties[PROP_OUTPUT] = g_param_spec_pointer("output", "output",
    "The output pointer of the buffer",
    G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
    --- a/libpurple/circularbuffer.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/circularbuffer.h Tue Apr 09 21:50:31 2024 -0500
    @@ -34,6 +34,13 @@
    G_BEGIN_DECLS
    +/**
    + * PurpleCircularBuffer:
    + *
    + * A circular buffer implementation.
    + *
    + * Since: 3.0
    + */
    #define PURPLE_TYPE_CIRCULAR_BUFFER (purple_circular_buffer_get_type())
    PURPLE_AVAILABLE_IN_3_0
    --- a/libpurple/cmds.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/cmds.h Tue Apr 09 21:50:31 2024 -0500
    @@ -91,6 +91,8 @@
    *
    * A function implementing a command, as passed to purple_cmd_register().
    *
    + * Returns: The result of the command.
    + *
    * Since: 2.0
    */
    typedef PurpleCmdRet (*PurpleCmdFunc)(PurpleConversation *conversation, const gchar *cmd,
    --- a/libpurple/connection.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/connection.c Tue Apr 09 21:50:31 2024 -0500
    @@ -893,9 +893,16 @@
    klass->connect = purple_connection_default_connect;
    klass->disconnect = purple_connection_default_disconnect;
    + /**
    + * PurpleConnection:id:
    + *
    + * The unique identifier for the connection.
    + *
    + * Since: 3.0
    + */
    properties[PROP_ID] = g_param_spec_string(
    "id", "id",
    - "The identifier of the account",
    + "The identifier of the connection",
    NULL,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
    @@ -915,34 +922,78 @@
    G_TYPE_CANCELLABLE,
    G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleConnection:protocol:
    + *
    + * The protocol that this connection is for.
    + *
    + * Since: 3.0
    + */
    properties[PROP_PROTOCOL] = g_param_spec_object(
    "protocol", "Protocol",
    "The protocol that the connection is using.",
    PURPLE_TYPE_PROTOCOL,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleConnection:flags:
    + *
    + * The flags for this connection.
    + *
    + * Since: 3.0
    + */
    properties[PROP_FLAGS] = g_param_spec_flags(
    "flags", "Connection flags",
    "The flags of the connection.",
    PURPLE_TYPE_CONNECTION_FLAGS, 0,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleConnection:state:
    + *
    + * The state of the connection.
    + *
    + * Since: 3.0
    + */
    properties[PROP_STATE] = g_param_spec_enum(
    "state", "Connection state",
    "The current state of the connection.",
    PURPLE_TYPE_CONNECTION_STATE, PURPLE_CONNECTION_STATE_DISCONNECTED,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleConnection:account:
    + *
    + * The account this connection belongs to.
    + *
    + * Since: 3.0
    + */
    properties[PROP_ACCOUNT] = g_param_spec_object(
    "account", "Account",
    "The account using the connection.", PURPLE_TYPE_ACCOUNT,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleConnection:password:
    + *
    + * The password for this connection.
    + *
    + * This is only stored for reconnections and may go away in the future.
    + *
    + * Since: 3.0
    + */
    properties[PROP_PASSWORD] = g_param_spec_string(
    "password", "Password",
    "The password used for connection.", NULL,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleConnection:display-name:
    + *
    + * The display name for the account.
    + *
    + * Since: 3.0
    + */
    properties[PROP_DISPLAY_NAME] = g_param_spec_string(
    "display-name", "Display name",
    "Your name that appears to other people.", NULL,
    --- a/libpurple/contact.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/contact.c Tue Apr 09 21:50:31 2024 -0500
    @@ -328,6 +328,13 @@
    obj_class->get_property = purple_meta_contact_get_property;
    obj_class->set_property = purple_meta_contact_set_property;
    + /**
    + * PurpleMetaContact:alias:
    + *
    + * The alias for the contact.
    + *
    + * Since: 3.0
    + */
    properties[PROP_ALIAS] = g_param_spec_string(
    "alias",
    "Alias",
    @@ -336,6 +343,13 @@
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS
    );
    + /**
    + * PurpleMetaContact:priority-buddy:
    + *
    + * The priority buddy of the contact.
    + *
    + * Since: 3.0
    + */
    properties[PROP_PRIORITY_BUDDY] = g_param_spec_object(
    "priority-buddy",
    "Priority buddy",
    --- a/libpurple/core.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/core.h Tue Apr 09 21:50:31 2024 -0500
    @@ -33,6 +33,15 @@
    #include "purpleui.h"
    #include "purpleversion.h"
    +/**
    + * PurpleCore:
    + *
    + * The core instance for libpurple.
    + *
    + * This is primarily used for connecting to signals.
    + *
    + * Since: 2.0
    + */
    typedef struct PurpleCore PurpleCore;
    G_BEGIN_DECLS
    @@ -117,7 +126,7 @@
    PurpleUi *purple_core_get_ui(void);
    /**
    - * purple_get_local_dir:
    + * purple_get_locale_dir:
    *
    * Gets the search directory for translations.
    *
    --- a/libpurple/countingnode.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/countingnode.c Tue Apr 09 21:50:31 2024 -0500
    @@ -220,6 +220,13 @@
    obj_class->get_property = purple_counting_node_get_property;
    obj_class->set_property = purple_counting_node_set_property;
    + /**
    + * PurpleCountingNode:total-size:
    + *
    + * The number of children under this node.
    + *
    + * Since: 3.0
    + */
    properties[PROP_TOTAL_SIZE] = g_param_spec_int(
    "total-size",
    "Total size",
    @@ -228,6 +235,13 @@
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS
    );
    + /**
    + * PurpleCountingNode:current-size:
    + *
    + * The number of children with online accounts.
    + *
    + * Since: 3.0
    + */
    properties[PROP_CURRENT_SIZE] = g_param_spec_int(
    "current-size",
    "Current size",
    @@ -236,6 +250,13 @@
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS
    );
    + /**
    + * PurpleCountingNode:online-count:
    + *
    + * The number of children that are online.
    + *
    + * Since: 3.0
    + */
    properties[PROP_ONLINE_COUNT] = g_param_spec_int(
    "online-count",
    "Online count",
    --- a/libpurple/group.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/group.c Tue Apr 09 21:50:31 2024 -0500
    @@ -331,6 +331,13 @@
    obj_class->get_property = purple_group_get_property;
    obj_class->set_property = purple_group_set_property;
    + /**
    + * PurpleGroup:name:
    + *
    + * The name of the group.
    + *
    + * Since: 3.0
    + */
    properties[PROP_NAME] = g_param_spec_string(
    "name",
    "Name",
    --- a/libpurple/idle.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/idle.h Tue Apr 09 21:50:31 2024 -0500
    @@ -53,6 +53,7 @@
    /**
    * purple_idle_set:
    + * @time: The time to set the idle time to.
    *
    * Fake our idle time by setting the time at which our
    * accounts purportedly became idle. This is used by
    --- a/libpurple/image.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/image.c Tue Apr 09 21:50:31 2024 -0500
    @@ -140,6 +140,13 @@
    gobj_class->get_property = purple_image_get_property;
    gobj_class->set_property = purple_image_set_property;
    + /**
    + * PurpleImage:path:
    + *
    + * The file path for the image if one was provided.
    + *
    + * Since: 3.0
    + */
    properties[PROP_PATH] = g_param_spec_string(
    "path",
    "path",
    @@ -148,6 +155,13 @@
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS
    );
    + /**
    + * PurpleImage:contents:
    + *
    + * The contents of the image.
    + *
    + * Since: 3.0
    + */
    properties[PROP_CONTENTS] = g_param_spec_boxed(
    "contents",
    "contents",
    @@ -156,6 +170,13 @@
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS
    );
    + /**
    + * PurpleImage:size:
    + *
    + * The size of the image in bytes.
    + *
    + * Since: 3.0
    + */
    properties[PROP_SIZE] = g_param_spec_uint64(
    "size",
    "size",
    --- a/libpurple/media/backend-iface.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/media/backend-iface.h Tue Apr 09 21:50:31 2024 -0500
    @@ -50,13 +50,6 @@
    */
    typedef struct _PurpleMediaBackend PurpleMediaBackend;
    -/**
    - * PurpleMediaBackendInterface:
    - *
    - * A structure to derive media backends from.
    - *
    - * Since: 3.0
    - */
    typedef struct _PurpleMediaBackendInterface PurpleMediaBackendInterface;
    struct _PurpleMediaBackendInterface
    --- a/libpurple/notify.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/notify.h Tue Apr 09 21:50:31 2024 -0500
    @@ -33,8 +33,22 @@
    #include "purpleversion.h"
    +/**
    + * PurpleNotifyUserInfoEntry:
    + *
    + * A entry for the user information.
    + *
    + * Since: 2.0
    + */
    typedef struct _PurpleNotifyUserInfoEntry PurpleNotifyUserInfoEntry;
    +/**
    + * PurpleNotifyUserInfo:
    + *
    + * A collection of user information entries.
    + *
    + * Since: 2.0
    + */
    #define PURPLE_TYPE_NOTIFY_USER_INFO (purple_notify_user_info_get_type())
    typedef struct _PurpleNotifyUserInfo PurpleNotifyUserInfo;
    @@ -556,6 +570,8 @@
    * Create a textual representation of a PurpleNotifyUserInfo, separating
    * entries with newline
    *
    + * Returns: (transfer full): The text.
    + *
    * Since: 2.0
    */
    PURPLE_AVAILABLE_IN_ALL
    --- a/libpurple/plugins.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/plugins.h Tue Apr 09 21:50:31 2024 -0500
    @@ -33,6 +33,12 @@
    #define PURPLE_PLUGINS_DOMAIN (g_quark_from_static_string("plugins"))
    #define PURPLE_TYPE_PLUGIN GPLUGIN_TYPE_PLUGIN
    +/**
    + * PURPLE_PLUGIN:
    + * @obj: The instance.
    + *
    + * A typecast macro to cast @obj to PurplePlugin.
    + */
    #define PURPLE_PLUGIN(obj) GPLUGIN_PLUGIN(obj)
    #define PURPLE_IS_PLUGIN(obj) GPLUGIN_IS_PLUGIN(obj)
    #define PURPLE_PLUGIN_GET_IFACE(obj) GPLUGIN_PLUGIN_GET_IFACE(obj)
    @@ -47,6 +53,15 @@
    */
    typedef GPluginPlugin PurplePlugin;
    +/**
    + * PurplePluginInterface:
    + *
    + * Represents the plugin interface.
    + *
    + * This type is an alias for GPluginPluginInterface.
    + *
    + * Since: 3.0
    + */
    typedef GPluginPluginInterface PurplePluginInterface;
    #include "purpleplugininfo.h"
    @@ -124,6 +139,7 @@
    /**
    * purple_plugin_disable:
    + * @plugin: The plugin.
    *
    * Disable a plugin.
    *
    --- a/libpurple/prefs.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/prefs.h Tue Apr 09 21:50:31 2024 -0500
    @@ -524,6 +524,8 @@
    *
    * Read preferences
    *
    + * Returns: %TRUE if the prefs loaded successfully, otherwise %FALSE.
    + *
    * Since: 2.0
    */
    PURPLE_AVAILABLE_IN_ALL
    --- a/libpurple/purpleaccount.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleaccount.h Tue Apr 09 21:50:31 2024 -0500
    @@ -747,6 +747,8 @@
    *
    * Whether the account supports sending offline messages to buddy.
    *
    + * Returns: %TRUE if offline messages are supported, otherwise %FALSE.
    + *
    * Since: 2.0
    */
    PURPLE_AVAILABLE_IN_ALL
    --- a/libpurple/purpleaccountmanager.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleaccountmanager.h Tue Apr 09 21:50:31 2024 -0500
    @@ -239,6 +239,7 @@
    /**
    * purple_account_manager_set_online:
    * @manager: The instance.
    + * @online: The new online status.
    *
    * Sets whether or not new accounts should automatically have
    * [method@Account.connect] called for them.
    --- a/libpurple/purpleaccountpresence.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleaccountpresence.c Tue Apr 09 21:50:31 2024 -0500
    @@ -175,6 +175,13 @@
    presence_class->update_idle = purple_account_presence_update_idle;
    presence_class->get_statuses = purple_account_presence_get_statuses;
    + /**
    + * PurpleAccountPresence:account:
    + *
    + * The account for this presence.
    + *
    + * Since: 3.0
    + */
    properties[PROP_ACCOUNT] = g_param_spec_object(
    "account", "Account",
    "The account for this presence.",
    --- a/libpurple/purpleattachment.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleattachment.h Tue Apr 09 21:50:31 2024 -0500
    @@ -64,6 +64,8 @@
    *
    * Creates a new #PurpleAttachment with the given @id and @content_type.
    *
    + * Returns: (transfer full): The new attachment.
    + *
    * Since: 3.0
    */
    PURPLE_AVAILABLE_IN_3_0
    --- a/libpurple/purplebuddypresence.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purplebuddypresence.c Tue Apr 09 21:50:31 2024 -0500
    @@ -250,6 +250,13 @@
    presence_class->update_idle = purple_buddy_presence_update_idle;
    presence_class->get_statuses = purple_buddy_presence_get_statuses;
    + /**
    + * PurpleBuddyPresence:buddy:
    + *
    + * The buddy for this presence.
    + *
    + * Since: 3.0
    + */
    properties[PROP_BUDDY] = g_param_spec_object(
    "buddy", "Buddy",
    "The buddy for this presence.",
    --- a/libpurple/purplechatconversation.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purplechatconversation.c Tue Apr 09 21:50:31 2024 -0500
    @@ -255,7 +255,7 @@
    conv_class->write_message = chat_conversation_write_message;
    /**
    - * PurpleChatConversation::chat-id:
    + * PurpleChatConversation:chat-id:
    *
    * The identifier of the chat.
    */
    @@ -266,7 +266,7 @@
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    /**
    - * PurpleChatConversation::left:
    + * PurpleChatConversation:left:
    *
    * Whether the user has left the chat or not.
    */
    --- a/libpurple/purplechatuser.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purplechatuser.c Tue Apr 09 21:50:31 2024 -0500
    @@ -171,24 +171,52 @@
    obj_class->set_property = purple_chat_user_set_property;
    obj_class->finalize = purple_chat_user_finalize;
    + /**
    + * PurpleChatUser:chat:
    + *
    + * The chat the user is in.
    + *
    + * Since: 3.0
    + */
    properties[PROP_CHAT] = g_param_spec_object(
    "chat", "Chat",
    "The chat the buddy belongs to.",
    PURPLE_TYPE_CHAT_CONVERSATION,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleChatUser:name:
    + *
    + * The name of the user.
    + *
    + * Since: 3.0
    + */
    properties[PROP_NAME] = g_param_spec_string(
    "name", "Name",
    "Name of the chat user.",
    NULL,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleChatUser:alias:
    + *
    + * The alias of the user.
    + *
    + * Since: 3.0
    + */
    properties[PROP_ALIAS] = g_param_spec_string(
    "alias", "Alias",
    "Alias of the chat user.",
    NULL,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleChatUser:flags:
    + *
    + * The flags for the user.
    + *
    + * Since: 3.0
    + */
    properties[PROP_FLAGS] = g_param_spec_flags(
    "flags", "Buddy flags",
    "The flags for the chat user.",
    --- a/libpurple/purpleconnectionerrorinfo.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleconnectionerrorinfo.h Tue Apr 09 21:50:31 2024 -0500
    @@ -75,6 +75,8 @@
    * self-signed.
    * @PURPLE_CONNECTION_ERROR_CERT_OTHER_ERROR: There was some other error
    * validating the server's SSL certificate.
    + * @PURPLE_CONNECTION_ERROR_CUSTOM_TEMPORARY: A custom error that is temporary.
    + * @PURPLE_CONNECTION_ERROR_CUSTOM_FATAL: A custom error that is fatal.
    * @PURPLE_CONNECTION_ERROR_OTHER_ERROR: Some other error occurred which fits
    * into none of the other categories.
    *
    --- a/libpurple/purplecontactinfo.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purplecontactinfo.h Tue Apr 09 21:50:31 2024 -0500
    @@ -67,13 +67,6 @@
    #include "purpleperson.h"
    -/**
    - * PurpleContactInfoClass:
    - *
    - * The class struct for [class@Purple.ContactInfo].
    - *
    - * Since: 3.0
    - */
    struct _PurpleContactInfoClass {
    /*< private >*/
    GObjectClass parent;
    @@ -316,7 +309,7 @@
    GTimeZone *purple_contact_info_get_time_zone(PurpleContactInfo *info);
    /**
    - * purple_contact_info-set_time_zone:
    + * purple_contact_info_set_time_zone:
    * @info: The instance.
    * @time_zone: (transfer none) (nullable): The new time zone.
    *
    @@ -325,7 +318,7 @@
    * Since: 3.0
    */
    PURPLE_AVAILABLE_IN_3_0
    -void purple_contact_info_set_time_zone(PurpleContactInfo *info, GTimeZone *timezone);
    +void purple_contact_info_set_time_zone(PurpleContactInfo *info, GTimeZone *time_zone);
    /**
    * purple_contact_info_get_note:
    --- a/libpurple/purpleconversation.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleconversation.c Tue Apr 09 21:50:31 2024 -0500
    @@ -688,6 +688,13 @@
    PURPLE_CONVERSATION_TYPE_UNSET,
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleConversation:account:
    + *
    + * The account this conversation belongs to.
    + *
    + * Since: 3.0
    + */
    properties[PROP_ACCOUNT] = g_param_spec_object(
    "account", "Account",
    "The account for the conversation.",
    @@ -710,18 +717,39 @@
    PURPLE_TYPE_AVATAR,
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleConversation:name:
    + *
    + * The name of the conversation.
    + *
    + * Since: 3.0
    + */
    properties[PROP_NAME] = g_param_spec_string(
    "name", "Name",
    "The name of the conversation.",
    NULL,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleConversation:title:
    + *
    + * The title of the conversation.
    + *
    + * Since: 3.0
    + */
    properties[PROP_TITLE] = g_param_spec_string(
    "title", "Title",
    "The title of the conversation.",
    NULL,
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleConversation:features:
    + *
    + * The features that this conversation supports.
    + *
    + * Since: 3.0
    + */
    properties[PROP_FEATURES] = g_param_spec_flags(
    "features", "Connection features",
    "The connection features of the conversation.",
    --- a/libpurple/purpleconversation.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleconversation.h Tue Apr 09 21:50:31 2024 -0500
    @@ -403,6 +403,8 @@
    *
    * Get the features supported by the given conversation.
    *
    + * Returns: The flags.
    + *
    * Since: 2.0
    */
    PURPLE_AVAILABLE_IN_ALL
    --- a/libpurple/purpledebugui.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpledebugui.h Tue Apr 09 21:50:31 2024 -0500
    @@ -50,10 +50,7 @@
    #include "debug.h"
    /**
    - * PurpleDebugUiInterface:
    - * @print: Called to output a debug string to the UI.
    - * @is_enabled: Returns if debug printing is enabled in the UI for a @level and
    - * @category.
    + * PurpleDebugUi:
    *
    * Debug UI operations.
    */
    --- a/libpurple/purplefiletransfer.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purplefiletransfer.h Tue Apr 09 21:50:31 2024 -0500
    @@ -47,6 +47,8 @@
    * @PURPLE_FILE_TRANSFER_STATE_FINISHED: The transfer has completed
    * successfully.
    * @PURPLE_FILE_TRANSFER_STATE_FAILED: The transfer failed.
    + *
    + * The possible states that a file transfer can be in.
    */
    typedef enum {
    PURPLE_FILE_TRANSFER_STATE_UNKNOWN,
    --- a/libpurple/purpleidlemanager.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleidlemanager.c Tue Apr 09 21:50:31 2024 -0500
    @@ -84,7 +84,7 @@
    obj_class->get_property = purple_idle_manager_get_property;
    /**
    - * PurpleIdleManager::timestamp:
    + * PurpleIdleManager:timestamp:
    *
    * The aggregate of the oldest idle timestamp of all of the sources that
    * are known.
    --- a/libpurple/purpleidleui.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleidleui.h Tue Apr 09 21:50:31 2024 -0500
    @@ -42,7 +42,7 @@
    G_DECLARE_INTERFACE(PurpleIdleUi, purple_idle_ui, PURPLE, IDLE_UI, GObject)
    /**
    - * PurpleIdleUiInterface:
    + * PurpleIdleUi:
    * @get_idle_time: vfunc to get the time that the user interface has been idle.
    *
    * An interface that a user interface can implement to let the core determine
    --- a/libpurple/purpleimconversation.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleimconversation.c Tue Apr 09 21:50:31 2024 -0500
    @@ -192,6 +192,13 @@
    conv_class->write_message = im_conversation_write_message;
    + /**
    + * PurpleIMConversation:typing-state:
    + *
    + * The typing state of the remote user.
    + *
    + * Since: 3.0
    + */
    properties[PROP_TYPING_STATE] = g_param_spec_enum(
    "typing-state", "Typing state",
    "Status of the user's typing of a message.",
    --- a/libpurple/purplemenu.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purplemenu.h Tue Apr 09 21:50:31 2024 -0500
    @@ -34,6 +34,13 @@
    G_BEGIN_DECLS
    +/**
    + * PURPLE_MENU_ATTRIBUTE_DYNAMIC_TARGET:
    + *
    + * A constant to help when defining actions that have a dynamic-target value.
    + *
    + * Since: 3.0
    + */
    #define PURPLE_MENU_ATTRIBUTE_DYNAMIC_TARGET "dynamic-target"
    /**
    --- a/libpurple/purplemessage.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purplemessage.c Tue Apr 09 21:50:31 2024 -0500
    @@ -300,7 +300,7 @@
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    /**
    - * PurpleMessage:content:
    + * PurpleMessage:contents:
    *
    * The contents of the message.
    *
    @@ -401,7 +401,7 @@
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    /**
    - * PurpleMessaged:edited:
    + * PurpleMessage:edited:
    *
    * Whether or not this message has been edited.
    *
    @@ -416,7 +416,7 @@
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    /**
    - * PurpleMessage:edit-at:
    + * PurpleMessage:edited-at:
    *
    * The time that the message was last edited at. This is protocol dependent
    * and possibly client dependent as well. So if this is %NULL that doesn't
    --- a/libpurple/purplemessage.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purplemessage.h Tue Apr 09 21:50:31 2024 -0500
    @@ -399,7 +399,7 @@
    *
    * Adds @attachment to @message.
    *
    - * Returns %TRUE if an attachment with the same ID did not already exist.
    + * Returns: %TRUE if an attachment with the same ID did not already exist.
    *
    * Since: 3.0
    */
    --- a/libpurple/purplenotification.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purplenotification.h Tue Apr 09 21:50:31 2024 -0500
    @@ -39,6 +39,25 @@
    /**
    * PurpleNotificationType:
    + * @PURPLE_NOTIFICATION_TYPE_UNKNOWN: This type is unknown.
    + * @PURPLE_NOTIFICATION_TYPE_GENERIC: A generic notification that is just text
    + * that may have links.
    + * @PURPLE_NOTIFICATION_TYPE_CONNECTION_ERROR: A notification that is for a
    + * connection error.
    + * @PURPLE_NOTIFICATION_TYPE_AUTHORIZATION_REQUEST: A notification for a
    + * contact authorization
    + * request.
    + * @PURPLE_NOTIFICATION_TYPE_ADD_CONTACT: A notification for when a contact add
    + * you to their contact list.
    + * @PURPLE_NOTIFICATION_TYPE_FILE_TRANSFER: A notification for a file transfer.
    + * @PURPLE_NOTIFICATION_TYPE_CHAT_INVITE: A notification when the user has been
    + * invited to a chat.
    + * @PURPLE_NOTIFICATION_TYPE_MENTION: A notification that the user has been
    + * mentioned.
    + * @PURPLE_NOTIFICATION_TYPE_REACTION: A notification when a reaction has been
    + * added to message.
    + *
    + * The different types of notifications.
    *
    * Since: 3.0
    */
    --- a/libpurple/purpleperson.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleperson.h Tue Apr 09 21:50:31 2024 -0500
    @@ -225,7 +225,7 @@
    const char *purple_person_get_name_for_display(PurplePerson *person);
    /**
    - * purple_person_add_contact:
    + * purple_person_add_contact_info:
    * @person: The instance.
    * @info: The [class@Purple.ContactInfo] to add.
    *
    @@ -267,7 +267,7 @@
    PURPLE_AVAILABLE_IN_3_0
    PurpleContactInfo *purple_person_get_priority_contact_info(PurplePerson *person);
    -/*
    +/**
    * purple_person_has_contacts:
    * @person: The instance.
    *
    --- a/libpurple/purpleplugininfo.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleplugininfo.c Tue Apr 09 21:50:31 2024 -0500
    @@ -210,6 +210,13 @@
    obj_class->get_property = purple_plugin_info_get_property;
    obj_class->set_property = purple_plugin_info_set_property;
    + /**
    + * PurplePluginInfo:flags:
    + *
    + * Flags for the plugin.
    + *
    + * Since: 3.0
    + */
    properties[PROP_FLAGS] = g_param_spec_flags(
    "flags", "Plugin flags",
    "The flags for the plugin",
    --- a/libpurple/purpleprotocol.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleprotocol.h Tue Apr 09 21:50:31 2024 -0500
    @@ -163,6 +163,9 @@
    * @IFACE: The interface name in caps. e.g. <literal>CLIENT</literal>
    * @func: The function to check
    *
    + * Checks if a protocol plugin implements an interface and a specific function
    + * in the interface.
    + *
    * Returns: %TRUE if a protocol implements a function in an interface,
    * %FALSE otherwise.
    *
    --- a/libpurple/purpleprotocolactions.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleprotocolactions.h Tue Apr 09 21:50:31 2024 -0500
    @@ -49,24 +49,6 @@
    * Since: 3.0
    */
    -/**
    - * PurpleProtocolActionsInterface:
    - * @get_prefix: The prefix used for the actions in the group. If this isn't
    - * implemented, the id of the protocol will be used instead.
    - * @get_action_group: Returns the actions the protocol can perform. If actions
    - * depend on connectivity, connect to the relevant signals
    - * on the @connection and signal the action has changed with
    - * [iface@GLib.ActionGroup] signals.
    - * @get_menu: Get the menu used to display protocol actions. In Pidgin, these
    - * will show up in the Accounts menu, under a submenu with the name
    - * of the account.
    - *
    - * The protocol actions interface.
    - *
    - * This interface provides a gateway between purple and the protocol.
    - *
    - * Since: 3.0
    - */
    struct _PurpleProtocolActionsInterface {
    /*< private >*/
    GTypeInterface parent;
    --- a/libpurple/purpleprotocolchat.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleprotocolchat.h Tue Apr 09 21:50:31 2024 -0500
    @@ -77,36 +77,6 @@
    G_BEGIN_DECLS
    -/**
    - * PurpleProtocolChatInterface:
    - * @info: Returns a list of #PurpleProtocolChatEntry structs, which represent
    - * information required by the protocol to join a chat. libpurple will
    - * call join_chat along with the information filled by the user.
    - * @info_defaults: Returns a hashtable which maps #PurpleProtocolChatEntry
    - * struct identifiers to default options as strings based on
    - * @chat_name. The resulting hashtable should be created with
    - * #g_hash_table_new_full(#g_str_hash, #g_str_equal, %NULL,
    - * #g_free). Use @get_name if you instead need to extract a chat
    - * name from a hashtable.
    - * @join: Called when the user requests joining a chat. Should arrange for
    - * purple_serv_got_joined_chat() to be called.
    - * @reject: Called when the user refuses a chat invitation.
    - * @get_name: Returns a chat name based on the information in components. Use
    - * @info_defaults if you instead need to generate a hashtable from a
    - * chat name.
    - * @invite: Invite a user to join a chat.
    - * @leave: Called when the user requests leaving a chat.
    - * @send: Send a message to a chat.
    - * @get_user_real_name: Gets the real name of a participant in a chat. For
    - * example, on XMPP this turns a chat room nick
    - * <literal>foo</literal> into
    - * <literal>room\@server/foo</literal>.
    - * @set_topic: Called to set the topic for the given chat.
    - *
    - * The protocol chat interface.
    - *
    - * This interface provides callbacks needed by protocols that implement chats.
    - */
    struct _PurpleProtocolChatInterface {
    /*< private >*/
    GTypeInterface parent;
    --- a/libpurple/purpleprotocolclient.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleprotocolclient.h Tue Apr 09 21:50:31 2024 -0500
    @@ -51,71 +51,6 @@
    * Since: 3.0
    */
    -/**
    - * PurpleProtocolClientInterface:
    - * @get_actions: Returns the actions the protocol can perform. These will show
    - * up in the Accounts menu, under a submenu with the name of the
    - * account.
    - * @list_emblem: Fills the four <type>char**</type>'s with string identifiers
    - * for "emblems" that the UI will interpret and display as
    - * relevant.
    - * @blist_node_menu: Returns a list of #PurpleActionMenu structs, which
    - * represent extra actions to be shown in (for example) the
    - * right-click menu for @node.
    - * @buddy_free: Allows the protocol to clean up any additional data for the
    - * given buddy.
    - * @convo_closed: Allows the protocol to do any necessary cleanup when a
    - * conversation is closed.
    - * @normalize: Convert the username @who to its canonical form. Also checks for
    - * validity.
    - * <sbr/>For example, AIM treats "fOo BaR" and "foobar" as the same
    - * user; this function should return the same normalized string for
    - * both of those. On the other hand, both of these are invalid for
    - * protocols with number-based usernames, so function should return
    - * %NULL in such case.
    - * <sbr/>@account: The account the username is related to. Can be
    - * %NULL.
    - * <sbr/>@who: The username to convert.
    - * <sbr/>Returns: Normalized username, or %NULL, if it's invalid.
    - * @find_blist_chat: Attempts to find a chat with the given name in the contact
    - * list.
    - * @offline_message: Checks whether offline messages to @buddy are supported.
    - * <sbr/>Returns: %TRUE if @buddy can be sent messages while
    - * they are offline, or %FALSE if not.
    - * @get_account_text_table: This allows protocols to specify additional strings
    - * to be used for various purposes. The idea is to
    - * stuff a bunch of strings in this hash table instead
    - * of expanding the struct for every addition. This
    - * hash table is allocated every call and
    - * <emphasis>MUST</emphasis> be unrefed by the caller.
    - * <sbr/>@account: The account to specify. This can be
    - * %NULL.
    - * <sbr/>Returns: The protocol's string hash table.
    - * The hash table should be destroyed
    - * by the caller when it's no longer
    - * needed.
    - * @get_max_message_size: Gets the maximum message size in bytes for the
    - * conversation.
    - * <sbr/>It may depend on connection-specific or
    - * conversation-specific variables, like channel or
    - * buddy's name length.
    - * <sbr/>This value is intended for plaintext message,
    - * the exact value may be lower because of:
    - * <sbr/> - used newlines (some protocols count them as
    - * more than one byte),
    - * <sbr/> - formatting,
    - * <sbr/> - used special characters.
    - * <sbr/>@conv: The conversation to query, or NULL to
    - * get safe minimum for the protocol.
    - * <sbr/>Returns: Maximum message size, 0 if unspecified,
    - * -1 for infinite.
    - *
    - * The protocol client interface.
    - *
    - * This interface provides a gateway between purple and the protocol.
    - *
    - * Since: 3.0
    - */
    struct _PurpleProtocolClientInterface {
    /*< private >*/
    GTypeInterface parent;
    --- a/libpurple/purpleprotocolcontacts.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleprotocolcontacts.h Tue Apr 09 21:50:31 2024 -0500
    @@ -60,15 +60,6 @@
    g_quark_from_static_string("purple-protocol-contacts") \
    PURPLE_AVAILABLE_MACRO_IN_3_0
    -/**
    - * PurpleProtocolContactsInterface:
    - *
    - * This interface defines the behavior for interacting with contacts at the
    - * protocol layer. These methods will primarily be called by the user
    - * interface.
    - *
    - * Since: 3.0
    - */
    struct _PurpleProtocolContactsInterface {
    /*< private >*/
    GTypeInterface parent;
    --- a/libpurple/purpleprotocolconversation.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleprotocolconversation.h Tue Apr 09 21:50:31 2024 -0500
    @@ -48,7 +48,7 @@
    PURPLE, PROTOCOL_CONVERSATION, PurpleProtocol)
    /**
    - * PurpleProtocolConversationInterface:
    + * PurpleProtocolConversation:
    *
    * This interface defines the behavior for interacting with conversations at
    * the protocol layer. These methods will primarily be called by the user
    @@ -255,7 +255,7 @@
    gboolean purple_protocol_conversation_set_avatar_finish(PurpleProtocolConversation *protocol, GAsyncResult *result, GError **error);
    /**
    - * purple_protocl_conversation_send_typing_state:
    + * purple_protocol_conversation_send_typing:
    * @protocol: The instance.
    * @conversation: The conversation.
    * @state: The new typing state.
    --- a/libpurple/purpleprotocolfiletransfer.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleprotocolfiletransfer.h Tue Apr 09 21:50:31 2024 -0500
    @@ -50,13 +50,6 @@
    * Since: 3.0
    */
    -/**
    - * PurpleProtocolFileTransferInterface:
    - *
    - * This interface defines the behavior for sending and receiving files.
    - *
    - * Since: 3.0
    - */
    struct _PurpleProtocolFileTransferInterface {
    /*< private >*/
    GTypeInterface parent;
    --- a/libpurple/purpleprotocolim.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleprotocolim.h Tue Apr 09 21:50:31 2024 -0500
    @@ -49,27 +49,6 @@
    G_DECLARE_INTERFACE(PurpleProtocolIM, purple_protocol_im, PURPLE, PROTOCOL_IM,
    PurpleProtocol)
    -/**
    - * PurpleProtocolIMInterface:
    - * @send: This protocol function should return a positive value on
    - * success. If the message is too big to be sent, return
    - * <literal>-E2BIG</literal>. If the account is not connected,
    - * return <literal>-ENOTCONN</literal>. If the protocol is unable
    - * to send the message for another reason, return some other
    - * negative value. You can use one of the valid #errno values, or
    - * just big something. If the message should not be echoed to the
    - * conversation window, return 0.
    - * @send_typing: If this protocol requires the #PURPLE_IM_TYPING message to be
    - * sent repeatedly to signify that the user is still typing, then
    - * the protocol should return the number of seconds to wait before
    - * sending a subsequent notification. Otherwise the protocol
    - * should return 0.
    - *
    - * The protocol IM interface that needs to be implemented to send one to one
    - * messages.
    - *
    - * Since: 3.0
    - */
    struct _PurpleProtocolIMInterface {
    /*< private >*/
    GTypeInterface parent;
    --- a/libpurple/purpleprotocolmedia.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleprotocolmedia.h Tue Apr 09 21:50:31 2024 -0500
    @@ -52,31 +52,6 @@
    * Since: 3.0
    */
    -/**
    - * PurpleProtocolMediaInterface:
    - * @initiate_session: Initiate a media session with the given contact.
    - * <sbr/>@account: The account to initiate the media session
    - * on.
    - * <sbr/>@who: The remote user to initiate the session with.
    - * <sbr/>@type: The type of media session to initiate.
    - * <sbr/>Returns: %TRUE if the call succeeded else %FALSE.
    - * (Doesn't imply the media session or stream
    - * will be successfully created)
    - * @get_caps: Checks to see if the given contact supports the given type of
    - * media session.
    - * <sbr/>@account: The account the contact is on.
    - * <sbr/>@who: The remote user to check for media capability with.
    - * <sbr/>Returns: The media caps the contact supports.
    - * @send_dtmf: Sends DTMF codes out-of-band in a protocol-specific way if the
    - * protocol supports it, or failing that in-band if the media backend
    - * can do so. See purple_media_send_dtmf().
    - *
    - * The protocol media interface.
    - *
    - * This interface provides callbacks for media sessions on the protocol.
    - *
    - * Since: 3.0
    - */
    struct _PurpleProtocolMediaInterface {
    /*< private >*/
    GTypeInterface parent;
    --- a/libpurple/purpleprotocolroomlist.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleprotocolroomlist.h Tue Apr 09 21:50:31 2024 -0500
    @@ -38,25 +38,17 @@
    #define PURPLE_TYPE_PROTOCOL_ROOMLIST (purple_protocol_roomlist_get_type())
    -/**
    - * PurpleProtocolRoomlist:
    - *
    - * #PurpleProtocolRoomlist is an interface to abstract how to handle rooms
    - * lists at the protocol level.
    - *
    - * Since: 3.0
    - */
    -
    PURPLE_AVAILABLE_IN_3_0
    G_DECLARE_INTERFACE(PurpleProtocolRoomlist, purple_protocol_roomlist, PURPLE,
    PROTOCOL_ROOMLIST, PurpleProtocol)
    /**
    - * PurpleProtocolRoomlistInterface:
    + * PurpleProtocolRoomlist:
    *
    * The protocol roomlist interface.
    *
    - * This interface provides callbacks for room listing.
    + * #PurpleProtocolRoomlist is an interface to abstract how to handle room
    + * lists at the protocol level.
    *
    * Since: 3.0
    */
    --- a/libpurple/purpleprotocolroster.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleprotocolroster.h Tue Apr 09 21:50:31 2024 -0500
    @@ -50,26 +50,6 @@
    * Since: 3.0
    */
    -/**
    - * PurpleProtocolRosterInterface:
    - * @add_async: Called when the user is trying to add a contact to the server
    - * side roster.
    - * @add_finish: Called when adding the contact has completed.
    - * @update_async: Called when the user is trying to update a contact on the
    - * server side roster.
    - * @update_finish: Called when updating the contact has completed.
    - * @remove_async: Called when the user is trying to remove a contact from the
    - * server side roster.
    - * @remove_finish: Called when removing the contact has completed.
    - *
    - * The interface for managing the server side roster.
    - *
    - * This interface provides a gateway between purple and the protocol for
    - * managing the server side roster. All of the functions are asynchronous to
    - * make sure nothing blocks the rest of the program.
    - *
    - * Since: 3.0
    - */
    struct _PurpleProtocolRosterInterface {
    /*< private >*/
    GTypeInterface parent;
    --- a/libpurple/purpleprotocolserver.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleprotocolserver.h Tue Apr 09 21:50:31 2024 -0500
    @@ -55,40 +55,6 @@
    * Since: 3.0
    */
    -/**
    - * PurpleProtocolServerInterface:
    - * @set_info: Sets the user's profile.
    - * @get_info: Should arrange for purple_notify_userinfo() to be called with the
    - * requested user's profile.
    - * @set_status: Sets the active status for the given account.
    - * @set_idle: Set the idle time for the given account.
    - * @change_passwd: Changes the users password.
    - * @add_buddy: Add a buddy to a group on the server.
    - * @add_buddies: Add multiple buddies on the server at once.
    - * @remove_buddy: Removes the given buddy from the user's buddy list.
    - * @remove_buddies: Removes multiple buddies from the user's buddy list.
    - * @keepalive: If implemented, this will be called regularly for this
    - * protocol's active connections. You'd want to do this if you need
    - * to repeatedly send some kind of keepalive packet to the server
    - * to avoid being disconnected. ("Regularly" is defined to be 30
    - * unless @get_keepalive_interval is implemented to override it).
    - * @get_keepalive_interval: If implemented, this will override the default
    - * keepalive interval.
    - * @alias_buddy: Save/store buddy's alias on server list/roster
    - * @group_buddy: Change a buddy's group on a server list/roster
    - * @rename_group: Rename a group on a server list/roster
    - * @set_buddy_icon: Set the buddy icon for the given connection to @img. The
    - * protocol does <emphasis>NOT</emphasis> own a reference to
    - * @img; if it needs one, it must #g_object_ref(@img) itself.
    - * @remove_group: Removes the given group from the users buddy list.
    - * @send_raw: For use in plugins that may understand the underlying protocol.
    - *
    - * The protocol server interface.
    - *
    - * This interface provides a gateway between purple and the protocol's server.
    - *
    - * Since: 3.0
    - */
    struct _PurpleProtocolServerInterface {
    /*< private >*/
    GTypeInterface parent;
    --- a/libpurple/purpleprotocolwhiteboard.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleprotocolwhiteboard.h Tue Apr 09 21:50:31 2024 -0500
    @@ -49,16 +49,6 @@
    * Since: 3.0
    */
    -/**
    - * PurpleProtocolWhiteboardInterface:
    - * @create: Creates a new whiteboard.
    - *
    - * The protocol whiteboard interface.
    - *
    - * This interface provides a gateway between purple and the protocol.
    - *
    - * Since: 3.0
    - */
    struct _PurpleProtocolWhiteboardInterface {
    /*< private >*/
    GTypeInterface parent;
    --- a/libpurple/purpleproxyinfo.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleproxyinfo.h Tue Apr 09 21:50:31 2024 -0500
    @@ -60,6 +60,13 @@
    #define PURPLE_TYPE_PROXY_INFO (purple_proxy_info_get_type())
    +/**
    + * PurpleProxyInfo:
    + *
    + * A representation of a proxy.
    + *
    + * Since: 2.0
    + */
    PURPLE_AVAILABLE_IN_3_0
    G_DECLARE_FINAL_TYPE(PurpleProxyInfo, purple_proxy_info, PURPLE, PROXY_INFO,
    GObject)
    --- a/libpurple/purpleroomlistroom.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleroomlistroom.c Tue Apr 09 21:50:31 2024 -0500
    @@ -167,24 +167,52 @@
    obj_class->set_property = purple_roomlist_room_set_property;
    obj_class->finalize = purple_roomlist_room_finalize;
    + /**
    + * PurpleRoomlistRoom:name:
    + *
    + * The name of the room.
    + *
    + * Since: 3.0
    + */
    properties[PROP_NAME] = g_param_spec_string(
    "name", "name",
    "The name of the room",
    NULL,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleRoomlistRoom:description:
    + *
    + * The description of the room.
    + *
    + * Since: 3.0
    + */
    properties[PROP_DESCRIPTION] = g_param_spec_string(
    "description", "description",
    "The description of the room",
    NULL,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleRoomlistRoom:category:
    + *
    + * The category of the room.
    + *
    + * Since: 3.0
    + */
    properties[PROP_CATEGORY] = g_param_spec_string(
    "category", "category",
    "The category of the room",
    NULL,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleRoomlistRoom:user-count:
    + *
    + * The number of users in the room.
    + *
    + * Since: 3.0
    + */
    properties[PROP_USER_COUNT] = g_param_spec_uint(
    "user-count", "user-count",
    "The user count of the room",
    --- a/libpurple/purpleroomlistroom.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleroomlistroom.h Tue Apr 09 21:50:31 2024 -0500
    @@ -72,6 +72,8 @@
    *
    * Creates a new room to be added to a [class@Purple.Roomlist].
    *
    + * Returns: (transfer full): The new room.
    + *
    * Since: 3.0
    */
    PURPLE_AVAILABLE_IN_3_0
    @@ -104,7 +106,7 @@
    const gchar *purple_roomlist_room_get_description(PurpleRoomlistRoom *room);
    /**
    - * purple_roomlist_get_category:
    + * purple_roomlist_room_get_category:
    * @room: The instance.
    *
    * Gets the category of @room. It is up to the user interface on whether or not
    --- a/libpurple/purpleversion.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purpleversion.h Tue Apr 09 21:50:31 2024 -0500
    @@ -77,6 +77,26 @@
    #define PURPLE_VERSION_CUR_STABLE \
    (G_ENCODE_VERSION(PURPLE_MAJOR_VERSION, PURPLE_MINOR_VERSION))
    +/**
    + * PURPLE_VERSION_MIN_REQUIRED:
    + *
    + * A macro that should be defined by the user prior to including the `purple.h`
    + * header.
    + *
    + * The definition should be one of the predefined Purple version macros:
    + * %PURPLE_VERSION_3_0, %PURPLE_VERSION_3_1, ...
    + *
    + * This macro defines the earliest version of Purple that the package is
    + * required to be able to compile against.
    + *
    + * If the compiler is configured to warn about the use of deprecated functions,
    + * then using functions that were deprecated in version
    + * %PURPLE_VERSION_MIN_REQUIRED or earlier will cause warnings (but using
    + * functions deprecated in later releases will not).
    + *
    + * Since: 3.0
    + */
    +
    /* If the package sets PURPLE_VERSION_MIN_REQUIRED to some future
    * PURPLE_VERSION_X_Y value that we don't know about, it will compare as 0 in
    * preprocessor tests.
    --- a/libpurple/purplewhiteboard.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/purplewhiteboard.c Tue Apr 09 21:50:31 2024 -0500
    @@ -195,22 +195,50 @@
    obj_class->finalize = purple_whiteboard_finalize;
    obj_class->constructed = purple_whiteboard_constructed;
    + /**
    + * PurpleWhiteboard:state:
    + *
    + * The state of the whiteboard.
    + *
    + * Since: 3.0
    + */
    properties[PROP_STATE] = g_param_spec_int(
    "state", "State",
    "State of the whiteboard.",
    G_MININT, G_MAXINT, 0,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleWhiteboard:account:
    + *
    + * The account this whiteboard belongs to.
    + *
    + * Since: 3.0
    + */
    properties[PROP_ACCOUNT] = g_param_spec_object(
    "account", "Account",
    "The whiteboard's account.", PURPLE_TYPE_ACCOUNT,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleWhiteboard:id:
    + *
    + * The unique identifier of the whiteboard.
    + *
    + * Since: 3.0
    + */
    properties[PROP_ID] = g_param_spec_string(
    "id", "id",
    "The ID of the whiteboard.", NULL,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleWhiteboard:draw-list:
    + *
    + * The list of draw actions for the whiteboard.
    + *
    + * Since: 3.0
    + */
    properties[PROP_DRAW_LIST] = g_param_spec_pointer(
    "draw-list", "Draw list",
    "A list of points to draw to the buddy.",
    --- a/libpurple/request-datasheet.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/request-datasheet.h Tue Apr 09 21:50:31 2024 -0500
    @@ -36,13 +36,45 @@
    *
    * Request Datasheet is a UI abstracted table.
    */
    +typedef struct _PurpleRequestDatasheet PurpleRequestDatasheet;
    -typedef struct _PurpleRequestDatasheet PurpleRequestDatasheet;
    +/**
    + * PurpleRequestDatasheetRecord:
    + *
    + * A data sheet record.
    + */
    typedef struct _PurpleRequestDatasheetRecord PurpleRequestDatasheetRecord;
    +
    +/**
    + * PurpleRequestDatasheetAction:
    + *
    + * A data sheet action.
    + */
    typedef struct _PurpleRequestDatasheetAction PurpleRequestDatasheetAction;
    +/**
    + * PurpleRequestDatasheetActionCb:
    + * @rec: The record.
    + * @user_data: User data.
    + *
    + * A callback function for actions in a data sheet.
    + *
    + * Since: 3.0
    + */
    typedef void (*PurpleRequestDatasheetActionCb)(
    PurpleRequestDatasheetRecord *rec, gpointer user_data);
    +
    +/**
    + * PurpleRequestDatasheetActionCheckCb:
    + * @rec: The record.
    + * @user_data: User data.
    + *
    + * A callback function for checking if an action is enabled or not.
    + *
    + * Returns: %TRUE if the actions should be enabled, otherwise %FALSE.
    + *
    + * Since: 3.0
    + */
    typedef gboolean (*PurpleRequestDatasheetActionCheckCb)(
    PurpleRequestDatasheetRecord *rec, gpointer user_data);
    --- a/libpurple/request.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/request.h Tue Apr 09 21:50:31 2024 -0500
    @@ -51,6 +51,11 @@
    #include "request/purplerequestfield.h"
    #include "request-datasheet.h"
    +/**
    + * PURPLE_DEFAULT_ACTION_NONE:
    + *
    + * A constant to set no default action.
    + */
    #define PURPLE_DEFAULT_ACTION_NONE -1
    /**
    @@ -188,6 +193,13 @@
    void (*_purple_reserved4)(void);
    };
    +/**
    + * PurpleRequestInputCb:
    + * @data: User data.
    + * @value: The value that was input.
    + *
    + * The type of callback passed to purple_request_input().
    + */
    typedef void (*PurpleRequestInputCb)(void *data, const char *value);
    /**
    @@ -211,8 +223,31 @@
    * values of those choice.
    */
    typedef void (*PurpleRequestChoiceCb)(void *data, gpointer value);
    +
    +/**
    + * PurpleRequestFieldsCb:
    + * @data: User data.
    + * @page: The page.
    + *
    + * The type of callbacks passed to purple_request_fields().
    + */
    typedef void (*PurpleRequestFieldsCb)(void *data, PurpleRequestPage *page);
    +
    +/**
    + * PurpleRequestFileCb:
    + * @data: User data.
    + * @filename: The filename.
    + *
    + * The type of callbacks passed to purple_request_file().
    + */
    typedef void (*PurpleRequestFileCb)(void *data, const char *filename);
    +
    +/**
    + * PurpleRequestHelpCb:
    + * @data: User data.
    + *
    + * The type of callback passed to purple_request_cpar_set_help_cb().
    + */
    typedef void (*PurpleRequestHelpCb)(gpointer data);
    G_BEGIN_DECLS
    @@ -698,6 +733,8 @@
    *
    * <literal>va_list</literal> version of purple_request_choice(); see its
    * documentation.
    + *
    + * Returns: A UI-specific handle.
    */
    PURPLE_AVAILABLE_IN_ALL
    void *purple_request_choice_varg(void *handle, const char *title,
    @@ -774,6 +811,8 @@
    *
    * <literal>va_list</literal> version of purple_request_action(); see its
    * documentation.
    + *
    + * Returns: A UI-specific handle.
    */
    PURPLE_AVAILABLE_IN_ALL
    void *
    --- a/libpurple/request/purplerequestfield.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/request/purplerequestfield.h Tue Apr 09 21:50:31 2024 -0500
    @@ -70,6 +70,8 @@
    * [method@Purple.RequestField.set_validator].
    *
    * A callback to check whether a field is valid.
    + *
    + * Returns: %TRUE if the field is valid, otherwise %FALSE.
    */
    typedef gboolean (*PurpleRequestFieldValidator)(PurpleRequestField *field, char **errmsg, gpointer user_data);
    --- a/libpurple/request/purplerequestfieldlist.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/request/purplerequestfieldlist.c Tue Apr 09 21:50:31 2024 -0500
    @@ -115,7 +115,7 @@
    obj_class->set_property = purple_request_field_list_set_property;
    /**
    - * PurpleRequestFieldChoice:multi-select:
    + * PurpleRequestFieldList:multi-select:
    *
    * Whether the field should allow multiple selections.
    *
    --- a/libpurple/roomlist.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/roomlist.c Tue Apr 09 21:50:31 2024 -0500
    @@ -274,12 +274,26 @@
    obj_class->get_property = purple_roomlist_get_property;
    obj_class->set_property = purple_roomlist_set_property;
    + /**
    + * PurpleRoomlist:account:
    + *
    + * The account this room list belongs to.
    + *
    + * Since: 3.0
    + */
    properties[PROP_ACCOUNT] = g_param_spec_object("account", "Account",
    "The account for the room list.",
    PURPLE_TYPE_ACCOUNT,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
    G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleRoomlist:in-progress:
    + *
    + * Whether or not the room list is being fetched.
    + *
    + * Since: 3.0
    + */
    properties[PROP_IN_PROGRESS] = g_param_spec_boolean("in-progress",
    "In progress",
    "Whether the room list is being fetched.", FALSE,
    --- a/libpurple/roomlist.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/roomlist.h Tue Apr 09 21:50:31 2024 -0500
    @@ -32,6 +32,13 @@
    #define PURPLE_TYPE_ROOMLIST (purple_roomlist_get_type())
    typedef struct _PurpleRoomlist PurpleRoomlist;
    +/**
    + * PurpleRoomlistField:
    + *
    + * A field for the room list.
    + *
    + * Since: 2.0
    + */
    #define PURPLE_TYPE_ROOMLIST_FIELD (purple_roomlist_field_get_type())
    typedef struct _PurpleRoomlistField PurpleRoomlistField;
    --- a/libpurple/savedstatuses.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/savedstatuses.h Tue Apr 09 21:50:31 2024 -0500
    @@ -61,6 +61,13 @@
    */
    typedef struct _PurpleSavedStatus PurpleSavedStatus;
    +/**
    + * PurpleSavedStatusSub:
    + *
    + * A sub statuses of a saved status.
    + *
    + * Since: 2.0
    + */
    typedef struct _PurpleSavedStatusSub PurpleSavedStatusSub;
    #include "status.h"
    --- a/libpurple/server.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/server.h Tue Apr 09 21:50:31 2024 -0500
    @@ -241,6 +241,8 @@
    * @data: The hash function should be g_str_hash() and the equal
    * function should be g_str_equal().
    *
    + * Joins the chat described by the components in @data.
    + *
    * Since: 3.0
    */
    PURPLE_AVAILABLE_IN_3_0
    @@ -248,10 +250,12 @@
    /**
    * purple_serv_reject_chat:
    - * @gc: The #PurpleConnection
    + * @gc: The #PurpleConnection
    * @data: The hash function should be g_str_hash() and the equal
    * function should be g_str_equal().
    *
    + * Rejects a chat invite based on the components in @data.
    + *
    * Since: 3.0
    */
    PURPLE_AVAILABLE_IN_3_0
    --- a/libpurple/status.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/status.c Tue Apr 09 21:50:31 2024 -0500
    @@ -1108,18 +1108,39 @@
    obj_class->get_property = purple_status_get_property;
    obj_class->set_property = purple_status_set_property;
    + /**
    + * PurpleStatus:status-type:
    + *
    + * The type of this status.
    + *
    + * Since: 3.0
    + */
    properties[PROP_STATUS_TYPE] = g_param_spec_pointer("status-type",
    "Status type",
    "The PurpleStatusType of the status.",
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
    G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleStatus:presence:
    + *
    + * The presence that the status belongs to.
    + *
    + * Since: 3.0
    + */
    properties[PROP_PRESENCE] = g_param_spec_object("presence", "Presence",
    "The presence that the status belongs to.",
    PURPLE_TYPE_PRESENCE,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
    G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleStatus:active:
    + *
    + * Whether or not the status is active.
    + *
    + * Since: 3.0
    + */
    properties[PROP_ACTIVE] = g_param_spec_boolean("active", "Active",
    "Whether the status is active or not.", FALSE,
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    --- a/libpurple/status.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/status.h Tue Apr 09 21:50:31 2024 -0500
    @@ -85,6 +85,14 @@
    *
    * Since: 2.0
    */
    +
    +/**
    + * PurpleStatusAttribute:
    + *
    + * An attribute that can be added to a status.
    + *
    + * Since: 2.0
    + */
    typedef struct _PurpleStatusAttribute PurpleStatusAttribute;
    /**
    --- a/libpurple/tests.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/tests.h Tue Apr 09 21:50:31 2024 -0500
    @@ -27,12 +27,40 @@
    G_BEGIN_DECLS
    +/**
    + * PurpleTestStringData:
    + *
    + * Test data for testing strings.
    + *
    + * Since: 2.0
    + */
    typedef struct {
    const gchar *input;
    const gchar *output;
    } PurpleTestStringData;
    +/**
    + * PurpleTestStringFunc:
    + * @str: The string to test.
    + *
    + * A function to call with @str as the input.
    + *
    + * Returns: The output of the function.
    + *
    + * Since: 2.0
    + */
    typedef const gchar *(*PurpleTestStringFunc)(const gchar *str);
    +
    +/**
    + * PurpleTestStringFreeFunc:
    + * @str: The string to test.
    + *
    + * A function to call with @str as the input.
    + *
    + * Returns: (transfer full): The output of the function.
    + *
    + * Since: 2.0
    + */
    typedef gchar *(*PurpleTestStringFreeFunc)(const gchar *str);
    static inline void
    --- a/libpurple/util.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/util.h Tue Apr 09 21:50:31 2024 -0500
    @@ -410,6 +410,14 @@
    /* URI/URL Functions */
    /**************************************************************************/
    +/**
    + * purple_got_protocol_handler_uri:
    + * @uri: The uri.
    + *
    + * Parses @uri and emits the uri-handler core signal.
    + *
    + * Since: 2.0
    + */
    PURPLE_AVAILABLE_IN_ALL
    void purple_got_protocol_handler_uri(const char *uri);
    --- a/libpurple/xfer.c Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/xfer.c Tue Apr 09 21:50:31 2024 -0500
    @@ -2186,94 +2186,182 @@
    klass->write_local = do_write_local;
    klass->data_not_sent = do_data_not_sent;
    - /* Properties */
    -
    + /**
    + * PurpleXfer:type:
    + *
    + * The type of the transfer.
    + */
    properties[PROP_TYPE] = g_param_spec_enum("type", "Transfer type",
    "The type of file transfer.", PURPLE_TYPE_XFER_TYPE,
    PURPLE_XFER_TYPE_UNKNOWN,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
    G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleXfer:account:
    + *
    + * The account that this transfer is for.
    + */
    properties[PROP_ACCOUNT] = g_param_spec_object("account", "Account",
    "The account sending or receiving the file.",
    PURPLE_TYPE_ACCOUNT,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
    G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleXfer:remote-user:
    + *
    + * The user on the other side of this transfer.
    + */
    properties[PROP_REMOTE_USER] = g_param_spec_string("remote-user",
    "Remote user",
    "The name of the remote user.", NULL,
    G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleXfer:message:
    + *
    + * A message that was sent with the transfer.
    + */
    properties[PROP_MESSAGE] = g_param_spec_string("message", "Message",
    "The message for the file transfer.", NULL,
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleXfer:filename:
    + *
    + * The name of the file being transferred.
    + */
    properties[PROP_FILENAME] = g_param_spec_string("filename", "Filename",
    "The filename for the file transfer.", NULL,
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleXfer:local-filename:
    + *
    + * The local filename for this transfer.
    + */
    properties[PROP_LOCAL_FILENAME] = g_param_spec_string("local-filename",
    "Local filename",
    "The local filename for the file transfer.", NULL,
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleXfer:file-size:
    + *
    + * The size of the file in bytes.
    + */
    properties[PROP_FILE_SIZE] = g_param_spec_int64("file-size", "File size",
    "Size of the file in a file transfer.",
    G_MININT64, G_MAXINT64, 0,
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleXfer:remote-ip:
    + *
    + * The IP address of the remote user.
    + */
    properties[PROP_REMOTE_IP] = g_param_spec_string("remote-ip", "Remote IP",
    "The remote IP address in the file transfer.", NULL,
    G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleXfer:local-port:
    + *
    + * The port number on the local side.
    + */
    properties[PROP_LOCAL_PORT] = g_param_spec_int("local-port", "Local port",
    "The local port number in the file transfer.",
    G_MININT, G_MAXINT, 0,
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleXfer:remote-port:
    + *
    + * The port number on the remote side.
    + */
    properties[PROP_REMOTE_PORT] = g_param_spec_int("remote-port",
    "Remote port",
    "The remote port number in the file transfer.",
    G_MININT, G_MAXINT, 0,
    G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleXfer:fd:
    + *
    + * The socket file descriptor for the transfer.
    + */
    properties[PROP_FD] = g_param_spec_int("fd", "Socket FD",
    "The socket file descriptor.",
    G_MININT, G_MAXINT, 0,
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleXfer:watcher:
    + *
    + * The input watcher for this transfer.
    + */
    properties[PROP_WATCHER] = g_param_spec_int("watcher", "Watcher",
    "The watcher for the file transfer.",
    G_MININT, G_MAXINT, 0,
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleXfer:bytes-sent:
    + *
    + * The number of bytes that have been sent.
    + */
    properties[PROP_BYTES_SENT] = g_param_spec_int64("bytes-sent", "Bytes sent",
    "The number of bytes sent (or received) so far.",
    G_MININT64, G_MAXINT64, 0,
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleXfer:start-time:
    + *
    + * The time when the transfer started.
    + */
    properties[PROP_START_TIME] = g_param_spec_int64(
    "start-time", "Start time",
    "The monotonic time the transfer of a file started.",
    G_MININT64, G_MAXINT64, 0,
    G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleXfer:end-time:
    + *
    + * The time when the transfer ended.
    + */
    properties[PROP_END_TIME] = g_param_spec_int64(
    "end-time", "End time",
    "The monotonic time the transfer of a file ended.", G_MININT64,
    G_MAXINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleXfer:status:
    + *
    + * The status of the transfer.
    + */
    properties[PROP_STATUS] = g_param_spec_enum("status", "Status",
    "The current status for the file transfer.",
    PURPLE_TYPE_XFER_STATUS, PURPLE_XFER_STATUS_UNKNOWN,
    G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleXfer:progress:
    + *
    + * The current progress of the transfer.
    + */
    properties[PROP_PROGRESS] = g_param_spec_double(
    "progress", "Progress",
    "The current progress of the file transfer.", -1.0, 1.0, -1.0,
    G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
    + /**
    + * PurpleXfer:visible:
    + *
    + * Whether or not user interfaces should display the transfer.
    + */
    properties[PROP_VISIBLE] = g_param_spec_boolean(
    "visible", "Visible",
    "Hint for UIs whether this transfer should be visible.", FALSE,
    --- a/libpurple/xfer.h Wed Apr 03 16:32:56 2024 -0500
    +++ b/libpurple/xfer.h Tue Apr 09 21:50:31 2024 -0500
    @@ -991,17 +991,13 @@
    PROTOCOL_XFER, PurpleProtocol)
    /**
    - * PurpleProtocolXferInterface:
    - * @can_receive: A method to determine if we can receive a file.
    - * @send_file: A method to determine if we can send a file.
    - * @new_xfer: A method to create a new file transfer.
    + * PurpleProtocolXfer:
    *
    * The protocol file transfer interface.
    *
    - * This interface provides file transfer callbacks for the protocol.
    - *
    * Since: 3.0
    */
    +
    struct _PurpleProtocolXferInterface {
    /*< private >*/
    GTypeInterface parent_iface;