Compare commits

...

29 Commits

Author SHA1 Message Date
Emmanuele Bassi
e4c863a51d Merge branch 'protected-type' into 'main'
WIP: Add a G_DECLARE macro for "protected" types

See merge request GNOME/glib!1288
2024-07-15 21:24:56 +00:00
Philip Withnall
d3cb9d638d Merge branch 'traverse-diagrams' into 'main'
docs(GNode): Traversal diagrams, color & dark-mode

See merge request GNOME/glib!4157
2024-07-15 15:58:45 +00:00
Philip Withnall
a931a75c4f docs(GNode): Traversal diagrams, color & dark-mode
* Create a dark-mode variant of each traversal diagram, with the
  traversal path colorized `--primary` blue, instead of the original
  black.
* Apply the same colorizations to the light-mode diagrams, but
  using the light-theme `--primary` blue.
* Add SPDX license/copyright comments to all eight SVG files.
* Add new files to documentation configs in `glib.toml.in`.
* Update documentation comment in `gnode.c` to embed both color
  variants via picture tags, instead of markdown image embeds.
* Add alt text to all four images.
* Add additional blank lines to documentation comment, so that
  a. First item in bulleted list does not get folded into
     preceding intro paragraph
  b. Intro paragraph and diagrams are not part of first paragraph
     in documentation. (This also gets them out of the top-level
     table-of-contents/index list, where they previously appeared
     in full.)
