+/*
+ * UI update events
+ */
+
+#if wxUSE_LONGLONG
+wxLongLong wxUpdateUIEvent::sm_lastUpdate = 0;
+#endif
+
+long wxUpdateUIEvent::sm_updateInterval = 0;
+
+wxUpdateUIMode wxUpdateUIEvent::sm_updateMode = wxUPDATE_UI_PROCESS_ALL;
+
+// Can we update?
+bool wxUpdateUIEvent::CanUpdate(wxWindow* win)
+{
+ // Don't update if we've switched global updating off
+ // and this window doesn't support updates.
+ if (win &&
+ (GetMode() == wxUPDATE_UI_PROCESS_SPECIFIED &&
+ ((win->GetExtraStyle() & wxWS_EX_PROCESS_UI_UPDATES) == 0)))
+ return FALSE;
+
+ if (sm_updateInterval == -1)
+ return FALSE;
+ else if (sm_updateInterval == 0)
+ return TRUE;
+ else
+ {
+#if wxUSE_STOPWATCH && wxUSE_LONGLONG
+ wxLongLong now = wxGetLocalTimeMillis();
+ if (now > (sm_lastUpdate + sm_updateInterval))
+ {
+ return TRUE;
+ }
+#else
+ // If we don't have wxStopWatch or wxLongLong, we
+ // should err on the safe side and update now anyway.
+ return TRUE;
+#endif
+ }
+ return FALSE;
+}
+
+// Reset the update time to provide a delay until the next
+// time we should update
+void wxUpdateUIEvent::ResetUpdateTime()
+{
+#if wxUSE_STOPWATCH && wxUSE_LONGLONG
+ if (sm_updateInterval > 0)
+ {
+ wxLongLong now = wxGetLocalTimeMillis();
+ if (now > (sm_lastUpdate + sm_updateInterval))
+ {
+ sm_lastUpdate = now;
+ }
+ }
+#endif
+}
+
+/*
+ * Idle events
+ */
+
+wxIdleMode wxIdleEvent::sm_idleMode = wxIDLE_PROCESS_ALL;
+
+// Can we send an idle event?
+bool wxIdleEvent::CanSend(wxWindow* win)
+{
+ // Don't update if we've switched global updating off
+ // and this window doesn't support updates.
+ if (win &&
+ (GetMode() == wxIDLE_PROCESS_SPECIFIED &&
+ ((win->GetExtraStyle() & wxWS_EX_PROCESS_IDLE) == 0)))
+ return FALSE;
+
+ return TRUE;
+}
+