Added a real timer implementation for Motif

This commit is contained in:
kmcclusk 1998-06-18 18:06:56 +00:00
parent 860e5e5305
commit 084e77f7b7

View File

@ -21,11 +21,17 @@
#include "prlog.h" #include "prlog.h"
#include <stdio.h> #include <stdio.h>
#include <limits.h> #include <limits.h>
#include "Xm/Xm.h"
static NS_DEFINE_IID(kITimerIID, NS_ITIMER_IID); static NS_DEFINE_IID(kITimerIID, NS_ITIMER_IID);
// Hack for now. This is Bad because it creates a dependency between the widget
// library and this library. This needs to be replaced with having code
// to pass an interface which can be queried for the app context.
extern XtAppContext gAppContext;
/* /*
* Implementation of timers lifted from Windows front-end file timer.cpp * Implementation of timers using Xt timer facility
*/ */
class TimerImpl : public nsITimer { class TimerImpl : public nsITimer {
public: public:
@ -47,7 +53,9 @@ public:
virtual void Cancel(); virtual void Cancel();
virtual PRUint32 GetDelay() { return mDelay; } virtual PRUint32 GetDelay() { return mDelay; }
virtual void SetDelay(PRUint32 aDelay) { }; virtual void SetDelay(PRUint32 aDelay) { mDelay=aDelay; };
void FireTimeout();
private: private:
nsresult Init(PRUint32 aDelay); nsresult Init(PRUint32 aDelay);
@ -58,9 +66,24 @@ private:
nsITimerCallback *mCallback; nsITimerCallback *mCallback;
// PRBool mRepeat; // PRBool mRepeat;
TimerImpl *mNext; TimerImpl *mNext;
XtIntervalId mTimerId;
}; };
//TimerImpl *TimerImpl::gTimerList = NULL; void TimerImpl::FireTimeout()
{
if (mFunc != NULL) {
(*mFunc)(this, mClosure);
}
else if (mCallback != NULL) {
mCallback->Notify(this); // Fire the timer
}
}
void nsTimerExpired(XtPointer aCallData)
{
TimerImpl* timer = (TimerImpl *)aCallData;
timer->FireTimeout();
}
TimerImpl::TimerImpl() TimerImpl::TimerImpl()
@ -69,6 +92,7 @@ TimerImpl::TimerImpl()
mFunc = NULL; mFunc = NULL;
mCallback = NULL; mCallback = NULL;
mNext = NULL; mNext = NULL;
mTimerId = 0;
} }
TimerImpl::~TimerImpl() TimerImpl::~TimerImpl()
@ -85,6 +109,8 @@ TimerImpl::Init(nsTimerCallbackFunc aFunc,
mClosure = aClosure; mClosure = aClosure;
// mRepeat = aRepeat; // mRepeat = aRepeat;
mTimerId = XtAppAddTimeOut(gAppContext, aDelay,(XtTimerCallbackProc)nsTimerExpired, this);
return Init(aDelay); return Init(aDelay);
} }
@ -96,6 +122,8 @@ TimerImpl::Init(nsITimerCallback *aCallback,
mCallback = aCallback; mCallback = aCallback;
// mRepeat = aRepeat; // mRepeat = aRepeat;
mTimerId = XtAppAddTimeOut(gAppContext, aDelay, (XtTimerCallbackProc)nsTimerExpired, this);
return Init(aDelay); return Init(aDelay);
} }
@ -114,7 +142,7 @@ NS_IMPL_ISUPPORTS(TimerImpl, kITimerIID)
void void
TimerImpl::Cancel() TimerImpl::Cancel()
{ {
XtRemoveTimeOut(mTimerId);
} }
NS_BASE nsresult NS_NewTimer(nsITimer** aInstancePtrResult) NS_BASE nsresult NS_NewTimer(nsITimer** aInstancePtrResult)