1use crate::ffi;
7use glib::{
8 object::ObjectType as _,
9 prelude::*,
10 signal::{connect_raw, SignalHandlerId},
11 translate::*,
12};
13use std::boxed::Box as Box_;
14
15glib::wrapper! {
16 #[doc(alias = "PanelLayeredSettings")]
17 pub struct LayeredSettings(Object<ffi::PanelLayeredSettings, ffi::PanelLayeredSettingsClass>);
18
19 match fn {
20 type_ => || ffi::panel_layered_settings_get_type(),
21 }
22}
23
24impl LayeredSettings {
25 #[doc(alias = "panel_layered_settings_new")]
26 pub fn new(schema_id: &str, path: &str) -> LayeredSettings {
27 assert_initialized_main_thread!();
28 unsafe {
29 from_glib_full(ffi::panel_layered_settings_new(
30 schema_id.to_glib_none().0,
31 path.to_glib_none().0,
32 ))
33 }
34 }
35
36 #[doc(alias = "panel_layered_settings_append")]
37 pub fn append(&self, settings: &impl IsA<gio::Settings>) {
38 unsafe {
39 ffi::panel_layered_settings_append(
40 self.to_glib_none().0,
41 settings.as_ref().to_glib_none().0,
42 );
43 }
44 }
45
46 #[doc(alias = "panel_layered_settings_get_boolean")]
47 #[doc(alias = "get_boolean")]
48 pub fn is_boolean(&self, key: &str) -> bool {
49 unsafe {
50 from_glib(ffi::panel_layered_settings_get_boolean(
51 self.to_glib_none().0,
52 key.to_glib_none().0,
53 ))
54 }
55 }
56
57 #[doc(alias = "panel_layered_settings_get_default_value")]
58 #[doc(alias = "get_default_value")]
59 pub fn default_value(&self, key: &str) -> glib::Variant {
60 unsafe {
61 from_glib_full(ffi::panel_layered_settings_get_default_value(
62 self.to_glib_none().0,
63 key.to_glib_none().0,
64 ))
65 }
66 }
67
68 #[doc(alias = "panel_layered_settings_get_double")]
69 #[doc(alias = "get_double")]
70 pub fn double(&self, key: &str) -> f64 {
71 unsafe {
72 ffi::panel_layered_settings_get_double(self.to_glib_none().0, key.to_glib_none().0)
73 }
74 }
75
76 #[doc(alias = "panel_layered_settings_get_int")]
77 #[doc(alias = "get_int")]
78 pub fn int(&self, key: &str) -> i32 {
79 unsafe { ffi::panel_layered_settings_get_int(self.to_glib_none().0, key.to_glib_none().0) }
80 }
81
82 #[doc(alias = "panel_layered_settings_get_key")]
83 #[doc(alias = "get_key")]
84 pub fn key(&self, key: &str) -> gio::SettingsSchemaKey {
85 unsafe {
86 from_glib_full(ffi::panel_layered_settings_get_key(
87 self.to_glib_none().0,
88 key.to_glib_none().0,
89 ))
90 }
91 }
92
93 #[doc(alias = "panel_layered_settings_get_string")]
94 #[doc(alias = "get_string")]
95 pub fn string(&self, key: &str) -> glib::GString {
96 unsafe {
97 from_glib_full(ffi::panel_layered_settings_get_string(
98 self.to_glib_none().0,
99 key.to_glib_none().0,
100 ))
101 }
102 }
103
104 #[doc(alias = "panel_layered_settings_get_uint")]
105 #[doc(alias = "get_uint")]
106 pub fn uint(&self, key: &str) -> u32 {
107 unsafe { ffi::panel_layered_settings_get_uint(self.to_glib_none().0, key.to_glib_none().0) }
108 }
109
110 #[doc(alias = "panel_layered_settings_get_user_value")]
111 #[doc(alias = "get_user_value")]
112 pub fn user_value(&self, key: &str) -> Option<glib::Variant> {
113 unsafe {
114 from_glib_full(ffi::panel_layered_settings_get_user_value(
115 self.to_glib_none().0,
116 key.to_glib_none().0,
117 ))
118 }
119 }
120
121 #[doc(alias = "panel_layered_settings_get_value")]
122 #[doc(alias = "get_value")]
123 pub fn value(&self, key: &str) -> glib::Variant {
124 unsafe {
125 from_glib_full(ffi::panel_layered_settings_get_value(
126 self.to_glib_none().0,
127 key.to_glib_none().0,
128 ))
129 }
130 }
131
132 #[doc(alias = "panel_layered_settings_list_keys")]
133 pub fn list_keys(&self) -> Vec<glib::GString> {
134 unsafe {
135 FromGlibPtrContainer::from_glib_full(ffi::panel_layered_settings_list_keys(
136 self.to_glib_none().0,
137 ))
138 }
139 }
140
141 #[doc(alias = "panel_layered_settings_set_boolean")]
142 pub fn set_boolean(&self, key: &str, val: bool) {
143 unsafe {
144 ffi::panel_layered_settings_set_boolean(
145 self.to_glib_none().0,
146 key.to_glib_none().0,
147 val.into_glib(),
148 );
149 }
150 }
151
152 #[doc(alias = "panel_layered_settings_set_double")]
153 pub fn set_double(&self, key: &str, val: f64) {
154 unsafe {
155 ffi::panel_layered_settings_set_double(
156 self.to_glib_none().0,
157 key.to_glib_none().0,
158 val,
159 );
160 }
161 }
162
163 #[doc(alias = "panel_layered_settings_set_int")]
164 pub fn set_int(&self, key: &str, val: i32) {
165 unsafe {
166 ffi::panel_layered_settings_set_int(self.to_glib_none().0, key.to_glib_none().0, val);
167 }
168 }
169
170 #[doc(alias = "panel_layered_settings_set_string")]
171 pub fn set_string(&self, key: &str, val: &str) {
172 unsafe {
173 ffi::panel_layered_settings_set_string(
174 self.to_glib_none().0,
175 key.to_glib_none().0,
176 val.to_glib_none().0,
177 );
178 }
179 }
180
181 #[doc(alias = "panel_layered_settings_set_uint")]
182 pub fn set_uint(&self, key: &str, val: u32) {
183 unsafe {
184 ffi::panel_layered_settings_set_uint(self.to_glib_none().0, key.to_glib_none().0, val);
185 }
186 }
187
188 #[doc(alias = "panel_layered_settings_set_value")]
189 pub fn set_value(&self, key: &str, value: &glib::Variant) {
190 unsafe {
191 ffi::panel_layered_settings_set_value(
192 self.to_glib_none().0,
193 key.to_glib_none().0,
194 value.to_glib_none().0,
195 );
196 }
197 }
198
199 #[doc(alias = "panel_layered_settings_unbind")]
200 pub fn unbind(&self, property: &str) {
201 unsafe {
202 ffi::panel_layered_settings_unbind(self.to_glib_none().0, property.to_glib_none().0);
203 }
204 }
205
206 pub fn path(&self) -> Option<glib::GString> {
207 ObjectExt::property(self, "path")
208 }
209
210 #[doc(alias = "schema-id")]
211 pub fn schema_id(&self) -> Option<glib::GString> {
212 ObjectExt::property(self, "schema-id")
213 }
214
215 #[doc(alias = "changed")]
216 pub fn connect_changed<F: Fn(&Self, &str) + 'static>(
217 &self,
218 detail: Option<&str>,
219 f: F,
220 ) -> SignalHandlerId {
221 unsafe extern "C" fn changed_trampoline<F: Fn(&LayeredSettings, &str) + 'static>(
222 this: *mut ffi::PanelLayeredSettings,
223 object: *mut std::ffi::c_char,
224 f: glib::ffi::gpointer,
225 ) {
226 let f: &F = &*(f as *const F);
227 f(
228 &from_glib_borrow(this),
229 &glib::GString::from_glib_borrow(object),
230 )
231 }
232 unsafe {
233 let f: Box_<F> = Box_::new(f);
234 let detailed_signal_name = detail.map(|name| format!("changed::{name}\0"));
235 let signal_name: &[u8] = detailed_signal_name
236 .as_ref()
237 .map_or(c"changed".to_bytes(), |n| n.as_bytes());
238 connect_raw(
239 self.as_ptr() as *mut _,
240 signal_name.as_ptr() as *const _,
241 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
242 changed_trampoline::<F> as *const (),
243 )),
244 Box_::into_raw(f),
245 )
246 }
247 }
248}