@@ -278,6 +278,29 @@ where
278
278
}
279
279
}
280
280
281
+ // rustdoc-stripper-ignore-next
282
+ /// Adds a closure to be called by the default main loop when it's idle.
283
+ ///
284
+ /// `func` will be called repeatedly with `priority` until it returns
285
+ /// `ControlFlow::Break`.
286
+ ///
287
+ /// The default main loop almost always is the main loop of the main thread.
288
+ /// Thus, the closure is called on the main thread.
289
+ #[ doc( alias = "g_idle_add_full" ) ]
290
+ pub fn idle_add_full < F > ( priority : Priority , func : F ) -> SourceId
291
+ where
292
+ F : FnMut ( ) -> ControlFlow + Send + ' static ,
293
+ {
294
+ unsafe {
295
+ from_glib ( ffi:: g_idle_add_full (
296
+ priority. into_glib ( ) ,
297
+ Some ( trampoline :: < F > ) ,
298
+ into_raw ( func) ,
299
+ Some ( destroy_closure :: < F > ) ,
300
+ ) )
301
+ }
302
+ }
303
+
281
304
// rustdoc-stripper-ignore-next
282
305
/// Adds a closure to be called by the default main loop when it's idle.
283
306
///
@@ -329,6 +352,39 @@ where
329
352
}
330
353
}
331
354
355
+ // rustdoc-stripper-ignore-next
356
+ /// Adds a closure to be called by the default main loop when it's idle.
357
+ ///
358
+ /// `func` will be called repeatedly with `priority` until it returns
359
+ /// `ControlFlow::Break`.
360
+ ///
361
+ /// The default main loop almost always is the main loop of the main thread.
362
+ /// Thus, the closure is called on the main thread.
363
+ ///
364
+ /// Different to `idle_add()`, this does not require `func` to be
365
+ /// `Send` but can only be called from the thread that owns the main context.
366
+ ///
367
+ /// This function panics if called from a different thread than the one that
368
+ /// owns the default main context.
369
+ #[ doc( alias = "g_idle_add_full" ) ]
370
+ pub fn idle_add_local_full < F > ( priority : Priority , func : F ) -> SourceId
371
+ where
372
+ F : FnMut ( ) -> ControlFlow + ' static ,
373
+ {
374
+ unsafe {
375
+ let context = MainContext :: default ( ) ;
376
+ let _acquire = context
377
+ . acquire ( )
378
+ . expect ( "default main context already acquired by another thread" ) ;
379
+ from_glib ( ffi:: g_idle_add_full (
380
+ priority. into_glib ( ) ,
381
+ Some ( trampoline_local :: < F > ) ,
382
+ into_raw_local ( func) ,
383
+ Some ( destroy_closure_local :: < F > ) ,
384
+ ) )
385
+ }
386
+ }
387
+
332
388
// rustdoc-stripper-ignore-next
333
389
/// Adds a closure to be called by the default main loop when it's idle.
334
390
///
@@ -380,6 +436,33 @@ where
380
436
}
381
437
}
382
438
439
+ // rustdoc-stripper-ignore-next
440
+ /// Adds a closure to be called by the default main loop at regular intervals
441
+ /// with millisecond granularity.
442
+ ///
443
+ /// `func` will be called repeatedly every `interval` milliseconds with `priority`
444
+ /// until it returns `ControlFlow::Break`. Precise timing is not guaranteed, the
445
+ /// timeout may be delayed by other events. Prefer `timeout_add_seconds` when
446
+ /// millisecond precision is not necessary.
447
+ ///
448
+ /// The default main loop almost always is the main loop of the main thread.
449
+ /// Thus, the closure is called on the main thread.
450
+ #[ doc( alias = "g_timeout_add_full" ) ]
451
+ pub fn timeout_add_full < F > ( interval : Duration , priority : Priority , func : F ) -> SourceId
452
+ where
453
+ F : FnMut ( ) -> ControlFlow + Send + ' static ,
454
+ {
455
+ unsafe {
456
+ from_glib ( ffi:: g_timeout_add_full (
457
+ priority. into_glib ( ) ,
458
+ interval. as_millis ( ) as _ ,
459
+ Some ( trampoline :: < F > ) ,
460
+ into_raw ( func) ,
461
+ Some ( destroy_closure :: < F > ) ,
462
+ ) )
463
+ }
464
+ }
465
+
383
466
// rustdoc-stripper-ignore-next
384
467
/// Adds a closure to be called by the default main loop at regular intervals
385
468
/// with millisecond granularity.
@@ -440,6 +523,43 @@ where
440
523
}
441
524
}
442
525
526
+ // rustdoc-stripper-ignore-next
527
+ /// Adds a closure to be called by the default main loop at regular intervals
528
+ /// with millisecond granularity.
529
+ ///
530
+ /// `func` will be called repeatedly every `interval` milliseconds with `priority`
531
+ /// until it returns `ControlFlow::Break`. Precise timing is not guaranteed, the
532
+ /// timeout may be delayed by other events. Prefer `timeout_add_seconds` when
533
+ /// millisecond precision is not necessary.
534
+ ///
535
+ /// The default main loop almost always is the main loop of the main thread.
536
+ /// Thus, the closure is called on the main thread.
537
+ ///
538
+ /// Different to `timeout_add()`, this does not require `func` to be
539
+ /// `Send` but can only be called from the thread that owns the main context.
540
+ ///
541
+ /// This function panics if called from a different thread than the one that
542
+ /// owns the main context.
543
+ #[ doc( alias = "g_timeout_add_full" ) ]
544
+ pub fn timeout_add_local_full < F > ( interval : Duration , priority : Priority , func : F ) -> SourceId
545
+ where
546
+ F : FnMut ( ) -> ControlFlow + ' static ,
547
+ {
548
+ unsafe {
549
+ let context = MainContext :: default ( ) ;
550
+ let _acquire = context
551
+ . acquire ( )
552
+ . expect ( "default main context already acquired by another thread" ) ;
553
+ from_glib ( ffi:: g_timeout_add_full (
554
+ priority. into_glib ( ) ,
555
+ interval. as_millis ( ) as _ ,
556
+ Some ( trampoline_local :: < F > ) ,
557
+ into_raw_local ( func) ,
558
+ Some ( destroy_closure_local :: < F > ) ,
559
+ ) )
560
+ }
561
+ }
562
+
443
563
// rustdoc-stripper-ignore-next
444
564
/// Adds a closure to be called by the default main loop at regular intervals
445
565
/// with millisecond granularity.
0 commit comments