Skip to content

Commit 2154a52

Browse files
committed
Make SendWeakRef useable with the Properties derive macro
1 parent b8946e5 commit 2154a52

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

glib-macros/tests/properties.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@ mod foo {
149149
overridden: PhantomData<u32>,
150150
#[property(get, set)]
151151
weak_ref_prop: glib::WeakRef<glib::Object>,
152+
#[property(get, set)]
153+
send_weak_ref_prop: glib::SendWeakRef<glib::Object>,
152154
}
153155

154156
impl ObjectImpl for Foo {

glib/src/property.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use std::sync::RwLock;
1212
use crate::HasParamSpec;
1313
use crate::IsA;
1414
use crate::Object;
15+
use crate::SendWeakRef;
1516
use crate::WeakRef;
1617

1718
// rustdoc-stripper-ignore-next
@@ -56,6 +57,9 @@ impl<T: Property> Property for Arc<T> {
5657
impl<T: IsA<Object> + HasParamSpec> Property for WeakRef<T> {
5758
type Value = Option<T>;
5859
}
60+
impl<T: IsA<Object> + HasParamSpec> Property for SendWeakRef<T> {
61+
type Value = Option<T>;
62+
}
5963

6064
// rustdoc-stripper-ignore-next
6165
/// A container type implementing this trait can be read by the default getter generated by the `Props` macro.
@@ -189,6 +193,20 @@ impl<T: IsA<Object>> PropertySet for WeakRef<T> {
189193
self.set(v.as_ref())
190194
}
191195
}
196+
impl<T: IsA<Object>> PropertyGet for SendWeakRef<T> {
197+
type Value = Option<T>;
198+
199+
fn get<R, F: Fn(&Self::Value) -> R>(&self, f: F) -> R {
200+
f(&self.upgrade())
201+
}
202+
}
203+
impl<T: IsA<Object>> PropertySet for SendWeakRef<T> {
204+
type SetValue = Option<T>;
205+
206+
fn set(&self, v: Self::SetValue) {
207+
WeakRef::set(self, v.as_ref());
208+
}
209+
}
192210

193211
// Smart pointers wrapping a `PropertyRead`/`PropertyWrite`
194212
impl<T: PropertyGet> PropertyGet for Rc<T> {

0 commit comments

Comments
 (0)