]> git.saurik.com Git - wxWidgets.git/blob - src/motif/timer.cpp
Since wxConditionInternal is a friend of wxMutex and wxMutex has copy
[wxWidgets.git] / src / motif / timer.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: timer.cpp
3 // Purpose: wxTimer implementation
4 // Author: Julian Smart
5 // Modified by:
6 // Created: 17/09/98
7 // RCS-ID: $Id$
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifdef __GNUG__
13 #pragma implementation "timer.h"
14 #endif
15
16 #include "wx/timer.h"
17 #include "wx/app.h"
18 #include "wx/list.h"
19
20 #ifdef __VMS__
21 #pragma message disable nosimpint
22 #endif
23 #include <Xm/Xm.h>
24 #ifdef __VMS__
25 #pragma message enable nosimpint
26 #endif
27
28 #include "wx/motif/private.h"
29
30 IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject)
31
32 static wxList wxTimerList(wxKEY_INTEGER);
33
34 void wxTimerCallback (wxTimer * timer)
35 {
36 // Check to see if it's still on
37 if (!wxTimerList.Find((long)timer))
38 return;
39
40 if (timer->m_id == 0)
41 return; // Avoid to process spurious timer events
42
43 if (!timer->m_oneShot)
44 timer->m_id = XtAppAddTimeOut((XtAppContext) wxTheApp->GetAppContext(),
45 timer->m_milli,
46 (XtTimerCallbackProc) wxTimerCallback,
47 (XtPointer) timer);
48 else
49 timer->m_id = 0;
50
51 timer->Notify();
52 }
53
54 void wxTimer::Init()
55 {
56 m_id = 0;
57 m_milli = 1000;
58 }
59
60 wxTimer::~wxTimer()
61 {
62 wxTimer::Stop();
63 wxTimerList.DeleteObject(this);
64 }
65
66 bool wxTimer::Start(int milliseconds, bool mode)
67 {
68 Stop();
69
70 (void)wxTimerBase::Start(milliseconds, mode);
71
72 if (!wxTimerList.Find((long)this))
73 wxTimerList.Append((long)this, this);
74
75 m_id = XtAppAddTimeOut((XtAppContext) wxTheApp->GetAppContext(),
76 m_milli,
77 (XtTimerCallbackProc) wxTimerCallback,
78 (XtPointer) this);
79 return TRUE;
80 }
81
82 void wxTimer::Stop()
83 {
84 if (m_id > 0)
85 {
86 XtRemoveTimeOut (m_id);
87 m_id = 0;
88 }
89 m_milli = 0 ;
90 }
91
92