Skip to content

Commit 89905bd

Browse files
committed
settings: implement strv setter and getter manually
1 parent 776120e commit 89905bd

File tree

3 files changed

+40
-30
lines changed

3 files changed

+40
-30
lines changed

gio/Gir.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,6 +1114,14 @@ status = "generate"
11141114
[object.function.return]
11151115
bool_return_is_error = "Can't set readonly key"
11161116
[[object.function]]
1117+
name = "get_strv"
1118+
# Use strv
1119+
manual = true
1120+
[[object.function]]
1121+
name = "set_strv"
1122+
# Use strv
1123+
manual = true
1124+
[[object.function]]
11171125
name = "bind"
11181126
manual = true
11191127
[[object.function]]

gio/src/auto/settings.rs

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -162,10 +162,6 @@ pub trait SettingsExt: 'static {
162162
#[doc(alias = "get_string")]
163163
fn string(&self, key: &str) -> glib::GString;
164164

165-
#[doc(alias = "g_settings_get_strv")]
166-
#[doc(alias = "get_strv")]
167-
fn strv(&self, key: &str) -> Vec<glib::GString>;
168-
169165
#[doc(alias = "g_settings_get_uint")]
170166
#[doc(alias = "get_uint")]
171167
fn uint(&self, key: &str) -> u32;
@@ -218,9 +214,6 @@ pub trait SettingsExt: 'static {
218214
#[doc(alias = "g_settings_set_string")]
219215
fn set_string(&self, key: &str, value: &str) -> Result<(), glib::error::BoolError>;
220216

221-
#[doc(alias = "g_settings_set_strv")]
222-
fn set_strv(&self, key: &str, value: &[&str]) -> Result<(), glib::error::BoolError>;
223-
224217
#[doc(alias = "g_settings_set_uint")]
225218
fn set_uint(&self, key: &str, value: u32) -> Result<(), glib::error::BoolError>;
226219

@@ -385,15 +378,6 @@ impl<O: IsA<Settings>> SettingsExt for O {
385378
}
386379
}
387380

388-
fn strv(&self, key: &str) -> Vec<glib::GString> {
389-
unsafe {
390-
FromGlibPtrContainer::from_glib_full(ffi::g_settings_get_strv(
391-
self.as_ref().to_glib_none().0,
392-
key.to_glib_none().0,
393-
))
394-
}
395-
}
396-
397381
fn uint(&self, key: &str) -> u32 {
398382
unsafe { ffi::g_settings_get_uint(self.as_ref().to_glib_none().0, key.to_glib_none().0) }
399383
}
@@ -544,19 +528,6 @@ impl<O: IsA<Settings>> SettingsExt for O {
544528
}
545529
}
546530

547-
fn set_strv(&self, key: &str, value: &[&str]) -> Result<(), glib::error::BoolError> {
548-
unsafe {
549-
glib::result_from_gboolean!(
550-
ffi::g_settings_set_strv(
551-
self.as_ref().to_glib_none().0,
552-
key.to_glib_none().0,
553-
value.to_glib_none().0
554-
),
555-
"Can't set readonly key"
556-
)
557-
}
558-
}
559-
560531
fn set_uint(&self, key: &str, value: u32) -> Result<(), glib::error::BoolError> {
561532
unsafe {
562533
glib::result_from_gboolean!(

gio/src/settings.rs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Take a look at the license at the top of the repository in the LICENSE file.
22

3-
use glib::{prelude::*, translate::*, variant::FromVariant, BoolError, Variant};
3+
use glib::{prelude::*, translate::*, variant::FromVariant, BoolError, IntoStrV, StrV, Variant};
44

55
use crate::{prelude::*, Settings, SettingsBindFlags};
66

@@ -170,6 +170,13 @@ pub trait SettingsExtManual {
170170

171171
fn set(&self, key: &str, value: impl Into<Variant>) -> Result<(), BoolError>;
172172

173+
#[doc(alias = "g_settings_get_strv")]
174+
#[doc(alias = "get_strv")]
175+
fn strv(&self, key: &str) -> StrV;
176+
177+
#[doc(alias = "g_settings_set_strv")]
178+
fn set_strv(&self, key: &str, value: impl IntoStrV) -> Result<(), glib::error::BoolError>;
179+
173180
#[doc(alias = "g_settings_bind")]
174181
#[doc(alias = "g_settings_bind_with_mapping")]
175182
fn bind<'a, P: IsA<glib::Object>>(
@@ -196,6 +203,30 @@ impl<O: IsA<Settings>> SettingsExtManual for O {
196203
self.set_value(key, &value.into())
197204
}
198205

206+
fn strv(&self, key: &str) -> StrV {
207+
unsafe {
208+
FromGlibPtrContainer::from_glib_full(ffi::g_settings_get_strv(
209+
self.as_ref().to_glib_none().0,
210+
key.to_glib_none().0,
211+
))
212+
}
213+
}
214+
215+
fn set_strv(&self, key: &str, value: impl IntoStrV) -> Result<(), glib::error::BoolError> {
216+
unsafe {
217+
value.run_with_strv(|value| {
218+
glib::result_from_gboolean!(
219+
ffi::g_settings_set_strv(
220+
self.as_ref().to_glib_none().0,
221+
key.to_glib_none().0,
222+
value.as_ptr() as *mut _,
223+
),
224+
"Can't set readonly key"
225+
)
226+
})
227+
}
228+
}
229+
199230
fn bind<'a, P: IsA<glib::Object>>(
200231
&'a self,
201232
key: &'a str,

0 commit comments

Comments
 (0)