3
3
use std:: { fmt:: Debug , time:: Duration } ;
4
4
5
5
use crate :: ui:: PwVolumeBox ;
6
- use glib:: { self , clone, ControlFlow } ;
6
+ use glib:: { self , clone, ControlFlow , SourceId } ;
7
7
use pipewire:: { context:: Context , loop_:: Loop , properties:: * , spa, spa:: utils:: Direction , stream:: * } ;
8
8
use std:: os:: fd:: AsRawFd ;
9
9
@@ -14,6 +14,7 @@ pub struct LevelbarProvider {
14
14
_context : Context ,
15
15
stream : Option < Stream > ,
16
16
_listener : StreamListener < f32 > ,
17
+ sig : Option < SourceId > ,
17
18
}
18
19
19
20
impl Debug for LevelbarProvider {
@@ -30,7 +31,7 @@ impl LevelbarProvider {
30
31
31
32
let fd = loop_. fd ( ) ;
32
33
33
- glib:: source:: unix_fd_add_local ( fd. as_raw_fd ( ) , glib:: IOCondition :: all ( ) , {
34
+ let sig = glib:: source:: unix_fd_add_local ( fd. as_raw_fd ( ) , glib:: IOCondition :: all ( ) , {
34
35
let loop_ = loop_. clone ( ) ;
35
36
move |_, _| {
36
37
loop_. iterate ( Duration :: ZERO ) ;
@@ -99,6 +100,7 @@ impl LevelbarProvider {
99
100
_context : context,
100
101
stream : Some ( stream) ,
101
102
_listener : listener,
103
+ sig : Some ( sig)
102
104
} )
103
105
}
104
106
}
@@ -108,6 +110,9 @@ impl Drop for LevelbarProvider {
108
110
if let Some ( stream) = self . stream . take ( ) {
109
111
stream. disconnect ( ) . unwrap ( ) ;
110
112
}
113
+ if let Some ( sig) = self . sig . take ( ) {
114
+ sig. remove ( ) ;
115
+ }
111
116
}
112
117
}
113
118
0 commit comments