3
3
#[ cfg( all( unix, feature = "v2_58" ) ) ]
4
4
use std:: boxed:: Box as Box_ ;
5
5
#[ cfg( all( unix, feature = "v2_58" ) ) ]
6
- use std:: os:: unix:: io:: AsRawFd ;
6
+ use std:: os:: unix:: io:: { AsFd , AsRawFd } ;
7
7
#[ cfg( all( unix, feature = "v2_58" ) ) ]
8
8
use std:: ptr;
9
9
@@ -54,21 +54,16 @@ mod sealed {
54
54
pub trait DesktopAppInfoExtManual : sealed:: Sealed + IsA < DesktopAppInfo > {
55
55
#[ cfg_attr( docsrs, doc( cfg( all( feature = "v2_58" , unix) ) ) ) ]
56
56
#[ doc( alias = "g_desktop_app_info_launch_uris_as_manager_with_fds" ) ]
57
- fn launch_uris_as_manager_with_fds <
58
- P : IsA < AppLaunchContext > ,
59
- T : AsRawFd ,
60
- U : AsRawFd ,
61
- V : AsRawFd ,
62
- > (
57
+ fn launch_uris_as_manager_with_fds < P : IsA < AppLaunchContext > > (
63
58
& self ,
64
59
uris : & [ & str ] ,
65
60
launch_context : Option < & P > ,
66
61
spawn_flags : glib:: SpawnFlags ,
67
62
user_setup : Option < Box_ < dyn FnOnce ( ) + ' static > > ,
68
63
pid_callback : Option < & mut dyn ( FnMut ( & DesktopAppInfo , glib:: Pid ) ) > ,
69
- stdin_fd : & mut T ,
70
- stdout_fd : & mut U ,
71
- stderr_fd : & mut V ,
64
+ stdin_fd : Option < impl AsFd > ,
65
+ stdout_fd : Option < impl AsFd > ,
66
+ stderr_fd : Option < impl AsFd > ,
72
67
) -> Result < ( ) , Error > {
73
68
let user_setup_data: Box_ < Option < Box_ < dyn FnOnce ( ) + ' static > > > = Box_ :: new ( user_setup) ;
74
69
unsafe extern "C" fn user_setup_func ( user_data : glib:: ffi:: gpointer ) {
@@ -105,6 +100,10 @@ pub trait DesktopAppInfoExtManual: sealed::Sealed + IsA<DesktopAppInfo> {
105
100
let super_callback0: Box_ < Option < Box_ < dyn FnOnce ( ) + ' static > > > = user_setup_data;
106
101
let super_callback1: & Option < & mut dyn ( FnMut ( & DesktopAppInfo , glib:: Pid ) ) > =
107
102
& pid_callback_data;
103
+
104
+ let stdin_raw_fd = stdin_fd. map_or ( -1 , |fd| fd. as_fd ( ) . as_raw_fd ( ) ) ;
105
+ let stdout_raw_fd = stdout_fd. map_or ( -1 , |fd| fd. as_fd ( ) . as_raw_fd ( ) ) ;
106
+ let stderr_raw_fd = stderr_fd. map_or ( -1 , |fd| fd. as_fd ( ) . as_raw_fd ( ) ) ;
108
107
unsafe {
109
108
let mut error = ptr:: null_mut ( ) ;
110
109
let _ = ffi:: g_desktop_app_info_launch_uris_as_manager_with_fds (
@@ -116,9 +115,9 @@ pub trait DesktopAppInfoExtManual: sealed::Sealed + IsA<DesktopAppInfo> {
116
115
Box_ :: into_raw ( super_callback0) as * mut _ ,
117
116
pid_callback,
118
117
super_callback1 as * const _ as * mut _ ,
119
- stdin_fd . as_raw_fd ( ) ,
120
- stdout_fd . as_raw_fd ( ) ,
121
- stderr_fd . as_raw_fd ( ) ,
118
+ stdin_raw_fd ,
119
+ stdout_raw_fd ,
120
+ stderr_raw_fd ,
122
121
& mut error,
123
122
) ;
124
123
if error. is_null ( ) {
0 commit comments