summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FL/Fl.H2
-rw-r--r--src/Fl_System_Driver.H1
-rw-r--r--src/Fl_lock.cxx7
-rw-r--r--src/Fl_win32.cxx4
4 files changed, 9 insertions, 5 deletions
diff --git a/FL/Fl.H b/FL/Fl.H
index 24db5d667..5c599ffac 100644
--- a/FL/Fl.H
+++ b/FL/Fl.H
@@ -135,6 +135,7 @@ typedef void (*Fl_Clipboard_Notify_Handler)(int source, void *data);
state information and global methods for the current application.
*/
class FL_EXPORT Fl {
+ friend Fl_System_Driver;
Fl() {} // no constructor!
private:
@@ -310,7 +311,6 @@ private:
static int awake_ring_head_;
static int awake_ring_tail_;
public:
- static bool equal_awake_ring_ends();
static const char* scheme_;
static Fl_Image* scheme_bg_;
diff --git a/src/Fl_System_Driver.H b/src/Fl_System_Driver.H
index b1901b133..42e2a9815 100644
--- a/src/Fl_System_Driver.H
+++ b/src/Fl_System_Driver.H
@@ -63,6 +63,7 @@ protected:
// implement once for each platform
static Fl_System_Driver *newSystemDriver();
Fl_System_Driver();
+ static bool awake_ring_empty();
public:
virtual ~Fl_System_Driver();
static int command_key;
diff --git a/src/Fl_lock.cxx b/src/Fl_lock.cxx
index 3aea98d95..fdf045be9 100644
--- a/src/Fl_lock.cxx
+++ b/src/Fl_lock.cxx
@@ -201,8 +201,11 @@ void Fl::unlock() {
#ifndef FL_DOXYGEN
-bool Fl::equal_awake_ring_ends() {
- return awake_ring_head_ == Fl::awake_ring_tail_;
+bool Fl_System_Driver::awake_ring_empty() {
+ Fl::system_driver()->lock_ring();
+ bool retval = (Fl::awake_ring_head_ == Fl::awake_ring_tail_);
+ Fl::system_driver()->unlock_ring();
+ return retval;
}
#endif // FL_DOXYGEN
diff --git a/src/Fl_win32.cxx b/src/Fl_win32.cxx
index e613e359e..ebe5355f1 100644
--- a/src/Fl_win32.cxx
+++ b/src/Fl_win32.cxx
@@ -491,7 +491,7 @@ double Fl_WinAPI_System_Driver::wait(double time_to_wait) {
DispatchMessageW(&fl_msg);
}
- // The following conditional test: !Fl::equal_awake_ring_ends()
+ // The following conditional test: !Fl_System_Driver::awake_ring_empty()
// equivalent to:
// (Fl::awake_ring_head_ != Fl::awake_ring_tail_)
// is a workaround / fix for STR #3143. This works, but a better solution
@@ -512,7 +512,7 @@ double Fl_WinAPI_System_Driver::wait(double time_to_wait) {
// recover and process any pending awake callbacks.
// Normally the ring buffer head and tail indices will match and this
// comparison will do nothing. Addresses STR #3143
- if (!Fl::equal_awake_ring_ends()) {
+ if (!Fl_System_Driver::awake_ring_empty()) {
process_awake_handler_requests();
}