Skip to content

Commit e616855

Browse files
authored
Merge pull request #899 from pbor/settings-strv
settings: implement strv setter and getter manually
2 parents 776120e + 658073d commit e616855

File tree

5 files changed

+73
-53
lines changed

5 files changed

+73
-53
lines changed

gio/Gir.toml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -806,6 +806,14 @@ status = "generate"
806806
name = "set_modification_time"
807807
# use SystemTime
808808
manual = true
809+
[[object.function]]
810+
name = "get_attribute_stringv"
811+
# use strv
812+
manual = true
813+
[[object.function]]
814+
name = "set_attribute_stringv"
815+
# use strv
816+
manual = true
809817

810818
[[object]]
811819
name = "Gio.FilterOutputStream"
@@ -1114,6 +1122,14 @@ status = "generate"
11141122
[object.function.return]
11151123
bool_return_is_error = "Can't set readonly key"
11161124
[[object.function]]
1125+
name = "get_strv"
1126+
# Use strv
1127+
manual = true
1128+
[[object.function]]
1129+
name = "set_strv"
1130+
# Use strv
1131+
manual = true
1132+
[[object.function]]
11171133
name = "bind"
11181134
manual = true
11191135
[[object.function]]

gio/src/auto/file_info.rs

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -138,17 +138,6 @@ impl FileInfo {
138138
}
139139
}
140140

141-
#[doc(alias = "g_file_info_get_attribute_stringv")]
142-
#[doc(alias = "get_attribute_stringv")]
143-
pub fn attribute_stringv(&self, attribute: &str) -> Vec<glib::GString> {
144-
unsafe {
145-
FromGlibPtrContainer::from_glib_none(ffi::g_file_info_get_attribute_stringv(
146-
self.to_glib_none().0,
147-
attribute.to_glib_none().0,
148-
))
149-
}
150-
}
151-
152141
#[doc(alias = "g_file_info_get_attribute_type")]
153142
#[doc(alias = "get_attribute_type")]
154143
pub fn attribute_type(&self, attribute: &str) -> FileAttributeType {
@@ -425,17 +414,6 @@ impl FileInfo {
425414
}
426415
}
427416

428-
#[doc(alias = "g_file_info_set_attribute_stringv")]
429-
pub fn set_attribute_stringv(&self, attribute: &str, attr_value: &[&str]) {
430-
unsafe {
431-
ffi::g_file_info_set_attribute_stringv(
432-
self.to_glib_none().0,
433-
attribute.to_glib_none().0,
434-
attr_value.to_glib_none().0,
435-
);
436-
}
437-
}
438-
439417
#[doc(alias = "g_file_info_set_attribute_uint32")]
440418
pub fn set_attribute_uint32(&self, attribute: &str, attr_value: u32) {
441419
unsafe {

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/file_info.rs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::{
55
time::{Duration, SystemTime},
66
};
77

8-
use glib::translate::*;
8+
use glib::{translate::*, IntoStrV, StrV};
99

1010
use crate::FileInfo;
1111

@@ -47,4 +47,28 @@ impl FileInfo {
4747
);
4848
}
4949
}
50+
51+
#[doc(alias = "g_file_info_get_attribute_stringv")]
52+
#[doc(alias = "get_attribute_stringv")]
53+
pub fn attribute_stringv(&self, attribute: &str) -> StrV {
54+
unsafe {
55+
FromGlibPtrContainer::from_glib_none(ffi::g_file_info_get_attribute_stringv(
56+
self.to_glib_none().0,
57+
attribute.to_glib_none().0,
58+
))
59+
}
60+
}
61+
62+
#[doc(alias = "g_file_info_set_attribute_stringv")]
63+
pub fn set_attribute_stringv(&self, attribute: &str, attr_value: impl IntoStrV) {
64+
unsafe {
65+
attr_value.run_with_strv(|attr_value| {
66+
ffi::g_file_info_set_attribute_stringv(
67+
self.to_glib_none().0,
68+
attribute.to_glib_none().0,
69+
attr_value.as_ptr() as *mut _,
70+
);
71+
});
72+
}
73+
}
5074
}

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)