mirror of
https://github.com/fltk/fltk.git
synced 2026-05-30 13:05:35 +08:00
macOS: Fix a timer inconsistency and prevent a crash
Calling Fl::repeat_timeout() instead of Fl::add_timeout() to create
a timer would crash on macOS but fall back to Fl::add_timeout() on
Windows and Unix/Linux. Although this is documented as "undefined
behavior" a crash should always be avoided and the fallback is now
consistent on all major platforms.
Backported from 1.4: 87475c20d6
This commit is contained in:
+5
-3
@@ -1,9 +1,7 @@
|
|||||||
//
|
//
|
||||||
// "$Id$"
|
|
||||||
//
|
|
||||||
// MacOS-Cocoa specific code for the Fast Light Tool Kit (FLTK).
|
// MacOS-Cocoa specific code for the Fast Light Tool Kit (FLTK).
|
||||||
//
|
//
|
||||||
// Copyright 1998-2020 by Bill Spitzak and others.
|
// Copyright 1998-2021 by Bill Spitzak and others.
|
||||||
//
|
//
|
||||||
// This library is free software. Distribution and use rights are outlined in
|
// This library is free software. Distribution and use rights are outlined in
|
||||||
// the file "COPYING" which should have been included with this file. If this
|
// the file "COPYING" which should have been included with this file. If this
|
||||||
@@ -613,6 +611,10 @@ void Fl::add_timeout(double time, Fl_Timeout_Handler cb, void* data)
|
|||||||
|
|
||||||
void Fl::repeat_timeout(double time, Fl_Timeout_Handler cb, void* data)
|
void Fl::repeat_timeout(double time, Fl_Timeout_Handler cb, void* data)
|
||||||
{
|
{
|
||||||
|
if (!current_timer) {
|
||||||
|
add_timeout(time, cb, data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
// k = how many times 'time' seconds after the last scheduled timeout until the future
|
// k = how many times 'time' seconds after the last scheduled timeout until the future
|
||||||
double k = ceil( (CFAbsoluteTimeGetCurrent() - current_timer->next_timeout) / time);
|
double k = ceil( (CFAbsoluteTimeGetCurrent() - current_timer->next_timeout) / time);
|
||||||
if (k < 1) k = 1;
|
if (k < 1) k = 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user