[libsecret: 1/2] Port documentation to gi-docgen
- From: Dhanuka Warusadura <dhanuka src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libsecret: 1/2] Port documentation to gi-docgen
- Date: Wed, 2 Feb 2022 12:19:15 +0000 (UTC)
commit 2c3a34cca46f523e0a1df62000c51c5e17d0b589
Author: Maximiliano <msandova gnome org>
Date: Wed Feb 2 12:19:14 2022 +0000
Port documentation to gi-docgen
.gitignore | 1 -
.gitlab-ci.yml | 29 +-
README.md | 5 +
docs/reference/libsecret/libsecret-c-examples.md | 251 ++++++
docs/reference/libsecret/libsecret-docs.sgml | 47 --
docs/reference/libsecret/libsecret-examples.sgml | 785 -------------------
docs/reference/libsecret/libsecret-js-examples.md | 170 +++++
docs/reference/libsecret/libsecret-overrides.txt | 2 -
.../libsecret/libsecret-python-examples.md | 152 ++++
docs/reference/libsecret/libsecret-sections.txt | 389 ----------
docs/reference/libsecret/libsecret-simple-api.md | 95 +++
docs/reference/libsecret/libsecret-tpm2.md | 69 ++
docs/reference/libsecret/libsecret-tpm2.sgml | 67 --
docs/reference/libsecret/libsecret-using.md | 80 ++
docs/reference/libsecret/libsecret-using.sgml | 112 ---
.../reference/libsecret/libsecret-vala-examples.md | 157 ++++
docs/reference/libsecret/libsecret.toml.in | 52 ++
docs/reference/libsecret/libsecret.types | 7 -
docs/reference/libsecret/meson.build | 71 +-
.../libsecret/migrating-libgnome-keyring.md | 823 ++++++++++++++++++++
.../libsecret/migrating-libgnome-keyring.xml | 839 ---------------------
docs/reference/libsecret/urlmap.js | 6 +
docs/reference/libsecret/version-major.xml.in | 1 -
docs/reference/libsecret/version.xml.in | 1 -
libsecret/secret-attributes.c | 17 +-
libsecret/secret-backend.c | 24 +-
libsecret/secret-collection.c | 142 ++--
libsecret/secret-item.c | 80 +-
libsecret/secret-methods.c | 86 +--
libsecret/secret-password.c | 99 +--
libsecret/secret-paths.c | 192 +++--
libsecret/secret-prompt.c | 48 +-
libsecret/secret-retrievable.c | 40 +-
libsecret/secret-schema.c | 90 +--
libsecret/secret-schemas.c | 44 +-
libsecret/secret-schemas.h | 61 +-
libsecret/secret-service.c | 121 ++-
libsecret/secret-util.c | 6 +-
libsecret/secret-value.c | 32 +-
libsecret/secret-version.h.in | 8 -
meson_options.txt | 2 +-
subprojects/gi-docgen.wrap | 6 +
42 files changed, 2402 insertions(+), 2907 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 62eeb63..5714fce 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,7 +28,6 @@ config.*
depcomp
install-sh
INSTALL
-gtk-doc.make
libtool
ltmain.sh
Makefile
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c27e417..1f55800 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -16,7 +16,7 @@ fedora:Werror:
- dnf install -y $DEPENDENCIES
- dbus-uuidgen --ensure
script:
- - meson _build -Dwerror=true -Dc_args=-Wno-error=deprecated-declarations
+ - meson _build -Dwerror=true -Dc_args=-Wno-error=deprecated-declarations -Dgtk_doc=false
- meson compile -C _build
- eval `dbus-launch --sh-syntax`
- meson test -C _build
@@ -35,7 +35,7 @@ fedora:asan:
- dnf install -y $DEPENDENCIES libasan
- dbus-uuidgen --ensure
script:
- - meson _build -Dsanitize=address
+ - meson _build -Dsanitize=address -Dgtk_doc=false
- meson compile -C _build
- eval `dbus-launch --sh-syntax`
- meson test -C _build
@@ -54,7 +54,7 @@ fedora:ubsan:
- dnf install -y $DEPENDENCIES libubsan
- dbus-uuidgen --ensure
script:
- - meson _build -Dsanitize=undefined
+ - meson _build -Dsanitize=undefined -Dgtk_doc=false
- meson compile -C _build
- eval `dbus-launch --sh-syntax`
- meson test -C _build
@@ -73,7 +73,7 @@ fedora-static-analyzers/test:
- dnf install -y $DEPENDENCIES clang-analyzer cppcheck
- dbus-uuidgen --ensure
script:
- - meson _build
+ - meson _build -Dgtk_doc=false
- meson compile -C _build --ninja-args scan-build
- cppcheck --force -q $CPPCHECK_OPTIONS libsecret/ egg/ tool/
artifacts:
@@ -92,7 +92,7 @@ fedora:coverage:
- dnf install -y $DEPENDENCIES lcov
- dbus-uuidgen --ensure
script:
- - meson _build -Db_coverage=true -Dtpm2=true
+ - meson _build -Db_coverage=true -Dtpm2=true -Dgtk_doc=false
- meson compile -C _build
- eval `dbus-launch --sh-syntax`
- export XDG_CONFIG_HOME=$HOME/.config
@@ -113,11 +113,30 @@ fedora:coverage:
# https://github.com/linux-test-project/lcov/issues/58
allow_failure: true
+reference:
+ stage: build
+ image: fedora:35
+ before_script:
+ - dnf install -y $DEPENDENCIES gi-docgen gobject-introspection-devel libgcrypt-devel
+ variables:
+ MESON_ARGS: >-
+ -Dgtk_doc=true
+ -Dvapi=false
+ -Dmanpage=false
+ script:
+ - meson ${MESON_ARGS} _build
+ - ninja -C _build
+ - mv _build/docs/reference/libsecret/libsecret-1 _reference
+ artifacts:
+ paths:
+ - _reference
+
pages:
stage: deploy
script:
- mkdir public
- mv _build/meson-logs/coveragereport public/coverage
+ - mv _reference/* public/
artifacts:
when: on_success
paths:
diff --git a/README.md b/README.md
index c255a52..ad1353a 100644
--- a/README.md
+++ b/README.md
@@ -9,6 +9,11 @@ methods so consumers do not have to call the low-level DBus methods.
The actual Secret Service API spec can be found at
https://specifications.freedesktop.org/secret-service/.
+Documentation
+--------
+
+You can find the nighlt documentation at https://gnome.pages.gitlab.gnome.org/libsecret/.
+
Building
--------
diff --git a/docs/reference/libsecret/libsecret-c-examples.md
b/docs/reference/libsecret/libsecret-c-examples.md
new file mode 100644
index 0000000..4eebffb
--- /dev/null
+++ b/docs/reference/libsecret/libsecret-c-examples.md
@@ -0,0 +1,251 @@
+Title: C Examples
+Slug: libsecret-c-example
+
+# C Examples
+
+## Define a password schema
+
+Each stored password has a set of attributes which are later
+used to lookup the password. The names and types of the attributes
+are defined in a schema. The schema is usually defined once globally.
+Here's how to define a schema:
+
+```c
+// in a header:
+
+const SecretSchema * example_get_schema (void) G_GNUC_CONST;
+
+#define EXAMPLE_SCHEMA example_get_schema ()
+
+
+// in a .c file:
+
+const SecretSchema *
+example_get_schema (void)
+{
+ static const SecretSchema the_schema = {
+ "org.example.Password", SECRET_SCHEMA_NONE,
+ {
+ { "number", SECRET_SCHEMA_ATTRIBUTE_INTEGER },
+ { "string", SECRET_SCHEMA_ATTRIBUTE_STRING },
+ { "even", SECRET_SCHEMA_ATTRIBUTE_BOOLEAN },
+ { "NULL", 0 },
+ }
+ };
+ return &the_schema;
+}
+```
+
+See the [other examples](#store-a-password) for how to use the schema.
+
+## Store a password
+
+Here's how to store a password in the running secret service,
+like gnome-keyring or ksecretservice.
+
+Each stored password has a set of attributes which are later
+used to lookup the password. The attributes should not contain
+secrets, as they are not stored in an encrypted fashion.
+
+These examples use the [example schema](#define-a-password-schema).
+
+This first example stores a password asynchronously, and is
+appropriate for GUI applications so that the UI does not block.
+
+```c
+static void
+on_password_stored (GObject *source,
+ GAsyncResult *result,
+ gpointer unused)
+{
+ GError *error = NULL;
+
+ secret_password_store_finish (result, &error);
+ if (error != NULL) {
+ /* ... handle the failure here */
+ g_error_free (error);
+ } else {
+ /* ... do something now that the password has been stored */
+ }
+}
+
+/*
+ * The variable argument list is the attributes used to later
+ * lookup the password. These attributes must conform to the schema.
+ */
+secret_password_store (EXAMPLE_SCHEMA, SECRET_COLLECTION_DEFAULT, "The label",
+ "the password", NULL, on_password_stored, NULL,
+ "number", 8,
+ "string", "eight",
+ "even", TRUE,
+ NULL);
+```
+
+This next example stores a password synchronously. The function
+call will block until the password is stored. So this is appropriate for
+non GUI applications.
+
+```c
+GError *error = NULL;
+
+/*
+ * The variable argument list is the attributes used to later
+ * lookup the password. These attributes must conform to the schema.
+ */
+secret_password_store_sync (EXAMPLE_SCHEMA, SECRET_COLLECTION_DEFAULT,
+ "The label", "the password", NULL, &error,
+ "number", 9,
+ "string", "nine",
+ "even", FALSE,
+ NULL);
+
+if (error != NULL) {
+ /* ... handle the failure here */
+ g_error_free (error);
+} else {
+ /* ... do something now that the password has been stored */
+}
+```
+
+## Lookup a password
+
+Here's how to lookup a password in the running secret service,
+like gnome-keyring or ksecretservice.
+
+Each stored password has a set of attributes which are
+used to lookup the password. If multiple passwords match the
+lookup attributes, then the one stored most recently is returned.
+
+These examples use the [example schema](#define-a-password-schema).
+
+This first example looks up a password asynchronously, and is
+appropriate for GUI applications so that the UI does not block.
+
+```c
+static void
+on_password_lookup (GObject *source,
+ GAsyncResult *result,
+ gpointer unused)
+ {
+ GError *error = NULL;
+
+ gchar *password = secret_password_lookup_finish (result, &error);
+
+ if (error != NULL) {
+ /* ... handle the failure here */
+ g_error_free (error);
+
+ } else if (password == NULL) {
+ /* password will be null, if no matching password found */
+
+ } else {
+ /* ... do something with the password */
+ secret_password_free (password);
+ }
+
+}
+
+/*
+ * The variable argument list is the attributes used to later
+ * lookup the password. These attributes must conform to the schema.
+ */
+secret_password_lookup (EXAMPLE_SCHEMA, NULL, on_password_lookup, NULL,
+ "string", "nine",
+ "even", FALSE,
+ NULL);
+```
+
+This next example looks up a password synchronously. The function
+call will block until the lookup completes. So this is appropriate for
+non GUI applications.
+
+```c
+GError *error = NULL;
+
+/* The attributes used to lookup the password should conform to the schema. */
+gchar *password = secret_password_lookup_sync (EXAMPLE_SCHEMA, NULL, &error,
+ "string", "nine",
+ "even", FALSE,
+ NULL);
+
+if (error != NULL) {
+ /* ... handle the failure here */
+ g_error_free (error);
+
+} else if (password == NULL) {
+ /* password will be null, if no matching password found */
+
+} else {
+ /* ... do something with the password */
+ secret_password_free (password);
+}
+```
+
+
+## Remove a password
+
+Here's how to remove a password from the running secret service,
+like gnome-keyring or ksecretservice.
+
+Each stored password has a set of attributes which are
+used to find which password to remove. If multiple passwords match the
+attributes, then the one stored most recently is removed.
+
+These examples use the [example schema](#define-a-password-schema).
+
+This first example removes a password asynchronously, and is
+appropriate for GUI applications so that the UI does not block.
+
+```c
+static void
+on_password_cleared (GObject *source,
+ GAsyncResult *result,
+ gpointer unused)
+ {
+ GError *error = NULL;
+
+ gboolean removed = secret_password_clear_finish (result, &error);
+
+ if (error != NULL) {
+ /* ... handle the failure here */
+ g_error_free (error);
+
+ } else {
+ /* removed will be TRUE if a password was removed */
+ }
+}
+
+/*
+ * The variable argument list is the attributes used to later
+ * lookup the password. These attributes must conform to the schema.
+ */
+secret_password_clear (EXAMPLE_SCHEMA, NULL, on_password_cleared, NULL,
+ "string", "nine",
+ "even", FALSE,
+ NULL);
+```
+
+This next example looks up a password synchronously. The function
+call will block until the lookup completes. So this is appropriate for
+non GUI applications.
+
+```c
+GError *error = NULL;
+
+/*
+ * The variable argument list is the attributes used to later
+ * lookup the password. These attributes must conform to the schema.
+ */
+gboolean removed = secret_password_clear_sync (EXAMPLE_SCHEMA, NULL, &error,
+ "string", "nine",
+ "even", FALSE,
+ NULL);
+
+if (error != NULL) {
+ /* ... handle the failure here */
+ g_error_free (error);
+
+} else {
+ /* removed will be TRUE if a password was removed */
+}
+```
diff --git a/docs/reference/libsecret/libsecret-js-examples.md
b/docs/reference/libsecret/libsecret-js-examples.md
new file mode 100644
index 0000000..ad98679
--- /dev/null
+++ b/docs/reference/libsecret/libsecret-js-examples.md
@@ -0,0 +1,170 @@
+Title: Javascript Examples
+Slug: libsecret-js-example
+
+# Javascript examples
+
+## Define a password schema
+
+Each stored password has a set of attributes which are later
+used to lookup the password. The names and types of the attributes
+are defined in a schema. The schema is usually defined once globally.
+Here's how to define a schema:
+
+```js
+const Secret = imports.gi.Secret;
+
+/* This schema is usually defined once globally */
+const EXAMPLE_SCHEMA = new Secret.Schema.new("org.example.Password",
+ Secret.SchemaFlags.NONE,
+ {
+ "number": Secret.SchemaAttributeType.INTEGER,
+ "string": Secret.SchemaAttributeType.STRING,
+ "even": Secret.SchemaAttributeType.BOOLEAN,
+ }
+);
+```
+
+See the [other examples](#store-a-password) for how
+to use the schema.
+
+## Store a password
+
+Here's how to store a password in the running secret service,
+like gnome-keyring or ksecretservice.
+
+Each stored password has a set of attributes which are later
+used to lookup the password. The attributes should not contain
+secrets, as they are not stored in an encrypted fashion.
+
+These examples use the [example schema](#define-a-password-schema).
+
+This first example stores a password asynchronously, and is
+appropriate for GUI applications so that the UI does not block.
+
+```js
+const Secret = imports.gi.Secret;
+
+function on_password_stored(source, result) {
+ Secret.password_store_finish(result);
+ /* ... do something now that the password has been stored */
+}
+
+/*
+ * The attributes used to later lookup the password. These
+ * attributes should conform to the schema.
+ */
+var attributes = {
+ "number": "8",
+ "string": "eight",
+ "even": "true"
+};
+
+Secret.password_store(EXAMPLE_SCHEMA, attributes, Secret.COLLECTION_DEFAULT,
+ "The label", "the password", null, on_password_stored);
+```
+
+This next example stores a password synchronously. The function
+call will block until the password is stored. So this is appropriate for
+non GUI applications.
+
+```js
+const Secret = imports.gi.Secret;
+
+/*
+ * The attributes used to later lookup the password. These
+ * attributes should conform to the schema.
+ */
+var attributes = {
+ "number": "9",
+ "string": "nine",
+ "even": "false"
+};
+
+Secret.password_store_sync(EXAMPLE_SCHEMA, attributes, Secret.COLLECTION_DEFAULT,
+ "The label", "the password", null);
+```
+
+## Lookup a password
+
+Here's how to lookup a password in the running secret service,
+like gnome-keyring or ksecretservice.
+
+Each stored password has a set of attributes which are
+used to lookup the password. If multiple passwords match the
+lookup attributes, then the one stored most recently is returned.
+
+These examples use the [example schema](#define-a-password-schema).
+
+This first example looks up a password asynchronously, and is
+appropriate for GUI applications so that the UI does not block.
+
+```js
+const Secret = imports.gi.Secret;
+
+function on_password_lookup(source, result) {
+ var password = Secret.password_lookup_finish(result);
+ /* password will be null if no matching password found */
+}
+
+/* The attributes used to lookup the password should conform to the schema. */
+Secret.password_lookup(EXAMPLE_SCHEMA, { "number": "8", "even": "true" },
+ null, on_password_lookup);
+```
+
+This next example looks up a password synchronously. The function
+call will block until the lookup completes. So this is appropriate for
+non GUI applications.
+
+```js
+const Secret = imports.gi.Secret;
+
+/* The attributes used to lookup the password should conform to the schema. */
+var password = Secret.password_lookup_sync(EXAMPLE_SCHEMA,
+ { "number": "8", "even": "true" },
+ null);
+
+/* password will be null, if no matching password found */
+```
+
+
+## Remove a password
+
+Here's how to remove a password from the running secret service,
+like gnome-keyring or ksecretservice.
+
+Each stored password has a set of attributes which are
+used to find which password to remove. If multiple passwords match the
+attributes, then the one stored most recently is removed.
+
+These examples use the [example schema](#define-a-password-schema).
+
+This first example removes a password asynchronously, and is
+appropriate for GUI applications so that the UI does not block.
+
+```js
+const Secret = imports.gi.Secret;
+
+function on_password_clear(source, result) {
+ var removed = Secret.password_clear_finish(result);
+ /* removed will be true if the password was removed */
+}
+
+/* The attributes used to lookup which password to remove should conform to the schema. */
+Secret.password_clear(EXAMPLE_SCHEMA, { "number": "8", "even": "true" },
+ null, on_password_clear);
+```
+
+This next example removes a password synchronously. The function
+call will block until the removal completes. So this is appropriate for
+non GUI applications.
+
+```js
+const Secret = imports.gi.Secret;
+
+/* The attributes used to lookup which password to remove should conform to the schema. */
+var removed = Secret.password_clear_sync(EXAMPLE_SCHEMA,
+ { "number": "8", "even": "true" },
+ null);
+
+/* removed will be true if the password was removed */
+```
diff --git a/docs/reference/libsecret/libsecret-python-examples.md
b/docs/reference/libsecret/libsecret-python-examples.md
new file mode 100644
index 0000000..b9c0b7d
--- /dev/null
+++ b/docs/reference/libsecret/libsecret-python-examples.md
@@ -0,0 +1,152 @@
+Title: Python Examples
+Slug: libsecret-python-example
+
+# Python examples
+
+## Define a password schema
+
+Each stored password has a set of attributes which are later
+used to lookup the password. The names and types of the attributes
+are defined in a schema. The schema is usually defined once globally.
+Here's how to define a schema:
+
+```python
+from gi.repository import Secret
+
+EXAMPLE_SCHEMA = Secret.Schema.new("org.mock.type.Store",
+ Secret.SchemaFlags.NONE,
+ {
+ "number": Secret.SchemaAttributeType.INTEGER,
+ "string": Secret.SchemaAttributeType.STRING,
+ "even": Secret.SchemaAttributeType.BOOLEAN,
+ }
+)
+```
+
+See the [other examples](#store-a-password) for how
+to use the schema.
+
+
+## Store a password
+
+Here's how to store a password in the running secret service,
+like gnome-keyring or ksecretservice.
+
+Each stored password has a set of attributes which are later
+used to lookup the password. The attributes should not contain
+secrets, as they are not stored in an encrypted fashion.
+
+These examples use the [example schema](#define-a-password-schema).
+
+This first example stores a password asynchronously, and is
+appropriate for GUI applications so that the UI does not block.
+
+```python
+from gi.repository import Secret
+
+def on_password_stored(source, result, unused):
+ Secret.password_store_finish(result)
+ # ... do something now that the password has been stored
+
+# The attributes used to later lookup the password. These
+# attributes should conform to the schema.
+attributes = {
+ "number": "8",
+ "string": "eight",
+ "even": "true"
+}
+
+Secret.password_store(EXAMPLE_SCHEMA, attributes, Secret.COLLECTION_DEFAULT,
+ "The label", "the password", None, on_password_stored)
+```
+
+This next example stores a password synchronously. The function
+call will block until the password is stored. So this is appropriate for
+non GUI applications.
+
+```python
+from gi.repository import Secret
+
+# The attributes used to later lookup the password. These
+# attributes should conform to the schema.
+attributes = {
+ "number": "8",
+ "string": "eight",
+ "even": "true"
+}
+
+Secret.password_store_sync(EXAMPLE_SCHEMA, attributes, Secret.COLLECTION_DEFAULT,
+ "The label", "the password", None)
+```
+
+## Lookup a password
+
+Here's how to lookup a password in the running secret service,
+like gnome-keyring or ksecretservice.
+
+Each stored password has a set of attributes which are
+used to lookup the password. If multiple passwords match the
+lookup attributes, then the one stored most recently is returned.
+
+These examples use the [example schema](#define-a-password-schema).
+
+This first example looks up a password asynchronously, and is
+appropriate for GUI applications so that the UI does not block.
+
+```python
+from gi.repository import Secret
+
+def on_password_lookup(source, result, unused):
+ password = Secret.password_lookup_finish(result)
+ # password will be null, if no matching password found
+
+Secret.password_lookup(EXAMPLE_SCHEMA, { "number": "8", "even": "true" },
+ None, on_password_lookup)
+```
+
+This next example looks up a password synchronously. The function
+call will block until the lookup completes. So this is appropriate for
+non GUI applications.
+
+```python
+from gi.repository import Secret
+
+password = Secret.password_lookup_sync(EXAMPLE_SCHEMA, { "number": "8", "even": "true" }, None)
+# password will be null, if no matching password found
+```
+
+## Remove a password
+
+Here's how to remove a password from the running secret service,
+like gnome-keyring or ksecretservice.
+
+Each stored password has a set of attributes which are
+used to find which password to remove. If multiple passwords match the
+attributes, then the one stored most recently is removed.
+
+These examples use the [example schema](#define-a-password-schema).
+
+This first example removes a password asynchronously, and is
+appropriate for GUI applications so that the UI does not block.
+
+```python
+from gi.repository import Secret
+
+def on_password_clear(source, result, unused):
+ removed = Secret.password_clear_finish(result)
+ # removed will be true if the password was removed
+
+Secret.password_clear(EXAMPLE_SCHEMA, { "number": "8", "even": "true" },
+ None, on_password_clear)
+```
+
+This next example removes a password synchronously. The function
+call will block until the removal completes. So this is appropriate for
+non GUI applications.
+
+```python
+from gi.repository import Secret
+
+removed = Secret.password_clear_sync(EXAMPLE_SCHEMA, { "number": "8", "even": "true" }, None)
+# removed will be true if the password was removed
+```
diff --git a/docs/reference/libsecret/libsecret-simple-api.md
b/docs/reference/libsecret/libsecret-simple-api.md
new file mode 100644
index 0000000..b6fda5e
--- /dev/null
+++ b/docs/reference/libsecret/libsecret-simple-api.md
@@ -0,0 +1,95 @@
+Title: Simple API
+Slug: libsecret-simple-api
+
+# Simple API
+
+## SecretPassword
+
+Simple password storage and lookup.
+
+This is a simple API for storing passwords and retrieving passwords in the
+Secret Service.
+
+Each password is associated with a set of attributes. Attribute values can be
+either strings, integers or booleans.
+
+The names and types of allowed attributes for a given password are defined with
+a schema. Certain schemas are predefined. Additional schemas can be defined via
+the [struct@Schema] structure.
+
+Each of the functions accept a variable list of attributes names and their
+values. Include a `NULL` to terminate the list of attributes.
+
+## SecretSchema
+
+Represents a set of attributes that are stored with an item. These schemas are
+used for interoperability between various services storing the same types of
+items.
+
+Each schema has a name like `org.gnome.keyring.NetworkPassword`, and defines a
+set of attributes, and types (string, integer, boolean) for those attributes.
+
+Attributes are stored as strings in the Secret Service, and the attribute types
+simply define standard ways to store integer and boolean values as strings.
+Attributes are represented in libsecret via a [struct@GLib.HashTable] with
+string keys and values. Even for values that defined as an integer or boolean in
+the schema, the attribute values in the [struct@GLib.HashTable] are strings.
+Boolean values are stored as the strings 'true' and 'false'. Integer values are
+stored in decimal, with a preceding negative sign for negative integers.
+
+Schemas are handled entirely on the client side by this library. The name of the
+schema is automatically stored as an attribute on the item.
+
+Normally when looking up passwords only those with matching schema names are
+returned. If the schema @flags contain the `SECRET_SCHEMA_DONT_MATCH_NAME` flag,
+then lookups will not check that the schema name matches that on the item, only
+the schema's attributes are matched. This is useful when you are looking up
+items that are not stored by the libsecret library. Other libraries such as
+libgnome-keyring don't store the schema name.
+
+Additional schemas can be defined via the %SecretSchema structure like this:
+
+```c
+// in a header:
+
+const SecretSchema * example_get_schema (void) G_GNUC_CONST;
+
+#define EXAMPLE_SCHEMA example_get_schema ()
+
+
+// in a .c file
+
+const SecretSchema *
+example_get_schema (void)
+{
+ static const SecretSchema the_schema = {
+ "org.example.Password", SECRET_SCHEMA_NONE,
+ {
+ { "number", SECRET_SCHEMA_ATTRIBUTE_INTEGER },
+ { "string", SECRET_SCHEMA_ATTRIBUTE_STRING },
+ { "even", SECRET_SCHEMA_ATTRIBUTE_BOOLEAN },
+ { NULL, 0 },
+ }
+ };
+ return &the_schema;
+}
+```
+
+## Secret Attributes
+
+Each item has a set of attributes, which are used to locate the item later.
+These are not stored or transferred in a secure manner. Each attribute has a
+string name and a string value. These attributes are represented by a
+[struct@GLib.HashTable] with string keys and values.
+
+Use [func@attributes_build] to simply build up a set of attributes.
+
+## DBus Path Related Functions
+
+Secret Service functions which operate on DBus object paths
+
+These are low level functions which operate on DBus object paths of collections
+or items, instead of the [class@Collection] or [class@Item] objects themselves.
+
+You can use these functions if you wish to manage access to the secret service
+using the DBus API directly, and only wish to use a few calls in libsecret.
diff --git a/docs/reference/libsecret/libsecret-tpm2.md b/docs/reference/libsecret/libsecret-tpm2.md
new file mode 100644
index 0000000..b63de75
--- /dev/null
+++ b/docs/reference/libsecret/libsecret-tpm2.md
@@ -0,0 +1,69 @@
+Title: Extending file backend to use a TPM
+Slug: libsecret-tpm2
+
+# Extending file backend to use a TPM
+
+## Introduction
+
+The current implementation of file backend uses an encryption key derived from
+the user's login password. Security wise this not an ideal situation. Because,
+the entire security of the file backend relies on the user's login password
+(single point of failure). This situation can be improved if the keys are
+protected/generated by hardware. A Trusted Platform Module (TPM) is a such
+hardware security module found in modern computer systems.
+
+The new `EGG_TPM2` API based on the "TSS Enhanced System API (ESAPI)"
+
+```c
+EggTpm2Context *egg_tpm2_initialize (GError **);
+void egg_tpm2_finalize (EggTpm2Context *);
+GBytes *egg_tpm2_generate_master_password (EggTpm2Context *,
+ GError **);
+GBytes *egg_tpm2_decrypt_master_password (EggTpm2Context *,
+ GBytes *,
+ GError **);
+```
+
+## Build and test libsecret with TPM2 support
+
+In order to try out the `TPM2 support` use the `-Dtpm2=true` build option/flag
+during the `meson _build` process.
+
+You can alter the default build and install process as the following:
+
+```sh
+meson _build -Dtpm2=true
+ninja -C _build
+ninja -C _build install
+```
+
+For testing the TPM2 support you need a physical TPM or a TPM emulator. The
+following sections demonstrate how to setup
+[swtpm](https://github.com/stefanberger/swtpm) emulator and testing out the TPM2
+support. If you have access to a TPM you can ignore the emulator section.
+
+swtpm emulator setup:
+
+```sh
+dnf install swtpm swtpm-tools tpm2-abrmd tpm2-tss-devel
+eval `dbus-launch --sh-syntax`
+export XDG_CONFIG_HOME=$HOME/.config/swtpm
+/usr/share/swtpm/swtpm-create-user-config-files --root
+mkdir -p ${XDG_CONFIG_HOME}/mytpm1
+swtpm_setup --tpm2 --tpmstate $XDG_CONFIG_HOME/mytpm1 --createek --allow-signing --decryption
--create-ek-cert --create-platform-cert --lock-nvram --overwrite --display
+swtpm socket --tpm2 --tpmstate dir=$XDG_CONFIG_HOME/mytpm1 --flags startup-clear --ctrl type=tcp,port=2322
--server type=tcp,port=2321 --daemon
+tpm2-abrmd --logger=stdout --tcti=swtpm: --session --allow-root --flush-all &
+export TCTI=tabrmd:bus_type=session
+```
+
+Test TPM2 support:
+
+```sh
+cd libsecret
+meson _build -Dtpm2=true
+ninja -C _build
+export SECRET_BACKEND=file
+export SECRET_FILE_TEST_PATH=$PWD/keyring
+./_build/tool/secret-tool store --label=foo bar baz
+ls # keyring
+```
diff --git a/docs/reference/libsecret/libsecret-using.md b/docs/reference/libsecret/libsecret-using.md
new file mode 100644
index 0000000..bc2eae1
--- /dev/null
+++ b/docs/reference/libsecret/libsecret-using.md
@@ -0,0 +1,80 @@
+Title: Using libsecret
+Slug: libsecret-using
+
+# Using libsecret in builds or scripts
+
+## C: Compiling with libsecret
+
+Like other GNOME libraries, libsecret uses `pkg-config` to provide compiler
+options. The package name is `libsecret-1`. So in your `configure.ac` script,you
+might specify something like:
+
+```
+PKG_CHECK_MODULES(LIBSECRET, [libsecret-1 >= 1.0])
+AC_SUBST(LIBSECRET_CFLAGS)
+AC_SUBST(LIBSECRET_LIBS)
+```
+
+Code using libsecret should include the header like this:
+
+```c
+#include <libsecret/secret.h>;
+```
+
+Including individual headers besides the main header files is not permitted and
+will cause an error.
+
+Some parts of the libsecret API are not yet stable. To use them you need use the
+`libsecret-unstable` package. The API contained in this package will change from
+time to time. Here's how you would do it:
+
+```
+PKG_CHECK_MODULES(LIBSECRET, [libsecret-unstable >= 1.0])
+AC_SUBST(LIBSECRET_CFLAGS)
+AC_SUBST(LIBSECRET_LIBS)
+```
+
+## Javascript: Importing libsecret
+
+In Javascript use the standard introspection import mechanism to get at
+libsecret:
+
+```js
+const Secret = imports.gi.Secret;
+
+// ... and here's a sample line of code which uses the import
+var schema = new Secret.Schema.new("org.mock.Schema",
+ Secret.SchemaFlags.NONE, { "name", Secret.SchemaAttributeType.STRING });
+```
+
+
+## Python: Importing libsecret
+
+In python use the standard introspection import mechanism to get at libsecret:
+
+```python
+from gi.repository import Secret
+
+# ... and a here's sample line of code which uses the import
+schema = Secret.Schema.new("org.mock.Schema",
+ Secret.SchemaFlags.NONE, { "name", Secret.SchemaAttributeType.STRING })
+```
+
+## Vala: Compiling with libsecret
+
+The package name is `libsecret-1`. You can use it like
+this in your `Makefile.am` file:
+
+```
+AM_VALAFLAGS = \
+ --pkg=libsecret-1
+```
+
+Some parts of the libsecret API are not yet stable.
+To use them you need to define the `SECRET_WITH_UNSTABLE` C preprocessor
+macro to use them, or else the build will fail:
+
+```
+AM_CPPFLAGS = \
+ -DSECRET_WITH_UNSTABLE=1
+```
diff --git a/docs/reference/libsecret/libsecret-vala-examples.md
b/docs/reference/libsecret/libsecret-vala-examples.md
new file mode 100644
index 0000000..0e64724
--- /dev/null
+++ b/docs/reference/libsecret/libsecret-vala-examples.md
@@ -0,0 +1,157 @@
+Title: Vala Examples
+Slug: libsecret-vala-example
+
+# Vala Examples
+
+## Define a password schema
+
+Each stored password has a set of attributes which are later
+used to lookup the password. The names and types of the attributes
+are defined in a schema. The schema is usually defined once globally.
+Here's how to define a schema:
+
+```vala
+var example = new Secret.Schema ("org.example.Password", Secret.SchemaFlags.NONE,
+ "number", Secret.SchemaAttributeType.INTEGER,
+ "string", Secret.SchemaAttributeType.STRING,
+ "even", Secret.SchemaAttributeType.BOOLEAN);
+```
+
+See the [other examples](#store-a-password) for how
+to use the schema.
+
+
+## Store a password
+
+Here's how to store a password in the running secret service,
+like gnome-keyring or ksecretservice.
+
+Each stored password has a set of attributes which are later
+used to lookup the password. The attributes should not contain
+secrets, as they are not stored in an encrypted fashion.
+
+These examples use the [example schema](#define-a-password-schema).
+
+This first example stores a password asynchronously, and is
+appropriate for GUI applications so that the UI does not block.
+
+```vala
+var attributes = new GLib.HashTable<string,string> ();
+attributes["number"] = "8";
+attributes["string"] = "eight";
+attributes["even"] = "true";
+
+Secret.password_storev.begin (example_schema, attributes, Secret.COLLECTION_DEFAULT,
+ "The label", "the password", null, (obj, async_res) => {
+ bool res = Secret.password_store.end (async_res);
+ /* ... do something now that the password has been stored */
+});
+```
+
+If you are already inside of an async function, you can also
+use the yield keyword:
+
+```vala
+var attributes = new GLib.HashTable<string,string> ();
+attributes["number"] = "8";
+attributes["string"] = "eight";
+attributes["even"] = "true";
+
+bool res = yield Secret.password_storev (example_schema, attributes,
+ Secret.COLLECTION_DEFAULT, "The label",
+ "the password", null);
+```
+
+If you would like to avoid creating a hash table for the
+attributes you can just use the variadic version:
+
+```vala
+bool res = yield Secret.password_store (example_schema, Secret.COLLECTION_DEFAULT, "The label",
+ "the password", null, "number", 8, "string", "eight",
+ "even", true);
+```
+
+This next example stores a password synchronously. The function
+call will block until the password is stored. So this is appropriate for
+non GUI applications.
+
+```vala
+Secret.password_store_sync (example_schema, attributes, Secret.COLLECTION_DEFAULT,
+ "The label", "the password", null,
+ "number", 9, "string", "nine", "even", false);
+```
+
+## Lookup a password
+
+Here's how to lookup a password in the running secret service,
+like gnome-keyring or ksecretservice.
+
+Each stored password has a set of attributes which are
+used to lookup the password. If multiple passwords match the
+lookup attributes, then the one stored most recently is returned.
+
+These examples use the [example schema](#define-a-password-schema).
+
+This first example looks up a password asynchronously, and is
+appropriate for GUI applications so that the UI does not block.
+
+```vala
+var attributes = new GLib.HashTable<string,string> ();
+attributes["number"] = "8";
+attributes["string"] = "eight";
+attributes["even"] = "true";
+
+Secret.password_lookupv.begin (example_schema, attributes, null, (obj, async_res) => {
+ string password = Secret.password_lookup.end (async_res);
+});
+```
+
+This next example looks up a password synchronously. The function
+call will block until the lookup completes. So this is appropriate for
+non GUI applications.
+
+```vala
+string password = Secret.password_lookup_sync (example_schema, attributes, null,
+ "number", 9, "string", "nine", "even", false);
+/* password will be null, if no matching password found */
+```
+
+## Remove a password
+
+Here's how to remove a password from the running secret service,
+like gnome-keyring or ksecretservice.
+
+Each stored password has a set of attributes which are
+used to find which password to remove. If multiple passwords match the
+attributes, then the one stored most recently is removed.
+
+These examples use the [example schema](#define-a-password-schema).
+
+This first example removes a password asynchronously, and is
+appropriate for GUI applications so that the UI does not block.
+
+```vala
+var attributes = new GLib.HashTable<string,string> ();
+attributes["number"] = "8";
+attributes["string"] = "eight";
+attributes["even"] = "true";
+
+Secret.password_clearv.begin (example_schema, attributes, null, (obj, async_res) => {
+ bool removed = Secret.password_clearv.end (async_res);
+});
+```
+
+This next example removes a password synchronously. The function
+call will block until the removal completes. So this is appropriate for
+non GUI applications.
+
+```vala
+var attributes = new GLib.HashTable<string,string> ();
+attributes["number"] = "8";
+attributes["string"] = "eight";
+attributes["even"] = "true";
+
+bool removed = Secret.password_clear_sync (example_schema, null,
+ "number", 8, "string", "eight", "even", true);
+/* removed will be true if the password was removed */
+```
diff --git a/docs/reference/libsecret/libsecret.toml.in b/docs/reference/libsecret/libsecret.toml.in
new file mode 100644
index 0000000..5af2ac4
--- /dev/null
+++ b/docs/reference/libsecret/libsecret.toml.in
@@ -0,0 +1,52 @@
+[library]
+version = "@VERSION@"
+browse_url = "https://gitlab.gnome.org/GNOME/libsecret"
+repository_url = "https://gitlab.gnome.org/GNOME/libsecret.git"
+docs_url = "https://gnome.pages.gitlab.gnome.org/libsecret/"
+website_url = "https://gnome.pages.gitlab.gnome.org/libsecret/"
+authors = "Stef Walter, Daiki Ueno, and Niels De Graef"
+license = "LGPL-2.1-or-later"
+description = "Secret Service D-Bus client library"
+dependencies = [ "GObject-2.0", "GLib-1.0", "Gio-2.0" ]
+devhelp = true
+search_index = true
+
+[dependencies."GObject-2.0"]
+name = "GObject"
+description = "The base type system library"
+docs_url = "https://docs.gtk.org/gobject/"
+
+[dependencies."GLib-2.0"]
+name = "GLib"
+description = "The base type system library"
+docs_url = "https://docs.gtk.org/glib/"
+
+[dependencies."Gio-2.0"]
+name = "GIO"
+description = "GObject Interfaces and Objects, Networking, IPC, and I/O"
+docs_url = "https://docs.gtk.org/gio/"
+
+[theme]
+name = "basic"
+show_index_summary = true
+show_class_hierarchy = true
+
+[source-location]
+base_url = "https://gitlab.gnome.org/GNOME/libsecret/-/blob/master"
+
+[extra]
+# The same order will be used when generating the index
+content_files = [
+ 'libsecret-using.md',
+ 'libsecret-simple-api.md',
+ "libsecret-c-examples.md",
+ "libsecret-js-examples.md",
+ "libsecret-python-examples.md",
+ "libsecret-vala-examples.md",
+ "libsecret-tpm2.md",
+ "migrating-libgnome-keyring.md",
+]
+
+content_images = [
+]
+urlmap_file = "urlmap.js"
diff --git a/docs/reference/libsecret/meson.build b/docs/reference/libsecret/meson.build
index d342c58..ac4dfaa 100644
--- a/docs/reference/libsecret/meson.build
+++ b/docs/reference/libsecret/meson.build
@@ -1,39 +1,48 @@
-reference_content_files = [
- 'libsecret-examples.sgml',
- 'libsecret-using.sgml',
- 'libsecret-tpm2.sgml',
- 'migrating-libgnome-keyring.xml',
+expand_content_md_files = [
+ 'libsecret-c-examples.md',
+ 'libsecret-js-examples.md',
+ 'libsecret-python-examples.md',
+ 'libsecret-simple-api.md',
+ 'libsecret-tpm2.md',
+ 'libsecret-using.md',
+ 'libsecret-vala-examples.md',
+ 'migrating-libgnome-keyring.md',
]
-# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
-reference_expanded_content_files = [
- 'migrating-libgnome-keyring.xml',
-]
-
-reference_ignore_headers = [
- 'mock-service.h',
- 'secret-dbus-generated.h',
- 'secret-private.h',
-]
+toml_data = configuration_data()
+toml_data.set('VERSION', meson.project_version())
-configure_file(
- input: 'version.xml.in',
- output: '@BASENAME@',
- configuration: {'VERSION': meson.project_version()},
+libsecret_toml = configure_file(
+ input: 'libsecret.toml.in',
+ output: 'libsecret.toml',
+ configuration: toml_data
)
-gnome.gtkdoc('libsecret',
- main_sgml: 'libsecret-docs.sgml',
- content_files: reference_content_files,
- src_dir: include_directories('../../../libsecret'),
- dependencies: libsecret_dep,
- gobject_typesfile: 'libsecret.types',
- mkdb_args: '--expand-content-files=' + ' '.join(reference_expanded_content_files),
- scan_args: [
- '--deprecated-guards=SECRET_DISABLE_DEPRECATED',
- '--rebuild-types',
- '--ignore-headers=' + ' '.join(reference_ignore_headers),
+dependency('gi-docgen', version: '>= 2021.7',
+ fallback: ['gi-docgen', 'dummy_dep'],
+ native: true,
+ required: get_option('gtk_doc'))
+
+gidocgen = find_program('gi-docgen')
+
+docs_dir = get_option('datadir') / 'doc'
+
+custom_target('libsecret-doc',
+ input: [ libsecret_toml, libsecret_gir[0] ],
+ output: 'libsecret-@0@'.format(api_version_major),
+ command: [
+ gidocgen,
+ 'generate',
+ '--quiet',
+ '--add-include-path=@0@'.format(meson.current_build_dir() / '../../../libsecret'),
+ '--config=@INPUT0@',
+ '--output-dir=@OUTPUT@',
+ '--no-namespace-dir',
+ '--content-dir=@0@'.format(meson.current_source_dir()),
+ '@INPUT1@',
],
- module_version: api_version_major,
+ depend_files: [ expand_content_md_files ],
+ build_by_default: true,
install: true,
+ install_dir: docs_dir,
)
diff --git a/docs/reference/libsecret/migrating-libgnome-keyring.md
b/docs/reference/libsecret/migrating-libgnome-keyring.md
new file mode 100644
index 0000000..43de06d
--- /dev/null
+++ b/docs/reference/libsecret/migrating-libgnome-keyring.md
@@ -0,0 +1,823 @@
+Title: Migrating from libgnome-keyring
+Slug: migrating-libgnome-keyring
+
+# Migrating from libgnome-keyring
+
+## Introduction
+
+Conceptually, libgnome-keyring and libsecret are fairly similar. Both
+have keyrings, items, and ways to store and retrieve passwords. In both
+cases items have attributes. The keys and values of attributes are used
+to lookup a password that was stored.
+
+There is a
+<link linkend="libsecret-Password-storage">simple password API for storing and retrieving passwords</link>
+which is the easiest and recommended way to store passwords. And then
+there is a more complicated API which models all the various collections
+and items, along with all the possible actions that can be performed on them.
+
+libsecret uses the
+<ulink url="http://standards.freedesktop.org/secret-service/">Secret Service DBus API</ulink>
+to communicate with gnome-keyring-daemon, and as such exposes features
+based on that DBus API.
+
+libsecret has been designed to be threadsafe, and uses the 'GDBus'
+code in gio to accomplish this.
+
+Keyrings are called 'collections' in libsecret.
+
+See the relevant section for specifics about how to port the
+libgnome-keyring functions or symbols in your project.
+
+## API conversion
+
+Here are some clues on how to migrate various libgnome-keyring
+API functions and their logical equivalents in libsecret.
+
+### Item attributes
+
+Remember that attributes are not, and never have been stored in
+an encrypted fashion. They are not part of the 'secret', but instead
+are a way to lookup a secret item.
+
+All attributes in libsecret are stored as strings. Sets of attributes
+are represented by [struct@GLib.HashTable]s and the keys and values of
+these hash tables are strings.
+
+libsecret is far more <link linkend="migrating-schemas">focused on schemas</link>,
+and encourages users to define a [struct@Schema] for their password storage.
+The schema defines which attributes are allowed an item. Each schema has
+a name which is usually a dotted string (eg: `org.gnome.MyProject.Password`).
+This schema name is stored internally in the item attributes.
+
+Schemas define whether an attribute should look like an integer,
+a boolean, or a free-form string. These types are used when validating
+the attribute values, even though the attribute values are stored and
+matched as strings. Since attribute values are used primarily
+for lookup of items it's important that the string representations of
+integers and booleans are always identical. Boolean values are stored
+as the strings `true` and `false`.
+Integer values are stored in decimal, with a preceding negative sign
+for negative integers. libsecret facilitates this using the
+[func@attributes_build] and [func@attributes_buildv] functions.
+
+Attributes are meant to be used for lookup of items; they're not
+designed to be used as a generic key/value database. Although you can
+force libsecret to do the latter, it's better to store your account
+information elsewhere if possible, and use libsecret to store the password
+or other secret.
+
+Replacements for related libgnome-keyring functions and types
+are described below:
+
+<table>
+ <tr>
+ <th>libgnome-keyring</th><th>libsecret</th>
+ </tr>
+ <tr>
+ <td>GnomeKeyringAttributeList</td>
+ <td>a [struct@GLib.HashTable] of string keys and values</td>
+ </tr>
+ <tr>
+ <td>GnomeKeyringAttribute</td>
+ <td>a key/value pair in a [struct@GLib.HashTable] of strings</td>
+ </tr>
+ <tr>
+ <td>GnomeKeyringAttributeType</td>
+ <td>[struct@Schema]AttributeType</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_ATTRIBUTE_TYPE_STRING</code></td>
+ <td><code>SECRET_SCHEMA_ATTRIBUTE_STRING</code></td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_ATTRIBUTE_TYPE_UINT32</code></td>
+ <td><code>SECRET_SCHEMA_ATTRIBUTE_INTEGER</code></td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_attribute_list_index()</code></td>
+ <td>use [func@GLib.HashTable.lookup] on the attributes hash table</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_attribute_get_string()</code></td>
+ <td>use [func@GLib.HashTable.lookup] on the attributes hash table</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_attribute_get_uint32()</code></td>
+ <td>no equivalent, use [func@GLib.HashTable.lookup]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_attribute_list_append_string()</code></td>
+ <td>[func@attributes_build]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_attribute_list_append_uint32()</code></td>
+ <td>[func@attributes_build]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_attribute_list_copy()</code></td>
+ <td>[func GLib HashTable ref]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_attribute_list_free()</code></td>
+ <td>[func@GLib.HashTable.unref]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_attribute_list_index()</code></td>
+ <td>no equivalent, use [func@GLib.HashTable.lookup]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_attribute_list_new()</code></td>
+ <td>[func@attributes_build]</td>
+ </tr>
+</table>
+
+## Working with schemas
+
+libsecret is far more focused on schemas, and encourages users to
+define a [struct@Schema] for their password storage. The schema defines
+which attributes are allowed an item. Each schema has a name which
+is usually a dotted string (eg: `org.gnome.MyProject.Password`).
+This name is stored in the item attributes. The schema name is also
+used when looking up an item, to make sure that the stored schema
+matches that used during the lookup. If you wish to lookup items that
+were stored by libgnome-keyring, you should specify the
+`SECRET_SCHEMA_DONT_MATCH_NAME` flag in the schema so that the schema
+name is not matched, since it was not stored by libgnome-keyring.
+
+Schemas define whether an attribute should look like an integer,
+a boolean, or a free-form string. These types are used when validating
+the attribute values stored, even though the attribute values are
+stored and matched as strings.
+
+Replacements for related libgnome-keyring functions and types
+are described below:
+<table>
+ <tr>
+ <th>libgnome-keyring</th><th>libsecret</th>
+ </tr>
+ <tr>
+ <td>GnomeKeyringPasswordSchema</td>
+ <td>[struct@Schema]</td>
+ </tr>
+ <tr>
+ <td>GnomeKeyringPasswordSchemaAttribute</td>
+ <td>[struct@Schema]Attribute</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_ITEM_APPLICATION_SECRET</code></td>
+ <td>no equivalent</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_ITEM_CHAINED_KEYRING_PASSWORD</code></td>
+ <td>no equivalent</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_ITEM_ENCRYPTION_KEY_PASSWORD</code></td>
+ <td>no equivalent</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_ITEM_PK_STORAGE</code></td>
+ <td>no equivalent</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_ITEM_GENERIC_SECRET</code></td>
+ <td>no equivalent, define a specific schema with an appropriate dotted name</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_ITEM_NETWORK_PASSWORD</code></td>
+ <td>the <code>SECRET_SCHEMA_COMPAT_NETWORK</code> schema, although not recommended for new uses</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_ITEM_NOTE</code></td>
+ <td>the <code>SECRET_SCHEMA_NOTE</code> schema</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_NETWORK_PASSWORD</code></td>
+ <td>the <code>SECRET_SCHEMA_COMPAT_NETWORK</code> schema, although not recommended for new uses</td>
+ </tr>
+</table>
+
+## Storing passwords and items
+
+It's encouraged to use a [struct@Schema] when storing items and
+passwords.
+
+By default most ways of storing an item will now overwrite
+another item with the same attributes in the same keyring. To manually
+control this behavior use the [func@Item.create].
+
+Replacements for related libgnome-keyring functions and types
+are described below:
+
+<table>
+ <tr>
+ <th>libgnome-keyring</th><th>libsecret</th>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_DEFAULT</code></td>
+ <td>[const@COLLECTION_DEFAULT]</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_SESSION</code></td>
+ <td>[const@COLLECTION_SESSION]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_store_password()</code></td>
+ <td>[func@password_store]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_store_password_sync()</code></td>
+ <td>[func@password_store_sync]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_set_network_password()</code></td>
+ <td>[func@password_store] with <code>SECRET_SCHEMA_COMPAT_NETWORK</code>
+ although this is not recommended for new uses.</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_set_network_password_sync()</code></td>
+ <td>[func@password_store_sync] with <code>SECRET_SCHEMA_COMPAT_NETWORK</code>
+ although this is not recommended for new uses.</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_create()</code></td>
+ <td>[func@Item.create], although using [func@password_store]
+ is simpler.</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_create_sync()</code></td>
+ <td>[func@Item.create], although using [func@password_store_sync]
+ is simpler.</td>
+ </tr>
+</table>
+
+## Searching for passwords and items
+
+In general libsecret tries not to unlocking keyrings
+where not necessary. Many search methods only return one item or
+password that matches, preferring already unlocked items, and recently stored
+items.
+
+Attributes are meant to be used for lookup of items; they're not
+designed to be used as a generic key/value database. Although you can
+force libsecret to do the latter, it's better to store your account
+information elsewhere if possible, and use libsecret to store the password
+or other secret. Because of this many search methods return just the
+password or secret.
+
+Replacements for related libgnome-keyring functions and types
+are described below:
+
+<table>
+ <tr>
+ <th>libgnome-keyring</th><th>libsecret</th>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_find_password()</code></td>
+ <td>[func@password_lookup]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_find_password_sync()</code></td>
+ <td>[func@password_lookup_sync]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_find_items()</code></td>
+ <td>[method@Service.search], with flags to fine tune behavior</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_find_itemsv()</code></td>
+ <td>[method@Service.search], with flags to fine tune behavior</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_find_items_sync()</code></td>
+ <td>[method@Service.search_sync], with flags to fine tune behavior</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_find_itemsv_sync()</code></td>
+ <td>[method@Service.search], with flags to fine tune behavior</td>
+ </tr>
+ <tr>
+ <td>GnomeKeyringFound</td>
+ <td>no equivalent, [method@Service.search] returns a [struct GLib List] of
+ [class@Item]<!-- -->s, and other methods return passwords directly.</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_found_copy()</code></td>
+ <td>no equivalent</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_found_free()</code></td>
+ <td>[method@GObject.Object.unref] on the each of the items returned from
+ [method@Service.search]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_found_list_free()</code></td>
+ <td>[func GLib List.free_full] used with [method@GObject.Object.unref] on the items returned from
+ [method@Service.search]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_find_network_password()</code></td>
+ <td>[func@password_lookup] with <code>SECRET_SCHEMA_COMPAT_NETWORK</code>,
+ although this only returns one password and no attributes</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_find_network_password_sync()</code></td>
+ <td>[func@password_lookup_sync] with <code>SECRET_SCHEMA_COMPAT_NETWORK</code>,
+ although this only returns one password and no attributes</td>
+ </tr>
+ <tr>
+ <td>GnomeKeyringNetworkPasswordData</td>
+ <td>no equivalent, [func@password_lookup] gets the password directly
+ and no attributes</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_network_password_free()</code></td>
+ <td>no equivalent</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_network_password_list_free()</code></td>
+ <td>no equivalent</td>
+ </tr>
+</table>
+
+## Removing passwords and icons
+
+Neither libgnome-keyring or libsecret allow deletion of locked
+items. libsecret tries to make it easier to delete all unlocked items
+matching certain attributes.
+
+Replacements for related libgnome-keyring functions and types
+are described below:
+
+<table>
+ <tr>
+ <th>libgnome-keyring</th><th>libsecret</th>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_delete_password()</code></td>
+ <td>[func@password_clear], although we now try to delete
+ all unlocked matching items</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_delete_password_sync()</code></td>
+ <td>[func@password_clear_sync], although we now try to delete
+ all unlocked matching items</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_delete()</code></td>
+ <td>[method@Item.delete]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_delete_sync()</code></td>
+ <td>[method@Item.delete_sync]</td>
+ </tr>
+</table>
+
+## Item management
+
+In libsecret items are no longer identified by an unsigned integer.
+Applications should retrieve items based on their attributes. It is also
+possible to identify an item by its DBus object path.
+
+Replacements for related libgnome-keyring functions and types
+are described below:
+
+<table>
+ <tr>
+ <th>libgnome-keyring</th><th>libsecret</th>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_create()</code></td>
+ <td>[func@Item.create], although [func@password_store] may be simpler</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_create_sync()</code></td>
+ <td>[func@Item.create_sync], although [func@password_store_sync] may be simpler</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_delete()</code></td>
+ <td>[method@Item.delete], although [func@password_clear] may be simpler</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_delete_sync()</code></td>
+ <td>[method@Item.delete_sync], although [func@password_clear_sync] may be simpler</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_get_info()</code></td>
+ <td>properties are loaded on a [class@Item] automatically, use
+ [method@Item.load_secret] to load the secret</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_get_info_sync()</code></td>
+ <td>properties are loaded on a [class@Item] automatically, use
+ [method@Item.load_secret_sync] to load the secret</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_get_info_full()</code></td>
+ <td>properties are loaded on a [class@Item] automatically, use
+ [method@Item.load_secret] to load the secret</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_get_info_full_sync()</code></td>
+ <td>properties are loaded on a [class@Item] automatically, use
+ [method@Item.load_secret_sync] to load the secret</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_set_info()</code></td>
+ <td>use the appropriate setter methods on [class@Item]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_set_info_sync()</code></td>
+ <td>use the appropriate setter methods on [class@Item]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_get_attributes()</code></td>
+ <td>[method@Item.get_attributes]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_get_attributes_sync()</code></td>
+ <td>[method@Item.get_attributes]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_set_attributes()</code></td>
+ <td>[method@Item.set_attributes]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_set_attributes_sync()</code></td>
+ <td>[method@Item.set_attributes_sync]</td>
+ </tr>
+ <tr>
+ <td>GnomeKeyringItemType</td>
+ <td>replaced by the name of a [struct@Schema]</td>
+ </tr>
+ <tr>
+ <td>GnomeKeyringItemInfo</td>
+ <td>[class@Item]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_info_new()</code></td>
+ <td>no equivalent</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_info_copy()</code></td>
+ <td>no equivalent</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_info_free()</code></td>
+ <td>[method@GObject.Object.unref] on the [class@Item]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_info_get_display_name()</code></td>
+ <td>[method@Item.get_label]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_info_set_display_name()</code></td>
+ <td>[method@Item.set_label]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_info_get_ctime()</code></td>
+ <td>[method@Item.get_created]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_info_get_mtime()</code></td>
+ <td>[method@Item.get_modified]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_info_get_type()</code></td>
+ <td>[method@Item.get_schema_name]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_info_set_type()</code></td>
+ <td>[method@Item.set_attributes] with appropriate schema</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_info_get_secret()</code></td>
+ <td>[method@Item.get_secret]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_info_set_secret()</code></td>
+ <td>[method@Item.set_secret] and [method@Item.set_secret_sync]</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_ITEM_INFO_BASICS</code></td>
+ <td>no equivalent, all basic item properties are loaded on [class@Item]
+ automatically</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_ITEM_INFO_SECRET</code></td>
+ <td>use [method@Item.load_secret] and [method@Item.load_secret_sync] to load
+ the secret for an item.</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_item_info_set_display_name()</code></td>
+ <td></td>
+ </tr>
+</table>
+
+## Keyring management
+
+In libsecret keyrings are called 'collections'. This is the same
+lingo as the underlying Secret Service DBus API. Keyrings are no longer
+identified by simple keyring names. Normally applications just use the
+default keyrings and these are identified by the aliases
+[const@COLLECTION_DEFAULT] and [const@COLLECTION_SESSION]. It is also
+possible to identify collections by their DBus object paths.
+
+Replacements for related libgnome-keyring functions and types
+are described below:
+
+<table>
+ <tr>
+ <th>libgnome-keyring</th><th>libsecret</th>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_create()</code></td>
+ <td>[func@Collection.create]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_create_sync()</code></td>
+ <td>[func@Collection.create_sync]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_delete()</code></td>
+ <td>[method@Collection.delete]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_delete_sync()</code></td>
+ <td>[method@Collection.delete_sync]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_change_password()</code></td>
+ <td>no equivalent, use platform specific DBus APIs</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_change_password_sync()</code></td>
+ <td>no equivalent, use platform specific DBus APIs</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_list_keyring_names()</code></td>
+ <td>[method@Service.load_collections] and [method@Service.get_collections]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_list_keyring_names_sync()</code></td>
+ <td>[method@Service.load_collections_sync] and [method@Service.get_collections]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_set_default_keyring()</code></td>
+ <td>[method@Service.set_alias]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_set_default_keyring_sync()</code></td>
+ <td>[method@Service.set_alias_sync]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_get_default_keyring()</code></td>
+ <td>[func@Collection.for_alias] with [const@COLLECTION_DEFAULT]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_get_default_keyring_sync()</code></td>
+ <td>[func@Collection.for_alias_sync] with [const@COLLECTION_DEFAULT]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_list_item_ids()</code></td>
+ <td>[method@Collection.load_items] and [method@Collection.get_items]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_list_item_ids_sync()</code></td>
+ <td>[method@Collection.load_items_sync] and [method@Collection.get_items]</td>
+ </tr>
+ <tr>
+ <td>GnomeKeyringInfo</td>
+ <td>[class@Collection] and properties</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_get_info()</code></td>
+ <td>no equivalent</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_get_info_sync()</code></td>
+ <td>no equivalent</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_set_info()</code></td>
+ <td>no equivalent, use property setters on [class@Collection]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_set_info_sync()</code></td>
+ <td>no equivalent, use property setters on [class@Collection]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_info_free()</code></td>
+ <td>no equivalent</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_info_copy()</code></td>
+ <td>no equivalent</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_info_set_lock_on_idle()</code></td>
+ <td>no equivalent</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_info_get_lock_on_idle()</code></td>
+ <td>no equivalent</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_info_set_lock_timeout()</code></td>
+ <td>no equivalent</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_info_get_lock_timeout()</code></td>
+ <td>no equivalent</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_info_get_mtime()</code></td>
+ <td>[method@Collection.get_modified]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_info_get_ctime()</code></td>
+ <td>[method@Collection.get_created]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_info_get_is_locked()</code></td>
+ <td>[method@Collection.get_locked]</td>
+ </tr>
+</table>
+
+## Locking and unlocking
+
+In libsecret you can unlock items directly, and the result is
+(with gnome-keyring daemon) that the enclosing collection will be unlocked.
+
+It is no longer possible to pass a password to unlock keyrings.
+These are automatically prompted for.
+
+Replacements for related libgnome-keyring functions and types
+are described below:
+
+<table>
+ <tr>
+ <th>libgnome-keyring</th><th>libsecret</th>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_unlock()</code></td>
+ <td>[method@Service.unlock]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_unlock_sync()</code></td>
+ <td>[method@Service.unlock_sync]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_lock()</code></td>
+ <td>[method Service lock]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_lock_sync()</code></td>
+ <td>[method@Service.lock_sync]</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_lock_all()</code></td>
+ <td>no equivalent, use platform specific DBus APIs</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_lock_all_sync()</code></td>
+ <td>no equivalent, use platform specific DBus APIs</td>
+ </tr>
+</table>
+
+## Non-pageable memory
+
+libsecret no longer provides a full API for using non-pageable
+memory. Use the <ulink url="http://developer.gnome.org/gcr/stable/gcr-Non-pageable-Memory.html">equivalent
API in the Gcr library</ulink>.
+
+You can request that passwords are returned in non-pageable
+memory by using the [func@password_lookup_nonpageable_sync] and
+[func@password_lookup_nonpageable_finish] functions.
+In addition the contents of [struct@Value] items is stored in
+non-pageable memory, unless the system doesn't support this.
+
+Replacements for related libgnome-keyring functions and types
+are described below:
+
+<table>
+ <tr>
+ <th>libgnome-keyring</th><th>libsecret</th>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_memory_alloc()</code></td>
+ <td>no equivalent, use Gcr</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_memory_free()</code></td>
+ <td>[func@password_free], although this only works on strings</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_memory_is_secure()</code></td>
+ <td>no equivalent, use Gcr</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_memory_new()</code></td>
+ <td>no equivalent, use Gcr</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_memory_realloc()</code></td>
+ <td>no equivalent, use Gcr</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_memory_strdup()</code></td>
+ <td>no equivalent, use [struct@Value] which is ref-counted, or use Gcr</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_memory_try_alloc()</code></td>
+ <td>no equivalent, use Gcr</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_memory_try_realloc()</code></td>
+ <td>no equivalent, use Gcr</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_free_password()</code></td>
+ <td>[func@password_free]</td>
+ </tr>
+</table>
+
+## Errors and cancellation
+
+libsecret uses standard the standard [class@Gio.Cancellable] idiom
+to cancel operations.
+
+It is not necessary to check whether the keyring daemon is
+available before using it. It is started automatically.
+
+Errors are returned as standard [struct@GLib.Error] in the usual way.
+There are fewer errors that are worth handling in an intelligent way,
+exceptions are in the #SecretError enumeration. It is not recommended
+to display any [struct@GLib.Error] message returned by libsecret to the user. Most
+of the possible errors are DBus communication problems or similar.
+
+Replacements for related libgnome-keyring functions and types
+are described below:
+
+<table>
+ <tr>
+ <th>libgnome-keyring</th><th>libsecret</th>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_cancel_request()</code></td>
+ <td>[method@Gio.Cancellable.cancel] on a [class@Gio.Cancellable] passed to the relevant
operation</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_is_available()</code></td>
+ <td>no equivalent, the secret service is autostarted as necessary</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_result_to_message()</code></td>
+ <td>use the message in the [struct@GLib.Error], although most failures are not appropriate for
display to the user</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_RESULT_OK</code></td>
+ <td>no [struct@GLib.Error] returned</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_RESULT_DENIED</code></td>
+ <td>no longer used, item or collection is simply not unlocked</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_RESULT_NO_KEYRING_DAEMON</code></td>
+ <td><code>G_DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND</code></td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_RESULT_ALREADY_UNLOCKED</code></td>
+ <td>no error, success returned</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_RESULT_NO_SUCH_KEYRING</code></td>
+ <td>keyrings no longer have names, accessing an missing DBus object has usual failure</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_RESULT_BAD_ARGUMENTS</code></td>
+ <td><code>G_DBUS_ERROR_INVALID_ARGS</code> or precondition failure in libsecret, this is always
+ a programmer error</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_RESULT_IO_ERROR</code></td>
+ <td>relevant DBus errors, or <code>SECRET_ERROR_PROTOCOL</code></td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_RESULT_CANCELLED</code></td>
+ <td><code>G_IO_ERROR_CANCELLED</code></td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_RESULT_KEYRING_ALREADY_EXISTS</code></td>
+ <td>no error, simply returns already existing keyring</td>
+ </tr>
+ <tr>
+ <td><code>GNOME_KEYRING_RESULT_NO_MATCH</code></td>
+ <td>on error, an empty list is returned</td>
+ </tr>
+ <tr>
+ <td><code>gnome_keyring_string_list_free()</code></td>
+ <td>no equivalent</td>
+ </tr>
+</table>
diff --git a/docs/reference/libsecret/urlmap.js b/docs/reference/libsecret/urlmap.js
new file mode 100644
index 0000000..67e8a25
--- /dev/null
+++ b/docs/reference/libsecret/urlmap.js
@@ -0,0 +1,6 @@
+// A map between namespaces and base URLs for their online documentation
+baseURLs = [
+ [ 'GLib', 'https://docs.gtk.org/glib/' ],
+ [ 'GObject', 'https://docs.gtk.org/gobject/' ],
+ [ 'Gio', 'https://docs.gtk.org/gio/' ],
+]
diff --git a/libsecret/secret-attributes.c b/libsecret/secret-attributes.c
index be3597a..603ef7a 100644
--- a/libsecret/secret-attributes.c
+++ b/libsecret/secret-attributes.c
@@ -19,19 +19,6 @@
#include <string.h>
-/**
- * SECTION:secret-attributes
- * @title: Secret Attributes
- * @short_description: secret attributes
- *
- * Each item has a set of attributes, which are used to locate the item later.
- * These are not stored or transferred in a secure manner. Each attribute has
- * a string name and a string value. These attributes are represented by a
- * #GHashTable with string keys and values.
- *
- * Use secret_attributes_build() to simply build up a set of attributes.
- */
-
GVariant *
_secret_attributes_to_variant (GHashTable *attributes,
const gchar *schema_name)
@@ -87,7 +74,7 @@ _secret_attributes_for_variant (GVariant *variant)
* @schema. The list of attributes should be terminated with a %NULL.
*
* Returns: (transfer full) (element-type utf8 utf8): a new table of
- * attributes, to be released with g_hash_table_unref()
+ * attributes, to be released with [func@GLib.HashTable.unref]
*/
GHashTable *
secret_attributes_build (const SecretSchema *schema,
@@ -116,7 +103,7 @@ secret_attributes_build (const SecretSchema *schema,
* @schema. The list of attributes should be terminated with a %NULL.
*
* Returns: (transfer full) (element-type utf8 utf8): a new table of
- * attributes, to be released with g_hash_table_unref()
+ * attributes, to be released with [func@GLib.HashTable.unref]
*/
GHashTable *
secret_attributes_buildv (const SecretSchema *schema,
diff --git a/libsecret/secret-backend.c b/libsecret/secret-backend.c
index 73f0fd7..c527f82 100644
--- a/libsecret/secret-backend.c
+++ b/libsecret/secret-backend.c
@@ -25,9 +25,9 @@
#include "libsecret/secret-enum-types.h"
/**
- * SECTION:secret-backend
- * @title: SecretBackend
- * @short_description: A backend implementation of password storage
+ * SecretBackend
+ *
+ * A backend implementation of password storage
*
* #SecretBackend represents a backend implementation of password
* storage.
@@ -48,14 +48,14 @@
* @parent_iface: the parent interface
* @ensure_for_flags: implementation of reinitialization step in constructor, optional
* @ensure_for_flags_finish: implementation of reinitialization step in constructor, optional
- * @store: implementation of secret_password_store(), required
- * @store_finish: implementation of secret_password_store_finish(), required
- * @lookup: implementation of secret_password_lookup(), required
- * @lookup_finish: implementation of secret_password_lookup_finish(), required
- * @clear: implementation of secret_password_clear(), required
- * @clear_finish: implementation of secret_password_clear_finish(), required
- * @search: implementation of secret_password_search(), required
- * @search_finish: implementation of secret_password_search_finish(), required
+ * @store: implementation of [func@password_store], required
+ * @store_finish: implementation of [func@password_store_finish], required
+ * @lookup: implementation of [func@password_lookup], required
+ * @lookup_finish: implementation of [func@password_lookup_finish], required
+ * @clear: implementation of [func@password_clear], required
+ * @clear_finish: implementation of [func@password_clear_finish], required
+ * @search: implementation of [func@password_search], required
+ * @search_finish: implementation of [func@password_search_finish], required
*
* The interface for #SecretBackend.
*
@@ -264,7 +264,7 @@ secret_backend_get (SecretBackendFlags flags,
* Complete an asynchronous operation to get a #SecretBackend.
*
* Returns: (transfer full): a new reference to a #SecretBackend proxy, which
- * should be released with g_object_unref().
+ * should be released with [method@GObject.Object.unref].
*
* Since: 0.19.0
*/
diff --git a/libsecret/secret-collection.c b/libsecret/secret-collection.c
index 5e3378d..9f426b7 100644
--- a/libsecret/secret-collection.c
+++ b/libsecret/secret-collection.c
@@ -27,29 +27,24 @@
#include <glib/gi18n-lib.h>
/**
- * SECTION:secret-collection
- * @title: SecretCollection
- * @short_description: A collection of secret items
+ * SecretCollection:
+ *
+ * A proxy object representing a collection of secrets in the Secret Service.
*
* #SecretCollection represents a collection of secret items stored in the
* Secret Service.
*
- * A collection can be in a locked or unlocked state. Use secret_service_lock()
- * or secret_service_unlock() to lock or unlock the collection.
+ * A collection can be in a locked or unlocked state. Use
+ * [method SecretService lock] or [method@SecretService.unlock] to lock or
+ * unlock the collection.
*
- * Use the SecretCollection::items property or secret_collection_get_items() to
- * lookup the items in the collection. There may not be any items exposed when
- * the collection is locked.
+ * Use the [property@SecretCollection:items] property or
+ * [method@SecretCollection.get_items] to lookup the items in the collection.
+ * There may not be any items exposed when the collection is locked.
*
* Stability: Stable
*/
-/**
- * SecretCollection:
- *
- * A proxy object representing a collection of secrets in the Secret Service.
- */
-
/**
* SecretCollectionClass:
* @parent_class: the parent class
@@ -69,22 +64,22 @@
* SecretCollectionCreateFlags:
* @SECRET_COLLECTION_CREATE_NONE: no flags
*
- * Flags for secret_collection_create().
+ * Flags for [func@Collection.create].
*/
/**
* SECRET_COLLECTION_DEFAULT:
*
- * An alias to the default collection. This can be passed to secret_password_store()
- * secret_collection_for_alias().
+ * An alias to the default collection. This can be passed to
+ * [func@password_store] [func@Collection.for_alias].
*/
/**
* SECRET_COLLECTION_SESSION:
*
* An alias to the session collection, which will be cleared when the user ends
- * the session. This can be passed to secret_password_store(),
- * secret_collection_for_alias() or similar functions.
+ * the session. This can be passed to [func@password_store],
+ * [func@Collection.for_alias] or similar functions.
*/
enum {
@@ -429,9 +424,9 @@ secret_collection_class_init (SecretCollectionClass *klass)
proxy_class->g_signal = secret_collection_signal;
/**
- * SecretCollection:service:
+ * SecretCollection:service: (attributes org.gtk.Property.get=secret_collection_get_service)
*
- * The #SecretService object that this collection is associated with and
+ * The [class@Service] object that this collection is associated with and
* uses to interact with the actual D-Bus Secret Service.
*/
g_object_class_install_property (gobject_class, PROP_SERVICE,
@@ -439,7 +434,7 @@ secret_collection_class_init (SecretCollectionClass *klass)
SECRET_TYPE_SERVICE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
/**
- * SecretCollection:flags:
+ * SecretCollection:flags: (attributes org.gtk.Property.get=secret_collection_get_flags)
*
* A set of flags describing which parts of the secret collection have
* been initialized.
@@ -450,9 +445,9 @@ secret_collection_class_init (SecretCollectionClass *klass)
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
/**
- * SecretCollection:items:
+ * SecretCollection:items: (attributes org.gtk.Property.get=secret_collection_get_items)
*
- * A list of #SecretItem objects representing the items that are in
+ * A list of [class@Item] objects representing the items that are in
* this collection. This list will be empty if the collection is locked.
*/
g_object_class_install_property (gobject_class, PROP_ITEMS,
@@ -460,32 +455,32 @@ secret_collection_class_init (SecretCollectionClass *klass)
_secret_list_get_type (), G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS));
/**
- * SecretCollection:label:
+ * SecretCollection:label: (attributes org.gtk.Property.get=secret_collection_get_label
org.gtk.Property.set=secret_collection_set_label)
*
* The human readable label for the collection.
*
* Setting this property will result in the label of the collection being
* set asynchronously. To properly track the changing of the label use the
- * secret_collection_set_label() function.
+ * [method@Collection.set_label] function.
*/
g_object_class_install_property (gobject_class, PROP_LABEL,
g_param_spec_string ("label", "Label", "Item label",
NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
/**
- * SecretCollection:locked:
+ * SecretCollection:locked: (attributes org.gtk.Property.get=secret_collection_get_locked)
*
* Whether the collection is locked or not.
*
- * To lock or unlock a collection use the secret_service_lock() or
- * secret_service_unlock() functions.
+ * To lock or unlock a collection use the [method Service lock] or
+ * [method@Service.unlock] functions.
*/
g_object_class_install_property (gobject_class, PROP_LOCKED,
g_param_spec_boolean ("locked", "Locked", "Item locked",
TRUE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
/**
- * SecretCollection:created:
+ * SecretCollection:created: (attributes org.gtk.Property.get=secret_collection_get_created)
*
* The date and time (in seconds since the UNIX epoch) that this
* collection was created.
@@ -495,7 +490,7 @@ secret_collection_class_init (SecretCollectionClass *klass)
0UL, G_MAXUINT64, 0UL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
/**
- * SecretCollection:modified:
+ * SecretCollection:modified: (attributes org.gtk.Property.get=secret_collection_get_modified)
*
* The date and time (in seconds since the UNIX epoch) that this
* collection was last modified.
@@ -765,10 +760,10 @@ on_load_item (GObject *source,
*
* Ensure that the #SecretCollection proxy has loaded all the items present
* in the Secret Service. This affects the result of
- * secret_collection_get_items().
+ * [method@Collection.get_items].
*
- * For collections returned from secret_service_get_collections() the items
- * will have already been loaded.
+ * For collections returned from [method@Service.get_collections] the items will
+ * have already been loaded.
*
* This method will return immediately and complete asynchronously.
*/
@@ -859,9 +854,9 @@ secret_collection_load_items_finish (SecretCollection *self,
*
* Ensure that the #SecretCollection proxy has loaded all the items present
* in the Secret Service. This affects the result of
- * secret_collection_get_items().
+ * [method@Collection.get_items].
*
- * For collections returned from secret_service_get_collections() the items
+ * For collections returned from [method@Service.get_collections] the items
* will have already been loaded.
*
* This method may block indefinitely and should not be used in user interface
@@ -1050,7 +1045,7 @@ _secret_collection_properties_new (const gchar *label)
* Create a new collection in the secret service.
*
* This method returns immediately and completes asynchronously. The secret
- * service may prompt the user. secret_service_prompt() will be used to handle
+ * service may prompt the user. [method@Service.prompt] will be used to handle
* any prompts that are required.
*
* An @alias is a well-known tag for a collection, such as 'default' (ie: the
@@ -1059,8 +1054,8 @@ _secret_collection_properties_new (const gchar *label)
* collection with that alias already exists, then a new collection will not
* be created. The previous one will be returned instead.
*
- * If @service is %NULL, then secret_service_get() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func Service get] will be called to get the
+ * default [class@Service] proxy.
*/
void
secret_collection_create (SecretService *service,
@@ -1108,7 +1103,7 @@ secret_collection_create (SecretService *service,
* Finish operation to create a new collection in the secret service.
*
* Returns: (transfer full): the new collection, which should be unreferenced
- * with g_object_unref()
+ * with [method@GObject.Object.unref]
*/
SecretCollection *
secret_collection_create_finish (GAsyncResult *result,
@@ -1140,20 +1135,20 @@ secret_collection_create_finish (GAsyncResult *result,
* Create a new collection in the secret service.
*
* This method may block indefinitely and should not be used in user interface
- * threads. The secret service may prompt the user. secret_service_prompt()
+ * threads. The secret service may prompt the user. [method@Service.prompt]
* will be used to handle any prompts that are required.
*
- * An @alias is a well-known tag for a collection, such as 'default' (ie: the
+ * An @alias is a well-known tag for a collection, such as `default` (ie: the
* default collection to store items in). This allows other applications to
* easily identify and share a collection. If you specify an @alias, and a
* collection with that alias already exists, then a new collection will not
* be created. The previous one will be returned instead.
*
- * If @service is %NULL, then secret_service_get_sync() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func@Service.get_sync] will be called to get the
+ * default [class@Service] proxy.
*
* Returns: (transfer full): the new collection, which should be unreferenced
- * with g_object_unref()
+ * with [method@GObject.Object.unref]
*/
SecretCollection *
secret_collection_create_sync (SecretService *service,
@@ -1395,7 +1390,7 @@ on_search_paths (GObject *source,
* search and be returned. If the unlock fails, the search does not fail.
*
* If %SECRET_SEARCH_LOAD_SECRETS is set in @flags, then the items will have
- * their secret values loaded and available via secret_item_get_secret().
+ * their secret values loaded and available via [method@Item.get_secret].
*
* This function returns immediately and completes asynchronously.
*/
@@ -1443,7 +1438,7 @@ secret_collection_search (SecretCollection *self,
* Complete asynchronous operation to search for items in a collection.
*
* Returns: (transfer full) (element-type Secret.Item):
- * a list of items that matched the search
+ * a list of items that matched the search
*/
GList *
secret_collection_search_finish (SecretCollection *self,
@@ -1526,13 +1521,13 @@ collection_load_items_sync (SecretCollection *self,
* search and be returned. If the unlock fails, the search does not fail.
*
* If %SECRET_SEARCH_LOAD_SECRETS is set in @flags, then the items will have
- * their secret values loaded and available via secret_item_get_secret().
+ * their secret values loaded and available via [method@Item.get_secret].
*
* This function may block indefinitely. Use the asynchronous version
* in user interface threads.
*
* Returns: (transfer full) (element-type Secret.Item):
- * a list of items that matched the search
+ * a list of items that matched the search
*/
GList *
secret_collection_search_sync (SecretCollection *self,
@@ -1610,7 +1605,7 @@ on_service_delete_path (GObject *source,
* Delete this collection.
*
* This method returns immediately and completes asynchronously. The secret
- * service may prompt the user. secret_service_prompt() will be used to handle
+ * service may prompt the user. [method@Service.prompt] will be used to handle
* any prompts that show up.
*/
void
@@ -1671,9 +1666,9 @@ secret_collection_delete_finish (SecretCollection *self,
*
* Delete this collection.
*
- * This method may block indefinitely and should not be used in user
- * interface threads. The secret service may prompt the user.
- * secret_service_prompt() will be used to handle any prompts that show up.
+ * This method may block indefinitely and should not be used in user interface
+ * threads. The secret service may prompt the user. [method@Service.prompt] will
+ * be used to handle any prompts that show up.
*
* Returns: whether the collection was successfully deleted or not
*/
@@ -1705,7 +1700,7 @@ secret_collection_delete_sync (SecretCollection *self,
}
/**
- * secret_collection_get_service:
+ * secret_collection_get_service: (attributes org.gtk.Method.get_property=service)
* @self: a collection
*
* Get the Secret Service object that this collection was created with.
@@ -1720,14 +1715,14 @@ secret_collection_get_service (SecretCollection *self)
}
/**
- * secret_collection_get_flags:
+ * secret_collection_get_flags: (attributes org.gtk.Method.get_property=flags)
* @self: the secret collection proxy
*
* Get the flags representing what features of the #SecretCollection proxy
* have been initialized.
*
- * Use secret_collection_load_items() to initialize further features
- * and change the flags.
+ * Use [method@Collection.load_items] to initialize further features and change
+ * the flags.
*
* Returns: the flags for features initialized
*/
@@ -1749,14 +1744,14 @@ secret_collection_get_flags (SecretCollection *self)
}
/**
- * secret_collection_get_items:
+ * secret_collection_get_items: (attributes org.gtk.Method.get_property=items)
* @self: a collection
*
* Get the list of items in this collection.
*
- * Returns: (transfer full) (element-type Secret.Item): a list of items,
- * when done, the list should be freed with g_list_free, and each item should
- * be released with g_object_unref()
+ * Returns: (transfer full) (element-type Secret.Item): a list of items, when
+ * done, the list should be freed with [func GLib List free], and each item
+ * should be released with [method@GObject.Object.unref]
*/
GList *
secret_collection_get_items (SecretCollection *self)
@@ -1792,12 +1787,13 @@ _secret_collection_find_item_instance (SecretCollection *self,
}
/**
- * secret_collection_get_label:
+ * secret_collection_get_label: (attributes org.gtk.Method.get_property=label)
* @self: a collection
*
* Get the label of this collection.
*
- * Returns: (transfer full): the label, which should be freed with g_free()
+ * Returns: (transfer full): the label, which should be freed with
+ * [func GLib free]
*/
gchar *
secret_collection_get_label (SecretCollection *self)
@@ -1817,7 +1813,7 @@ secret_collection_get_label (SecretCollection *self)
}
/**
- * secret_collection_set_label:
+ * secret_collection_set_label: (attributes org.gtk.Method.set_property=label)
* @self: a collection
* @label: a new label
* @cancellable: (nullable): optional cancellation object
@@ -1895,12 +1891,12 @@ secret_collection_set_label_sync (SecretCollection *self,
}
/**
- * secret_collection_get_locked:
+ * secret_collection_get_locked: (attributes org.gtk.Method.get_property=locked)
* @self: a collection
*
* Get whether the collection is locked or not.
*
- * Use secret_service_lock() or secret_service_unlock() to lock or unlock the
+ * Use [method Service lock] or [method@Service.unlock] to lock or unlock the
* collection.
*
* Returns: whether the collection is locked or not
@@ -1923,7 +1919,7 @@ secret_collection_get_locked (SecretCollection *self)
}
/**
- * secret_collection_get_created:
+ * secret_collection_get_created: (attributes org.gtk.Method.get_property=created)
* @self: a collection
*
* Get the created date and time of the collection. The return value is
@@ -1949,7 +1945,7 @@ secret_collection_get_created (SecretCollection *self)
}
/**
- * secret_collection_get_modified:
+ * secret_collection_get_modified: (attributes org.gtk.Method.get_property=modified)
* @self: a collection
*
* Get the modified date and time of the collection. The return value is
@@ -2091,8 +2087,8 @@ on_read_alias_service (GObject *source,
* Lookup which collection is assigned to this alias. Aliases help determine
* well known collections, such as 'default'.
*
- * If @service is %NULL, then secret_service_get() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func Service get] will be called to get the
+ * default [class@Service] proxy.
*
* This method will return immediately and complete asynchronously.
*/
@@ -2167,10 +2163,10 @@ secret_collection_for_alias_finish (GAsyncResult *result,
* @error: location to place error on failure
*
* Lookup which collection is assigned to this alias. Aliases help determine
- * well known collections, such as 'default'.
+ * well known collections, such as `default`.
*
- * If @service is %NULL, then secret_service_get_sync() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func@Service.get_sync] will be called to get the
+ * default [class@Service] proxy.
*
* This method may block and should not be used in user interface threads.
*
diff --git a/libsecret/secret-item.c b/libsecret/secret-item.c
index efab923..3c4ddb6 100644
--- a/libsecret/secret-item.c
+++ b/libsecret/secret-item.c
@@ -29,38 +29,32 @@
#include <glib/gi18n-lib.h>
/**
- * SECTION:secret-item
- * @title: SecretItem
- * @short_description: A secret item
+ * SecretItem:
+ *
+ * A secret item
*
* #SecretItem represents a secret item stored in the Secret Service.
*
- * Each item has a value, represented by a #SecretValue, which can be
- * retrieved by secret_item_get_secret() or set by secret_item_set_secret().
+ * Each item has a value, represented by a [struct@Value], which can be
+ * retrieved by [method@Item.get_secret] or set by [method@Item.set_secret].
* The item is only available when the item is not locked.
*
- * Items can be locked or unlocked using the secret_service_lock() or
- * secret_service_unlock() functions. The Secret Service may not be able to
+ * Items can be locked or unlocked using the [method Service lock] or
+ * [method@Service.unlock] functions. The Secret Service may not be able to
* unlock individual items, and may unlock an entire collection when a single
* item is unlocked.
*
* Each item has a set of attributes, which are used to locate the item later.
* These are not stored or transferred in a secure manner. Each attribute has
- * a string name and a string value. Use secret_service_search() to search for
- * items based on their attributes, and secret_item_set_attributes() to change
+ * a string name and a string value. Use [method@Service.search] to search for
+ * items based on their attributes, and [method@Item.set_attributes] to change
* the attributes associated with an item.
*
- * Items can be created with secret_item_create() or secret_service_store().
+ * Items can be created with [func@Item.create] or [method@Service.store].
*
* Stability: Stable
*/
-/**
- * SecretItem:
- *
- * A proxy object representing a secret item in the Secret Service.
- */
-
/**
* SecretItemClass:
* @parent_class: the parent class
@@ -81,7 +75,7 @@
* @SECRET_ITEM_CREATE_NONE: no flags
* @SECRET_ITEM_CREATE_REPLACE: replace an item with the same attributes.
*
- * Flags for secret_item_create().
+ * Flags for [func@Item.create].
*/
enum {
@@ -335,9 +329,9 @@ secret_item_class_init (SecretItemClass *klass)
proxy_class->g_properties_changed = secret_item_properties_changed;
/**
- * SecretItem:service:
+ * SecretItem:service: (attributes org.gtk.Property.get=secret_item_get_service)
*
- * The #SecretService object that this item is associated with and
+ * The [class@Service] object that this item is associated with and
* uses to interact with the actual D-Bus Secret Service.
*/
g_object_class_install_property (gobject_class, PROP_SERVICE,
@@ -345,7 +339,7 @@ secret_item_class_init (SecretItemClass *klass)
SECRET_TYPE_SERVICE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
/**
- * SecretItem:flags:
+ * SecretItem:flags: (attributes org.gtk.Property.get=secret_item_get_flags)
*
* A set of flags describing which parts of the secret item have
* been initialized.
@@ -370,18 +364,18 @@ secret_item_class_init (SecretItemClass *klass)
*
* Setting this property will result in the label of the item being
* set asynchronously. To properly track the changing of the label use the
- * secret_item_set_label() function.
+ * [method@Item.set_label] function.
*/
g_object_class_override_property (gobject_class, PROP_LABEL, "label");
/**
- * SecretItem:locked:
+ * SecretItem:locked: (attributes org.gtk.Property.get=secret_item_get_locked)
*
* Whether the item is locked or not. An item may not be independently
* lockable separate from other items in its collection.
*
- * To lock or unlock a item use the secret_service_lock() or
- * secret_service_unlock() functions.
+ * To lock or unlock a item use the [method Service lock] or
+ * [method@Service.unlock] functions.
*/
g_object_class_install_property (gobject_class, PROP_LOCKED,
g_param_spec_boolean ("locked", "Locked", "Item locked",
@@ -734,7 +728,7 @@ item_properties_new (const gchar *label,
* instead of creating a new one.
*
* This method may block indefinitely and should not be used in user interface
- * threads. The secret service may prompt the user. secret_service_prompt()
+ * threads. The secret service may prompt the user. [method@Service.prompt]
* will be used to handle any prompts that are required.
*/
void
@@ -790,7 +784,7 @@ secret_item_create (SecretCollection *collection,
* Finish operation to create a new item in the secret service.
*
* Returns: (transfer full): the new item, which should be unreferenced
- * with g_object_unref()
+ * with [method@GObject.Object.unref]
*/
SecretItem *
secret_item_create_finish (GAsyncResult *result,
@@ -828,11 +822,11 @@ secret_item_create_finish (GAsyncResult *result,
* instead of creating a new one.
*
* This method may block indefinitely and should not be used in user interface
- * threads. The secret service may prompt the user. secret_service_prompt()
+ * threads. The secret service may prompt the user. [method@Service.prompt]
* will be used to handle any prompts that are required.
*
* Returns: (transfer full): the new item, which should be unreferenced
- * with g_object_unref()
+ * with [method@GObject.Object.unref]
*/
SecretItem *
secret_item_create_sync (SecretCollection *collection,
@@ -908,7 +902,7 @@ on_item_deleted (GObject *source,
* Delete this item.
*
* This method returns immediately and completes asynchronously. The secret
- * service may prompt the user. secret_service_prompt() will be used to handle
+ * service may prompt the user. [method@Service.prompt] will be used to handle
* any prompts that show up.
*/
void
@@ -971,7 +965,7 @@ secret_item_delete_finish (SecretItem *self,
*
* This method may block indefinitely and should not be used in user
* interface threads. The secret service may prompt the user.
- * secret_service_prompt() will be used to handle any prompts that show up.
+ * [method@Service.prompt] will be used to handle any prompts that show up.
*
* Returns: whether the item was successfully deleted or not
*/
@@ -1003,13 +997,13 @@ secret_item_delete_sync (SecretItem *self,
}
/**
- * secret_item_get_flags:
+ * secret_item_get_flags: (attributes org.gtk.Method.get_property=flags)
* @self: the secret item proxy
*
* Get the flags representing what features of the #SecretItem proxy
* have been initialized.
*
- * Use secret_item_load_secret() to initialize further features
+ * Use [method@Item.load_secret] to initialize further features
* and change the flags.
*
* Returns: the flags for features initialized
@@ -1033,7 +1027,7 @@ secret_item_get_flags (SecretItem *self)
}
/**
- * secret_item_get_service:
+ * secret_item_get_service: (attributes org.gtk.Method.get_property=service)
* @self: an item
*
* Get the Secret Service object that this item was created with.
@@ -1055,10 +1049,10 @@ secret_item_get_service (SecretItem *self)
* Get the secret value of this item. If this item is locked or the secret
* has not yet been loaded then this will return %NULL.
*
- * To load the secret call the secret_item_load_secret() method.
+ * To load the secret call the [method@Item.load_secret] method.
*
* Returns: (transfer full) (nullable): the secret value which should be
- * released with secret_value_unref(), or %NULL
+ * released with [method@Value.unref], or %NULL
*/
SecretValue *
secret_item_get_secret (SecretItem *self)
@@ -1189,7 +1183,7 @@ secret_item_load_secret (SecretItem *self,
* Complete asynchronous operation to load the secret value of this item.
*
* The newly loaded secret value can be accessed by calling
- * secret_item_get_secret().
+ * [method@Item.get_secret].
*
* Returns: whether the secret item successfully loaded or not
*/
@@ -1394,7 +1388,7 @@ on_loads_secrets_session (GObject *source,
*
* Load the secret values for a secret item stored in the service.
*
- * The @items must all have the same SecretItem::service property.
+ * The @items must all have the same [property@Item:service] property.
*
* This function returns immediately and completes asynchronously.
*/
@@ -1488,7 +1482,7 @@ secret_item_load_secrets_finish (GAsyncResult *result,
*
* Load the secret values for a secret item stored in the service.
*
- * The @items must all have the same SecretItem::service property.
+ * The @items must all have the same [property@Item:service] property.
*
* This method may block indefinitely and should not be used in user interface
* threads.
@@ -1698,7 +1692,7 @@ secret_item_set_secret_sync (SecretItem *self,
* @self: an item
*
* Gets the name of the schema that this item was stored with. This is also
- * available at the <literal>xdg:schema</literal> attribute.
+ * available at the `xdg:schema` attribute.
*
* Returns: (nullable) (transfer full): the schema name
*/
@@ -1730,11 +1724,11 @@ secret_item_get_schema_name (SecretItem *self)
* or transferred securely by the secret service.
*
* Do not modify the attributes returned by this method. Use
- * secret_item_set_attributes() instead.
+ * [method@Item.set_attributes] instead.
*
* Returns: (transfer full) (element-type utf8 utf8): a new reference
- * to the attributes, which should not be modified, and
- * released with g_hash_table_unref()
+ * to the attributes, which should not be modified, and
+ * released with [func@GLib.HashTable.unref]
*/
GHashTable *
secret_item_get_attributes (SecretItem *self)
@@ -1865,7 +1859,7 @@ secret_item_set_attributes_sync (SecretItem *self,
*
* Get the label of this item.
*
- * Returns: (transfer full): the label, which should be freed with g_free()
+ * Returns: (transfer full): the label, which should be freed with [func GLib free]
*/
gchar *
secret_item_get_label (SecretItem *self)
diff --git a/libsecret/secret-methods.c b/libsecret/secret-methods.c
index b9b696e..1101c38 100644
--- a/libsecret/secret-methods.c
+++ b/libsecret/secret-methods.c
@@ -33,7 +33,7 @@
* @SECRET_SEARCH_UNLOCK: unlock locked items while searching
* @SECRET_SEARCH_LOAD_SECRETS: while searching load secrets for items that are not locked
*
- * Various flags to be used with secret_service_search() and secret_service_search_sync().
+ * Various flags to be used with [method@Service.search] and [method@Service.search_sync].
*/
typedef struct {
@@ -273,8 +273,8 @@ on_search_service (GObject *source,
* Search for items matching the @attributes. All collections are searched.
* The @attributes should be a table of string keys and string values.
*
- * If @service is %NULL, then secret_service_get() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func Service get] will be called to get
+ * the default [class@Service] proxy.
*
* If %SECRET_SEARCH_ALL is set in @flags, then all the items matching the
* search will be returned. Otherwise only the first item will be returned.
@@ -285,7 +285,7 @@ on_search_service (GObject *source,
* search and be returned. If the unlock fails, the search does not fail.
*
* If %SECRET_SEARCH_LOAD_SECRETS is set in @flags, then the items will have
- * their secret values loaded and available via secret_item_get_secret().
+ * their secret values loaded and available via [method@Item.get_secret].
*
* This function returns immediately and completes asynchronously.
*/
@@ -345,7 +345,7 @@ secret_service_search (SecretService *service,
* Complete asynchronous operation to search for items.
*
* Returns: (transfer full) (element-type Secret.Item):
- * a list of items that matched the search
+ * a list of items that matched the search
*/
GList *
secret_service_search_finish (SecretService *service,
@@ -413,8 +413,8 @@ service_load_items_sync (SecretService *service,
* Search for items matching the @attributes. All collections are searched.
* The @attributes should be a table of string keys and string values.
*
- * If @service is %NULL, then secret_service_get_sync() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func@Service.get_sync] will be called to get
+ * the default [class@Service] proxy.
*
* If %SECRET_SEARCH_ALL is set in @flags, then all the items matching the
* search will be returned. Otherwise only the first item will be returned.
@@ -426,14 +426,14 @@ service_load_items_sync (SecretService *service,
*
* If %SECRET_SEARCH_LOAD_SECRETS is set in @flags, then the items' secret
* values will be loaded for any unlocked items. Loaded item secret values
- * are available via secret_item_get_secret(). If the load of a secret values
+ * are available via [method@Item.get_secret]. If the load of a secret values
* fail, then the
*
* This function may block indefinitely. Use the asynchronous version
* in user interface threads.
*
* Returns: (transfer full) (element-type Secret.Item):
- * a list of items that matched the search
+ * a list of items that matched the search
*/
GList *
secret_service_search_sync (SecretService *service,
@@ -735,11 +735,11 @@ service_xlock_finish (SecretService *service,
* The secret service may not be able to lock items individually, and may
* lock an entire collection instead.
*
- * If @service is %NULL, then secret_service_get() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func Service get] will be called to get
+ * the default [class@Service] proxy.
*
* This method returns immediately and completes asynchronously. The secret
- * service may prompt the user. secret_service_prompt() will be used to handle
+ * service may prompt the user. [method@Service.prompt] will be used to handle
* any prompts that show up.
*/
void
@@ -797,12 +797,12 @@ secret_service_lock_finish (SecretService *service,
* The secret service may not be able to lock items individually, and may
* lock an entire collection instead.
*
- * If @service is %NULL, then secret_service_get_sync() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func@Service.get_sync] will be called to get
+ * the default [class@Service] proxy.
*
* This method may block indefinitely and should not be used in user
* interface threads. The secret service may prompt the user.
- * secret_service_prompt() will be used to handle any prompts that show up.
+ * [method@Service.prompt] will be used to handle any prompts that show up.
*
* Returns: the number of items or collections that were locked
*/
@@ -849,12 +849,12 @@ secret_service_lock_sync (SecretService *service,
* The secret service may not be able to unlock items individually, and may
* unlock an entire collection instead.
*
- * If @service is %NULL, then secret_service_get() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func Service get] will be called to get
+ * the default [class@Service] proxy.
*
* This method may block indefinitely and should not be used in user
* interface threads. The secret service may prompt the user.
- * secret_service_prompt() will be used to handle any prompts that show up.
+ * [method@Service.prompt] will be used to handle any prompts that show up.
*/
void
secret_service_unlock (SecretService *service,
@@ -911,12 +911,12 @@ secret_service_unlock_finish (SecretService *service,
* The secret service may not be able to unlock items individually, and may
* unlock an entire collection instead.
*
- * If @service is %NULL, then secret_service_get_sync() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func@Service.get_sync] will be called to get
+ * the default [class@Service] proxy.
*
* This method may block indefinitely and should not be used in user
* interface threads. The secret service may prompt the user.
- * secret_service_prompt() will be used to handle any prompts that show up.
+ * [method@Service.prompt] will be used to handle any prompts that show up.
*
* Returns: the number of items or collections that were unlocked
*/
@@ -1131,11 +1131,11 @@ on_store_service (GObject *source,
* If the attributes match a secret item already stored in the collection, then
* the item will be updated with these new values.
*
- * If @service is %NULL, then secret_service_get() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func Service get] will be called to get
+ * the default [class@Service] proxy.
*
* If @collection is not specified, then the default collection will be
- * used. Use #SECRET_COLLECTION_SESSION to store the password in the session
+ * used. Use [const@COLLECTION_SESSION] to store the password in the session
* collection, which doesn't get stored across login sessions.
*
* This method will return immediately and complete asynchronously.
@@ -1251,11 +1251,11 @@ secret_service_store_finish (SecretService *service,
* the item will be updated with these new values.
*
* If @collection is %NULL, then the default collection will be
- * used. Use #SECRET_COLLECTION_SESSION to store the password in the session
+ * used. Use [const@COLLECTION_SESSION] to store the password in the session
* collection, which doesn't get stored across login sessions.
*
- * If @service is %NULL, then secret_service_get_sync() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func@Service.get_sync] will be called to get
+ * the default [class@Service] proxy.
*
* This method may block indefinitely and should not be used in user interface
* threads.
@@ -1427,8 +1427,8 @@ on_lookup_service (GObject *source,
*
* The @attributes should be a set of key and value string pairs.
*
- * If @service is %NULL, then secret_service_get() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func Service get] will be called to get
+ * the default [class@Service] proxy.
*
* This method will return immediately and complete asynchronously.
*/
@@ -1485,8 +1485,8 @@ secret_service_lookup (SecretService *service,
*
* If no secret is found then %NULL is returned.
*
- * Returns: (transfer full): a newly allocated #SecretValue, which should be
- * released with secret_value_unref(), or %NULL if no secret found
+ * Returns: (transfer full): a newly allocated [struct@Value], which should be
+ * released with [method@Value.unref], or %NULL if no secret found
*/
SecretValue *
secret_service_lookup_finish (SecretService *service,
@@ -1520,14 +1520,14 @@ secret_service_lookup_finish (SecretService *service,
*
* The @attributes should be a set of key and value string pairs.
*
- * If @service is %NULL, then secret_service_get_sync() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func@Service.get_sync] will be called to get
+ * the default [class@Service] proxy.
*
* This method may block indefinitely and should not be used in user interface
* threads.
*
- * Returns: (transfer full): a newly allocated #SecretValue, which should be
- * released with secret_value_unref(), or %NULL if no secret found
+ * Returns: (transfer full): a newly allocated [struct@Value], which should be
+ * released with [method@Value.unref], or %NULL if no secret found
*/
SecretValue *
secret_service_lookup_sync (SecretService *service,
@@ -1674,8 +1674,8 @@ on_delete_service (GObject *source,
*
* The @attributes should be a set of key and value string pairs.
*
- * If @service is %NULL, then secret_service_get() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func Service get] will be called to get
+ * the default [class@Service] proxy.
*
* This method will return immediately and complete asynchronously.
*/
@@ -1765,8 +1765,8 @@ secret_service_clear_finish (SecretService *service,
*
* The @attributes should be a set of key and value string pairs.
*
- * If @service is %NULL, then secret_service_get_sync() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func@Service.get_sync] will be called to get
+ * the default [class@Service] proxy.
*
* This method may block indefinitely and should not be used in user interface
* threads.
@@ -1878,8 +1878,8 @@ on_set_alias_service (GObject *source,
* Assign a collection to this alias. Aliases help determine
* well known collections, such as 'default'.
*
- * If @service is %NULL, then secret_service_get() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func Service get] will be called to get
+ * the default [class@Service] proxy.
*
* This method will return immediately and complete asynchronously.
*/
@@ -1967,8 +1967,8 @@ secret_service_set_alias_finish (SecretService *service,
* Assign a collection to this alias. Aliases help determine
* well known collections, such as 'default'.
*
- * If @service is %NULL, then secret_service_get_sync() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func@Service.get_sync] will be called to get
+ * the default [class@Service] proxy.
*
* This method may block and should not be used in user interface threads.
*
diff --git a/libsecret/secret-password.c b/libsecret/secret-password.c
index 30c5352..deabdf3 100644
--- a/libsecret/secret-password.c
+++ b/libsecret/secret-password.c
@@ -23,27 +23,6 @@
#include <egg/egg-secure-memory.h>
-/**
- * SECTION:secret-password
- * @title: Password storage
- * @short_description: Simple password storage and lookup
- *
- * This is a simple API for storing passwords and retrieving passwords in the
- * Secret Service.
- *
- * Each password is associated with a set of attributes. Attribute values can
- * be either strings, integers or booleans.
- *
- * The names and types of allowed attributes for a given password are defined
- * with a schema. Certain schemas are predefined. Additional schemas can be
- * defined via the %SecretSchema structure.
- *
- * Each of the functions accept a variable list of attributes names and their
- * values. Include a %NULL to terminate the list of attributes.
- *
- * Stability: Stable
- */
-
/**
* secret_password_store: (skip)
* @schema: the schema for attributes
@@ -67,7 +46,7 @@
* the item will be updated with these new values.
*
* If @collection is %NULL, then the default collection will be
- * used. Use #SECRET_COLLECTION_SESSION to store the password in the session
+ * used. Use [const@COLLECTION_SESSION] to store the password in the session
* collection, which doesn't get stored across login sessions.
*
* This method will return immediately and complete asynchronously.
@@ -195,7 +174,7 @@ on_store_backend (GObject *source,
* the item will be updated with these new values.
*
* If @collection is %NULL, then the default collection will be
- * used. Use #SECRET_COLLECTION_SESSION to store the password in the session
+ * used. Use [const@COLLECTION_SESSION] to store the password in the session
* collection, which doesn't get stored across login sessions.
*
* This method will return immediately and complete asynchronously.
@@ -240,9 +219,9 @@ secret_password_storev (const SecretSchema *schema,
* secret_password_store_binary: (skip)
* @schema: the schema for attributes
* @collection: (nullable): a collection alias, or D-Bus object path of the
- * collection where to store the secret
+ * collection where to store the secret
* @label: label for the secret
- * @value: a #SecretValue
+ * @value: a [struct@Value]
* @cancellable: (nullable): optional cancellation object
* @callback: called when the operation completes
* @user_data: data to be passed to the callback
@@ -250,8 +229,8 @@ secret_password_storev (const SecretSchema *schema,
*
* Store a password in the secret service.
*
- * This is similar to secret_password_store(), but takes a
- * #SecretValue as the argument instead of a null-terminated password.
+ * This is similar to [func@password_store], but takes a
+ * [struct@Value] as the argument instead of a null-terminated password.
*
* This method will return immediately and complete asynchronously.
*
@@ -296,15 +275,15 @@ secret_password_store_binary (const SecretSchema *schema,
* @collection: (nullable): a collection alias, or D-Bus object path of the
* collection where to store the secret
* @label: label for the secret
- * @value: a #SecretValue
+ * @value: a [struct@Value]
* @cancellable: (nullable): optional cancellation object
* @callback: (scope async): called when the operation completes
* @user_data: data to be passed to the callback
*
* Store a password in the secret service.
*
- * This is similar to secret_password_storev(), but takes a
- * #SecretValue as the argument instead of a null-terminated password.
+ * This is similar to [func@password_storev], but takes a
+ * [struct@Value] as the argument instead of a null-terminated password.
*
* This method will return immediately and complete asynchronously.
*
@@ -387,7 +366,7 @@ secret_password_store_finish (GAsyncResult *result,
* the item will be updated with these new values.
*
* If @collection is %NULL, then the default collection will be
- * used. Use #SECRET_COLLECTION_SESSION to store the password in the session
+ * used. Use [const@COLLECTION_SESSION] to store the password in the session
* collection, which doesn't get stored across login sessions.
*
* This method may block indefinitely and should not be used in user interface
@@ -448,7 +427,7 @@ secret_password_store_sync (const SecretSchema *schema,
* the item will be updated with these new values.
*
* If @collection is %NULL, then the default collection will be
- * used. Use #SECRET_COLLECTION_SESSION to store the password in the session
+ * used. Use [const@COLLECTION_SESSION] to store the password in the session
* collection, which doesn't get stored across login sessions.
*
* This method may block indefinitely and should not be used in user interface
@@ -500,15 +479,15 @@ secret_password_storev_sync (const SecretSchema *schema,
* @collection: (nullable): a collection alias, or D-Bus object path of the
* collection where to store the secret
* @label: label for the secret
- * @value: a #SecretValue
+ * @value: a [struct@Value]
* @cancellable: (nullable): optional cancellation object
* @error: location to place an error on failure
* @...: the attribute keys and values, terminated with %NULL
*
* Store a password in the secret service.
*
- * This is similar to secret_password_store_sync(), but takes a
- * #SecretValue as the argument instead of a null terminated password.
+ * This is similar to [func@password_store_sync], but takes a
+ * [struct@Value] as the argument instead of a null terminated password.
*
* This method may block indefinitely and should not be used in user interface
* threads.
@@ -558,14 +537,14 @@ secret_password_store_binary_sync (const SecretSchema *schema,
* @collection: (nullable): a collection alias, or D-Bus object path of the
* collection where to store the secret
* @label: label for the secret
- * @value: a #SecretValue
+ * @value: a [struct@Value]
* @cancellable: (nullable): optional cancellation object
* @error: location to place an error on failure
*
* Store a password in the secret service.
*
- * This is similar to secret_password_storev_sync(), but takes a
- * #SecretValue as the argument instead of a null-terminated passwords.
+ * This is similar to [func@password_storev_sync], but takes a [struct@Value] as
+ * the argument instead of a null-terminated passwords.
*
* This method may block indefinitely and should not be used in user interface
* threads.
@@ -779,7 +758,7 @@ secret_password_lookupv (const SecretSchema *schema,
* Finish an asynchronous operation to lookup a password in the secret service.
*
* Returns: (transfer full): a new password string stored in nonpageable memory
- * which must be freed with secret_password_free() when done
+ * which must be freed with [func@password_free] when done
*/
gchar *
secret_password_lookup_nonpageable_finish (GAsyncResult *result,
@@ -804,8 +783,8 @@ secret_password_lookup_nonpageable_finish (GAsyncResult *result,
*
* Finish an asynchronous operation to lookup a password in the secret service.
*
- * Returns: (transfer full): a newly allocated #SecretValue, which should be
- * released with secret_value_unref(), or %NULL if no secret found
+ * Returns: (transfer full): a newly allocated [struct@Value], which should be
+ * released with [method@Value.unref], or %NULL if no secret found
*
* Since: 0.19.0
*/
@@ -827,7 +806,7 @@ secret_password_lookup_binary_finish (GAsyncResult *result,
* Finish an asynchronous operation to lookup a password in the secret service.
*
* Returns: (transfer full): a new password string which should be freed with
- * secret_password_free() or may be freed with g_free() when done
+ * [func@password_free] or may be freed with [func GLib free] when done
*/
gchar *
secret_password_lookup_finish (GAsyncResult *result,
@@ -865,7 +844,7 @@ secret_password_lookup_finish (GAsyncResult *result,
* threads.
*
* Returns: (transfer full): a new password string which should be freed with
- * secret_password_free() or may be freed with g_free() when done
+ * [func@password_free] or may be freed with [func GLib free] when done
*/
gchar *
secret_password_lookup_sync (const SecretSchema *schema,
@@ -917,7 +896,7 @@ secret_password_lookup_sync (const SecretSchema *schema,
* threads.
*
* Returns: (transfer full): a new password string stored in nonpageable memory
- * which must be freed with secret_password_free() when done
+ * which must be freed with [func@password_free] when done
*/
gchar *
secret_password_lookup_nonpageable_sync (const SecretSchema *schema,
@@ -966,7 +945,7 @@ secret_password_lookup_nonpageable_sync (const SecretSchema *schema,
* threads.
*
* Returns: (transfer full): a new password string stored in non pageable memory
- * which should be freed with secret_password_free() when done
+ * which should be freed with [func@password_free] when done
*/
gchar *
secret_password_lookupv_nonpageable_sync (const SecretSchema *schema,
@@ -1010,14 +989,14 @@ secret_password_lookupv_nonpageable_sync (const SecretSchema *schema,
*
* Lookup a password in the secret service.
*
- * This is similar to secret_password_lookup_sync(), but returns a
- * #SecretValue instead of a null-terminated password.
+ * This is similar to [func@password_lookup_sync], but returns a
+ * [struct@Value] instead of a null-terminated password.
*
* This method may block indefinitely and should not be used in user interface
* threads.
*
- * Returns: (transfer full): a newly allocated #SecretValue, which should be
- * released with secret_value_unref(), or %NULL if no secret found
+ * Returns: (transfer full): a newly allocated [struct@Value], which should be
+ * released with [method@Value.unref], or %NULL if no secret found
*
* Since: 0.19.0
*/
@@ -1060,14 +1039,14 @@ secret_password_lookup_binary_sync (const SecretSchema *schema,
*
* Lookup a password in the secret service.
*
- * This is similar to secret_password_lookupv_sync(), but returns a
- * #SecretValue instead of a null-terminated password.
+ * This is similar to [func@password_lookupv_sync], but returns a
+ * [struct@Value] instead of a null-terminated password.
*
* This method may block indefinitely and should not be used in user interface
* threads.
*
- * Returns: (transfer full): a newly allocated #SecretValue, which should be
- * released with secret_value_unref(), or %NULL if no secret found
+ * Returns: (transfer full): a newly allocated [struct@Value], which should be
+ * released with [method@Value.unref], or %NULL if no secret found
*
* Since: 0.19.0
*/
@@ -1121,7 +1100,7 @@ secret_password_lookupv_binary_sync (const SecretSchema *schema,
* threads.
*
* Returns: (transfer full): a new password string which should be freed with
- * secret_password_free() or may be freed with g_free() when done
+ * [func@password_free] or may be freed with [func GLib free] when done
*/
gchar *
secret_password_lookupv_sync (const SecretSchema *schema,
@@ -1613,7 +1592,7 @@ secret_password_searchv (const SecretSchema *schema,
* Finish an asynchronous operation to search for items in the secret service.
*
* Returns: (transfer full) (element-type Secret.Retrievable): a list of
- * #SecretRetrievable containing attributes of the matched items
+ * [iface@Retrievable] containing attributes of the matched items
*
* Since: 0.19.0
*/
@@ -1648,7 +1627,7 @@ secret_password_search_finish (GAsyncResult *result,
* threads.
*
* Returns: (transfer full) (element-type Secret.Retrievable): a list of
- * #SecretRetrievable containing attributes of the matched items
+ * [iface@Retrievable] containing attributes of the matched items
*
* Since: 0.19.0
*/
@@ -1701,7 +1680,7 @@ secret_password_search_sync (const SecretSchema *schema,
* threads.
*
* Returns: (transfer full) (element-type Secret.Retrievable): a list of
- * #SecretRetrievable containing attributes of the matched items
+ * [iface@Retrievable] containing attributes of the matched items
*
* Since: 0.19.0
*/
@@ -1746,9 +1725,9 @@ secret_password_searchv_sync (const SecretSchema *schema,
* Clear the memory used by a password, and then free it.
*
* This function must be used to free nonpageable memory returned by
- * secret_password_lookup_nonpageable_finish(),
- * secret_password_lookup_nonpageable_sync() or
- * secret_password_lookupv_nonpageable_sync().
+ * [func@password_lookup_nonpageable_finish],
+ * [func@password_lookup_nonpageable_sync] or
+ * [func@password_lookupv_nonpageable_sync].
*/
void
secret_password_free (gchar *password)
diff --git a/libsecret/secret-paths.c b/libsecret/secret-paths.c
index 1fc3adc..f39f6c7 100644
--- a/libsecret/secret-paths.c
+++ b/libsecret/secret-paths.c
@@ -23,22 +23,6 @@
#include "secret-value.h"
-/**
- * SECTION:secret-paths
- * @title: DBus Path Related Functions
- * @short_description: Secret Service functions which operate on DBus object paths
- *
- * These are low level functions which operate on DBus object paths of
- * collections or items, instead of the #SecretCollection or #SecretItem
- * objects themselves.
- *
- * You can use these functions if you wish to manage access to the secret
- * service using the DBus API directly, and only wish to use a few calls
- * in libsecret.
- *
- * Stability: Unstable
- */
-
/**
* secret_collection_new_for_dbus_path: (skip)
* @service: (nullable): a secret service object
@@ -50,8 +34,8 @@
*
* Get a new collection proxy for a collection in the secret service.
*
- * If @service is %NULL, then secret_service_get() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [func Service get] will be called to get
+ * the default [class@Service] proxy.
*
* This method will return immediately and complete asynchronously.
*
@@ -95,7 +79,7 @@ secret_collection_new_for_dbus_path (SecretService *service,
* collection in the secret service.
*
* Returns: (transfer full): the new collection, which should be unreferenced
- * with g_object_unref()
+ * with [method@GObject.Object.unref]
*/
SecretCollection *
secret_collection_new_for_dbus_path_finish (GAsyncResult *result,
@@ -128,8 +112,8 @@ secret_collection_new_for_dbus_path_finish (GAsyncResult *result,
*
* Get a new collection proxy for a collection in the secret service.
*
- * If @service is %NULL, then secret_service_get_sync() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [funcService.get_sync] will be called to get
+ * the default [class@Service] proxy.
*
* This method may block indefinitely and should not be used in user interface
* threads.
@@ -137,7 +121,7 @@ secret_collection_new_for_dbus_path_finish (GAsyncResult *result,
* Stability: Unstable
*
* Returns: (transfer full): the new collection, which should be unreferenced
- * with g_object_unref()
+ * with [method@GObject.Object.unref]
*/
SecretCollection *
secret_collection_new_for_dbus_path_sync (SecretService *service,
@@ -179,8 +163,8 @@ secret_collection_new_for_dbus_path_sync (SecretService *service,
*
* Get a new item proxy for a secret item in the secret service.
*
- * If @service is %NULL, then secret_service_get() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [funcService.get] will be called to get
+ * the default [class@Service] proxy.
*
* This method will return immediately and complete asynchronously.
*
@@ -226,7 +210,7 @@ secret_item_new_for_dbus_path (SecretService *service,
* Stability: Unstable
*
* Returns: (transfer full): the new item, which should be unreferenced
- * with g_object_unref()
+ * with [method@GObject.Object.unref]
*/
SecretItem *
secret_item_new_for_dbus_path_finish (GAsyncResult *result,
@@ -256,8 +240,8 @@ secret_item_new_for_dbus_path_finish (GAsyncResult *result,
*
* Get a new item proxy for a secret item in the secret service.
*
- * If @service is %NULL, then secret_service_get_sync() will be called to get
- * the default #SecretService proxy.
+ * If @service is %NULL, then [funcService.get_sync] will be called to get
+ * the default [class@Service] proxy.
*
* This method may block indefinitely and should not be used in user interface
* threads.
@@ -265,7 +249,7 @@ secret_item_new_for_dbus_path_finish (GAsyncResult *result,
* Stability: Unstable
*
* Returns: (transfer full): the new item, which should be unreferenced
- * with g_object_unref()
+ * with [method@GObject.Object.unref]
*/
SecretItem *
secret_item_new_for_dbus_path_sync (SecretService *service,
@@ -332,10 +316,10 @@ on_search_items_complete (GObject *source,
*
* This function returns immediately and completes asynchronously.
*
- * When your callback is called use secret_collection_search_for_dbus_paths_finish()
+ * When your callback is called use [method@Collection.search_for_dbus_paths_finish]
* to get the results of this function. Only the DBus object paths of the
- * items will be returned. If you would like #SecretItem objects to be returned
- * instead, then use the secret_collection_search() function.
+ * items will be returned. If you would like [class@Item] objects to be returned
+ * instead, then use the [method@Collection.search] function.
*
* Stability: Unstable
*/
@@ -382,13 +366,13 @@ secret_collection_search_for_dbus_paths (SecretCollection *collection,
* Complete asynchronous operation to search for items in a collection.
*
* DBus object paths of the items will be returned. If you would to have
- * #SecretItem objects to be returned instead, then use the
- * secret_collection_search() and secret_collection_search_finish() functions.
+ * [class@Item] objects to be returned instead, then use the
+ * [method@Collection.search] and [method@Collection.search_finish] functions.
*
* Stability: Unstable
*
* Returns: (transfer full) (array zero-terminated=1): an array of DBus object
- * paths for matching items.
+ * paths for matching items.
*/
gchar **
secret_collection_search_for_dbus_paths_finish (SecretCollection *collection,
@@ -429,13 +413,13 @@ secret_collection_search_for_dbus_paths_finish (SecretCollection *collection,
* in user interface threads.
*
* DBus object paths of the items will be returned. If you would to have
- * #SecretItem objects to be returned instead, then use the
- * secret_collection_search_sync() function.
+ * [class@Item] objects to be returned instead, then use the
+ * [method@Collection.search_sync] function.
*
* Stability: Unstable
*
* Returns: (transfer full) (array zero-terminated=1): an array of DBus object
- * paths for matching items.
+ * paths for matching items.
*/
gchar **
secret_collection_search_for_dbus_paths_sync (SecretCollection *collection,
@@ -483,10 +467,10 @@ secret_collection_search_for_dbus_paths_sync (SecretCollection *collection,
*
* This function returns immediately and completes asynchronously.
*
- * When your callback is called use secret_service_search_for_dbus_paths_finish()
+ * When your callback is called use [method@Service.search_for_dbus_paths_finish]
* to get the results of this function. Only the D-Bus object paths of the
- * items will be returned. If you would like #SecretItem objects to be returned
- * instead, then use the secret_service_search() function.
+ * items will be returned. If you would like [class@Item] objects to be returned
+ * instead, then use the [method@Service.search] function.
*
* Stability: Unstable
*/
@@ -558,9 +542,9 @@ _secret_service_search_for_paths_variant (SecretService *self,
* in the @locked or @unlocked arrays respectively.
*
* D-Bus object paths of the items will be returned in the @unlocked or
- * @locked arrays. If you would to have #SecretItem objects to be returned
- * instead, then us the secret_service_search() and
- * secret_service_search_finish() functions.
+ * @locked arrays. If you would to have [class@Item] objects to be returned
+ * instead, then us the [method@Service.search] and
+ * [method@Service.search_finish] functions.
*
* Stability: Unstable
*
@@ -626,8 +610,8 @@ secret_service_search_for_dbus_paths_finish (SecretService *self,
* in the @locked or @unlocked arrays respectively.
*
* D-Bus object paths of the items will be returned in the @unlocked or
- * @locked arrays. If you would to have #SecretItem objects to be returned
- * instead, then use the secret_service_search_sync() function.
+ * @locked arrays. If you would to have [class@Item] objects to be returned
+ * instead, then use the [method@Service.search_sync] function.
*
* Stability: Unstable
*
@@ -736,7 +720,7 @@ on_get_secrets_session (GObject *source,
* Get the secret value for a secret item stored in the service.
*
* The item is represented by its D-Bus object path. If you already have a
- * #SecretItem proxy object, use use secret_item_get_secret() to more simply
+ * [class@Item] proxy object, use use [method@Item.get_secret] to more simply
* get its secret value.
*
* This function returns immediately and completes asynchronously.
@@ -784,7 +768,7 @@ secret_service_get_secret_for_dbus_path (SecretService *self,
* Stability: Unstable
*
* Returns: (transfer full) (nullable): the newly allocated secret value
- * for the item, which should be released with secret_value_unref()
+ * for the item, which should be released with [method@Value.unref]
*/
SecretValue *
secret_service_get_secret_for_dbus_path_finish (SecretService *self,
@@ -818,7 +802,7 @@ secret_service_get_secret_for_dbus_path_finish (SecretService *self,
* Get the secret value for a secret item stored in the service.
*
* The item is represented by its D-Bus object path. If you already have a
- * #SecretItem proxy object, use use secret_item_load_secret_sync() to more simply
+ * [class@Item] proxy object, use use [method@Item.load_secret_sync] to more simply
* get its secret value.
*
* This method may block indefinitely and should not be used in user interface
@@ -829,7 +813,7 @@ secret_service_get_secret_for_dbus_path_finish (SecretService *self,
* Stability: Unstable
*
* Returns: (transfer full) (nullable): the newly allocated secret value
- * for the item, which should be released with secret_value_unref()
+ * the item, which should be released with [method@Value.unref]
*/
SecretValue *
secret_service_get_secret_for_dbus_path_sync (SecretService *self,
@@ -872,7 +856,7 @@ secret_service_get_secret_for_dbus_path_sync (SecretService *self,
* Get the secret values for a secret item stored in the service.
*
* The items are represented by their D-Bus object paths. If you already have
- * #SecretItem proxy objects, use use secret_item_load_secrets() to more simply
+ * [class@Item] proxy objects, use use [func@Item.load_secrets] to more simply
* get their secret values.
*
* This function returns immediately and completes asynchronously.
@@ -920,8 +904,8 @@ secret_service_get_secrets_for_dbus_paths (SecretService *self,
* Stability: Unstable
*
* Returns: (transfer full) (element-type utf8 Secret.Value): a newly
- * allocated hash table of item_path keys to #SecretValue
- * values.
+ * allocated hash table of item_path keys to [struct@Value]
+ * values.
*/
GHashTable *
secret_service_get_secrets_for_dbus_paths_finish (SecretService *self,
@@ -955,7 +939,7 @@ secret_service_get_secrets_for_dbus_paths_finish (SecretService *self,
* Get the secret values for a secret item stored in the service.
*
* The items are represented by their D-Bus object paths. If you already have
- * #SecretItem proxy objects, use use secret_item_load_secrets_sync() to more
+ * [class@Item] proxy objects, use use [func@Item.load_secrets_sync] to more
* simply get their secret values.
*
* This method may block indefinitely and should not be used in user interface
@@ -966,8 +950,8 @@ secret_service_get_secrets_for_dbus_paths_finish (SecretService *self,
* Stability: Unstable
*
* Returns: (transfer full) (element-type utf8 Secret.Value): a newly
- * allocated hash table of item_path keys to #SecretValue
- * values.
+ * allocated hash table of item_path keys to [struct@Value]
+ * values.
*/
GHashTable *
secret_service_get_secrets_for_dbus_paths_sync (SecretService *self,
@@ -1158,15 +1142,15 @@ _secret_service_xlock_paths_finish (SecretService *self,
* Lock items or collections in the secret service.
*
* The items or collections are represented by their D-Bus object paths. If you
- * already have #SecretItem and #SecretCollection proxy objects, use use
- * secret_service_lock_sync() instead.
+ * already have [class@Item] and [class@Collection] proxy objects, use use
+ * [method@Service.lock_sync] instead.
*
* The secret service may not be able to lock items individually, and may
* lock an entire collection instead.
*
* This method may block indefinitely and should not be used in user
* interface threads. The secret service may prompt the user.
- * secret_service_prompt() will be used to handle any prompts that show up.
+ * [method@Service.prompt] will be used to handle any prompts that show up.
*
* Stability: Unstable
*
@@ -1215,14 +1199,14 @@ secret_service_lock_dbus_paths_sync (SecretService *self,
* Lock items or collections in the secret service.
*
* The items or collections are represented by their D-Bus object paths. If you
- * already have #SecretItem and #SecretCollection proxy objects, use use
- * secret_service_lock() instead.
+ * already have [class@Item] and [class@Collection] proxy objects, use use
+ * [method Service lock] instead.
*
* The secret service may not be able to lock items individually, and may
* lock an entire collection instead.
*
* This method returns immediately and completes asynchronously. The secret
- * service may prompt the user. secret_service_prompt() will be used to handle
+ * service may prompt the user. [method@Service.prompt] will be used to handle
* any prompts that show up.
*
* Stability: Unstable
@@ -1288,15 +1272,15 @@ secret_service_lock_dbus_paths_finish (SecretService *self,
* Unlock items or collections in the secret service.
*
* The items or collections are represented by their D-Bus object paths. If you
- * already have #SecretItem and #SecretCollection proxy objects, use use
- * secret_service_unlock_sync() instead.
+ * already have [class@Item] and [class@Collection] proxy objects, use use
+ * [method@Service.unlock_sync] instead.
*
* The secret service may not be able to unlock items individually, and may
* unlock an entire collection instead.
*
* This method may block indefinitely and should not be used in user
* interface threads. The secret service may prompt the user.
- * secret_service_prompt() will be used to handle any prompts that show up.
+ * [method@Service.prompt] will be used to handle any prompts that show up.
*
* Stability: Unstable
*
@@ -1346,14 +1330,14 @@ secret_service_unlock_dbus_paths_sync (SecretService *self,
* Unlock items or collections in the secret service.
*
* The items or collections are represented by their D-Bus object paths. If you
- * already have #SecretItem and #SecretCollection proxy objects, use use
- * secret_service_unlock() instead.
+ * already have [class@Item] and [class@Collection] proxy objects, use use
+ * [method@Service.unlock] instead.
*
* The secret service may not be able to unlock items individually, and may
* unlock an entire collection instead.
*
* This method returns immediately and completes asynchronously. The secret
- * service may prompt the user. secret_service_prompt() will be used to handle
+ * service may prompt the user. [method@Service.prompt] will be used to handle
* any prompts that show up.
*
* Stability: Unstable
@@ -1540,7 +1524,7 @@ _secret_service_delete_path_finish (SecretService *self,
* Delete a secret item from the secret service.
*
* The item is represented by its D-Bus object path. If you already have a
- * #SecretItem proxy objects, use use secret_item_delete() instead.
+ * [class@Item] proxy objects, use use [method@Item.delete] instead.
*
* This method will return immediately and complete asynchronously.
*
@@ -1591,7 +1575,7 @@ secret_service_delete_item_dbus_path_finish (SecretService *self,
* Delete a secret item from the secret service.
*
* The item is represented by its D-Bus object path. If you already have a
- * #SecretItem proxy objects, use use secret_item_delete_sync() instead.
+ * [class@Item] proxy objects, use use [method@Item.delete_sync] instead.
*
* This method may block indefinitely and should not be used in user interface
* threads.
@@ -1716,7 +1700,7 @@ on_create_collection_called (GObject *source,
*
* Using this method requires that you setup a correct hash table of D-Bus
* properties for the new collection. You may prefer to use
- * secret_collection_create() which does handles this for you.
+ * [func@Collection.create] which does handles this for you.
*
* An @alias is a well-known tag for a collection, such as 'default' (ie: the
* default collection to store items in). This allows other applications to
@@ -1727,13 +1711,13 @@ on_create_collection_called (GObject *source,
*
* @properties is a set of properties for the new collection. The keys in the
* hash table should be interface.property strings like
- * <literal>org.freedesktop.Secret.Collection.Label</literal>. The values
- * in the hash table should be #GVariant values of the properties.
+ * `org.freedesktop.Secret.Collection.Label`. The values
+ * in the hash table should be [struct@GLib.Variant] values of the properties.
*
* If you wish to have a
*
* This method will return immediately and complete asynchronously. The secret
- * service may prompt the user. secret_service_prompt() will be used to handle
+ * service may prompt the user. [method@Service.prompt] will be used to handle
* any prompts that are required.
*
* Stability: Unstable
@@ -1794,7 +1778,7 @@ secret_service_create_collection_dbus_path (SecretService *self,
* Stability: Unstable
*
* Returns: (transfer full): a new string containing the D-Bus object path
- * of the collection
+ * of the collection
*/
gchar *
secret_service_create_collection_dbus_path_finish (SecretService *self,
@@ -1832,7 +1816,7 @@ secret_service_create_collection_dbus_path_finish (SecretService *self,
*
* Using this method requires that you setup a correct hash table of D-Bus
* properties for the new collection. You may prefer to use
- * secret_collection_create() which does handles this for you.
+ * [func@Collection.create] which does handles this for you.
*
* An @alias is a well-known tag for a collection, such as 'default' (ie: the
* default collection to store items in). This allows other applications to
@@ -1843,11 +1827,11 @@ secret_service_create_collection_dbus_path_finish (SecretService *self,
*
* @properties is a set of properties for the new collection. The keys in the
* hash table should be interface.property strings like
- * <literal>org.freedesktop.Secret.Collection.Label</literal>. The values
- * in the hash table should be #GVariant values of the properties.
+ * `org.freedesktop.Secret.Collection.Label`. The values
+ * in the hash table should be [struct@GLib.Variant] values of the properties.
*
* This method may block indefinitely and should not be used in user interface
- * threads. The secret service may prompt the user. secret_service_prompt()
+ * threads. The secret service may prompt the user. [method@Service.prompt]
* will be used to handle any prompts that are required.
*
* Stability: Unstable
@@ -2018,7 +2002,7 @@ on_create_item_session (GObject *source,
* Create a new item in a secret service collection and return its D-Bus
* object path.
*
- * It is often easier to use secret_password_store() or secret_item_create()
+ * It is often easier to use [func@password_store] or [func@Item.create]
* rather than using this function. Using this method requires that you setup
* a correct hash table of D-Bus @properties for the new collection.
*
@@ -2028,11 +2012,11 @@ on_create_item_session (GObject *source,
*
* @properties is a set of properties for the new collection. The keys in the
* hash table should be interface.property strings like
- * <literal>org.freedesktop.Secret.Item.Label</literal>. The values
- * in the hash table should be #GVariant values of the properties.
+ * `org.freedesktop.Secret.Item.Label`. The values
+ * in the hash table should be [struct@GLib.Variant] values of the properties.
*
* This method will return immediately and complete asynchronously. The secret
- * service may prompt the user. secret_service_prompt() will be used to handle
+ * service may prompt the user. [method@Service.prompt] will be used to handle
* any prompts that are required.
*
* Stability: Unstable
@@ -2085,7 +2069,7 @@ secret_service_create_item_dbus_path (SecretService *self,
* Stability: Unstable
*
* Returns: (transfer full): a new string containing the D-Bus object path
- * of the item
+ * of the item
*/
gchar *
secret_service_create_item_dbus_path_finish (SecretService *self,
@@ -2139,7 +2123,7 @@ _secret_service_create_item_dbus_path_finish_raw (GAsyncResult *result,
* Create a new item in a secret service collection and return its D-Bus
* object path.
*
- * It is often easier to use secret_password_store_sync() or secret_item_create_sync()
+ * It is often easier to use [func@password_store_sync] or [func@Item.create_sync]
* rather than using this function. Using this method requires that you setup
* a correct hash table of D-Bus @properties for the new collection.
*
@@ -2149,11 +2133,11 @@ _secret_service_create_item_dbus_path_finish_raw (GAsyncResult *result,
*
* @properties is a set of properties for the new collection. The keys in the
* hash table should be interface.property strings like
- * <literal>org.freedesktop.Secret.Item.Label</literal>. The values
- * in the hash table should be #GVariant values of the properties.
+ * `org.freedesktop.Secret.Item.Label`. The values
+ * in the hash table should be [struct@GLib.Variant] values of the properties.
*
* This method may block indefinitely and should not be used in user interface
- * threads. The secret service may prompt the user. secret_service_prompt()
+ * threads. The secret service may prompt the user. [method@Service.prompt]
* will be used to handle any prompts that are required.
*
* Stability: Unstable
@@ -2240,7 +2224,7 @@ secret_service_read_alias_dbus_path (SecretService *self,
* Stability: Unstable
*
* Returns: (transfer full) (nullable): the collection dbus object path,
- * or %NULL if none assigned to the alias
+ * or %NULL if none assigned to the alias
*/
gchar *
secret_service_read_alias_dbus_path_finish (SecretService *self,
@@ -2449,11 +2433,11 @@ secret_service_set_alias_to_dbus_path_sync (SecretService *self,
* @return_type: (nullable): the variant type of the prompt result
* @error: location to place error on failure
*
- * Perform prompting for a #SecretPrompt.
+ * Perform prompting for a [class@Prompt].
*
- * Override the #SecretServiceClass <literal>prompt_async</literal> virtual method
+ * Override the #SecretServiceClass [vfunc@Service.prompt_async] virtual method
* to change the behavior of the propmting. The default behavior is to simply
- * run secret_prompt_perform() on the prompt.
+ * run [method@Prompt.perform] on the prompt.
*
* Returns a variant result if the prompt was completed and not dismissed. The
* type of result depends on the action the prompt is completing, and is defined
@@ -2464,7 +2448,7 @@ secret_service_set_alias_to_dbus_path_sync (SecretService *self,
* Stability: Unstable
*
* Returns: (transfer full) (nullable): %NULL if the prompt was dismissed or an
- * error occurred, a variant result if the prompt was successful
+ * error occurred, a variant result if the prompt was successful
*/
GVariant *
secret_service_prompt_at_dbus_path_sync (SecretService *self,
@@ -2497,14 +2481,14 @@ secret_service_prompt_at_dbus_path_sync (SecretService *self,
* @callback: called when the operation completes
* @user_data: data to be passed to the callback
*
- * Perform prompting for a #SecretPrompt.
+ * Perform prompting for a [class@Prompt].
*
* This function is called by other parts of this library to handle prompts
* for the various actions that can require prompting.
*
- * Override the #SecretServiceClass <literal>prompt_async</literal> virtual method
+ * Override the #SecretServiceClass [vfunc@Service.prompt_async] virtual method
* to change the behavior of the propmting. The default behavior is to simply
- * run secret_prompt_perform() on the prompt.
+ * run [method@Prompt.perform] on the prompt.
*
* Stability: Unstable
*/
@@ -2533,7 +2517,7 @@ secret_service_prompt_at_dbus_path (SecretService *self,
* @result: the asynchronous result passed to the callback
* @error: location to place an error on failure
*
- * Complete asynchronous operation to perform prompting for a #SecretPrompt.
+ * Complete asynchronous operation to perform prompting for a [class@Prompt].
*
* Returns a variant result if the prompt was completed and not dismissed. The
* type of result depends on the action the prompt is completing, and is defined
@@ -2542,7 +2526,7 @@ secret_service_prompt_at_dbus_path (SecretService *self,
* Stability: Unstable
*
* Returns: (transfer full) (nullable): %NULL if the prompt was dismissed or an
- * error occurred, a variant result if the prompt was successful
+ * error occurred, a variant result if the prompt was successful
*/
GVariant *
secret_service_prompt_at_dbus_path_finish (SecretService *self,
@@ -2561,12 +2545,12 @@ secret_service_prompt_at_dbus_path_finish (SecretService *self,
* @service: the service
* @value: the secret value
*
- * Encodes a #SecretValue into GVariant for use with the Secret Service
- * DBus API.
+ * Encodes a [struct@Value] into [struct@GLib.Variant] for use with the Secret
+ * Service DBus API.
*
- * The resulting GVariant will have a <literal>(oayays)</literal> signature.
+ * The resulting [struct@GLib.Variant] will have a `(oayays)` signature.
*
- * A session must have already been established by the #SecretService.
+ * A session must have already been established by the [class@Service].
*
* Returns: (transfer floating): the encoded secret
*/
@@ -2590,12 +2574,12 @@ secret_service_encode_dbus_secret (SecretService *service,
* @service: the service
* @value: the encoded secret
*
- * Decode a #SecretValue into GVariant received with the Secret Service
+ * Decode a [struct@Value] into [struct@GLib.Variant] received with the Secret Service
* DBus API.
*
- * The GVariant should have a <literal>(oayays)</literal> signature.
+ * The [struct@GLib.Variant] should have a `(oayays)` signature.
*
- * A session must have already been established by the #SecretService, and
+ * A session must have already been established by the [class@Service], and
* the encoded secret must be valid for that session.
*
* Returns: (transfer full): the decoded secret value
diff --git a/libsecret/secret-prompt.c b/libsecret/secret-prompt.c
index 24229da..c40ce5d 100644
--- a/libsecret/secret-prompt.c
+++ b/libsecret/secret-prompt.c
@@ -22,32 +22,26 @@
#include <glib/gi18n-lib.h>
/**
- * SECTION:secret-prompt
- * @title: SecretPrompt
- * @short_description: a prompt in the Service
+ * SecretPrompt:
+ *
+ * A prompt in the Service
*
- * A #SecretPrompt represents a prompt in the Secret Service.
+ * A proxy object representing a prompt that the Secret Service will display
+ * to the user.
*
* Certain actions on the Secret Service require user prompting to complete,
* such as creating a collection, or unlocking a collection. When such a prompt
* is necessary, then a #SecretPrompt object is created by this library, and
- * passed to the secret_service_prompt() method. In this way it is handled
+ * passed to the [method@Service.prompt] method. In this way it is handled
* automatically.
*
* In order to customize prompt handling, override the
- * SecretServiceClass::prompt_async and SecretServiceClass::prompt_finish
- * virtual methods of the #SecretService class.
+ * [vfunc@Service.prompt_async] and [vfunc@Service.prompt_finish] virtual
+ * methods of the [class@Service] class.
*
* Stability: Stable
*/
-/**
- * SecretPrompt:
- *
- * A proxy object representing a prompt that the Secret Service will display
- * to the user.
- */
-
/**
* SecretPromptClass:
* @parent_class: the parent class
@@ -131,10 +125,10 @@ _secret_prompt_instance (SecretService *service,
* API specification.
*
* If @window_id is non-null then it is used as an XWindow id on Linux. The API
- * expects this id to be converted to a string using the <literal>%d</literal>
- * printf format. The Secret Service can make its prompt transient for the window
- * with this id. In some Secret Service implementations this is not possible, so
- * the behavior depending on this should degrade gracefully.
+ * expects this id to be converted to a string using the `%d` printf format. The
+ * Secret Service can make its prompt transient for the window with this id. In
+ * some Secret Service implementations this is not possible, so the behavior
+ * depending on this should degrade gracefully.
*
* This runs the dialog in a recursive mainloop. When run from a user interface
* thread, this means the user interface will remain responsive. Care should be
@@ -191,10 +185,10 @@ secret_prompt_run (SecretPrompt *self,
* API specification.
*
* If @window_id is non-null then it is used as an XWindow id on Linux. The API
- * expects this id to be converted to a string using the <literal>%d</literal>
- * printf format. The Secret Service can make its prompt transient for the window
- * with this id. In some Secret Service implementations this is not possible,
- * so the behavior depending on this should degrade gracefully.
+ * expects this id to be converted to a string using the `%d` printf format. The
+ * Secret Service can make its prompt transient for the window with this id. In
+ * some Secret Service implementations this is not possible, so the behavior
+ * depending on this should degrade gracefully.
*
* This method may block indefinitely and should not be used in user interface
* threads.
@@ -412,10 +406,10 @@ on_prompt_cancelled (GCancellable *cancellable,
* was completed and not dismissed.
*
* If @window_id is non-null then it is used as an XWindow id on Linux. The API
- * expects this id to be converted to a string using the <literal>%d</literal>
- * printf format. The Secret Service can make its prompt transient for the window
- * with this id. In some Secret Service implementations this is not possible, so
- * the behavior depending on this should degrade gracefully.
+ * expects this id to be converted to a string using the `%d` printf format. The
+ * Secret Service can make its prompt transient for the window with this id. In
+ * some Secret Service implementations this is not possible, so the behavior
+ * depending on this should degrade gracefully.
*
* This method will return immediately and complete asynchronously.
*/
@@ -505,7 +499,7 @@ secret_prompt_perform (SecretPrompt *self,
* defined in the Secret Service DBus API specification.
*
* Returns: (transfer full): %NULL if the prompt was dismissed or an error occurred,
- * a variant result if the prompt was successful
+ * a variant result if the prompt was successful
*/
GVariant *
secret_prompt_perform_finish (SecretPrompt *self,
diff --git a/libsecret/secret-retrievable.c b/libsecret/secret-retrievable.c
index caa063b..d64285b 100644
--- a/libsecret/secret-retrievable.c
+++ b/libsecret/secret-retrievable.c
@@ -18,16 +18,16 @@
#include "secret-private.h"
/**
- * SECTION:secret-retrievable
- * @title: SecretRetrievable
- * @short_description: A read-only secret item
+ * SecretRetrievable
+ *
+ * A read-only secret item
*
* #SecretRetrievable provides a read-only view of a secret item
* stored in the Secret Service.
*
- * Each item has a value, represented by a #SecretValue, which can be
- * retrieved by secret_retrievable_retrieve_secret() and
- * secret_retrievable_retrieve_secret_finish().
+ * Each item has a value, represented by a [struct@Value], which can be
+ * retrieved by [method@Retrievable.retrieve_secret] and
+ * [method@Retrievable.retrieve_secret_finish].
*
* Stability: Stable
*/
@@ -44,10 +44,10 @@
/**
* SecretRetrievableInterface:
* @parent_iface: the parent interface
- * @retrieve_secret: implementation of secret_retrievable_retrieve_secret(),
+ * @retrieve_secret: implementation of [method@Retrievable.retrieve_secret],
* required
* @retrieve_secret_finish: implementation of
- * secret_retrievable_retrieve_secret_finish(), required
+ * [method@Retrievable.retrieve_secret_finish], required
*
* The interface for #SecretRetrievable.
*
@@ -60,7 +60,7 @@ static void
secret_retrievable_default_init (SecretRetrievableInterface *iface)
{
/**
- * SecretRetrievable:attributes: (type GLib.HashTable(utf8,utf8)) (transfer full)
+ * SecretRetrievable:attributes: (type GLib.HashTable(utf8,utf8)) (transfer full) (attributes
org.gtk.Property.get=secret_retrievable_get_attributes)
*
* The attributes set on this item. Attributes are used to locate an
* item. They are not guaranteed to be stored or transferred securely.
@@ -72,7 +72,7 @@ secret_retrievable_default_init (SecretRetrievableInterface *iface)
G_TYPE_HASH_TABLE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
/**
- * SecretRetrievable:label:
+ * SecretRetrievable:label: (attributes org.gtk.Property.get=secret_retrievable_get_label)
*
* The human readable label for the item.
*
@@ -83,7 +83,7 @@ secret_retrievable_default_init (SecretRetrievableInterface *iface)
NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
/**
- * SecretRetrievable:created:
+ * SecretRetrievable:created: (attributes org.gtk.Property.get=secret_retrievable_get_created)
*
* The date and time (in seconds since the UNIX epoch) that this
* item was created.
@@ -95,7 +95,7 @@ secret_retrievable_default_init (SecretRetrievableInterface *iface)
0UL, G_MAXUINT64, 0UL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
/**
- * SecretRetrievable:modified:
+ * SecretRetrievable:modified: (attributes org.gtk.Property.get=secret_retrievable_get_modified)
*
* The date and time (in seconds since the UNIX epoch) that this
* item was last modified.
@@ -146,7 +146,7 @@ secret_retrievable_retrieve_secret (SecretRetrievable *self,
* Complete asynchronous operation to retrieve the secret value of this object.
*
* Returns: (transfer full) (nullable): the secret value which should be
- * released with secret_value_unref(), or %NULL
+ * released with [method@Value.unref], or %NULL
*
* Since: 0.19.0
*/
@@ -178,7 +178,7 @@ secret_retrievable_retrieve_secret_finish (SecretRetrievable *self,
* threads.
*
* Returns: (transfer full) (nullable): the secret value which should be
- * released with secret_value_unref(), or %NULL
+ * released with [method@Value.unref], or %NULL
*
* Since: 0.19.0
*/
@@ -213,7 +213,7 @@ secret_retrievable_retrieve_secret_sync (SecretRetrievable *self,
}
/**
- * secret_retrievable_get_attributes:
+ * secret_retrievable_get_attributes: (attributes org.gtk.Method.get_property=attributes)
* @self: a retrievable object
*
* Get the attributes of this object.
@@ -225,8 +225,8 @@ secret_retrievable_retrieve_secret_sync (SecretRetrievable *self,
* Do not modify the attribute returned by this method.
*
* Returns: (transfer full) (element-type utf8 utf8): a new reference
- * to the attributes, which should not be modified, and
- * released with g_hash_table_unref()
+ * to the attributes, which should not be modified, and
+ * released with [func@GLib.HashTable.unref]
*
* Since: 0.19.0
*/
@@ -247,7 +247,7 @@ secret_retrievable_get_attributes (SecretRetrievable *self)
*
* Get the label of this item.
*
- * Returns: (transfer full): the label, which should be freed with g_free()
+ * Returns: (transfer full): the label, which should be freed with [func GLib free]
*
* Since: 0.19.0
*/
@@ -263,7 +263,7 @@ secret_retrievable_get_label (SecretRetrievable *self)
}
/**
- * secret_retrievable_get_created:
+ * secret_retrievable_get_created: (attributes org.gtk.Method.get_property=created)
* @self: a retrievable object
*
* Get the created date and time of the object. The return value is
@@ -285,7 +285,7 @@ secret_retrievable_get_created (SecretRetrievable *self)
}
/**
- * secret_retrievable_get_modified:
+ * secret_retrievable_get_modified: (attributes org.gtk.Method.get_property=modified)
* @self: a retrievable object
*
* Get the modified date and time of the object. The return value is
diff --git a/libsecret/secret-schema.c b/libsecret/secret-schema.c
index b04d922..32967bf 100644
--- a/libsecret/secret-schema.c
+++ b/libsecret/secret-schema.c
@@ -22,82 +22,6 @@
#include "egg/egg-secure-memory.h"
-/**
- * SECTION:secret-schema
- * @title: SecretSchema
- * @short_description: Schema for defining which attributes are on items
- *
- * Each password is associated with a set of attributes. Attribute values can
- * be either strings, integers or booleans.
- *
- * The names and types of allowed attributes for a given password are defined
- * with a schema.
- *
- * Additional schemas can be defined via the %SecretSchema structure like this:
- *
- * <informalexample><programlisting language="c">
- * /<!-- -->* in a header: *<!-- -->/
- *
- * const SecretSchema * example_get_schema (void) G_GNUC_CONST;
- *
- * #define EXAMPLE_SCHEMA example_get_schema ()
- *
- *
- * /<!-- -->* in a .c file: *<!-- -->/
- *
- * const SecretSchema *
- * example_get_schema (void)
- * {
- * static const SecretSchema the_schema = {
- * "org.example.Password", SECRET_SCHEMA_NONE,
- * {
- * { "number", SECRET_SCHEMA_ATTRIBUTE_INTEGER },
- * { "string", SECRET_SCHEMA_ATTRIBUTE_STRING },
- * { "even", SECRET_SCHEMA_ATTRIBUTE_BOOLEAN },
- * { NULL, 0 },
- * }
- * };
- * return &the_schema;
- * }
- * </programlisting></informalexample>
- *
- * Stability: Stable
- */
-
-/**
- * SecretSchema:
- * @name: the dotted name of the schema
- * @flags: flags for the schema
- * @attributes: the attribute names and types of those attributes
- *
- * Represents a set of attributes that are stored with an item. These schemas
- * are used for interoperability between various services storing the same types
- * of items.
- *
- * Each schema has a name like "org.gnome.keyring.NetworkPassword", and defines
- * a set of attributes, and types (string, integer, boolean) for those attributes.
- *
- * Attributes are stored as strings in the Secret Service, and the attribute
- * types simply define standard ways to store integer and boolean values as strings.
- * Attributes are represented in libsecret via a #GHashTable with string keys and
- * values. Even for values that defined as an integer or boolean in the schema,
- * the attribute values in the #GHashTable are strings. Boolean values are stored
- * as the strings 'true' and 'false'. Integer values are stored in decimal, with
- * a preceding negative sign for negative integers.
- *
- * Schemas are handled entirely on the client side by this library. The name of the
- * schema is automatically stored as an attribute on the item.
- *
- * Normally when looking up passwords only those with matching schema names are
- * returned. If the schema @flags contain the %SECRET_SCHEMA_DONT_MATCH_NAME flag,
- * then lookups will not check that the schema name matches that on the item, only
- * the schema's attributes are matched. This is useful when you are looking up items
- * that are not stored by the libsecret library. Other libraries such as libgnome-keyring
- * don't store the schema name.
- *
- * Stability: Stable
- */
-
/**
* SecretSchemaFlags:
* @SECRET_SCHEMA_NONE: no flags for the schema
@@ -161,12 +85,12 @@ G_DEFINE_BOXED_TYPE (SecretSchemaAttribute, secret_schema_attribute,
* schemas are used for interoperability between various services storing the
* same types of items.
*
- * Each schema has an @name like "org.gnome.keyring.NetworkPassword", and
+ * Each schema has an @name like `org.gnome.keyring.NetworkPassword`, and
* defines a set of attributes names, and types (string, integer, boolean) for
* those attributes.
*
* Each key in the @attributes table should be a attribute name strings, and
- * the values in the table should be integers from the #SecretSchemaAttributeType
+ * the values in the table should be integers from the [enum@SchemaAttributeType]
* enumeration, representing the attribute type for each attribute name.
*
* Normally when looking up passwords only those with matching schema names are
@@ -177,7 +101,7 @@ G_DEFINE_BOXED_TYPE (SecretSchemaAttribute, secret_schema_attribute,
* don't store the schema name.
*
* Returns: (transfer full): the new schema, which should be unreferenced with
- * secret_schema_unref() when done
+ * [method@Schema.unref] when done
*/
SecretSchema *
secret_schema_newv (const gchar *name,
@@ -244,13 +168,13 @@ secret_schema_newv (const gchar *name,
* schemas are used for interoperability between various services storing the
* same types of items.
*
- * Each schema has an @name like "org.gnome.keyring.NetworkPassword", and
+ * Each schema has an @name like `org.gnome.keyring.NetworkPassword`, and
* defines a set of attributes names, and types (string, integer, boolean) for
* those attributes.
*
* The variable argument list should contain pairs of a) The attribute name as
* a null-terminated string, followed by b) integers from the
- * #SecretSchemaAttributeType enumeration, representing the attribute type for
+ * [enum@SchemaAttributeType] enumeration, representing the attribute type for
* each attribute name. The list of attributes should be terminated with a %NULL.
*
* Normally when looking up passwords only those with matching schema names are
@@ -261,7 +185,7 @@ secret_schema_newv (const gchar *name,
* don't store the schema name.
*
* Returns: (transfer full): the new schema, which should be unreferenced with
- * secret_schema_unref() when done
+ * [method@Schema.unref] when done
*/
SecretSchema *
secret_schema_new (const gchar *name,
@@ -304,7 +228,7 @@ secret_schema_new (const gchar *name,
* allocated, then this function will copy the schema.
*
* Returns: (transfer full): the referenced schema, which should be later
- * unreferenced with secret_schema_unref()
+ * unreferenced with [method@Schema.unref]
*/
SecretSchema *
secret_schema_ref (SecretSchema *schema)
diff --git a/libsecret/secret-schemas.c b/libsecret/secret-schemas.c
index f07a2ac..cc51a6d 100644
--- a/libsecret/secret-schemas.c
+++ b/libsecret/secret-schemas.c
@@ -17,18 +17,6 @@
#include "secret-schema.h"
#include "secret-schemas.h"
-/**
- * SECRET_SCHEMA_NOTE: (skip)
- *
- * A predefined schema for personal passwords stored by the user in the
- * password manager. This schema has no attributes, and the items are not
- * meant to be used automatically by applications.
- *
- * When used to search for items using this schema, it will only match
- * items that have the same schema. Items stored via libgnome-keyring with the
- * <literal>GNOME_KEYRING_ITEM_NOTE</literal> item type will match.
- */
-
static const SecretSchema note_schema = {
"org.gnome.keyring.Note",
SECRET_SCHEMA_NONE,
@@ -39,37 +27,6 @@ static const SecretSchema note_schema = {
const SecretSchema * SECRET_SCHEMA_NOTE = ¬e_schema;
-/**
- * SECRET_SCHEMA_COMPAT_NETWORK: (skip)
- *
- * A predefined schema that is compatible with items stored via the
- * libgnome-keyring 'network password' functions. This is meant to be used by
- * applications migrating from libgnome-keyring which stored their secrets as
- * 'network passwords'. It is not recommended that new code use this schema.
- *
- * When used to search for items using this schema, it will only match
- * items that have the same schema. Items stored via libgnome-keyring with the
- * <literal>GNOME_KEYRING_ITEM_NETWORK_PASSWORD</literal> item type will match.
- *
- * The following attributes exist in the schema:
- * <variablelist><title>Attributes:</title>
- * <varlistentry><term><literal>user</literal>:</term>
- * <listitem><para>The user name (string).</para></listitem></varlistentry>
- * <varlistentry><term><literal>domain</literal>:</term>
- * <listitem><para>The login domain or realm (string).</para></listitem></varlistentry>
- * <varlistentry><term><literal>object</literal>:</term>
- * <listitem><para>The object or path (string).</para></listitem></varlistentry>
- * <varlistentry><term><literal>protocol</literal>:</term>
- * <listitem><para>The protocol (a string like 'http').</para></listitem></varlistentry>
- * <varlistentry><term><literal>port</literal>:</term>
- * <listitem><para>The network port (integer).</para></listitem></varlistentry>
- * <varlistentry><term><literal>server</literal>:</term>
- * <listitem><para>The hostname or server (string).</para></listitem></varlistentry>
- * <varlistentry><term><literal>authtype</literal>:</term>
- * <listitem><para>The authentication type (string).</para></listitem></varlistentry>
- * </variablelist>
- */
-
static const SecretSchema network_schema = {
"org.gnome.keyring.NetworkPassword",
SECRET_SCHEMA_NONE,
@@ -97,6 +54,7 @@ const SecretSchema * SECRET_SCHEMA_COMPAT_NETWORK = &network_schema;
* language bindings cannot, and must use this accessor.
*
* Returns: (transfer none): schema type
+ *
* Since: 0.18.6
*/
const SecretSchema *
diff --git a/libsecret/secret-schemas.h b/libsecret/secret-schemas.h
index c78a001..c61ee97 100644
--- a/libsecret/secret-schemas.h
+++ b/libsecret/secret-schemas.h
@@ -39,12 +39,67 @@ extern const SecretSchema * SECRET_SCHEMA_COMPAT_NETWORK;
/**
* SecretSchemaType:
- * @SECRET_SCHEMA_TYPE_NOTE: Personal passwords; see %SECRET_SCHEMA_NOTE
+ * @SECRET_SCHEMA_TYPE_NOTE: Personal passwords
* @SECRET_SCHEMA_TYPE_COMPAT_NETWORK: Network passwords from older
- * libgnome-keyring storage; see %SECRET_SCHEMA_COMPAT_NETWORK
+ * libgnome-keyring storage
*
* Different types of schemas for storing secrets, intended for use with
- * secret_get_schema().
+ * [func@get_schema].
+ *
+ * ## @SECRET_SCHEMA_NOTE
+ *
+ * A predefined schema for personal passwords stored by the user in the
+ * password manager. This schema has no attributes, and the items are not
+ * meant to be used automatically by applications.
+ *
+ * When used to search for items using this schema, it will only match
+ * items that have the same schema. Items stored via libgnome-keyring with the
+ * `GNOME_KEYRING_ITEM_NOTE` item type will match.
+ *
+ * ## @SECRET_SCHEMA_COMPAT_NETWORK
+ *
+ * A predefined schema that is compatible with items stored via the
+ * libgnome-keyring 'network password' functions. This is meant to be used by
+ * applications migrating from libgnome-keyring which stored their secrets as
+ * 'network passwords'. It is not recommended that new code use this schema.
+ *
+ * When used to search for items using this schema, it will only match
+ * items that have the same schema. Items stored via libgnome-keyring with the
+ * `GNOME_KEYRING_ITEM_NETWORK_PASSWORD` item type will match.
+ *
+ * The following attributes exist in the schema:
+ *
+ * ### Attributes:
+ *
+ * <table>
+ * <tr>
+ * <td><tt>user</tt>:</td>
+ * <td>The user name (string).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>domain</tt>:</td>
+ * <td>The login domain or realm (string).</td></tr>
+ * <tr>
+ * <td><tt>object</tt>:</td>
+ * <td>The object or path (string).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>protocol</tt>:</td>
+ * <td>The protocol (a string like 'http').</td>
+ * </tr>
+ * <tr>
+ * <td><tt>port</tt>:</td>
+ * <td>The network port (integer).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>server</tt>:</td>
+ * <td>The hostname or server (string).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>authtype</tt>:</td>
+ * <td>The authentication type (string).</td>
+ * </tr>
+ * </table>
*
* Since: 0.18.6
*/
diff --git a/libsecret/secret-service.c b/libsecret/secret-service.c
index 455248c..bdb8bd7 100644
--- a/libsecret/secret-service.c
+++ b/libsecret/secret-service.c
@@ -30,59 +30,54 @@
#include "egg/egg-secure-memory.h"
/**
- * SECTION:secret-service
- * @title: SecretService
- * @short_description: the Secret Service
+ * SecretService:
+ *
+ * A proxy object representing the Secret Service.
*
* A #SecretService object represents the Secret Service implementation which
* runs as a D-Bus service.
*
* Normally a single #SecretService object can be shared between multiple
- * callers. The secret_service_get() method is used to access this #SecretService
+ * callers. The [func Service get] method is used to access this #SecretService
* object. If a new independent #SecretService object is required, use
- * secret_service_open().
+ * [func Service open].
*
* In order to securely transfer secrets to the Sercret Service, a session
* is established. This session can be established while initializing a
* #SecretService object by passing the %SECRET_SERVICE_OPEN_SESSION flag
- * to the secret_service_get() or secret_service_open() functions. In order to
+ * to the [func Service get] or [func Service open] functions. In order to
* establish a session on an already existing #SecretService, use the
- * secret_service_ensure_session() function.
+ * [method@Service.ensure_session] function.
*
- * To search for items, use the secret_service_search() method.
+ * To search for items, use the [method@Service.search] method.
*
* Multiple collections can exist in the Secret Service, each of which contains
- * secret items. In order to instantiate #SecretCollection objects which
+ * secret items. In order to instantiate [class@Collection] objects which
* represent those collections while initializing a #SecretService then pass
- * the %SECRET_SERVICE_LOAD_COLLECTIONS flag to the secret_service_get() or
- * secret_service_open() functions. In order to establish a session on an already
- * existing #SecretService, use the secret_service_load_collections() function.
- * To access the list of collections use secret_service_get_collections().
+ * the %SECRET_SERVICE_LOAD_COLLECTIONS flag to the [func Service get] or
+ * [func Service open] functions. In order to establish a session on an already
+ * existing #SecretService, use the [method@Service.load_collections] function.
+ * To access the list of collections use [method@Service.get_collections].
*
* Certain actions on the Secret Service require user prompting to complete,
* such as creating a collection, or unlocking a collection. When such a prompt
- * is necessary, then a #SecretPrompt object is created by this library, and
- * passed to the secret_service_prompt() method. In this way it is handled
+ * is necessary, then a [class@Prompt] object is created by this library, and
+ * passed to the [method@Service.prompt] method. In this way it is handled
* automatically.
*
- * In order to customize prompt handling, override the <literal>prompt_async</literal>
- * and <literal>prompt_finish</literal> virtual methods of the #SecretService class.
+ * In order to customize prompt handling, override the
+ * [vfunc@Service.prompt_async] and [vfunc@Service.prompt_finish] virtual
+ * methods of the #SecretService class.
*
* Stability: Stable
*/
-/**
- * SecretService:
- *
- * A proxy object representing the Secret Service.
- */
-
/**
* SecretServiceClass:
* @parent_class: the parent class
- * @collection_gtype: the #GType of the #SecretCollection objects instantiated
+ * @collection_gtype: the [alias GLib Type] of the [class@Collection] objects instantiated
* by the #SecretService proxy
- * @item_gtype: the #GType of the #SecretItem objects instantiated by the
+ * @item_gtype: the [alias GLib Type] of the [class@Item] objects instantiated by the
* #SecretService proxy
* @prompt_async: called to perform asynchronous prompting when necessary
* @prompt_finish: called to complete an asynchronous prompt operation
@@ -104,7 +99,7 @@
* #SecretService
*
* Flags which determine which parts of the #SecretService proxy are initialized
- * during a secret_service_get() or secret_service_open() operation.
+ * during a [func Service get] or [func Service open] operation.
*/
EGG_SECURE_DEFINE_GLIB_GLOBALS ();
@@ -587,15 +582,15 @@ secret_service_class_init (SecretServiceClass *klass)
g_object_class_override_property (object_class, PROP_FLAGS, "flags");
/**
- * SecretService:collections:
+ * SecretService:collections: (attributes org.gtk.Property.get=secret_service_get_collections)
*
- * A list of #SecretCollection objects representing the collections in
+ * A list of [class@Collection] objects representing the collections in
* the Secret Service. This list may be %NULL if the collections have
* not been loaded.
*
* To load the collections, specify the %SECRET_SERVICE_LOAD_COLLECTIONS
- * initialization flag when calling the secret_service_get() or
- * secret_service_open() functions. Or call the secret_service_load_collections()
+ * initialization flag when calling the [func Service get] or
+ * [func Service open] functions. Or call the [method@Service.load_collections]
* method.
*/
g_object_class_install_property (object_class, PROP_COLLECTIONS,
@@ -1002,7 +997,7 @@ secret_service_get (SecretServiceFlags flags,
* Secret Service.
*
* Returns: (transfer full): a new reference to a #SecretService proxy, which
- * should be released with g_object_unref().
+ * should be released with [method@GObject.Object.unref].
*/
SecretService *
secret_service_get_finish (GAsyncResult *result,
@@ -1058,7 +1053,7 @@ secret_service_get_finish (GAsyncResult *result,
* threads.
*
* Returns: (transfer full): a new reference to a #SecretService proxy, which
- * should be released with g_object_unref().
+ * should be released with [method@GObject.Object.unref].
*/
SecretService *
secret_service_get_sync (SecretServiceFlags flags,
@@ -1090,8 +1085,8 @@ secret_service_get_sync (SecretServiceFlags flags,
/**
* secret_service_disconnect:
*
- * Disconnect the default #SecretService proxy returned by secret_service_get()
- * and secret_service_get_sync().
+ * Disconnect the default #SecretService proxy returned by [func Service get]
+ * and [func@Service.get_sync].
*
* It is not necessary to call this function, but you may choose to do so at
* program exit. It is useful for testing that memory is not leaked.
@@ -1117,7 +1112,7 @@ secret_service_disconnect (void)
*
* Create a new #SecretService proxy for the Secret Service.
*
- * This function is rarely used, see secret_service_get() instead.
+ * This function is rarely used, see [func Service get] instead.
*
* The @service_gtype argument should be set to %SECRET_TYPE_SERVICE or a the type
* of a derived class.
@@ -1155,7 +1150,7 @@ secret_service_open (GType service_gtype,
* the Secret Service.
*
* Returns: (transfer full): a new reference to a #SecretService proxy, which
- * should be released with g_object_unref().
+ * should be released with [method@GObject.Object.unref].
*/
SecretService *
secret_service_open_finish (GAsyncResult *result,
@@ -1188,7 +1183,7 @@ secret_service_open_finish (GAsyncResult *result,
*
* Create a new #SecretService proxy for the Secret Service.
*
- * This function is rarely used, see secret_service_get_sync() instead.
+ * This function is rarely used, see [func@Service.get_sync] instead.
*
* The @service_gtype argument should be set to %SECRET_TYPE_SERVICE or a the
* type of a derived class.
@@ -1202,7 +1197,7 @@ secret_service_open_finish (GAsyncResult *result,
* threads.
*
* Returns: (transfer full): a new reference to a #SecretService proxy, which
- * should be released with g_object_unref().
+ * should be released with [method@GObject.Object.unref].
*/
SecretService *
secret_service_open_sync (GType service_gtype,
@@ -1226,7 +1221,7 @@ secret_service_open_sync (GType service_gtype,
* Get the flags representing what features of the #SecretService proxy
* have been initialized.
*
- * Use secret_service_ensure_session() or secret_service_load_collections()
+ * Use [method@Service.ensure_session] or [method@Service.load_collections]
* to initialize further features and change the flags.
*
* Returns: the flags for features initialized
@@ -1251,18 +1246,18 @@ secret_service_get_flags (SecretService *self)
}
/**
- * secret_service_get_collections:
+ * secret_service_get_collections: (attributes org.gtk.Method.get_property=collections)
* @self: the secret service proxy
*
- * Get a list of #SecretCollection objects representing all the collections
+ * Get a list of [class@Collection] objects representing all the collections
* in the secret service.
*
* If the %SECRET_SERVICE_LOAD_COLLECTIONS flag was not specified when
* initializing #SecretService proxy object, then this method will return
- * %NULL. Use secret_service_load_collections() to load the collections.
+ * %NULL. Use [method@Service.load_collections] to load the collections.
*
* Returns: (transfer full) (element-type Secret.Collection) (nullable): a
- * list of the collections in the secret service
+ * list of the collections in the secret service
*/
GList *
secret_service_get_collections (SecretService *self)
@@ -1364,7 +1359,7 @@ _secret_service_take_session (SecretService *self,
* secret service proxy and the Secret Service itself.
*
* This will be %NULL if no session has been established. Use
- * secret_service_ensure_session() to establish a session.
+ * [method@Service.ensure_session] to establish a session.
*
* Returns: (nullable): a string representing the algorithms for transferring
* secrets
@@ -1394,10 +1389,10 @@ secret_service_get_session_algorithms (SecretService *self)
* secrets between this secret service proxy and the Secret Service itself.
*
* This will be %NULL if no session has been established. Use
- * secret_service_ensure_session() to establish a session.
+ * [method@Service.ensure_session] to establish a session.
*
* Returns: (nullable): a string representing the D-Bus object path of the
- * session
+ * session
*/
const gchar *
secret_service_get_session_dbus_path (SecretService *self)
@@ -1428,7 +1423,7 @@ secret_service_get_session_dbus_path (SecretService *self)
*
* It is not normally necessary to call this method, as the session is
* established as necessary. You can also pass the %SECRET_SERVICE_OPEN_SESSION
- * to secret_service_get() in order to ensure that a session has been established
+ * to [func Service get] in order to ensure that a session has been established
* by the time you get the #SecretService proxy.
*
* This method will return immediately and complete asynchronously.
@@ -1500,7 +1495,7 @@ secret_service_ensure_session_finish (SecretService *self,
*
* It is not normally necessary to call this method, as the session is
* established as necessary. You can also pass the %SECRET_SERVICE_OPEN_SESSION
- * to secret_service_get_sync() in order to ensure that a session has been
+ * to [func@Service.get_sync] in order to ensure that a session has been
* established by the time you get the #SecretService proxy.
*
* This method may block indefinitely and should not be used in user interface
@@ -1638,10 +1633,10 @@ on_ensure_collection (GObject *source,
*
* Ensure that the #SecretService proxy has loaded all the collections present
* in the Secret Service. This affects the result of
- * secret_service_get_collections().
+ * [method@Service.get_collections].
*
* You can also pass the %SECRET_SERVICE_LOAD_COLLECTIONS to
- * secret_service_get_sync() in order to ensure that the collections have been
+ * [func@Service.get_sync] in order to ensure that the collections have been
* loaded by the time you get the #SecretService proxy.
*
* This method will return immediately and complete asynchronously.
@@ -1735,10 +1730,10 @@ secret_service_load_collections_finish (SecretService *self,
*
* Ensure that the #SecretService proxy has loaded all the collections present
* in the Secret Service. This affects the result of
- * secret_service_get_collections().
+ * [method@Service.get_collections].
*
* You can also pass the %SECRET_SERVICE_LOAD_COLLECTIONS to
- * secret_service_get_sync() in order to ensure that the collections have been
+ * [func@Service.get_sync] in order to ensure that the collections have been
* loaded by the time you get the #SecretService proxy.
*
* This method may block indefinitely and should not be used in user interface
@@ -1801,7 +1796,7 @@ secret_service_load_collections_sync (SecretService *self,
* @return_type: the variant type of the prompt result
* @error: location to place an error on failure
*
- * Perform prompting for a #SecretPrompt.
+ * Perform prompting for a [class@Prompt].
*
* Runs a prompt and performs the prompting. Returns a variant result if the
* prompt was completed and not dismissed. The type of result depends on the
@@ -1811,12 +1806,12 @@ secret_service_load_collections_sync (SecretService *self,
* This function is called by other parts of this library to handle prompts
* for the various actions that can require prompting.
*
- * Override the #SecretServiceClass <literal>prompt_sync</literal> virtual method
+ * Override the #SecretServiceClass [vfunc@Service.prompt_sync] virtual method
* to change the behavior of the prompting. The default behavior is to simply
- * run secret_prompt_perform_sync() on the prompt with a %NULL <literal>window_id</literal>.
+ * run [method@Prompt.perform_sync] on the prompt with a %NULL `window_id`.
*
* Returns: (transfer full): %NULL if the prompt was dismissed or an error occurred,
- * a variant result if the prompt was successful
+ * a variant result if the prompt was successful
*/
GVariant *
secret_service_prompt_sync (SecretService *self,
@@ -1847,14 +1842,14 @@ secret_service_prompt_sync (SecretService *self,
* @callback: called when the operation completes
* @user_data: data to be passed to the callback
*
- * Perform prompting for a #SecretPrompt.
+ * Perform prompting for a [class@Prompt].
*
* This function is called by other parts of this library to handle prompts
* for the various actions that can require prompting.
*
- * Override the #SecretServiceClass <literal>prompt_async</literal> virtual method
+ * Override the #SecretServiceClass [vfunc@Service.prompt_async] virtual method
* to change the behavior of the prompting. The default behavior is to simply
- * run secret_prompt_perform() on the prompt.
+ * run [method@Prompt.perform] on the prompt.
*/
void
secret_service_prompt (SecretService *self,
@@ -1882,14 +1877,14 @@ secret_service_prompt (SecretService *self,
* @result: the asynchronous result passed to the callback
* @error: location to place an error on failure
*
- * Complete asynchronous operation to perform prompting for a #SecretPrompt.
+ * Complete asynchronous operation to perform prompting for a [class@Prompt].
*
* Returns a variant result if the prompt was completed and not dismissed. The
* type of result depends on the action the prompt is completing, and is defined
* in the Secret Service DBus API specification.
*
* Returns: (transfer full): %NULL if the prompt was dismissed or an error occurred,
- * a variant result if the prompt was successful
+ * a variant result if the prompt was successful
*/
GVariant *
secret_service_prompt_finish (SecretService *self,
@@ -1913,7 +1908,7 @@ secret_service_prompt_finish (SecretService *self,
* @self: the secret service
*
* Get the GObject type for collections instantiated by this service.
- * This will always be either #SecretCollection or derived from it.
+ * This will always be either [class@Collection] or derived from it.
*
* Returns: the gobject type for collections
*/
@@ -1941,7 +1936,7 @@ secret_service_get_collection_gtype (SecretService *self)
* @self: the service
*
* Get the GObject type for items instantiated by this service.
- * This will always be either #SecretItem or derived from it.
+ * This will always be either [class@Item] or derived from it.
*
* Returns: the gobject type for items
*/
diff --git a/libsecret/secret-util.c b/libsecret/secret-util.c
index f011728..3b601bc 100644
--- a/libsecret/secret-util.c
+++ b/libsecret/secret-util.c
@@ -20,9 +20,9 @@
#include <string.h>
/**
- * SECTION:secret-error
- * @title: SecretError
- * @short_description: libsecret errors
+ * SecretError
+ *
+ * libsecret errors
*
* Various errors reported by the libsecret library. No error returned from
* the libsecret API is suitable for direct display to the user. It is up
diff --git a/libsecret/secret-value.c b/libsecret/secret-value.c
index d58feb3..19a2131 100644
--- a/libsecret/secret-value.c
+++ b/libsecret/secret-value.c
@@ -22,33 +22,27 @@
#include <string.h>
/**
- * SECTION:secret-value
- * @title: SecretValue
- * @short_description: a value containing a secret
+ * SecretValue:
+ *
+ * A value containing a secret
*
* A #SecretValue contains a password or other secret value.
*
- * Use secret_value_get() to get the actual secret data, such as a password.
+ * Use [method Value get] to get the actual secret data, such as a password.
* The secret data is not necessarily null-terminated, unless the content type
* is "text/plain".
*
- * Each #SecretValue has a content type. For passwords, this is "text/plain".
- * Use secret_value_get_content_type() to look at the content type.
+ * Each #SecretValue has a content type. For passwords, this is `text/plain`.
+ * Use [method@Value.get_content_type] to look at the content type.
*
* #SecretValue is reference counted and immutable. The secret data is only
- * freed when all references have been released via secret_value_unref().
+ * freed when all references have been released via [method@Value.unref].
*
* Stability: Stable
*/
static gboolean is_password_value (SecretValue *value);
-/**
- * SecretValue:
- *
- * A secret value, like a password or other binary secret.
- */
-
EGG_SECURE_DECLARE (secret_value);
struct _SecretValue {
@@ -153,8 +147,8 @@ secret_value_new_full (gchar *secret,
* @length: the length of the secret
*
* Get the secret data in the #SecretValue. The value is not necessarily
- * null-terminated unless it was created with secret_value_new() or a
- * null-terminated string was passed to secret_value_new_full().
+ * null-terminated unless it was created with [ctor Value new] or a
+ * null-terminated string was passed to [ctor@Value.new_full].
*
* Returns: (array length=length) (element-type guint8): the secret data
*/
@@ -173,7 +167,7 @@ secret_value_get (SecretValue *value,
* @value: the value
*
* Get the secret data in the #SecretValue if it contains a textual
- * value. The content type must be <literal>text/plain</literal>.
+ * value. The content type must be `text/plain`.
*
* Returns: (nullable): the content type
*/
@@ -193,7 +187,7 @@ secret_value_get_text (SecretValue *value)
* @value: the value
*
* Get the content type of the secret value, such as
- * <literal>text/plain</literal>.
+ * `text/plain`.
*
* Returns: the content type
*/
@@ -209,7 +203,7 @@ secret_value_get_content_type (SecretValue *value)
* @value: value to reference
*
* Add another reference to the #SecretValue. For each reference
- * secret_value_unref() should be called to unreference the value.
+ * [method@Value.unref] should be called to unreference the value.
*
* Returns: (transfer full): the value
*/
@@ -265,7 +259,7 @@ is_password_value (SecretValue *value)
* #SecretValue as nonpageable memory.
*
* Returns: (transfer full): a new password string stored in nonpageable memory
- * which must be freed with secret_password_free() when done
+ * which must be freed with [func@password_free] when done
*
* Since: 0.19.0
*/
diff --git a/libsecret/secret-version.h.in b/libsecret/secret-version.h.in
index 4c89d7f..8dae6a5 100644
--- a/libsecret/secret-version.h.in
+++ b/libsecret/secret-version.h.in
@@ -19,14 +19,6 @@
#ifndef __SECRET_VERSION_H__
#define __SECRET_VERSION_H__
-/**
- * SECTION:secret-version
- * @short_description: Variables and macros to check the libsecret version
- * @title: Version Information
- *
- * Stability: Stable
- */
-
/**
* SECRET_MAJOR_VERSION:
*
diff --git a/meson_options.txt b/meson_options.txt
index 24c8f02..d6a6060 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -2,7 +2,7 @@ option('manpage', type: 'boolean', value: true, description: 'Build man pages')
option('gcrypt', type: 'boolean', value: true, description: 'With gcrypt and transport encryption')
option('debugging', type: 'boolean', value: false, description: 'Turn debugging on/off')
option('vapi', type: 'boolean', value: true, description: 'Create VAPI file.')
-option('gtk_doc', type: 'boolean', value: true, description: 'Build reference documentation using gtk-doc')
+option('gtk_doc', type: 'boolean', value: true, description: 'Build reference documentation using gi-docgen')
option('introspection', type: 'boolean', value: true, description: 'Create GIR file.')
option('bashcompdir', type: 'string', value: '', description: 'Override default location for bash completion
files')
option('bash_completion', type: 'feature', value: 'auto', description: 'Install bash completion files')
diff --git a/subprojects/gi-docgen.wrap b/subprojects/gi-docgen.wrap
new file mode 100644
index 0000000..98cd921
--- /dev/null
+++ b/subprojects/gi-docgen.wrap
@@ -0,0 +1,6 @@
+[wrap-git]
+directory=gi-docgen
+url=https://gitlab.gnome.org/GNOME/gi-docgen.git
+push-url=ssh://git gitlab gnome org:GNOME/gi-docgen.git
+revision=main
+depth=1
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]