@@ -162,17 +162,7 @@ mod imp {
162
162
163
163
// Monitoring ourselves cause an infinite loop.
164
164
if item. name ( ) != "pwvucontrol-peak-detect" {
165
- if let Ok ( provider) = LevelbarProvider :: new ( & self . obj ( ) , item. boundid ( ) ) {
166
- self . levelbarprovider . set ( provider) . expect ( "Provider not set already" ) ;
167
-
168
- self . timeoutid . set ( Some ( glib:: timeout_add_local (
169
- std:: time:: Duration :: from_millis ( 25 ) ,
170
- clone ! ( @weak self as obj => @default -panic, move || {
171
- obj. level_bar. set_value( obj. level. get( ) as f64 ) ;
172
- ControlFlow :: Continue
173
- } ) ,
174
- ) ) ) ;
175
- }
165
+ self . setuplevelbar ( ) ;
176
166
} else {
177
167
self . level_bar . set_visible ( false ) ;
178
168
}
@@ -215,6 +205,24 @@ mod imp {
215
205
fn invert_bool ( & self , value : bool ) -> bool {
216
206
!value
217
207
}
208
+
209
+ fn setuplevelbar ( & self ) {
210
+ let item = self . node_object . borrow ( ) ;
211
+ let item = item. as_ref ( ) . cloned ( ) . unwrap ( ) ;
212
+
213
+ if let Ok ( provider) = LevelbarProvider :: new ( & self . obj ( ) , item. boundid ( ) ) {
214
+ self . levelbarprovider . set ( provider) . expect ( "Provider not set already" ) ;
215
+
216
+ let obj = self . obj ( ) ;
217
+ self . timeoutid . set ( Some ( glib:: timeout_add_local (
218
+ std:: time:: Duration :: from_millis ( 25 ) ,
219
+ clone ! ( @strong obj => @default -panic, move || {
220
+ obj. imp( ) . level_bar. set_value( obj. imp( ) . level. get( ) as f64 ) ;
221
+ ControlFlow :: Continue
222
+ } ) ,
223
+ ) ) ) ;
224
+ }
225
+ }
218
226
}
219
227
}
220
228
0 commit comments