* (Accidental change I didn't realize I was making): Convert line
  endings in breadth-first diagram from CRLF to LF.
2024-07-15 15:58:45 +00:00
Philip Withnall
79c57b5b80 Merge branch 'gbsneto/doc-fixes-pt1' into 'main'
Port some GIO files to gi-docgen

See merge request GNOME/glib!4113
2024-07-11 21:01:39 +00:00
Georges Basile Stavracas Neto
a84c67da71 gio/appinfo: Directly link GdkAppLaunchContext
We can only use the [class@Foo.Bar] syntax for identifiers under
namespaces included by the current namespace. Naturally, we cannot
include the GDK namespace.

Use a direct link for this instead.
2024-07-11 16:23:06 +01:00
Georges Basile Stavracas Neto
ecc9904996 gio/applaunchcontext: Port docs to gi-docgen
This one is a little more self-contained, even though the class name
doesn't match the file it is in.
2024-07-11 15:33:41 +01:00
Georges Basile Stavracas Neto
b8db83940b gio/appinfo: Port docs to gi-docgen
Adjust all docs to use the gi-docgen referencing syntax, reindent
some of the comments, and add missing annotations to some async
methods.

The error arguments are not necessary with gi-docgen so they're
removed.

Confusingly enough, the docks for GAppInfo is spread between two
files.
2024-07-11 15:33:41 +01:00
Georges Basile Stavracas Neto
110e76a140 gio/actionmap: Port docs to gi-docgen 2024-07-11 15:33:41 +01:00
Georges Basile Stavracas Neto
3bd477b454 gio/actiongroupexporter: Port docs to gi-docgen 2024-07-11 15:33:41 +01:00
Philip Withnall
1b7336583c Merge branch 'darwin-rtld_local-fix' into 'main'
gmodule-dl: fix G_MODULE_BIND_LOCAL on Darwin

See merge request GNOME/glib!4154
2024-07-11 14:11:19 +00:00
Randy Eckenrode
3ab13ddc4b
gmodule: skip local-binding test on Windows 2024-07-11 00:47:42 -04:00
Randy Eckenrode
73d913519d
gmodule-dl: fix G_MODULE_BIND_LOCAL on Darwin
According to POSIX, the default behavior of `dlopen` is unspecified when
its flags include neither `RTLD_LOCAL` nor `RTLD_GLOBAL`. Consequently,
different platforms have different default behavior.

The default on Linux is `RTLD_LOCAL`, but the default on Darwin is
`RTLD_GLOBAL`. By passing `0` to `dlopen`, this results in the opposite
of the caller's intent when using `G_MODULE_BIND_LOCAL`.

Passing `RTLD_LOCAL` for `G_MODULE_BIND_LOCAL` allows the correct
behavior to be observed regardless of the platform's default.
2024-07-10 20:00:22 -04:00
Michael Catanzaro
4a73fbda8b Merge branch 'wip/pwithnall/resolver-parsing-bsd-fix' into 'main'
tests: Fix compilation of resolver-parsing test on FreeBSD

See merge request GNOME/glib!4152
2024-07-09 23:07:02 +00:00
Philip Withnall
fd2295c545 Merge branch 'port-gfilteroutputstream.c-comments' into 'main'
gfilteroutputstream.c: Port all doc comments to gi-docgen

See merge request GNOME/glib!4145
2024-07-09 22:54:47 +00:00
Philip Withnall
8bf5873272 Merge branch 'bilelmoussaoui-main-patch-13638' into 'main'
gi: Add missing Since annotation

See merge request GNOME/glib!4144
2024-07-09 22:08:49 +00:00
Philip Withnall
dfe6d0f8ce Merge branch 'ebassi/docs-location' into 'main'
docs: Add source location URL

See merge request GNOME/glib!4142
2024-07-09 21:06:02 +00:00
Philip Withnall
929f2ae06b
tests: Fix compilation of resolver-parsing test on FreeBSD
This fixes commit cdcb179808.

`dn_comp()` is needed to build fake DNS records for most of the tests in
this file. The new ownership test is no exception.

See https://gitlab.gnome.org/GNOME/glib/-/jobs/4058481

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-07-09 21:41:03 +01:00
Philip Withnall
ef57fa8a29 Merge branch 'port-gbufferedinputstream.c-comments' into 'main'
gbufferedinputstream: Port all doc comments to gi-docgen

See merge request GNOME/glib!4146
2024-07-09 19:36:55 +00:00
Philip Withnall
a7da10fea8 Merge branch 'asan-cygwin-build-fix' into 'main'
glib-private: fix build under Cygwin

See merge request GNOME/glib!4150
2024-07-09 19:25:31 +00:00
Emmanuele Bassi
a807604ef6 docs: Add source location URL
If the base URL for source location is set, gi-docgen will automatically
generate a link to the location of declarations and doc blocks in the
source.
2024-07-09 20:17:09 +01:00
Bilal Elmoussaoui
a31479316d gi: Add missing Since annotation
Fixes b32e1b63ee
2024-07-09 20:16:20 +01:00
Philip Withnall
fc01879341 Merge branch 'wip/pwithnall/macos-ci-fix' into 'main'
tests: Make an error check less specific in gsocketclient-slow

See merge request GNOME/glib!4149
2024-07-09 19:13:26 +00:00
Christoph Reiter
a49815926c glib-private: fix build under Cygwin
fb58d55187 added weak linking for ASAN,
skipping it for MinGW because weak symbols are broken there.
The same is true for Cygwin, so skip things there too.

This fixes the following build error under MSYS2:

/usr/lib/gcc/x86_64-pc-msys/13.3.0/../../../../x86_64-pc-msys/bin/ld:
    glib/msys-glib-2.0-0.dll.p/gutils.c.o:gutils.c:
        (.rdata$.refptr.__lsan_enable[.refptr.__lsan_enable]+0x0): undefined reference to `__lsan_enable'
2024-07-09 20:34:02 +02:00
Sudhanshu Tiwari
2e7e51be56 gbufferedinputstream: Port all doc comments to gi-docgen 2024-07-09 18:21:42 +01:00
Philip Withnall
325a9af5e0 Merge branch 'port-gbufferedoutputstream.c-comments' into 'main'
gbufferedoutputstream.c: Port doc comments to gi-docgen

See merge request GNOME/glib!4148
2024-07-09 17:01:46 +00:00
Philip Withnall
8d0bf4ed39
tests: Make an error check less specific in gsocketclient-slow
On Linux the error will be `G_IO_ERROR_CONNECTION_REFUSED`, but on macOS
it will be `G_IO_ERROR_TIMED_OUT`. Both errors seem reasonable to me, so
let’s not specifically require one of them.

See: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/4104#note_2161451

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-07-09 17:40:16 +01:00
Sudhanshu Tiwari
c48fd73189 gbufferedoutputstream.c: Port doc comments to gi-docgen 2024-07-09 18:03:03 +05:30
Sudhanshu Tiwari
a8b52cd9d6 gfilteroutputstream.c: Port all doc comments to gi-docgen 2024-07-09 17:30:32 +05:30
Emmanuele Bassi
8581e69e4f Add a G_DECLARE macro for "protected" types
Certain libraries want to provide types that are derivable for internal
users, but final for any external consumer of the API. Other languages
use the term "protected" to refer to this kind of type visibility
attribute.

Since we're providing macros to declare derivable and final types, we
should also provide a macro for declaring protected types.

The mechanism is the same as the other G_DECLARE macros; protected
types:

 - define an opaque type for the instance, like G_DEFINE_FINAL_TYPE
 - define an opaque type for the class
 - define cast and type check functions for instance pointers, for
 public consumers, and cast and type check functions for class pointers,
 for internal consumers
 - omit an accessor for retrieving the class structure from the instance
 structure, as it would be pointless to do so
2019-12-13 16:34:55 +00:00
32 changed files with 3191 additions and 563 deletions

View File

@ -41,6 +41,9 @@ name = "basic"
show_index_summary = true
show_class_hierarchy = true
[source-location]
base_url = "https://gitlab.gnome.org/GNOME/glib/-/blob/main/"
[extra]
urlmap_file = "../urlmap.js"
# The same order will be used when generating the index

View File

@ -41,6 +41,9 @@ name = "basic"
show_index_summary = true
show_class_hierarchy = true
[source-location]
base_url = "https://gitlab.gnome.org/GNOME/glib/-/blob/main/"
[extra]
urlmap_file = "../urlmap.js"
# The same order will be used when generating the index

View File

@ -36,6 +36,9 @@ name = "basic"
show_index_summary = true
show_class_hierarchy = true
[source-location]
base_url = "https://gitlab.gnome.org/GNOME/glib/-/blob/main/"
[extra]
urlmap_file = "../urlmap.js"
# The same order will be used when generating the index

View File

@ -41,6 +41,9 @@ name = "basic"
show_index_summary = true
show_class_hierarchy = true
[source-location]
base_url = "https://gitlab.gnome.org/GNOME/glib/-/blob/main/"
[extra]
urlmap_file = "../urlmap.js"
# The same order will be used when generating the index

View File

@ -0,0 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
SPDX-License-Identifier: CC0-1.0
SPDX-FileCopyrightText: Rory O'Kane at Wikimedia Commons
<https://commons.wikimedia.org/wiki/File:Sorted_binary_tree_breadth-first_traversal.svg>
SPDX-FileCopyrightText: 2024 Frank Dana
-->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="266px" height="212px" viewBox="0 0 266 212" enable-background="new 0 0 266 212" xml:space="preserve">
<g>
<g>
<line fill="none" stroke="#90c2ff" stroke-width="2" stroke-miterlimit="10" x1="27.23" y1="23.192" x2="29.23" y2="23.192"/>
<line fill="none" stroke="#90c2ff" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="3.9562,3.9562" x1="33.187" y1="23.192" x2="236.932" y2="23.192"/>
<polyline fill="none" stroke="#90c2ff" stroke-width="2" stroke-miterlimit="10" points="238.91,23.192 240.91,23.192
238.97,23.677 "/>
<line fill="none" stroke="#90c2ff" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="3.9907,3.9907" x1="235.099" y1="24.646" x2="27.971" y2="76.427"/>
<polyline fill="none" stroke="#90c2ff" stroke-width="2" stroke-miterlimit="10" points="26.035,76.912 24.095,77.396
26.095,77.396 "/>
<line fill="none" stroke="#90c2ff" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="4.0154,4.0154" x1="30.11" y1="77.396" x2="236.902" y2="77.396"/>
<polyline fill="none" stroke="#90c2ff" stroke-width="2" stroke-miterlimit="10" points="238.91,77.396 240.91,77.396
238.97,77.881 "/>
<line fill="none" stroke="#90c2ff" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="3.9907,3.9907" x1="235.099" y1="78.85" x2="27.971" y2="130.631"/>
<polyline fill="none" stroke="#90c2ff" stroke-width="2" stroke-miterlimit="10" points="26.035,131.114 24.095,131.6
26.095,131.6 "/>
<line fill="none" stroke="#90c2ff" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="4.0154,4.0154" x1="30.11" y1="131.6" x2="236.902" y2="131.6"/>
<polyline fill="none" stroke="#90c2ff" stroke-width="2" stroke-miterlimit="10" points="238.91,131.6 240.91,131.6
238.97,132.085 "/>
<line fill="none" stroke="#90c2ff" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="3.9907,3.9907" x1="235.099" y1="133.053" x2="27.971" y2="184.835"/>
<polyline fill="none" stroke="#90c2ff" stroke-width="2" stroke-miterlimit="10" points="26.035,185.318 24.095,185.804
26.095,185.804 "/>
<line fill="none" stroke="#90c2ff" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="4.0086,4.0086" x1="30.104" y1="185.804" x2="228.53" y2="185.804"/>
<line fill="none" stroke="#90c2ff" stroke-width="2" stroke-miterlimit="10" x1="230.534" y1="185.804" x2="232.534" y2="185.804"/>
<g>
<rect fill="#90c2ff" x="24.095" y="19.892" width="6.602" height="6.602"/>
</g>
<g>
<path fill="#90c2ff" d="M238.569,185.804c-2.84,1.054-6.363,2.852-8.548,4.756l1.721-4.756l-1.721-4.755
C232.206,182.953,235.729,184.751,238.569,185.804z"/>
</g>
</g>
</g>
<g id="graph0">
<title>sorted_binary_tree</title>
<g id="node1">
<title>C</title>
<ellipse fill="#FFFFFF" stroke="#ffffff" cx="60.23" cy="185.804" rx="18.067" ry="18.067"/>
<text transform="matrix(1 0 0 1 55.5435 190.8223)" font-family="'Times-Roman'" font-size="14.0528">C</text>
</g>
<g id="node2">
<title>E</title>
<ellipse fill="#FFFFFF" stroke="#ffffff" cx="132.502" cy="185.804" rx="18.067" ry="18.067"/>
<text transform="matrix(1 0 0 1 128.21 190.8223)" font-family="'Times-Roman'" font-size="14.0528">E</text>
</g>
<g id="node3">
<title>H</title>
<ellipse fill="#FFFFFF" stroke="#ffffff" cx="204.773" cy="185.804" rx="17.064" ry="18.067"/>
<text transform="matrix(1 0 0 1 199.6992 190.8223)" font-family="'Times-Roman'" font-size="14.0528">H</text>
</g>
<g id="node4">
<title>A</title>
<ellipse fill="#FFFFFF" stroke="#ffffff" cx="24.094" cy="131.6" rx="17.064" ry="18.068"/>
<text transform="matrix(1 0 0 1 19.02 136.6191)" font-family="'Times-Roman'" font-size="14.0528">A</text>
</g>
<g id="node5">
<title>D</title>
<ellipse fill="#FFFFFF" stroke="#ffffff" cx="96.366" cy="131.6" rx="17.064" ry="18.068"/>
<text transform="matrix(1 0 0 1 91.292 136.6191)" font-family="'Times-Roman'" font-size="14.0528">D</text>
</g>
<g id="edge6">
<title>D-&gt;C</title>
<path fill="none" stroke="#ffffff" d="M86.328,147.66c-3.011,4.016-7.026,9.034-10.038,14.053"/>
<polygon fill="#ffffff" stroke="#ffffff" points="78.298,164.725 70.268,170.747 73.279,160.709 "/>
</g>
<g id="edge8">
<title>D-&gt;E</title>
<path fill="none" stroke="#ffffff" d="M106.404,147.66c3.011,4.016,7.026,9.034,10.038,14.053"/>
<polygon fill="#ffffff" stroke="#ffffff" points="119.453,160.709 122.464,170.747 114.434,164.725 "/>
</g>
<g id="node6">
<title>I</title>
<ellipse fill="#FFFFFF" stroke="#ffffff" cx="240.909" cy="131.6" rx="18.068" ry="18.068"/>
<text transform="matrix(1 0 0 1 238.5693 136.6191)" font-family="'Times-Roman'" font-size="14.0528">I</text>
</g>
<g id="edge12">
<title>I-&gt;H</title>
<path fill="none" stroke="#ffffff" d="M230.871,146.656c-3.011,5.02-6.021,10.038-10.037,15.057"/>
<polygon fill="#ffffff" stroke="#ffffff" points="223.846,163.721 214.812,169.743 217.822,159.705 "/>
</g>
<g id="node7">
<title>B</title>
<ellipse fill="#FFFFFF" stroke="#ffffff" cx="60.23" cy="77.396" rx="18.068" ry="18.068"/>
<text transform="matrix(1 0 0 1 55.5435 82.415)" font-family="'Times-Roman'" font-size="14.0528">B</text>
</g>
<g id="edge3">
<title>B-&gt;A</title>
<path fill="none" stroke="#ffffff" d="M50.192,92.453c-3.011,5.019-6.022,10.038-10.038,15.057"/>
<polygon fill="#ffffff" stroke="#ffffff" points="43.166,109.518 34.132,115.539 37.144,105.502 "/>
</g>
<g id="edge5">
<title>B-&gt;D</title>
<path fill="none" stroke="#ffffff" d="M70.268,92.453c3.011,5.019,6.022,10.038,10.038,15.057"/>
<polygon fill="#ffffff" stroke="#ffffff" points="83.317,105.502 86.328,115.539 77.294,109.518 "/>
</g>
<g id="node8">
<title>G</title>
<ellipse fill="#FFFFFF" stroke="#ffffff" cx="204.773" cy="77.396" rx="17.064" ry="18.068"/>
<text transform="matrix(1 0 0 1 199.6992 82.415)" font-family="'Times-Roman'" font-size="14.0528">G</text>
</g>
<g id="edge11">
<title>G-&gt;I</title>
<path fill="none" stroke="#ffffff" d="M214.812,93.457c3.011,4.015,7.026,9.034,10.038,14.053"/>
<polygon fill="#ffffff" stroke="#ffffff" points="227.86,106.506 230.871,116.543 222.842,110.521 "/>
</g>
<g id="node9">
<title>F</title>
<ellipse fill="#FFFFFF" stroke="#ffffff" cx="132.502" cy="23.192" rx="18.068" ry="18.068"/>
<text transform="matrix(1 0 0 1 128.5942 28.2109)" font-family="'Times-Roman'" font-size="14.0528">F</text>
</g>
<g id="edge2">
<title>F-&gt;B</title>
<path fill="none" stroke="#ffffff" d="M117.445,34.234c-11.042,8.03-23.087,17.064-34.128,26.098"/>
<polygon fill="#ffffff" stroke="#ffffff" points="85.325,63.343 75.287,66.354 81.31,57.321 "/>
</g>
<g id="edge10">
<title>F-&gt;G</title>
<path fill="none" stroke="#ffffff" d="M147.559,34.234c11.041,8.03,23.087,17.064,34.129,26.098"/>
<polygon fill="#ffffff" stroke="#ffffff" points="183.694,57.321 189.717,66.354 179.68,63.343 "/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

@ -1,134 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="266px" height="212px" viewBox="0 0 266 212" enable-background="new 0 0 266 212" xml:space="preserve">
<g>
<g>
<line fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" x1="27.23" y1="23.192" x2="29.23" y2="23.192"/>
<line fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="3.9562,3.9562" x1="33.187" y1="23.192" x2="236.932" y2="23.192"/>
<polyline fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" points="238.91,23.192 240.91,23.192
238.97,23.677 "/>
<line fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="3.9907,3.9907" x1="235.099" y1="24.646" x2="27.971" y2="76.427"/>
<polyline fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" points="26.035,76.912 24.095,77.396
26.095,77.396 "/>
<line fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="4.0154,4.0154" x1="30.11" y1="77.396" x2="236.902" y2="77.396"/>
<polyline fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" points="238.91,77.396 240.91,77.396
238.97,77.881 "/>
<line fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="3.9907,3.9907" x1="235.099" y1="78.85" x2="27.971" y2="130.631"/>
<polyline fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" points="26.035,131.114 24.095,131.6
26.095,131.6 "/>
<line fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="4.0154,4.0154" x1="30.11" y1="131.6" x2="236.902" y2="131.6"/>
<polyline fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" points="238.91,131.6 240.91,131.6
238.97,132.085 "/>
<line fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="3.9907,3.9907" x1="235.099" y1="133.053" x2="27.971" y2="184.835"/>
<polyline fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" points="26.035,185.318 24.095,185.804
26.095,185.804 "/>
<line fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="4.0086,4.0086" x1="30.104" y1="185.804" x2="228.53" y2="185.804"/>
<line fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" x1="230.534" y1="185.804" x2="232.534" y2="185.804"/>
<g>
<rect x="24.095" y="19.892" width="6.602" height="6.602"/>
</g>
<g>
<path d="M238.569,185.804c-2.84,1.054-6.363,2.852-8.548,4.756l1.721-4.756l-1.721-4.755
C232.206,182.953,235.729,184.751,238.569,185.804z"/>
</g>
</g>
</g>
<g id="graph0">
<title>sorted_binary_tree</title>
<g id="node1">
<title>C</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="60.23" cy="185.804" rx="18.067" ry="18.067"/>
<text transform="matrix(1 0 0 1 55.5435 190.8223)" font-family="'Times-Roman'" font-size="14.0528">C</text>
</g>
<g id="node2">
<title>E</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="132.502" cy="185.804" rx="18.067" ry="18.067"/>
<text transform="matrix(1 0 0 1 128.21 190.8223)" font-family="'Times-Roman'" font-size="14.0528">E</text>
</g>
<g id="node3">
<title>H</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="204.773" cy="185.804" rx="17.064" ry="18.067"/>
<text transform="matrix(1 0 0 1 199.6992 190.8223)" font-family="'Times-Roman'" font-size="14.0528">H</text>
</g>
<g id="node4">
<title>A</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="24.094" cy="131.6" rx="17.064" ry="18.068"/>
<text transform="matrix(1 0 0 1 19.02 136.6191)" font-family="'Times-Roman'" font-size="14.0528">A</text>
</g>
<g id="node5">
<title>D</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="96.366" cy="131.6" rx="17.064" ry="18.068"/>
<text transform="matrix(1 0 0 1 91.292 136.6191)" font-family="'Times-Roman'" font-size="14.0528">D</text>
</g>
<g id="edge6">
<title>D-&gt;C</title>
<path fill="none" stroke="#000000" d="M86.328,147.66c-3.011,4.016-7.026,9.034-10.038,14.053"/>
<polygon stroke="#000000" points="78.298,164.725 70.268,170.747 73.279,160.709 "/>
</g>
<g id="edge8">
<title>D-&gt;E</title>
<path fill="none" stroke="#000000" d="M106.404,147.66c3.011,4.016,7.026,9.034,10.038,14.053"/>
<polygon stroke="#000000" points="119.453,160.709 122.464,170.747 114.434,164.725 "/>
</g>
<g id="node6">
<title>I</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="240.909" cy="131.6" rx="18.068" ry="18.068"/>
<text transform="matrix(1 0 0 1 238.5693 136.6191)" font-family="'Times-Roman'" font-size="14.0528">I</text>
</g>
<g id="edge12">
<title>I-&gt;H</title>
<path fill="none" stroke="#000000" d="M230.871,146.656c-3.011,5.02-6.021,10.038-10.037,15.057"/>
<polygon stroke="#000000" points="223.846,163.721 214.812,169.743 217.822,159.705 "/>
</g>
<g id="node7">
<title>B</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="60.23" cy="77.396" rx="18.068" ry="18.068"/>
<text transform="matrix(1 0 0 1 55.5435 82.415)" font-family="'Times-Roman'" font-size="14.0528">B</text>
</g>
<g id="edge3">
<title>B-&gt;A</title>
<path fill="none" stroke="#000000" d="M50.192,92.453c-3.011,5.019-6.022,10.038-10.038,15.057"/>
<polygon stroke="#000000" points="43.166,109.518 34.132,115.539 37.144,105.502 "/>
</g>
<g id="edge5">
<title>B-&gt;D</title>
<path fill="none" stroke="#000000" d="M70.268,92.453c3.011,5.019,6.022,10.038,10.038,15.057"/>
<polygon stroke="#000000" points="83.317,105.502 86.328,115.539 77.294,109.518 "/>
</g>
<g id="node8">
<title>G</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="204.773" cy="77.396" rx="17.064" ry="18.068"/>
<text transform="matrix(1 0 0 1 199.6992 82.415)" font-family="'Times-Roman'" font-size="14.0528">G</text>
</g>
<g id="edge11">
<title>G-&gt;I</title>
<path fill="none" stroke="#000000" d="M214.812,93.457c3.011,4.015,7.026,9.034,10.038,14.053"/>
<polygon stroke="#000000" points="227.86,106.506 230.871,116.543 222.842,110.521 "/>
</g>
<g id="node9">
<title>F</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="132.502" cy="23.192" rx="18.068" ry="18.068"/>
<text transform="matrix(1 0 0 1 128.5942 28.2109)" font-family="'Times-Roman'" font-size="14.0528">F</text>
</g>
<g id="edge2">
<title>F-&gt;B</title>
<path fill="none" stroke="#000000" d="M117.445,34.234c-11.042,8.03-23.087,17.064-34.128,26.098"/>
<polygon stroke="#000000" points="85.325,63.343 75.287,66.354 81.31,57.321 "/>
</g>
<g id="edge10">
<title>F-&gt;G</title>
<path fill="none" stroke="#000000" d="M147.559,34.234c11.041,8.03,23.087,17.064,34.129,26.098"/>
<polygon stroke="#000000" points="183.694,57.321 189.717,66.354 179.68,63.343 "/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!--
SPDX-License-Identifier: CC0-1.0
SPDX-FileCopyrightText: Rory O'Kane at Wikimedia Commons
<https://commons.wikimedia.org/wiki/File:Sorted_binary_tree_breadth-first_traversal.svg>
SPDX-FileCopyrightText: 2024 Frank Dana
-->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="266px" height="212px" viewBox="0 0 266 212" enable-background="new 0 0 266 212" xml:space="preserve">
<g>
<g>
<line fill="none" stroke="#1c76e4" stroke-width="2" stroke-miterlimit="10" x1="27.23" y1="23.192" x2="29.23" y2="23.192"/>
<line fill="none" stroke="#1c76e4" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="3.9562,3.9562" x1="33.187" y1="23.192" x2="236.932" y2="23.192"/>
<polyline fill="none" stroke="#1c76e4" stroke-width="2" stroke-miterlimit="10" points="238.91,23.192 240.91,23.192
238.97,23.677 "/>
<line fill="none" stroke="#1c76e4" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="3.9907,3.9907" x1="235.099" y1="24.646" x2="27.971" y2="76.427"/>
<polyline fill="none" stroke="#1c76e4" stroke-width="2" stroke-miterlimit="10" points="26.035,76.912 24.095,77.396
26.095,77.396 "/>
<line fill="none" stroke="#1c76e4" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="4.0154,4.0154" x1="30.11" y1="77.396" x2="236.902" y2="77.396"/>
<polyline fill="none" stroke="#1c76e4" stroke-width="2" stroke-miterlimit="10" points="238.91,77.396 240.91,77.396
238.97,77.881 "/>
<line fill="none" stroke="#1c76e4" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="3.9907,3.9907" x1="235.099" y1="78.85" x2="27.971" y2="130.631"/>
<polyline fill="none" stroke="#1c76e4" stroke-width="2" stroke-miterlimit="10" points="26.035,131.114 24.095,131.6
26.095,131.6 "/>
<line fill="none" stroke="#1c76e4" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="4.0154,4.0154" x1="30.11" y1="131.6" x2="236.902" y2="131.6"/>
<polyline fill="none" stroke="#1c76e4" stroke-width="2" stroke-miterlimit="10" points="238.91,131.6 240.91,131.6
238.97,132.085 "/>
<line fill="none" stroke="#1c76e4" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="3.9907,3.9907" x1="235.099" y1="133.053" x2="27.971" y2="184.835"/>
<polyline fill="none" stroke="#1c76e4" stroke-width="2" stroke-miterlimit="10" points="26.035,185.318 24.095,185.804
26.095,185.804 "/>
<line fill="none" stroke="#1c76e4" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="4.0086,4.0086" x1="30.104" y1="185.804" x2="228.53" y2="185.804"/>
<line fill="none" stroke="#1c76e4" stroke-width="2" stroke-miterlimit="10" x1="230.534" y1="185.804" x2="232.534" y2="185.804"/>
<g>
<rect fill="#1c76e4" x="24.095" y="19.892" width="6.602" height="6.602"/>
</g>
<g>
<path fill="#1c76e4" d="M238.569,185.804c-2.84,1.054-6.363,2.852-8.548,4.756l1.721-4.756l-1.721-4.755
C232.206,182.953,235.729,184.751,238.569,185.804z"/>
</g>
</g>
</g>
<g id="graph0">
<title>sorted_binary_tree</title>
<g id="node1">
<title>C</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="60.23" cy="185.804" rx="18.067" ry="18.067"/>
<text transform="matrix(1 0 0 1 55.5435 190.8223)" font-family="'Times-Roman'" font-size="14.0528">C</text>
</g>
<g id="node2">
<title>E</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="132.502" cy="185.804" rx="18.067" ry="18.067"/>
<text transform="matrix(1 0 0 1 128.21 190.8223)" font-family="'Times-Roman'" font-size="14.0528">E</text>
</g>
<g id="node3">
<title>H</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="204.773" cy="185.804" rx="17.064" ry="18.067"/>
<text transform="matrix(1 0 0 1 199.6992 190.8223)" font-family="'Times-Roman'" font-size="14.0528">H</text>
</g>
<g id="node4">
<title>A</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="24.094" cy="131.6" rx="17.064" ry="18.068"/>
<text transform="matrix(1 0 0 1 19.02 136.6191)" font-family="'Times-Roman'" font-size="14.0528">A</text>
</g>
<g id="node5">
<title>D</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="96.366" cy="131.6" rx="17.064" ry="18.068"/>
<text transform="matrix(1 0 0 1 91.292 136.6191)" font-family="'Times-Roman'" font-size="14.0528">D</text>
</g>
<g id="edge6">
<title>D-&gt;C</title>
<path fill="none" stroke="#000000" d="M86.328,147.66c-3.011,4.016-7.026,9.034-10.038,14.053"/>
<polygon stroke="#000000" points="78.298,164.725 70.268,170.747 73.279,160.709 "/>
</g>
<g id="edge8">
<title>D-&gt;E</title>
<path fill="none" stroke="#000000" d="M106.404,147.66c3.011,4.016,7.026,9.034,10.038,14.053"/>
<polygon stroke="#000000" points="119.453,160.709 122.464,170.747 114.434,164.725 "/>
</g>
<g id="node6">
<title>I</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="240.909" cy="131.6" rx="18.068" ry="18.068"/>
<text transform="matrix(1 0 0 1 238.5693 136.6191)" font-family="'Times-Roman'" font-size="14.0528">I</text>
</g>
<g id="edge12">
<title>I-&gt;H</title>
<path fill="none" stroke="#000000" d="M230.871,146.656c-3.011,5.02-6.021,10.038-10.037,15.057"/>
<polygon stroke="#000000" points="223.846,163.721 214.812,169.743 217.822,159.705 "/>
</g>
<g id="node7">
<title>B</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="60.23" cy="77.396" rx="18.068" ry="18.068"/>
<text transform="matrix(1 0 0 1 55.5435 82.415)" font-family="'Times-Roman'" font-size="14.0528">B</text>
</g>
<g id="edge3">
<title>B-&gt;A</title>
<path fill="none" stroke="#000000" d="M50.192,92.453c-3.011,5.019-6.022,10.038-10.038,15.057"/>
<polygon stroke="#000000" points="43.166,109.518 34.132,115.539 37.144,105.502 "/>
</g>
<g id="edge5">
<title>B-&gt;D</title>
<path fill="none" stroke="#000000" d="M70.268,92.453c3.011,5.019,6.022,10.038,10.038,15.057"/>
<polygon stroke="#000000" points="83.317,105.502 86.328,115.539 77.294,109.518 "/>
</g>
<g id="node8">
<title>G</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="204.773" cy="77.396" rx="17.064" ry="18.068"/>
<text transform="matrix(1 0 0 1 199.6992 82.415)" font-family="'Times-Roman'" font-size="14.0528">G</text>
</g>
<g id="edge11">
<title>G-&gt;I</title>
<path fill="none" stroke="#000000" d="M214.812,93.457c3.011,4.015,7.026,9.034,10.038,14.053"/>
<polygon stroke="#000000" points="227.86,106.506 230.871,116.543 222.842,110.521 "/>
</g>
<g id="node9">
<title>F</title>
<ellipse fill="#FFFFFF" stroke="#000000" cx="132.502" cy="23.192" rx="18.068" ry="18.068"/>
<text transform="matrix(1 0 0 1 128.5942 28.2109)" font-family="'Times-Roman'" font-size="14.0528">F</text>
</g>
<g id="edge2">
<title>F-&gt;B</title>
<path fill="none" stroke="#000000" d="M117.445,34.234c-11.042,8.03-23.087,17.064-34.128,26.098"/>
<polygon stroke="#000000" points="85.325,63.343 75.287,66.354 81.31,57.321 "/>
</g>
<g id="edge10">
<title>F-&gt;G</title>
<path fill="none" stroke="#000000" d="M147.559,34.234c11.041,8.03,23.087,17.064,34.129,26.098"/>
<polygon stroke="#000000" points="183.694,57.321 189.717,66.354 179.68,63.343 "/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 36 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 36 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 36 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -42,6 +42,9 @@ name = "basic"
show_index_summary = true
show_class_hierarchy = true
[source-location]
base_url = "https://gitlab.gnome.org/GNOME/glib/-/blob/main/"
[extra]
urlmap_file = "../urlmap.js"
# The same order will be used when generating the index

View File

@ -42,6 +42,9 @@ name = "basic"
show_index_summary = true
show_class_hierarchy = true
[source-location]
base_url = "https://gitlab.gnome.org/GNOME/glib/-/blob/main/"
[extra]
urlmap_file = "../urlmap.js"
# The same order will be used when generating the index

View File

@ -36,6 +36,9 @@ name = "basic"
show_index_summary = true
show_class_hierarchy = true
[source-location]
base_url = "https://gitlab.gnome.org/GNOME/glib/-/blob/main/"
[extra]
urlmap_file = "../urlmap.js"
# The same order will be used when generating the index
@ -96,6 +99,10 @@ content_images = [
"Sorted_binary_tree_inorder.svg",
"Sorted_binary_tree_postorder.svg",
"Sorted_binary_tree_preorder.svg",
"Sorted_binary_tree_breadth-first_traversal-dark.svg",
"Sorted_binary_tree_inorder-dark.svg",
"Sorted_binary_tree_postorder-dark.svg",
"Sorted_binary_tree_preorder-dark.svg",
]
[[object]]

View File

@ -38,6 +38,9 @@ name = "basic"
show_index_summary = true
show_class_hierarchy = true
[source-location]
base_url = "https://gitlab.gnome.org/GNOME/glib/-/blob/main/"
[extra]
urlmap_file = "../urlmap.js"
# The same order will be used when generating the index

View File

@ -34,7 +34,7 @@
/**
* GActionGroupExporter:
*
* These functions support exporting a [class@Gio.ActionGroup] on D-Bus.
* These functions support exporting a [iface@Gio.ActionGroup] on D-Bus.
* The D-Bus interface that is used is a private implementation
* detail.
*
@ -556,10 +556,9 @@ g_action_group_exporter_free (GActionGroupExporter *exporter)
/**
* g_dbus_connection_export_action_group:
* @connection: a #GDBusConnection
* @connection: the D-Bus connection
* @object_path: a D-Bus object path
* @action_group: a #GActionGroup
* @error: a pointer to a %NULL #GError, or %NULL
* @action_group: an action group
*
* Exports @action_group on @connection at @object_path.
*
@ -571,7 +570,7 @@ g_action_group_exporter_free (GActionGroupExporter *exporter)
* returned (with @error set accordingly).
*
* You can unexport the action group using
* g_dbus_connection_unexport_action_group() with the return value of
* [method@Gio.DBusConnection.unexport_action_group] with the return value of
* this function.
*
* The thread default main context is taken at the time of this call.
@ -641,15 +640,15 @@ g_dbus_connection_export_action_group (GDBusConnection *connection,
/**
* g_dbus_connection_unexport_action_group:
* @connection: a #GDBusConnection
* @export_id: the ID from g_dbus_connection_export_action_group()
* @connection: the D-Bus connection
* @export_id: the ID from [method@Gio.DBusConnection.export_action_group]
*
* Reverses the effect of a previous call to
* g_dbus_connection_export_action_group().
* [method@Gio.DBusConnection.export_action_group].
*
* It is an error to call this function with an ID that wasn't returned
* from g_dbus_connection_export_action_group() or to call it with the
* same ID more than once.
* It is an error to call this function with an ID that wasnt returned from
* [method@Gio.DBusConnection.export_action_group] or to call it with the same
* ID more than once.
*
* Since: 2.32
**/

View File

@ -37,7 +37,7 @@
* One useful application of this interface is to map the
* names of actions from various action groups to unique,
* prefixed names (e.g. by prepending "app." or "win.").
* This is the motivation for the 'Map' part of the interface
* This is the motivation for the Map part of the interface
* name.
*
* Since: 2.32
@ -45,11 +45,14 @@
/**
* GActionMapInterface:
* @lookup_action: the virtual function pointer for g_action_map_lookup_action()
* @add_action: the virtual function pointer for g_action_map_add_action()
* @remove_action: the virtual function pointer for g_action_map_remove_action()
* @lookup_action: the virtual function pointer for
* [method@Gio.ActionMap.lookup_action]
* @add_action: the virtual function pointer for
* [method@Gio.ActionMap.add_action]
* @remove_action: the virtual function pointer for
* [method@Gio.ActionMap.remove_action]
*
* The virtual function table for #GActionMap.
* The virtual function table for [iface@Gio.ActionMap].
*
* Since: 2.32
**/
@ -63,14 +66,14 @@ g_action_map_default_init (GActionMapInterface *iface)
/**
* g_action_map_lookup_action:
* @action_map: a #GActionMap
* @action_map: an action map
* @action_name: the name of an action
*
* Looks up the action with the name @action_name in @action_map.
*
* If no such action exists, returns %NULL.
* If no such action exists, returns `NULL`.
*
* Returns: (nullable) (transfer none): a #GAction, or %NULL
* Returns: (nullable) (transfer none): a [iface@Gio.Action]
*
* Since: 2.32
*/
@ -84,8 +87,8 @@ g_action_map_lookup_action (GActionMap *action_map,
/**
* g_action_map_add_action:
* @action_map: a #GActionMap
* @action: a #GAction
* @action_map: an action map
* @action: a [iface@Gio.Action]
*
* Adds an action to the @action_map.
*
@ -105,7 +108,7 @@ g_action_map_add_action (GActionMap *action_map,
/**
* g_action_map_remove_action:
* @action_map: a #GActionMap
* @action_map: an action map
* @action_name: the name of the action
*
* Removes the named action from the action map.
@ -124,51 +127,49 @@ g_action_map_remove_action (GActionMap *action_map,
/**
* GActionEntry:
* @name: the name of the action
* @activate: the callback to connect to the "activate" signal of the
* action. Since GLib 2.40, this can be %NULL for stateful
* actions, in which case the default handler is used. For
* boolean-stated actions with no parameter, this is a
* toggle. For other state types (and parameter type equal
* to the state type) this will be a function that
* just calls @change_state (which you should provide).
* @activate: the callback to connect to the "activate" signal of the action.
* Since GLib 2.40, this can be `NULL` for stateful actions, in which case
* the default handler is used. For boolean-stated actions with no
* parameter, this is a toggle. For other state types (and parameter type
* equal to the state type) this will be a function that just calls
* @change_state (which you should provide).
* @parameter_type: the type of the parameter that must be passed to the
* activate function for this action, given as a single
* GVariant type string (or %NULL for no parameter)
* activate function for this action, given as a single GVariant type string
* (or `NULL` for no parameter)
* @state: the initial state for this action, given in
* [GVariant text format](gvariant-text-format.html). The state is parsed
* with no extra type information, so type tags must be added to
* the string if they are necessary. Stateless actions should
* give %NULL here.
* @change_state: the callback to connect to the "change-state" signal
* of the action. All stateful actions should provide a
* handler here; stateless actions should not.
* [GVariant text format](gvariant-text-format.html). The state is parsed
* with no extra type information, so type tags must be added to the string
* if they are necessary. Stateless actions should give `NULL` here.
* @change_state: the callback to connect to the "change-state" signal of the
* action. All stateful actions should provide a handler here; stateless
* actions should not.
*
* This struct defines a single action. It is for use with
* g_action_map_add_action_entries().
* [method@Gio.ActionMap.add_action_entries].
*
* The order of the items in the structure are intended to reflect
* frequency of use. It is permissible to use an incomplete initialiser
* in order to leave some of the later values as %NULL. All values
* in order to leave some of the later values as `NULL`. All values
* after @name are optional. Additional optional fields may be added in
* the future.
*
* See g_action_map_add_action_entries() for an example.
* See [method@Gio.ActionMap.add_action_entries] for an example.
**/
/**
* g_action_map_add_action_entries:
* @action_map: a #GActionMap
* @action_map: an action map
* @entries: (array length=n_entries) (element-type GActionEntry): a pointer to
* the first item in an array of #GActionEntry structs
* @n_entries: the length of @entries, or -1 if @entries is %NULL-terminated
* the first item in an array of [struct@Gio.ActionEntry] structs
* @n_entries: the length of @entries, or -1 if @entries is `NULL`-terminated
* @user_data: the user data for signal connections
*
* A convenience function for creating multiple #GSimpleAction instances
* and adding them to a #GActionMap.
* A convenience function for creating multiple [class@Gio.SimpleAction]
* instances and adding them to a [iface@Gio.ActionMap].
*
* Each action is constructed as per one #GActionEntry.
* Each action is constructed as per one [struct@Gio.ActionEntry].
*
* |[<!-- language="C" -->
* ```c
* static void
* activate_quit (GSimpleAction *simple,
* GVariant *parameter,
@ -199,7 +200,7 @@ g_action_map_remove_action (GActionMap *action_map,
*
* return G_ACTION_GROUP (group);
* }
* ]|
* ```
*
* Since: 2.32
*/
@ -278,16 +279,16 @@ g_action_map_add_action_entries (GActionMap *action_map,
/**
* g_action_map_remove_action_entries:
* @action_map: The #GActionMap
* @action_map: The [iface@Gio.ActionMap]
* @entries: (array length=n_entries) (element-type GActionEntry): a pointer to
* the first item in an array of #GActionEntry structs
* @n_entries: the length of @entries, or -1 if @entries is %NULL-terminated
* the first item in an array of [struct@Gio.ActionEntry] structs
* @n_entries: the length of @entries, or -1 if @entries is `NULL`-terminated
*
* Remove actions from a #GActionMap. This is meant as the reverse of
* g_action_map_add_action_entries().
* Remove actions from a [iface@Gio.ActionMap]. This is meant as the reverse of
* [method@Gio.ActionMap.add_action_entries].
*
*
* |[<!-- language="C" -->
* ```c
* static const GActionEntry entries[] = {
* { "quit", activate_quit },
* { "print-string", activate_print_string, "s" }
@ -304,7 +305,7 @@ g_action_map_add_action_entries (GActionMap *action_map,
* {
* g_action_map_remove_action_entries (map, entries, G_N_ELEMENTS (entries));
* }
* ]|
* ```
*
* Since: 2.78
*/

View File

@ -56,15 +56,19 @@
* As of GLib 2.20, URIs will always be converted to POSIX paths
* (using [method@Gio.File.get_path]) when using [method@Gio.AppInfo.launch]
* even if the application requested an URI and not a POSIX path. For example
* for a desktop-file based application with Exec key `totem
* %U` and a single URI, `sftp://foo/file.avi`, then
* `/home/user/.gvfs/sftp on foo/file.avi` will be passed. This will
* only work if a set of suitable GIO extensions (such as GVfs 2.26
* compiled with FUSE support), is available and operational; if this
* is not the case, the URI will be passed unmodified to the application.
* Some URIs, such as `mailto:`, of course cannot be mapped to a POSIX
* path (in GVfs there's no FUSE mount for it); such URIs will be
* passed unmodified to the application.
* for a desktop-file based application with the following Exec key:
*
* ```
* Exec=totem %U
* ```
*
* and a single URI, `sftp://foo/file.avi`, then
* `/home/user/.gvfs/sftp on foo/file.avi` will be passed. This will only work
* if a set of suitable GIO extensions (such as GVfs 2.26 compiled with FUSE
* support), is available and operational; if this is not the case, the URI
* will be passed unmodified to the application. Some URIs, such as `mailto:`,
* of course cannot be mapped to a POSIX path (in GVfs theres no FUSE mount
* for it); such URIs will be passed unmodified to the application.
*
* Specifically for GVfs 2.26 and later, the POSIX URI will be mapped
* back to the GIO URI in the [iface@Gio.File] constructors (since GVfs
@ -94,7 +98,7 @@
*
* This code will work when both `cdda://sr0/Track 1.wav` and
* `/home/user/.gvfs/cdda on sr0/Track 1.wav` is passed to the
* application. It should be noted that it's generally not safe
* application. It should be noted that its generally not safe
* for applications to rely on the format of a particular URIs.
* Different launcher applications (e.g. file managers) may have
* different ideas of what a given URI means.
@ -115,9 +119,9 @@ g_app_info_default_init (GAppInfoInterface *iface)
/**
* g_app_info_dup:
* @appinfo: a #GAppInfo.
* @appinfo: the app info
*
* Creates a duplicate of a #GAppInfo.
* Creates a duplicate of a [iface@Gio.AppInfo].
*
* Returns: (transfer full): a duplicate of @appinfo.
**/
@ -135,16 +139,16 @@ g_app_info_dup (GAppInfo *appinfo)
/**
* g_app_info_equal:
* @appinfo1: the first #GAppInfo.
* @appinfo2: the second #GAppInfo.
* @appinfo1: the first [iface@Gio.AppInfo].
* @appinfo2: the second [iface@Gio.AppInfo].
*
* Checks if two #GAppInfos are equal.
* Checks if two [iface@Gio.AppInfo]s are equal.
*
* Note that the check *may not* compare each individual
* field, and only does an identity check. In case detecting changes in the
* contents is needed, program code must additionally compare relevant fields.
* Note that the check *may not* compare each individual field, and only does
* an identity check. In case detecting changes in the contents is needed,
* program code must additionally compare relevant fields.
*
* Returns: %TRUE if @appinfo1 is equal to @appinfo2. %FALSE otherwise.
* Returns: `TRUE` if @appinfo1 is equal to @appinfo2. `FALSE` otherwise.
**/
gboolean
g_app_info_equal (GAppInfo *appinfo1,
@ -165,17 +169,16 @@ g_app_info_equal (GAppInfo *appinfo1,
/**
* g_app_info_get_id:
* @appinfo: a #GAppInfo.
* @appinfo: the app info
*
* Gets the ID of an application. An id is a string that
* identifies the application. The exact format of the id is
* platform dependent. For instance, on Unix this is the
* desktop file id from the xdg menu specification.
* Gets the ID of an application. An id is a string that identifies the
* application. The exact format of the id is platform dependent. For instance,
* on Unix this is the desktop file id from the xdg menu specification.
*
* Note that the returned ID may be %NULL, depending on how
* the @appinfo has been constructed.
* Note that the returned ID may be `NULL`, depending on how the @appinfo has
* been constructed.
*
* Returns: (nullable): a string containing the application's ID.
* Returns: (nullable): a string containing the applications ID.
**/
const char *
g_app_info_get_id (GAppInfo *appinfo)
@ -191,7 +194,7 @@ g_app_info_get_id (GAppInfo *appinfo)
/**
* g_app_info_get_name:
* @appinfo: a #GAppInfo.
* @appinfo: the app info
*
* Gets the installed name of the application.
*
@ -211,7 +214,7 @@ g_app_info_get_name (GAppInfo *appinfo)
/**
* g_app_info_get_display_name:
* @appinfo: a #GAppInfo.
* @appinfo: the app info
*
* Gets the display name of the application. The display name is often more
* descriptive to the user than the name itself.
@ -238,12 +241,12 @@ g_app_info_get_display_name (GAppInfo *appinfo)
/**
* g_app_info_get_description:
* @appinfo: a #GAppInfo.
* @appinfo: the app info
*
* Gets a human-readable description of an installed application.
*
* Returns: (nullable): a string containing a description of the
* application @appinfo, or %NULL if none.
* application @appinfo, or `NULL` if none.
**/
const char *
g_app_info_get_description (GAppInfo *appinfo)
@ -259,15 +262,15 @@ g_app_info_get_description (GAppInfo *appinfo)
/**
* g_app_info_get_executable: (virtual get_executable)
* @appinfo: a #GAppInfo
* @appinfo: the app info
*
* Gets the executable's name for the installed application.
* Gets the executables name for the installed application.
*
* This is intended to be used for debugging or labelling what program is going
* to be run. To launch the executable, use g_app_info_launch() and related
* to be run. To launch the executable, use [method@Gio.AppInfo.launch] and related
* functions, rather than spawning the return value from this function.
*
* Returns: (type filename): a string containing the @appinfo's application
* Returns: (type filename): a string containing the @appinfos application
* binaries name
**/
const char *
@ -285,13 +288,13 @@ g_app_info_get_executable (GAppInfo *appinfo)
/**
* g_app_info_get_commandline: (virtual get_commandline)
* @appinfo: a #GAppInfo
* @appinfo: the app info
*
* Gets the commandline with which the application will be
* started.
*
* Returns: (nullable) (type filename): a string containing the @appinfo's commandline,
* or %NULL if this information is not available
* Returns: (nullable) (type filename): a string containing the @appinfos
* commandline, or `NULL` if this information is not available
*
* Since: 2.20
**/
@ -312,13 +315,12 @@ g_app_info_get_commandline (GAppInfo *appinfo)
/**
* g_app_info_set_as_default_for_type:
* @appinfo: a #GAppInfo.
* @appinfo: the app info
* @content_type: the content type.
* @error: a #GError.
*
* Sets the application as the default handler for a given type.
*
* Returns: %TRUE on success, %FALSE on error.
* Returns: `TRUE` on success, `FALSE` on error.
**/
gboolean
g_app_info_set_as_default_for_type (GAppInfo *appinfo,
@ -342,16 +344,15 @@ g_app_info_set_as_default_for_type (GAppInfo *appinfo,
/**
* g_app_info_set_as_last_used_for_type:
* @appinfo: a #GAppInfo.
* @appinfo: the app info
* @content_type: the content type.
* @error: a #GError.
*
* Sets the application as the last used application for a given type.
* This will make the application appear as first in the list returned
* by g_app_info_get_recommended_for_type(), regardless of the default
* Sets the application as the last used application for a given type. This
* will make the application appear as first in the list returned by
* [func@Gio.AppInfo.get_recommended_for_type], regardless of the default
* application for that content type.
*
* Returns: %TRUE on success, %FALSE on error.
* Returns: `TRUE` on success, `FALSE` on error.
**/
gboolean
g_app_info_set_as_last_used_for_type (GAppInfo *appinfo,
@ -375,14 +376,13 @@ g_app_info_set_as_last_used_for_type (GAppInfo *appinfo,
/**
* g_app_info_set_as_default_for_extension:
* @appinfo: a #GAppInfo.
* @extension: (type filename): a string containing the file extension
* (without the dot).
* @error: a #GError.
* @appinfo: the app info
* @extension: (type filename): a string containing the file extension (without
* the dot).
*
* Sets the application as the default handler for the given file extension.
*
* Returns: %TRUE on success, %FALSE on error.
* Returns: `TRUE` on success, `FALSE` on error.
**/
gboolean
g_app_info_set_as_default_for_extension (GAppInfo *appinfo,
@ -407,14 +407,13 @@ g_app_info_set_as_default_for_extension (GAppInfo *appinfo,
/**
* g_app_info_add_supports_type:
* @appinfo: a #GAppInfo.
* @appinfo: the app info
* @content_type: a string.
* @error: a #GError.
*
* Adds a content type to the application information to indicate the
* application is capable of opening files with the given content type.
*
* Returns: %TRUE on success, %FALSE on error.
* Returns: `TRUE` on success, `FALSE` on error.
**/
gboolean
g_app_info_add_supports_type (GAppInfo *appinfo,
@ -441,12 +440,12 @@ g_app_info_add_supports_type (GAppInfo *appinfo,
/**
* g_app_info_can_remove_supports_type:
* @appinfo: a #GAppInfo.
* @appinfo: the app info
*
* Checks if a supported content type can be removed from an application.
*
* Returns: %TRUE if it is possible to remove supported
* content types from a given @appinfo, %FALSE if not.
* Returns: `TRUE` if it is possible to remove supported content types from a
* given @appinfo, `FALSE` if not.
**/
gboolean
g_app_info_can_remove_supports_type (GAppInfo *appinfo)
@ -466,13 +465,12 @@ g_app_info_can_remove_supports_type (GAppInfo *appinfo)
/**
* g_app_info_remove_supports_type:
* @appinfo: a #GAppInfo.
* @appinfo: the app info
* @content_type: a string.
* @error: a #GError.
*
* Removes a supported type from an application, if possible.
*
* Returns: %TRUE on success, %FALSE on error.
* Returns: `TRUE` on success, `FALSE` on error.
**/
gboolean
g_app_info_remove_supports_type (GAppInfo *appinfo,
@ -498,17 +496,18 @@ g_app_info_remove_supports_type (GAppInfo *appinfo,
/**
* g_app_info_get_supported_types:
* @appinfo: a #GAppInfo that can handle files
* @appinfo: an app info that can handle files
*
* Retrieves the list of content types that @app_info claims to support.
* If this information is not provided by the environment, this function
* will return %NULL.
* will return `NULL`.
*
* This function does not take in consideration associations added with
* g_app_info_add_supports_type(), but only those exported directly by
* [method@Gio.AppInfo.add_supports_type], but only those exported directly by
* the application.
*
* Returns: (transfer none) (array zero-terminated=1) (element-type utf8):
* a list of content types.
* a list of content types.
*
* Since: 2.34
*/
@ -530,12 +529,12 @@ g_app_info_get_supported_types (GAppInfo *appinfo)
/**
* g_app_info_get_icon:
* @appinfo: a #GAppInfo.
* @appinfo: the app info
*
* Gets the icon for the application.
*
* Returns: (nullable) (transfer none): the default #GIcon for @appinfo or %NULL
* if there is no default icon.
* Returns: (nullable) (transfer none): the default [iface@Gio.Icon] for
* @appinfo or `NULL` if there is no default icon.
**/
GIcon *
g_app_info_get_icon (GAppInfo *appinfo)
@ -552,17 +551,16 @@ g_app_info_get_icon (GAppInfo *appinfo)
/**
* g_app_info_launch:
* @appinfo: a #GAppInfo
* @files: (nullable) (element-type GFile): a #GList of #GFile objects
* @context: (nullable): a #GAppLaunchContext or %NULL
* @error: a #GError
* @appinfo: the app info
* @files: (nullable) (element-type GFile): a list of [iface@Gio.File] objects
* @context: (nullable): the launch context
*
* Launches the application. Passes @files to the launched application
* as arguments, using the optional @context to get information
* about the details of the launcher (like what screen it is on).
* On error, @error will be set accordingly.
*
* To launch the application without arguments pass a %NULL @files list.
* To launch the application without arguments pass a `NULL` @files list.
*
* Note that even if the launch is successful the application launched
* can fail to start if it runs into problems during startup. There is
@ -571,11 +569,11 @@ g_app_info_get_icon (GAppInfo *appinfo)
* Some URIs can be changed when passed through a GFile (for instance
* unsupported URIs with strange formats like mailto:), so if you have
* a textual URI you want to pass in as argument, consider using
* g_app_info_launch_uris() instead.
* [method@Gio.AppInfo.launch_uris] instead.
*
* The launched application inherits the environment of the launching
* process, but it can be modified with g_app_launch_context_setenv()
* and g_app_launch_context_unsetenv().
* process, but it can be modified with [method@Gio.AppLaunchContext.setenv]
* and [method@Gio.AppLaunchContext.unsetenv].
*
* On UNIX, this function sets the `GIO_LAUNCHED_DESKTOP_FILE`
* environment variable with the path of the launched desktop file and
@ -585,7 +583,7 @@ g_app_info_get_icon (GAppInfo *appinfo)
* `XDG_ACTIVATION_TOKEN` and `DESKTOP_STARTUP_ID` environment
* variables are also set, based on information provided in @context.
*
* Returns: %TRUE on successful launch, %FALSE otherwise.
* Returns: `TRUE` on successful launch, `FALSE` otherwise.
**/
gboolean
g_app_info_launch (GAppInfo *appinfo,
@ -605,11 +603,11 @@ g_app_info_launch (GAppInfo *appinfo,
/**
* g_app_info_supports_uris:
* @appinfo: a #GAppInfo.
* @appinfo: the app info
*
* Checks if the application supports reading files and directories from URIs.
*
* Returns: %TRUE if the @appinfo supports URIs.
* Returns: `TRUE` if the @appinfo supports URIs.
**/
gboolean
g_app_info_supports_uris (GAppInfo *appinfo)
@ -626,11 +624,11 @@ g_app_info_supports_uris (GAppInfo *appinfo)
/**
* g_app_info_supports_files:
* @appinfo: a #GAppInfo.
* @appinfo: the app info
*
* Checks if the application accepts files as arguments.
*
* Returns: %TRUE if the @appinfo supports files.
* Returns: `TRUE` if the @appinfo supports files.
**/
gboolean
g_app_info_supports_files (GAppInfo *appinfo)
@ -647,10 +645,9 @@ g_app_info_supports_files (GAppInfo *appinfo)
/**
* g_app_info_launch_uris:
* @appinfo: a #GAppInfo
* @uris: (nullable) (element-type utf8): a #GList containing URIs to launch.
* @context: (nullable): a #GAppLaunchContext or %NULL
* @error: a #GError
* @appinfo: the app info
* @uris: (nullable) (element-type utf8): a list of URIs to launch.
* @context: (nullable): the launch context
*
* Launches the application. This passes the @uris to the launched application
* as arguments, using the optional @context to get information
@ -659,13 +656,13 @@ g_app_info_supports_files (GAppInfo *appinfo)
* one URI per invocation as part of their command-line, multiple instances
* of the application will be spawned.
*
* To launch the application without arguments pass a %NULL @uris list.
* To launch the application without arguments pass a `NULL` @uris list.
*
* Note that even if the launch is successful the application launched
* can fail to start if it runs into problems during startup. There is
* no way to detect this.
*
* Returns: %TRUE on successful launch, %FALSE otherwise.
* Returns: `TRUE` on successful launch, `FALSE` otherwise.
**/
gboolean
g_app_info_launch_uris (GAppInfo *appinfo,
@ -684,19 +681,20 @@ g_app_info_launch_uris (GAppInfo *appinfo,
/**
* g_app_info_launch_uris_async:
* @appinfo: a #GAppInfo
* @uris: (nullable) (element-type utf8): a #GList containing URIs to launch.
* @context: (nullable): a #GAppLaunchContext or %NULL
* @cancellable: (nullable): a #GCancellable
* @callback: (nullable): a #GAsyncReadyCallback to call when the request is done
* @appinfo: the app info
* @uris: (nullable) (element-type utf8): a list of URIs to launch.
* @context: (nullable): the launch context
* @cancellable: (nullable): a [class@Gio.Cancellable]
* @callback: (scope async) (nullable): a [type@Gio.AsyncReadyCallback] to call
* when the request is done
* @user_data: (nullable): data to pass to @callback
*
* Async version of g_app_info_launch_uris().
* Async version of [method@Gio.AppInfo.launch_uris].
*
* The @callback is invoked immediately after the application launch, but it
* waits for activation in case of D-Busactivated applications and also provides
* extended error information for sandboxed applications, see notes for
* g_app_info_launch_default_for_uri_async().
* [func@Gio.AppInfo.launch_default_for_uri_async].
*
* Since: 2.60
**/
@ -733,13 +731,12 @@ g_app_info_launch_uris_async (GAppInfo *appinfo,
/**
* g_app_info_launch_uris_finish:
* @appinfo: a #GAppInfo
* @result: a #GAsyncResult
* @error: (nullable): a #GError
* @appinfo: the app info
* @result: the async result
*
* Finishes a g_app_info_launch_uris_async() operation.
* Finishes a [method@Gio.AppInfo.launch_uris_async] operation.
*
* Returns: %TRUE on successful launch, %FALSE otherwise.
* Returns: `TRUE` on successful launch, `FALSE` otherwise.
*
* Since: 2.60
*/
@ -765,12 +762,12 @@ g_app_info_launch_uris_finish (GAppInfo *appinfo,
/**
* g_app_info_should_show:
* @appinfo: a #GAppInfo.
* @appinfo: the app info
*
* Checks if the application info should be shown in menus that
* list available applications.
*
* Returns: %TRUE if the @appinfo should be shown, %FALSE otherwise.
* Returns: `TRUE` if the @appinfo should be shown, `FALSE` otherwise.
**/
gboolean
g_app_info_should_show (GAppInfo *appinfo)
@ -821,14 +818,16 @@ get_default_for_type_thread (GTask *task,
/**
* g_app_info_get_default_for_type_async:
* @content_type: the content type to find a #GAppInfo for
* @must_support_uris: if %TRUE, the #GAppInfo is expected to
* support URIs
* @cancellable: optional #GCancellable object, %NULL to ignore
* @callback: (nullable): a #GAsyncReadyCallback to call when the request is done
* @content_type: the content type to find a [iface@Gio.AppInfo] for
* @must_support_uris: if `TRUE`, the [iface@Gio.AppInfo] is expected to
* support URIs
* @cancellable: (nullable): a [class@Gio.Cancellable]
* @callback: (scope async) (nullable): a [type@Gio.AsyncReadyCallback] to call
* when the request is done
* @user_data: (nullable): data to pass to @callback
*
* Asynchronously gets the default #GAppInfo for a given content type.
* Asynchronously gets the default [iface@Gio.AppInfo] for a given content
* type.
*
* Since: 2.74
*/
@ -882,14 +881,15 @@ get_default_for_scheme_thread (GTask *task,
/**
* g_app_info_get_default_for_uri_scheme_async:
* @uri_scheme: a string containing a URI scheme.
* @cancellable: optional #GCancellable object, %NULL to ignore
* @callback: (nullable): a #GAsyncReadyCallback to call when the request is done
* @cancellable: (nullable): a [class@Gio.Cancellable]
* @callback: (scope async) (nullable): a [type@Gio.AsyncReadyCallback] to call
* when the request is done
* @user_data: (nullable): data to pass to @callback
*
* Asynchronously gets the default application for handling URIs with
* the given URI scheme. A URI scheme is the initial part
* of the URI, up to but not including the ':', e.g. "http",
* "ftp" or "sip".
* of the URI, up to but not including the `:`, e.g. `http`,
* `ftp` or `sip`.
*
* Since: 2.74
*/
@ -914,16 +914,16 @@ g_app_info_get_default_for_uri_scheme_async (const char *uri_scheme,
/**
* g_app_info_get_default_for_uri_scheme_finish:
* @result: a #GAsyncResult
* @error: (nullable): a #GError
* @result: the async result
*
* Finishes a default #GAppInfo lookup started by
* g_app_info_get_default_for_uri_scheme_async().
* Finishes a default [iface@Gio.AppInfo] lookup started by
* [func@Gio.AppInfo.get_default_for_uri_scheme_async].
*
* If no #GAppInfo is found, then @error will be set to %G_IO_ERROR_NOT_FOUND.
* If no [iface@Gio.AppInfo] is found, then @error will be set to
* [error@Gio.IOErrorEnum.NOT_FOUND].
*
* Returns: (transfer full): #GAppInfo for given @uri_scheme or
* %NULL on error.
* Returns: (transfer full): [iface@Gio.AppInfo] for given @uri_scheme or
* `NULL` on error.
*
* Since: 2.74
*/
@ -941,16 +941,16 @@ g_app_info_get_default_for_uri_scheme_finish (GAsyncResult *result,
/**
* g_app_info_get_default_for_type_finish:
* @result: a #GAsyncResult
* @error: (nullable): a #GError
* @result: the async result
*
* Finishes a default #GAppInfo lookup started by
* g_app_info_get_default_for_type_async().
* Finishes a default [iface@Gio.AppInfo] lookup started by
* [func@Gio.AppInfo.get_default_for_type_async].
*
* If no #GAppInfo is found, then @error will be set to %G_IO_ERROR_NOT_FOUND.
* If no #[iface@Gio.AppInfo] is found, then @error will be set to
* [error@Gio.IOErrorEnum.NOT_FOUND].
*
* Returns: (transfer full): #GAppInfo for given @content_type or
* %NULL on error.
* Returns: (transfer full): [iface@Gio.AppInfo] for given @content_type or
* `NULL` on error.
*
* Since: 2.74
*/
@ -969,19 +969,17 @@ g_app_info_get_default_for_type_finish (GAsyncResult *result,
/**
* g_app_info_launch_default_for_uri:
* @uri: the uri to show
* @context: (nullable): an optional #GAppLaunchContext
* @error: (nullable): return location for an error, or %NULL
* @context: (nullable): optional launch context
*
* Utility function that launches the default application
* registered to handle the specified uri. Synchronous I/O
* is done on the uri to detect the type of the file if
* required.
* Utility function that launches the default application registered to handle
* the specified uri. Synchronous I/O is done on the uri to detect the type of
* the file if required.
*
* The D-Busactivated applications don't have to be started if your application
* The D-Busactivated applications dont have to be started if your application
* terminates too soon after this function. To prevent this, use
* g_app_info_launch_default_for_uri_async() instead.
* [func@Gio.AppInfo.launch_default_for_uri_async] instead.
*
* Returns: %TRUE on success, %FALSE on error.
* Returns: `TRUE` on success, `FALSE` on error.
**/
gboolean
g_app_info_launch_default_for_uri (const char *uri,
@ -1197,17 +1195,17 @@ launch_default_app_for_uri_cb (GObject *object,
/**
* g_app_info_launch_default_for_uri_async:
* @uri: the uri to show
* @context: (nullable): an optional #GAppLaunchContext
* @cancellable: (nullable): a #GCancellable
* @callback: (nullable): a #GAsyncReadyCallback to call when the request is done
* @context: (nullable): optional launch context
* @cancellable: (nullable): a [class@Gio.Cancellable]
* @callback: (scope async) (nullable): a [type@Gio.AsyncReadyCallback] to call
* when the request is done
* @user_data: (nullable): data to pass to @callback
*
* Async version of g_app_info_launch_default_for_uri().
* Async version of [func@Gio.AppInfo.launch_default_for_uri].
*
* This version is useful if you are interested in receiving
* error information in the case where the application is
* sandboxed and the portal may present an application chooser
* dialog to the user.
* This version is useful if you are interested in receiving error information
* in the case where the application is sandboxed and the portal may present an
* application chooser dialog to the user.
*
* This is also useful if you want to be sure that the D-Busactivated
* applications are really started before termination and if you are interested
@ -1258,12 +1256,11 @@ g_app_info_launch_default_for_uri_async (const char *uri,
/**
* g_app_info_launch_default_for_uri_finish:
* @result: a #GAsyncResult
* @error: (nullable): return location for an error, or %NULL
* @result: the async result
*
* Finishes an asynchronous launch-default-for-uri operation.
*
* Returns: %TRUE if the launch was successful, %FALSE if @error is set
* Returns: `TRUE` if the launch was successful, `FALSE` if @error is set
*
* Since: 2.50
*/
@ -1278,12 +1275,12 @@ g_app_info_launch_default_for_uri_finish (GAsyncResult *result,
/**
* g_app_info_can_delete:
* @appinfo: a #GAppInfo
* @appinfo: the app info
*
* Obtains the information whether the #GAppInfo can be deleted.
* See g_app_info_delete().
* Obtains the information whether the [iface@Gio.AppInfo] can be deleted.
* See [method@Gio.AppInfo.delete].
*
* Returns: %TRUE if @appinfo can be deleted
* Returns: `TRUE` if @appinfo can be deleted
*
* Since: 2.20
*/
@ -1305,15 +1302,15 @@ g_app_info_can_delete (GAppInfo *appinfo)
/**
* g_app_info_delete: (virtual do_delete)
* @appinfo: a #GAppInfo
* @appinfo: the app info
*
* Tries to delete a #GAppInfo.
* Tries to delete a [iface@Gio.AppInfo].
*
* On some platforms, there may be a difference between user-defined
* #GAppInfos which can be deleted, and system-wide ones which cannot.
* See g_app_info_can_delete().
* [iface@Gio.AppInfo]s which can be deleted, and system-wide ones which cannot.
* See [method@Gio.AppInfo.can_delete].
*
* Returns: %TRUE if @appinfo has been deleted
* Returns: `TRUE` if @appinfo has been deleted
*
* Since: 2.20
*/
@ -1348,9 +1345,10 @@ G_DEFINE_TYPE_WITH_PRIVATE (GAppLaunchContext, g_app_launch_context, G_TYPE_OBJE
* g_app_launch_context_new:
*
* Creates a new application launch context. This is not normally used,
* instead you instantiate a subclass of this, such as #GdkAppLaunchContext.
* instead you instantiate a subclass of this, such as
* [`GdkAppLaunchContext`](https://docs.gtk.org/gdk4/class.AppLaunchContext.html).
*
* Returns: a #GAppLaunchContext.
* Returns: a launch context.
**/
GAppLaunchContext *
g_app_launch_context_new (void)
@ -1380,9 +1378,9 @@ g_app_launch_context_class_init (GAppLaunchContextClass *klass)
* @context: the object emitting the signal
* @startup_notify_id: the startup notification id for the failed launch
*
* The #GAppLaunchContext::launch-failed signal is emitted when a #GAppInfo launch
* fails. The startup notification id is provided, so that the launcher
* can cancel the startup notification.
* The [signal@Gio.AppLaunchContext::launch-failed] signal is emitted when a
* [iface@Gio.AppInfo] launch fails. The startup notification id is provided,
* so that the launcher can cancel the startup notification.
*
* Because a launch operation may involve spawning multiple instances of the
* target application, you should expect this signal to be emitted multiple
@ -1400,14 +1398,14 @@ g_app_launch_context_class_init (GAppLaunchContextClass *klass)
/**
* GAppLaunchContext::launch-started:
* @context: the object emitting the signal
* @info: the #GAppInfo that is about to be launched
* @info: the [iface@Gio.AppInfo] that is about to be launched
* @platform_data: (nullable): additional platform-specific data for this launch
*
* The #GAppLaunchContext::launch-started signal is emitted when a #GAppInfo is
* about to be launched. If non-null the @platform_data is an
* GVariant dictionary mapping strings to variants (ie `a{sv}`), which
* contains additional, platform-specific data about this launch. On
* UNIX, at least the `startup-notification-id` keys will be
* The [signal@Gio.AppLaunchContext::launch-started] signal is emitted when a
* [iface@Gio.AppInfo] is about to be launched. If non-null the
* @platform_data is an GVariant dictionary mapping strings to variants
* (ie `a{sv}`), which contains additional, platform-specific data about this
* launch. On UNIX, at least the `startup-notification-id` keys will be
* present.
*
* The value of the `startup-notification-id` key (type `s`) is a startup
@ -1415,8 +1413,9 @@ g_app_launch_context_class_init (GAppLaunchContextClass *klass)
* specification](https://specifications.freedesktop.org/startup-notification-spec/startup-notification-0.1.txt).
* It allows tracking the progress of the launchee through startup.
*
* It is guaranteed that this signal is followed by either a #GAppLaunchContext::launched or
* #GAppLaunchContext::launch-failed signal.
* It is guaranteed that this signal is followed by either a
* [signal@Gio.AppLaunchContext::launched] or
* [signal@Gio.AppLaunchContext::launch-failed] signal.
*
* Because a launch operation may involve spawning multiple instances of the
* target application, you should expect this signal to be emitted multiple
@ -1439,11 +1438,11 @@ g_app_launch_context_class_init (GAppLaunchContextClass *klass)
/**
* GAppLaunchContext::launched:
* @context: the object emitting the signal
* @info: the #GAppInfo that was just launched
* @info: the [iface@Gio.AppInfo] that was just launched
* @platform_data: additional platform-specific data for this launch
*
* The #GAppLaunchContext::launched signal is emitted when a #GAppInfo is successfully
* launched.
* The [signal@Gio.AppLaunchContext::launched] signal is emitted when a
* [iface@Gio.AppInfo] is successfully launched.
*
* Because a launch operation may involve spawning multiple instances of the
* target application, you should expect this signal to be emitted multiple
@ -1454,14 +1453,15 @@ g_app_launch_context_class_init (GAppLaunchContextClass *klass)
* platform-specific data about this launch. On UNIX, at least the
* `pid` and `startup-notification-id` keys will be present.
*
* Since 2.72 the `pid` may be 0 if the process id wasn't known (for
* Since 2.72 the `pid` may be 0 if the process id wasnt known (for
* example if the process was launched via D-Bus). The `pid` may not be
* set at all in subsequent releases.
*
* On Windows, `pid` is guaranteed to be valid only for the duration of the
* #GAppLaunchContext::launched signal emission; after the signal is emitted,
* GLib will call g_spawn_close_pid(). If you need to keep the #GPid after the
* signal has been emitted, then you can duplicate `pid` using `DuplicateHandle()`.
* [signal@Gio.AppLaunchContext::launched] signal emission; after the signal
* is emitted, GLib will call [func@GLib.spawn_close_pid]. If you need to
* keep the [alias@GLib.Pid] after the signal has been emitted, then you can
* duplicate `pid` using `DuplicateHandle()`.
*
* Since: 2.36
*/
@ -1486,12 +1486,12 @@ g_app_launch_context_init (GAppLaunchContext *context)
/**
* g_app_launch_context_setenv:
* @context: a #GAppLaunchContext
* @context: the launch context
* @variable: (type filename): the environment variable to set
* @value: (type filename): the value for to set the variable to.
*
* Arranges for @variable to be set to @value in the child's
* environment when @context is used to launch an application.
* Arranges for @variable to be set to @value in the childs environment when
* @context is used to launch an application.
*
* Since: 2.32
*/
@ -1513,11 +1513,11 @@ g_app_launch_context_setenv (GAppLaunchContext *context,
/**
* g_app_launch_context_unsetenv:
* @context: a #GAppLaunchContext
* @context: the launch context
* @variable: (type filename): the environment variable to remove
*
* Arranges for @variable to be unset in the child's environment
* when @context is used to launch an application.
* Arranges for @variable to be unset in the childs environment when @context
* is used to launch an application.
*
* Since: 2.32
*/
@ -1537,15 +1537,15 @@ g_app_launch_context_unsetenv (GAppLaunchContext *context,
/**
* g_app_launch_context_get_environment:
* @context: a #GAppLaunchContext
* @context: the launch context
*
* Gets the complete environment variable list to be passed to
* the child process when @context is used to launch an application.
* This is a %NULL-terminated array of strings, where each string has
* This is a `NULL`-terminated array of strings, where each string has
* the form `KEY=VALUE`.
*
* Returns: (array zero-terminated=1) (element-type filename) (transfer full):
* the child's environment
* the childs environment
*
* Since: 2.32
*/
@ -1562,9 +1562,9 @@ g_app_launch_context_get_environment (GAppLaunchContext *context)
/**
* g_app_launch_context_get_display:
* @context: a #GAppLaunchContext
* @info: a #GAppInfo
* @files: (element-type GFile): a #GList of #GFile objects
* @context: the launch context
* @info: the app info
* @files: (element-type GFile): a list of [iface@Gio.File] objects
*
* Gets the display string for the @context. This is used to ensure new
* applications are started on the same display as the launching
@ -1592,9 +1592,9 @@ g_app_launch_context_get_display (GAppLaunchContext *context,
/**
* g_app_launch_context_get_startup_notify_id:
* @context: a #GAppLaunchContext
* @info: a #GAppInfo
* @files: (element-type GFile): a #GList of #GFile objects
* @context: the launch context
* @info: the app info
* @files: (element-type GFile): list of [iface@Gio.File] objects
*
* Initiates startup notification for the application and returns the
* `XDG_ACTIVATION_TOKEN` or `DESKTOP_STARTUP_ID` for the launched operation,
@ -1610,8 +1610,8 @@ g_app_launch_context_get_display (GAppLaunchContext *context,
*
* Support for the XDG Activation Protocol was added in GLib 2.76.
*
* Returns: (nullable): a startup notification ID for the application, or %NULL if
* not supported.
* Returns: (nullable): a startup notification ID for the application, or `NULL` if
* not supported.
**/
char *
g_app_launch_context_get_startup_notify_id (GAppLaunchContext *context,
@ -1634,11 +1634,13 @@ g_app_launch_context_get_startup_notify_id (GAppLaunchContext *context,
/**
* g_app_launch_context_launch_failed:
* @context: a #GAppLaunchContext.
* @startup_notify_id: the startup notification id that was returned by g_app_launch_context_get_startup_notify_id().
* @context: the launch context
* @startup_notify_id: the startup notification id that was returned by
* [method@Gio.AppLaunchContext.get_startup_notify_id].
*
* Called when an application has failed to launch, so that it can cancel
* the application startup notification started in g_app_launch_context_get_startup_notify_id().
* the application startup notification started in
* [method@Gio.AppLaunchContext.get_startup_notify_id].
*
**/
void
@ -1756,7 +1758,7 @@ g_app_info_monitor_class_init (GAppInfoMonitorClass *class)
* Gets the #GAppInfoMonitor for the current thread-default main
* context.
*
* The #GAppInfoMonitor will emit a "changed" signal in the
* The #GAppInfoMonitor will emit a changed signal in the
* thread-default main context whenever the list of installed
* applications (as reported by g_app_info_get_all()) may have changed.
*

View File

@ -49,32 +49,47 @@ typedef struct _GAppLaunchContextPrivate GAppLaunchContextPrivate;
/**
* GAppInfoIface:
* @g_iface: The parent interface.
* @dup: Copies a #GAppInfo.
* @equal: Checks two #GAppInfos for equality.
* @get_id: Gets a string identifier for a #GAppInfo.
* @get_name: Gets the name of the application for a #GAppInfo.
* @get_description: Gets a short description for the application described by the #GAppInfo.
* @get_executable: Gets the executable name for the #GAppInfo.
* @get_icon: Gets the #GIcon for the #GAppInfo.
* @launch: Launches an application specified by the #GAppInfo.
* @supports_uris: Indicates whether the application specified supports launching URIs.
* @supports_files: Indicates whether the application specified accepts filename arguments.
* @dup: Copies a [iface@Gio.AppInfo].
* @equal: Checks two [iface@Gio.AppInfo]s for equality.
* @get_id: Gets a string identifier for a [iface@Gio.AppInfo].
* @get_name: Gets the name of the application for a [iface@Gio.AppInfo].
* @get_description: Gets a short description for the application described by
* the [iface@Gio.AppInfo].
* @get_executable: Gets the executable name for the [iface@Gio.AppInfo].
* @get_icon: Gets the [iface@Gio.Icon] for the [iface@Gio.AppInfo].
* @launch: Launches an application specified by the [iface@Gio.AppInfo].
* @supports_uris: Indicates whether the application specified supports
* launching URIs.
* @supports_files: Indicates whether the application specified accepts
* filename arguments.
* @launch_uris: Launches an application with a list of URIs.
* @should_show: Returns whether an application should be shown (e.g. when getting a list of installed applications).
* [FreeDesktop.Org Startup Notification Specification](http://standards.freedesktop.org/startup-notification-spec/startup-notification-latest.txt).
* @set_as_default_for_type: Sets an application as default for a given content type.
* @set_as_default_for_extension: Sets an application as default for a given file extension.
* @add_supports_type: Adds to the #GAppInfo information about supported file types.
* @can_remove_supports_type: Checks for support for removing supported file types from a #GAppInfo.
* @remove_supports_type: Removes a supported application type from a #GAppInfo.
* @can_delete: Checks if a #GAppInfo can be deleted. Since 2.20
* @do_delete: Deletes a #GAppInfo. Since 2.20
* @get_commandline: Gets the commandline for the #GAppInfo. Since 2.20
* @get_display_name: Gets the display name for the #GAppInfo. Since 2.24
* @set_as_last_used_for_type: Sets the application as the last used. See g_app_info_set_as_last_used_for_type().
* @get_supported_types: Retrieves the list of content types that @app_info claims to support.
* @launch_uris_async: Asynchronously launches an application with a list of URIs. (Since: 2.60)
* @launch_uris_finish: Finishes an operation started with @launch_uris_async. (Since: 2.60)
* @should_show: Returns whether an application should be shown (e.g. when
* getting a list of installed applications).
* [FreeDesktop.Org Startup Notification Specification](http://standards.freedesktop.org/startup-notification-spec/startup-notification-latest.txt).
* @set_as_default_for_type: Sets an application as default for a given content
* type.
* @set_as_default_for_extension: Sets an application as default for a given
* file extension.
* @add_supports_type: Adds to the [iface@Gio.AppInfo] information about
* supported file types.
* @can_remove_supports_type: Checks for support for removing supported file
* types from a [iface@Gio.AppInfo].
* @remove_supports_type: Removes a supported application type from a
* [iface@Gio.AppInfo].
* @can_delete: Checks if a [iface@Gio.AppInfo] can be deleted. (Since 2.20)
* @do_delete: Deletes a [iface@Gio.AppInfo]. (Since 2.20)
* @get_commandline: Gets the commandline for the [iface@Gio.AppInfo].
* (Since 2.20)
* @get_display_name: Gets the display name for the [iface@Gio.AppInfo].
* (Since 2.24)
* @set_as_last_used_for_type: Sets the application as the last used. See
* [method@Gio.AppInfo.set_as_last_used_for_type].
* @get_supported_types: Retrieves the list of content types that @app_info
* claims to support.
* @launch_uris_async: Asynchronously launches an application with a list of
* URIs. (Since: 2.60)
* @launch_uris_finish: Finishes an operation started with @launch_uris_async.
* (Since: 2.60)
* Application Information interface, for operating system portability.
*/

View File

@ -36,7 +36,7 @@
/**
* GBufferedInputStream:
*
* Buffered input stream implements #GFilterInputStream and provides
* Buffered input stream implements [class@Gio.FilterInputStream] and provides
* for buffered reads.
*
* By default, `GBufferedInputStream`'s buffer size is set at 4 kilobytes.
@ -176,7 +176,7 @@ g_buffered_input_stream_class_init (GBufferedInputStreamClass *klass)
/**
* g_buffered_input_stream_get_buffer_size:
* @stream: a #GBufferedInputStream
* @stream: a [class@Gio.BufferedInputStream]
*
* Gets the size of the input buffer.
*
@ -192,7 +192,7 @@ g_buffered_input_stream_get_buffer_size (GBufferedInputStream *stream)
/**
* g_buffered_input_stream_set_buffer_size:
* @stream: a #GBufferedInputStream
* @stream: a [class@Gio.BufferedInputStream]
* @size: a #gsize
*
* Sets the size of the internal buffer of @stream to @size, or to the
@ -319,12 +319,12 @@ g_buffered_input_stream_init (GBufferedInputStream *stream)
/**
* g_buffered_input_stream_new:
* @base_stream: a #GInputStream
* @base_stream: a [class@Gio.InputStream]
*
* Creates a new #GInputStream from the given @base_stream, with
* Creates a new [class@Gio.InputStream] from the given @base_stream, with
* a buffer set to the default size (4 kilobytes).
*
* Returns: a #GInputStream for the given @base_stream.
* Returns: a [class@Gio.InputStream] for the given @base_stream.
*/
GInputStream *
g_buffered_input_stream_new (GInputStream *base_stream)
@ -342,13 +342,13 @@ g_buffered_input_stream_new (GInputStream *base_stream)
/**
* g_buffered_input_stream_new_sized:
* @base_stream: a #GInputStream
* @base_stream: a [class@Gio.InputStream]
* @size: a #gsize
*
* Creates a new #GBufferedInputStream from the given @base_stream,
* Creates a new [class@Gio.BufferedInputStream] from the given @base_stream,
* with a buffer set to @size.
*
* Returns: a #GInputStream.
* Returns: a [class@Gio.InputStream].
*/
GInputStream *
g_buffered_input_stream_new_sized (GInputStream *base_stream,
@ -368,16 +368,17 @@ g_buffered_input_stream_new_sized (GInputStream *base_stream,
/**
* g_buffered_input_stream_fill:
* @stream: a #GBufferedInputStream
* @stream: a [class@Gio.BufferedInputStream]
* @count: the number of bytes that will be read from the stream
* @cancellable: (nullable): optional #GCancellable object, %NULL to ignore
* @error: location to store the error occurring, or %NULL to ignore
* @cancellable: (nullable): optional [class@Gio.Cancellable] object, `NULL` to ignore
* @error: location to store the error occurring, or `NULL` to ignore
*
* Tries to read @count bytes from the stream into the buffer.
* Will block during this read.
*
* If @count is zero, returns zero and does nothing. A value of @count
* larger than %G_MAXSSIZE will cause a %G_IO_ERROR_INVALID_ARGUMENT error.
* larger than `G_MAXSSIZE` will cause a
* [error@Gio.IOErrorEnum.INVALID_ARGUMENT] error.
*
* On success, the number of bytes read into the buffer is returned.
* It is not an error if this is not the same as the requested size, as it
@ -387,19 +388,19 @@ g_buffered_input_stream_new_sized (GInputStream *base_stream,
* If @count is -1 then the attempted read size is equal to the number of
* bytes that are required to fill the buffer.
*
* If @cancellable is not %NULL, then the operation can be cancelled by
* If @cancellable is not `NULL`, then the operation can be cancelled by
* triggering the cancellable object from another thread. If the operation
* was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. If an
* operation was partially finished when the operation was cancelled the
* was cancelled, the error [error@Gio.IOErrorEnum.CANCELLED] will be returned.
* If an operation was partially finished when the operation was cancelled the
* partial result will be returned, without an error.
*
* On error -1 is returned and @error is set accordingly.
* On error `-1` is returned and @error is set accordingly.
*
* For the asynchronous, non-blocking, version of this function, see
* g_buffered_input_stream_fill_async().
* [method@Gio.BufferedInputStream.fill_async].
*
* Returns: the number of bytes read into @stream's buffer, up to @count,
* or -1 on error.
* or `-1` on error.
*/
gssize
g_buffered_input_stream_fill (GBufferedInputStream *stream,
@ -453,18 +454,18 @@ async_fill_callback_wrapper (GObject *source_object,
/**
* g_buffered_input_stream_fill_async:
* @stream: a #GBufferedInputStream
* @stream: a [class@Gio.BufferedInputStream]
* @count: the number of bytes that will be read from the stream
* @io_priority: the [I/O priority](iface.AsyncResult.html#io-priority) of the request
* @cancellable: (nullable): optional #GCancellable object
* @callback: (scope async) (closure user_data): a #GAsyncReadyCallback
* @cancellable: (nullable): optional [class@Gio.Cancellable] object
* @callback: (scope async) (closure user_data): a [callback@Gio.AsyncReadyCallback]
* @user_data: a #gpointer
*
* Reads data into @stream's buffer asynchronously, up to @count size.
* @io_priority can be used to prioritize reads. For the synchronous
* version of this function, see g_buffered_input_stream_fill().
* version of this function, see [method@Gio.BufferedInputStream.fill].
*
* If @count is -1 then the attempted read size is equal to the number
* If @count is `-1` then the attempted read size is equal to the number
* of bytes that are required to fill the buffer.
*/
void
@ -519,9 +520,9 @@ g_buffered_input_stream_fill_async (GBufferedInputStream *stream,
/**
* g_buffered_input_stream_fill_finish:
* @stream: a #GBufferedInputStream
* @result: a #GAsyncResult
* @error: a #GError
* @stream: a [class@Gio.BufferedInputStream]
* @result: a [iface@Gio.AsyncResult]
* @error: a [type@GLib.Error]
*
* Finishes an asynchronous read.
*
@ -548,7 +549,7 @@ g_buffered_input_stream_fill_finish (GBufferedInputStream *stream,
/**
* g_buffered_input_stream_get_available:
* @stream: #GBufferedInputStream
* @stream: [class@Gio.BufferedInputStream]
*
* Gets the size of the available data within the stream.
*
@ -564,7 +565,7 @@ g_buffered_input_stream_get_available (GBufferedInputStream *stream)
/**
* g_buffered_input_stream_peek:
* @stream: a #GBufferedInputStream
* @stream: a [class@Gio.BufferedInputStream]
* @buffer: (array length=count) (element-type guint8): a pointer to
* an allocated chunk of memory
* @offset: a #gsize
@ -573,7 +574,7 @@ g_buffered_input_stream_get_available (GBufferedInputStream *stream)
* Peeks in the buffer, copying data of size @count into @buffer,
* offset @offset bytes.
*
* Returns: a #gsize of the number of bytes peeked, or -1 on error.
* Returns: a #gsize of the number of bytes peeked, or `-1` on error.
*/
gsize
g_buffered_input_stream_peek (GBufferedInputStream *stream,
@ -601,7 +602,7 @@ g_buffered_input_stream_peek (GBufferedInputStream *stream,
/**
* g_buffered_input_stream_peek_buffer:
* @stream: a #GBufferedInputStream
* @stream: a [class@Gio.BufferedInputStream]
* @count: (out): a #gsize to get the number of bytes available in the buffer
*
* Returns the buffer with the currently available bytes. The returned
@ -942,25 +943,25 @@ g_buffered_input_stream_truncate (GSeekable *seekable,
/**
* g_buffered_input_stream_read_byte:
* @stream: a #GBufferedInputStream
* @cancellable: (nullable): optional #GCancellable object, %NULL to ignore
* @error: location to store the error occurring, or %NULL to ignore
* @stream: a [class@Gio.BufferedInputStream]
* @cancellable: (nullable): optional [class@Gio.Cancellable] object, `NULL` to ignore
* @error: location to store the error occurring, or `NULL` to ignore
*
* Tries to read a single byte from the stream or the buffer. Will block
* during this read.
*
* On success, the byte read from the stream is returned. On end of stream
* -1 is returned but it's not an exceptional error and @error is not set.
* `-1` is returned but it's not an exceptional error and @error is not set.
*
* If @cancellable is not %NULL, then the operation can be cancelled by
* If @cancellable is not `NULL`, then the operation can be cancelled by
* triggering the cancellable object from another thread. If the operation
* was cancelled, the error %G_IO_ERROR_CANCELLED will be returned. If an
* operation was partially finished when the operation was cancelled the
* was cancelled, the error [error@Gio.IOErrorEnum.CANCELLED] will be returned.
* If an operation was partially finished when the operation was cancelled the
* partial result will be returned, without an error.
*
* On error -1 is returned and @error is set accordingly.
* On error `-1` is returned and @error is set accordingly.
*
* Returns: the byte read from the @stream, or -1 on end of stream or error.
* Returns: the byte read from the @stream, or `-1` on end of stream or error.
*/
int
g_buffered_input_stream_read_byte (GBufferedInputStream *stream,

View File

@ -175,7 +175,7 @@ g_buffered_output_stream_class_init (GBufferedOutputStreamClass *klass)
/**
* g_buffered_output_stream_get_buffer_size:
* @stream: a #GBufferedOutputStream.
* @stream: a [class@Gio.BufferedOutputStream].
*
* Gets the size of the buffer in the @stream.
*
@ -191,7 +191,7 @@ g_buffered_output_stream_get_buffer_size (GBufferedOutputStream *stream)
/**
* g_buffered_output_stream_set_buffer_size:
* @stream: a #GBufferedOutputStream.
* @stream: a [class@Gio.BufferedOutputStream].
* @size: a #gsize.
*
* Sets the size of the internal buffer to @size.
@ -233,12 +233,12 @@ g_buffered_output_stream_set_buffer_size (GBufferedOutputStream *stream,
/**
* g_buffered_output_stream_get_auto_grow:
* @stream: a #GBufferedOutputStream.
* @stream: a [class@Gio.BufferedOutputStream].
*
* Checks if the buffer automatically grows as data is added.
*
* Returns: %TRUE if the @stream's buffer automatically grows,
* %FALSE otherwise.
* Returns: `TRUE` if the @stream's buffer automatically grows,
* `FALSE` otherwise.
**/
gboolean
g_buffered_output_stream_get_auto_grow (GBufferedOutputStream *stream)
@ -250,7 +250,7 @@ g_buffered_output_stream_get_auto_grow (GBufferedOutputStream *stream)
/**
* g_buffered_output_stream_set_auto_grow:
* @stream: a #GBufferedOutputStream.
* @stream: a [class@Gio.BufferedOutputStream].
* @auto_grow: a #gboolean.
*
* Sets whether or not the @stream's buffer should automatically grow.
@ -361,11 +361,11 @@ g_buffered_output_stream_seekable_iface_init (GSeekableIface *iface)
/**
* g_buffered_output_stream_new:
* @base_stream: a #GOutputStream.
* @base_stream: a [class@Gio.OutputStream].
*
* Creates a new buffered output stream for a base stream.
*
* Returns: a #GOutputStream for the given @base_stream.
* Returns: a [class@Gio.OutputStream] for the given @base_stream.
**/
GOutputStream *
g_buffered_output_stream_new (GOutputStream *base_stream)
@ -383,12 +383,12 @@ g_buffered_output_stream_new (GOutputStream *base_stream)
/**
* g_buffered_output_stream_new_sized:
* @base_stream: a #GOutputStream.
* @base_stream: a [class@Gio.OutputStream].
* @size: a #gsize.
*
* Creates a new buffered output stream with a given buffer size.
*
* Returns: a #GOutputStream with an internal buffer set to @size.
* Returns: a [class@Gio.OutputStream] with an internal buffer set to @size.
**/
GOutputStream *
g_buffered_output_stream_new_sized (GOutputStream *base_stream,

View File

@ -4486,17 +4486,18 @@ g_desktop_app_info_get_desktop_ids_for_content_type (const gchar *content_type,
/**
* g_app_info_get_recommended_for_type:
* @content_type: the content type to find a #GAppInfo for
* @content_type: the content type to find a [iface@Gio.AppInfo] for
*
* Gets a list of recommended [iface@Gio.AppInfo]s for a given content type,
* i.e. those applications which claim to support the given content type
* exactly, and not by MIME type subclassing.
*
* Gets a list of recommended #GAppInfos for a given content type, i.e.
* those applications which claim to support the given content type exactly,
* and not by MIME type subclassing.
* Note that the first application of the list is the last used one, i.e.
* the last one for which g_app_info_set_as_last_used_for_type() has been
* called.
* the last one for which [method@Gio.AppInfo.set_as_last_used_for_type] has
* been called.
*
* Returns: (element-type GAppInfo) (transfer full): #GList of #GAppInfos
* for given @content_type or %NULL on error.
* Returns: (element-type GAppInfo) (transfer full): list of
* [iface@Gio.AppInfo]s for given @content_type or `NULL` on error.
*
* Since: 2.28
**/
@ -4528,14 +4529,14 @@ g_app_info_get_recommended_for_type (const gchar *content_type)
/**
* g_app_info_get_fallback_for_type:
* @content_type: the content type to find a #GAppInfo for
* @content_type: the content type to find a [iface@Gio.AppInfo] for
*
* Gets a list of fallback #GAppInfos for a given content type, i.e.
* those applications which claim to support the given content type
* by MIME type subclassing and not directly.
* Gets a list of fallback [iface@Gio.AppInfo]s for a given content type, i.e.
* those applications which claim to support the given content type by MIME
* type subclassing and not directly.
*
* Returns: (element-type GAppInfo) (transfer full): #GList of #GAppInfos
* for given @content_type or %NULL on error.
* Returns: (element-type GAppInfo) (transfer full): list of [iface@Gio.AppInfo]s
* for given @content_type or `NULL` on error.
*
* Since: 2.28
**/
@ -4580,15 +4581,15 @@ g_app_info_get_fallback_for_type (const gchar *content_type)
/**
* g_app_info_get_all_for_type:
* @content_type: the content type to find a #GAppInfo for
* @content_type: the content type to find a [iface@Gio.AppInfo] for
*
* Gets a list of all #GAppInfos for a given content type,
* including the recommended and fallback #GAppInfos. See
* g_app_info_get_recommended_for_type() and
* g_app_info_get_fallback_for_type().
* Gets a list of all [iface@Gio.AppInfo]s for a given content type,
* including the recommended and fallback [iface@Gio.AppInfo]s. See
* [func@Gio.AppInfo.get_recommended_for_type] and
* [func@Gio.AppInfo.get_fallback_for_type].
*
* Returns: (element-type GAppInfo) (transfer full): #GList of #GAppInfos
* for given @content_type or %NULL on error.
* Returns: (element-type GAppInfo) (transfer full): list of
* [iface@Gio.AppInfo]s for given @content_type.
**/
GList *
g_app_info_get_all_for_type (const char *content_type)
@ -4621,10 +4622,10 @@ g_app_info_get_all_for_type (const char *content_type)
* @content_type: a content type
*
* Removes all changes to the type associations done by
* g_app_info_set_as_default_for_type(),
* g_app_info_set_as_default_for_extension(),
* g_app_info_add_supports_type() or
* g_app_info_remove_supports_type().
* [method@Gio.AppInfo.set_as_default_for_type],
* [method@Gio.AppInfo.set_as_default_for_extension],
* [method@Gio.AppInfo.add_supports_type] or
* [method@Gio.AppInfo.remove_supports_type].
*
* Since: 2.20
*/
@ -4638,14 +4639,14 @@ g_app_info_reset_type_associations (const char *content_type)
/**
* g_app_info_get_default_for_type:
* @content_type: the content type to find a #GAppInfo for
* @must_support_uris: if %TRUE, the #GAppInfo is expected to
* support URIs
* @content_type: the content type to find a [iface@Gio.AppInfo] for
* @must_support_uris: if `TRUE`, the [iface@Gio.AppInfo] is expected to
* support URIs
*
* Gets the default #GAppInfo for a given content type.
* Gets the default [iface@Gio.AppInfo] for a given content type.
*
* Returns: (transfer full) (nullable): #GAppInfo for given @content_type or
* %NULL on error.
* Returns: (transfer full) (nullable): [iface@Gio.AppInfo] for given
* @content_type or `NULL` on error.
*/
GAppInfo *
g_app_info_get_default_for_type (const char *content_type,
@ -4899,11 +4900,12 @@ g_desktop_app_info_search (const gchar *search_string)
*
* For desktop files, this includes applications that have
* `NoDisplay=true` set or are excluded from display by means
* of `OnlyShowIn` or `NotShowIn`. See g_app_info_should_show().
* of `OnlyShowIn` or `NotShowIn`. See [method@Gio.AppInfo.should_show].
* The returned list does not include applications which have
* the `Hidden` key set.
*
* Returns: (element-type GAppInfo) (transfer full): a newly allocated #GList of references to #GAppInfos.
* Returns: (element-type GAppInfo) (transfer full): a newly allocated
* list of references to [iface@Gio.AppInfo]s.
**/
GList *
g_app_info_get_all (void)

View File

@ -195,11 +195,11 @@ g_filter_output_stream_init (GFilterOutputStream *stream)
/**
* g_filter_output_stream_get_base_stream:
* @stream: a #GFilterOutputStream.
* @stream: a [class@Gio.FilterOutputStream].
*
* Gets the base stream for the filter stream.
*
* Returns: (transfer none): a #GOutputStream.
* Returns: (transfer none): a [class@Gio.OutputStream].
**/
GOutputStream *
g_filter_output_stream_get_base_stream (GFilterOutputStream *stream)
@ -211,12 +211,12 @@ g_filter_output_stream_get_base_stream (GFilterOutputStream *stream)
/**
* g_filter_output_stream_get_close_base_stream:
* @stream: a #GFilterOutputStream.
* @stream: a [class@Gio.FilterOutputStream].
*
* Returns whether the base stream will be closed when @stream is
* closed.
*
* Returns: %TRUE if the base stream will be closed.
* Returns: `TRUE` if the base stream will be closed.
**/
gboolean
g_filter_output_stream_get_close_base_stream (GFilterOutputStream *stream)
@ -232,8 +232,8 @@ g_filter_output_stream_get_close_base_stream (GFilterOutputStream *stream)
/**
* g_filter_output_stream_set_close_base_stream:
* @stream: a #GFilterOutputStream.
* @close_base: %TRUE to close the base stream.
* @stream: a [class@Gio.FilterOutputStream].
* @close_base: `TRUE` to close the base stream.
*
* Sets whether the base stream will be closed when @stream is closed.
**/

View File

@ -231,7 +231,8 @@ test_connection_failed (void)
g_main_context_iteration (NULL, TRUE);
conn = g_socket_client_connect_to_uri_finish (client, async_result, &local_error);
g_assert_error (local_error, G_IO_ERROR, G_IO_ERROR_CONNECTION_REFUSED);
g_assert_nonnull (local_error);
g_assert_cmpint (local_error->domain, ==, G_IO_ERROR);
g_assert_null (conn);
g_clear_error (&local_error);
g_clear_object (&async_result);

View File

@ -227,6 +227,10 @@ test_invalid_header (void)
static void
test_record_ownership (void)
{
#ifndef HAVE_DN_COMP
g_test_skip ("The dn_comp() function was not available.");
return;
#else
GByteArray *answer = NULL, *txt_rdata = NULL;
GList *records = NULL;
GError *local_error = NULL;
@ -261,6 +265,7 @@ test_record_ownership (void)
g_list_free_full (records, (GDestroyNotify) g_variant_unref);
g_byte_array_free (answer, TRUE);
#endif
}
static void

View File

@ -57,14 +57,14 @@
/* If GLib itself is not compiled with ASAN sanitizer we may still want to
* control it in case it's linked by the loading application, so we need to
* do this check dynamically.
* However MinGW doesn't support weak attribute properly (even if it advertises
* However MinGW/Cygwin doesn't support weak attribute properly (even if it advertises
* it), so we ignore it in such case since it's not convenient to go through
* dlsym().
* Under MSVC we could use alternatename, but it doesn't seem to be as reliable
* as we'd like: https://stackoverflow.com/a/11529277/210151 and
* https://devblogs.microsoft.com/oldnewthing/20200731-00/?p=104024
*/
#elif defined (G_OS_UNIX) && !defined (__APPLE__) && g_macro__has_attribute (weak)
#elif defined (G_OS_UNIX) && !defined (__APPLE__) && !defined(__CYGWIN__) && g_macro__has_attribute (weak)
#define HAS_DYNAMIC_ASAN_LOADING

View File

@ -800,16 +800,38 @@ g_node_depth_traverse_level (GNode *node,
* efficient than the other orders.
*
* Specifies the type of traversal performed by g_tree_traverse(),
* g_node_traverse() and g_node_find(). The different orders are
* illustrated here:
* g_node_traverse() and g_node_find().
*
* The different orders are illustrated here:
*
* - In order: A, B, C, D, E, F, G, H, I
* ![](Sorted_binary_tree_inorder.svg)
* <picture>
* <source srcset="Sorted_binary_tree_inorder-dark.svg"
* media="(prefers-color-scheme: dark)">
* <img src="Sorted_binary_tree_inorder.svg"
* alt="Sorted binary tree, in-order traversal">
* </picture>
* - Pre order: F, B, A, D, C, E, G, I, H
* ![](Sorted_binary_tree_preorder.svg)
* <picture>
* <source srcset="Sorted_binary_tree_preorder-dark.svg"
* media="(prefers-color-scheme: dark)">
* <img src="Sorted_binary_tree_preorder.svg"
* alt="Sorted binary tree, pre-order traversal">
* </picture>
* - Post order: A, C, E, D, B, H, I, G, F
* ![](Sorted_binary_tree_postorder.svg)
* <picture>
* <source srcset="Sorted_binary_tree_postorder-dark.svg"
* media="(prefers-color-scheme: dark)">
* <img src="Sorted_binary_tree_postorder.svg"
* alt="Sorted binary tree, post-order traversal">
* </picture>
* - Level order: F, B, G, A, D, I, C, E, H
* ![](Sorted_binary_tree_breadth-first_traversal.svg)
* <picture>
* <source srcset="Sorted_binary_tree_breadth-first_traversal-dark.svg"
* media="(prefers-color-scheme: dark)">
* <img src="Sorted_binary_tree_breadth-first_traversal.svg"
* alt="Sorted binary tree, breadth-first level order traversal">
* </picture>
*/
/**

View File

@ -321,6 +321,8 @@ g_qsort_with_data (gconstpointer pbase,
* (like [`qsort_r()`](man:qsort_r(3))).
*
* Unlike `qsort()`, this is guaranteed to be a stable sort.
*
* Since: 2.82
*/
void
g_sort_array (const void *array,

View File

@ -136,7 +136,7 @@ _g_module_open (const gchar *file_name,
lock_dlerror ();
handle = dlopen (file_name,
(bind_local ? 0 : RTLD_GLOBAL) | (bind_lazy ? RTLD_LAZY : RTLD_NOW));
(bind_local ? RTLD_LOCAL : RTLD_GLOBAL) | (bind_lazy ? RTLD_LAZY : RTLD_NOW));
if (!handle)
{
const gchar *message = fetch_dlerror (TRUE);

View File

@ -233,6 +233,42 @@ test_module_invalid_libtool_archive (void)
g_free (la_filename);
}
static void
test_local_binding (void)
{
gchar *plugin = NULL;
GModule *module_plugin = NULL, *module_self = NULL;
GError *error = NULL;
gboolean found_symbol = FALSE;
gpointer symbol = NULL;
g_test_summary ("Test that binding a library's symbols locally does not add them globally");
#if defined(G_PLATFORM_WIN32)
g_test_skip ("G_MODULE_BIND_LOCAL is not supported on Windows.");
return;
#endif
plugin = g_test_build_filename (G_TEST_BUILT, MODULE_FILENAME_PREFIX "moduletestplugin_a_" MODULE_TYPE, NULL);
module_plugin = g_module_open_full (plugin, G_MODULE_BIND_LOCAL, &error);
g_assert_no_error (error);
g_assert_nonnull (module_plugin);
module_self = g_module_open_full (NULL, 0, &error);
g_assert_no_error (error);
g_assert_nonnull (module_self);
found_symbol = g_module_symbol (module_self, "gplugin_say_boo_func", &symbol);
g_assert_false (found_symbol);
g_assert_null (symbol);
g_module_close (module_self);
g_module_close (module_plugin);
g_free (plugin);
}
int
main (int argc, char *argv[])
{
@ -240,6 +276,7 @@ main (int argc, char *argv[])
g_test_add_func ("/module/basics", test_module_basics);
g_test_add_func ("/module/invalid-libtool-archive", test_module_invalid_libtool_archive);
g_test_add_func ("/module/local-binding", test_local_binding);
return g_test_run ();
}

View File

@ -1724,6 +1724,94 @@ guint g_type_get_type_registration_serial (void);
return G_TYPE_INSTANCE_GET_CLASS (ptr, module_obj_name##_get_type (), ModuleObjName##Class); } \
G_GNUC_END_IGNORE_DEPRECATIONS
/**
* G_DECLARE_PROTECTED_TYPE:
* @ModuleObjName: The name of the new type, in camel case (like GtkWidget)
* @module_obj_name: The name of the new type in lowercase, with words
* separated by '_' (like 'gtk_widget')
* @MODULE: The name of the module, in all caps (like 'GTK')
* @OBJ_NAME: The bare name of the type, in all caps (like 'WIDGET')
* @ParentName: the name of the parent type, in camel case (like GtkWidget)
*
* A convenience macro for emitting the usual declarations in the header file for a type which is not (at the
* present time) intended to be subclassed from outside a project.
*
* You might use it in a header as follows:
*
* |[
* #ifndef _myapp_window_h_
* #define _myapp_window_h_
*
* #include <gtk/gtk.h>
*
* #define MY_APP_TYPE_WINDOW my_app_window_get_type ()
* G_DECLARE_PROTECTED_TYPE (MyAppWindow, my_app_window, MY_APP, WINDOW, GtkWindow)
*
* MyAppWindow * my_app_window_new (void);
*
* ...
*
* #endif
* ]|
*
* This results in the following things happening:
*
* - the usual my_app_window_get_type() function is declared with a return type of #GType
*
* - the MyAppWindow types is defined as a typedef of struct _MyAppWindow. The struct itself is not
* defined and should be defined from the private .h file included in the source file before
* G_DEFINE_TYPE() is used.
*
* - the MY_APP_WINDOW() cast is emitted as static inline function along with the MY_APP_IS_WINDOW() type
* checking function.
*
* - the MY_APP_WINDOW_CLASS() cast is emitted as static inline functions along with the
* MY_APP_WINDOW_CLASS() type checking function; there is no MY_APP_WINDOW_GET_CLASS()
* accessor function for the class structure from an instance, as the class structure
* an opaque type.
*
* - the MyAppWindowClass type is defined as a typedef of struct _MyAppWindowClass. The struct itself
* is not define and should be defined from the private .h file included in the source file before
* G_DEFINE_TYPE() is used.
*
* - g_autoptr() support being added for your type, based on the type of your parent class.
*
* You can only use this function if your parent type also supports g_autoptr().
*
* Because the type macro (MY_APP_TYPE_WINDOW in the above example) is not a callable, you must continue to
* manually define this as a macro for yourself.
*
* The declaration of the _get_type() function is the first thing emitted by the macro. This allows this macro
* to be used in the usual way with export control and API versioning macros.
*
* If you want to declare a type derivable by users of your code, use G_DECLARE_DERIVABLE_TYPE().
*
* If you are writing a library, it is important to note that it is possible to convert a type from using
* G_DECLARE_FINAL_TYPE() to G_DECLARE_DERIVABLE_TYPE() without breaking API or ABI. As a precaution, you
* should therefore use G_DECLARE_FINAL_TYPE() until you are sure that it makes sense for your class to be
* subclassed. Once a class structure has been exposed it is not possible to change its size or remove or
* reorder items without breaking the API and/or ABI.
*
* Since: 2.64
**/
#define G_DECLARE_PROTECTED_TYPE(ModuleObjName, module_obj_name, MODULE, OBJ_NAME, ParentName) \
GType module_obj_name##_get_type (void); \
G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
typedef struct _##ModuleObjName ModuleObjName; \
typedef struct _##ModuleObjName##Class ModuleObjName##Class; \
\
_GLIB_DEFINE_AUTOPTR_CHAINUP (ModuleObjName, ParentName) \
\
G_GNUC_UNUSED static inline ModuleObjName * MODULE##_##OBJ_NAME (gpointer ptr) { \
return G_TYPE_CHECK_INSTANCE_CAST (ptr, module_obj_name##_get_type (), ModuleObjName); } \
G_GNUC_UNUSED static inline ModuleObjName##Class * MODULE##_##OBJ_NAME##_CLASS (gpointer ptr) { \
return G_TYPE_CHECK_CLASS_CAST (ptr, module_obj_name##_get_type (), ModuleObjName##Class); } \
G_GNUC_UNUSED static inline gboolean MODULE##_IS_##OBJ_NAME (gpointer ptr) { \
return G_TYPE_CHECK_INSTANCE_TYPE (ptr, module_obj_name##_get_type ()); } \
G_GNUC_UNUSED static inline gboolean MODULE##_IS_##OBJ_NAME##_CLASS (gpointer ptr) { \
return G_TYPE_CHECK_CLASS_TYPE (ptr, module_obj_name##_get_type ()); } \
G_GNUC_END_IGNORE_DEPRECATIONS
/**
* G_DECLARE_INTERFACE:
* @ModuleObjName: The name of the new type, in camel case (like `GtkWidget`)