Skip to content

Commit e79791a

Browse files
authored
Merge pull request #506 from gtk-rs/bilelmoussaoui/gdk-drop-fixes
Drop api fixes
2 parents 2cb43db + 67894aa commit e79791a

File tree

3 files changed

+60
-60
lines changed

3 files changed

+60
-60
lines changed

gdk4/Gir.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,10 @@ name = "Gdk.Drop"
429429
status = "generate"
430430
[[object.function]]
431431
name = "read_async"
432-
manual = true # const ptr
432+
manual = true # don't require Send
433+
[[object.function]]
434+
name = "read_value_async"
435+
manual = true # don't require Send
433436

434437
[[object]]
435438
name = "Gdk.Event"

gdk4/src/auto/drop.rs

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,13 @@ use crate::Display;
88
use crate::Drag;
99
use crate::DragAction;
1010
use crate::Surface;
11-
use glib::object::IsA;
1211
use glib::object::ObjectType as ObjectType_;
1312
use glib::signal::connect_raw;
1413
use glib::signal::SignalHandlerId;
1514
use glib::translate::*;
1615
use std::boxed::Box as Box_;
1716
use std::fmt;
1817
use std::mem::transmute;
19-
use std::pin::Pin;
20-
use std::ptr;
2118

2219
glib::wrapper! {
2320
#[doc(alias = "GdkDrop")]
@@ -72,61 +69,6 @@ impl Drop {
7269
unsafe { from_glib_none(ffi::gdk_drop_get_surface(self.to_glib_none().0)) }
7370
}
7471

75-
#[doc(alias = "gdk_drop_read_value_async")]
76-
pub fn read_value_async<
77-
P: IsA<gio::Cancellable>,
78-
Q: FnOnce(Result<glib::Value, glib::Error>) + Send + 'static,
79-
>(
80-
&self,
81-
type_: glib::types::Type,
82-
io_priority: glib::Priority,
83-
cancellable: Option<&P>,
84-
callback: Q,
85-
) {
86-
let user_data: Box_<Q> = Box_::new(callback);
87-
unsafe extern "C" fn read_value_async_trampoline<
88-
Q: FnOnce(Result<glib::Value, glib::Error>) + Send + 'static,
89-
>(
90-
_source_object: *mut glib::gobject_ffi::GObject,
91-
res: *mut gio::ffi::GAsyncResult,
92-
user_data: glib::ffi::gpointer,
93-
) {
94-
let mut error = ptr::null_mut();
95-
let ret = ffi::gdk_drop_read_value_finish(_source_object as *mut _, res, &mut error);
96-
let result = if error.is_null() {
97-
Ok(from_glib_none(ret))
98-
} else {
99-
Err(from_glib_full(error))
100-
};
101-
let callback: Box_<Q> = Box_::from_raw(user_data as *mut _);
102-
callback(result);
103-
}
104-
let callback = read_value_async_trampoline::<Q>;
105-
unsafe {
106-
ffi::gdk_drop_read_value_async(
107-
self.to_glib_none().0,
108-
type_.into_glib(),
109-
io_priority.into_glib(),
110-
cancellable.map(|p| p.as_ref()).to_glib_none().0,
111-
Some(callback),
112-
Box_::into_raw(user_data) as *mut _,
113-
);
114-
}
115-
}
116-
117-
pub fn read_value_async_future(
118-
&self,
119-
type_: glib::types::Type,
120-
io_priority: glib::Priority,
121-
) -> Pin<Box_<dyn std::future::Future<Output = Result<glib::Value, glib::Error>> + 'static>>
122-
{
123-
Box_::pin(gio::GioFuture::new(self, move |obj, cancellable, send| {
124-
obj.read_value_async(type_, io_priority, Some(cancellable), move |res| {
125-
send.resolve(res);
126-
});
127-
}))
128-
}
129-
13072
#[doc(alias = "gdk_drop_status")]
13173
pub fn status(&self, actions: DragAction, preferred: DragAction) {
13274
unsafe {

gdk4/src/drop.rs

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ impl Drop {
3838
&mut error,
3939
);
4040
let result = if error.is_null() {
41-
Ok((from_glib_full(ret), from_glib_full(out_mime_type)))
41+
Ok((from_glib_full(ret), from_glib_none(out_mime_type)))
4242
} else {
4343
Err(from_glib_full(error))
4444
};
@@ -79,4 +79,59 @@ impl Drop {
7979
});
8080
}))
8181
}
82+
83+
#[doc(alias = "gdk_drop_read_value_async")]
84+
pub fn read_value_async<
85+
P: IsA<gio::Cancellable>,
86+
Q: FnOnce(Result<glib::Value, glib::Error>) + 'static,
87+
>(
88+
&self,
89+
type_: glib::types::Type,
90+
io_priority: glib::Priority,
91+
cancellable: Option<&P>,
92+
callback: Q,
93+
) {
94+
let user_data: Box<Q> = Box::new(callback);
95+
unsafe extern "C" fn read_value_async_trampoline<
96+
Q: FnOnce(Result<glib::Value, glib::Error>) + 'static,
97+
>(
98+
_source_object: *mut glib::gobject_ffi::GObject,
99+
res: *mut gio::ffi::GAsyncResult,
100+
user_data: glib::ffi::gpointer,
101+
) {
102+
let mut error = ptr::null_mut();
103+
let ret = ffi::gdk_drop_read_value_finish(_source_object as *mut _, res, &mut error);
104+
let result = if error.is_null() {
105+
Ok(from_glib_none(ret))
106+
} else {
107+
Err(from_glib_full(error))
108+
};
109+
let callback: Box<Q> = Box::from_raw(user_data as *mut _);
110+
callback(result);
111+
}
112+
let callback = read_value_async_trampoline::<Q>;
113+
unsafe {
114+
ffi::gdk_drop_read_value_async(
115+
self.to_glib_none().0,
116+
type_.into_glib(),
117+
io_priority.into_glib(),
118+
cancellable.map(|p| p.as_ref()).to_glib_none().0,
119+
Some(callback),
120+
Box::into_raw(user_data) as *mut _,
121+
);
122+
}
123+
}
124+
125+
pub fn read_value_async_future(
126+
&self,
127+
type_: glib::types::Type,
128+
io_priority: glib::Priority,
129+
) -> Pin<Box<dyn std::future::Future<Output = Result<glib::Value, glib::Error>> + 'static>>
130+
{
131+
Box::pin(gio::GioFuture::new(self, move |obj, cancellable, send| {
132+
obj.read_value_async(type_, io_priority, Some(cancellable), move |res| {
133+
send.resolve(res);
134+
});
135+
}))
136+
}
82137
}

0 commit comments

Comments
 (0)