1use serde::{Deserialize, Serialize};
2use zvariant::Type;
3
4/// Describes a relationship between one object and another.
5#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, Type, Hash)]
6pub enum RelationType {
7 /// Not a meaningful relationship; clients should not normally encounter this value.
8 Null = 0,
9
10 /// Object is a label for one or more other objects.
11 LabelFor,
12
13 /// Object is labelled by one or more other objects.
14 LabelledBy,
15
16 /// Object is an interactive object which modifies the state,
17 /// onscreen location, or other attributes of one or more target objects.
18 ControllerFor,
19
20 /// Object state, position, etc. is modified/controlled by user interaction
21 /// with one or more other objects.
22 /// For instance a viewport or scroll pane may be `ControlledBy` scrollbars.
23 ControlledBy,
24
25 /// Object has a grouping relationship (e.g. 'same group as') to one or more other objects.
26 MemberOf,
27
28 /// Object is a tooltip associated with another object.
29 TooltipFor,
30
31 /// Object is a child of the target.
32 NodeChildOf,
33
34 /// Object is a parent of the target.
35 NodeParentOf,
36
37 /// Used to indicate that a relationship exists, but its type is not
38 /// specified in the enumeration.
39 Extended,
40
41 /// Object renders content which flows logically to another object.
42 /// For instance, text in a paragraph may flow to another object
43 /// which is not the 'next sibling' in the accessibility hierarchy.
44 FlowsTo,
45
46 /// Reciprocal of `FlowsTo`.
47 FlowsFrom,
48
49 /// Object is visually and semantically considered a subwindow of another object,
50 /// even though it is not the object's child.
51 /// Useful when dealing with embedded applications and other cases where the
52 /// widget hierarchy does not map cleanly to the onscreen presentation.
53 SubwindowOf,
54
55 /// Similar to `SubwindowOf`, but specifically used for cross-process embedding.
56 Embeds,
57
58 /// Reciprocal of `Embeds`. Used to denote content rendered by embedded renderers
59 /// that live in a separate process space from the embedding context.
60 EmbeddedBy,
61
62 ///Denotes that the object is a transient window or frame associated with another
63 /// onscreen object. Similar to `TooltipFor`, but more general.
64 /// Useful for windows which are technically toplevels but which, for one or more reasons,
65 /// do not explicitly cause their associated window to lose 'window focus'.
66 /// Creation of an [`crate::Role::Window`] object with the `PopupFor` relation usually requires
67 /// some presentation action on the part of assistive technology clients,
68 /// even though the previous toplevel [`crate::Role::Frame`] object may still be the active window.
69 PopupFor,
70
71 /// This is the reciprocal relation to `PopupFor`.
72 ParentWindowOf,
73
74 /// Reciprocal of `DescribedBy`. Indicates that this object provides descriptive information
75 /// about the target object(s). See also `DetailsFor` and `ErrorFor`.
76 DescriptionFor,
77
78 /// Reciprocal of `DescriptionFor`.
79 /// Indicates that one or more target objects provide descriptive information
80 /// about this object. This relation type is most appropriate for information
81 /// that is not essential as its presentation may be user-configurable and/or
82 /// limited to an on-demand mechanism such as an assistive technology command.
83 /// For brief, essential information such as can be found in a widget's on-screen
84 /// label, use `LabelledBy`. For an on-screen error message, use `ErrorMessage`.
85 /// For lengthy extended descriptive information contained in an on-screen object,
86 /// consider using `Details` as assistive technologies may provide a means
87 /// for the user to navigate to objects containing detailed descriptions so that
88 /// their content can be more closely reviewed.
89 DescribedBy,
90
91 /// Reciprocal of `DetailsFor`.
92 /// Indicates that this object has a detailed or extended description,
93 /// the contents of which can be found in the target object(s).
94 /// This relation type is most appropriate for information that is sufficiently lengthy
95 /// as to make navigation to the container of that information desirable.
96 /// For less verbose information suitable for announcement only, see `DescribedBy`.
97 /// If the detailed information describes an error condition, `ErrorFor` should be used instead.
98 /// Included in upstream [AT-SPI2-CORE](https://gitlab.gnome.org/GNOME/at-spi2-core) since 2.26.
99 Details,
100
101 /// Reciprocal of `Details`.
102 /// Indicates that this object provides a detailed or extended description about the target
103 /// object(s). See also `DescriptionFor` and `ErrorFor`.
104 /// Included in upstream [AT-SPI2-CORE](https://gitlab.gnome.org/GNOME/at-spi2-core) since 2.26.
105 DetailsFor,
106
107 /// Reciprocal of `ErrorFor`.
108 /// Indicates that this object has one or more errors, the nature of which is
109 /// described in the contents of the target object(s). Objects that have this
110 /// relation type should also contain [`crate::state::State::InvalidEntry`] when their
111 /// `GetState` method is called.
112 /// Included in upstream [AT-SPI2-CORE](https://gitlab.gnome.org/GNOME/at-spi2-core) since 2.26.
113 ErrorMessage,
114
115 /// Reciprocal of `ErrorMessage`.
116 /// Indicates that this object contains an error message describing an invalid condition
117 /// in the target object(s).
118 /// Included in upstream [AT-SPI2-CORE](https://gitlab.gnome.org/GNOME/at-spi2-core) since 2.26.
119 ErrorFor,
120}
121