added instance creation of the timer: sbGStreamerSimple::sbGStreamerSimple() : mInitialized(PR_FALSE), mPlay(NULL), mBus(NULL), mPixelAspectRatioN(1), mPixelAspectRatioD(1), mVideoWidth(0), mVideoHeight(0), mVideoSink(NULL), mGdkWin(NULL), mIsAtEndOfStream(PR_TRUE), mIsPlayingVideo(PR_FALSE), mLastErrorCode(0), mVideoOutputElement(nsnull), mDomWindow(nsnull) { mCursorIntervalTimer = do_CreateInstance(NS_TIMER_CONTRACTID); NS_ASSERTION(mCursorIntervalTimer, "Unable to create sbGStreamerSimple::mCursorIntervalTimer"); mArtist.Assign(EmptyString()); mAlbum.Assign(EmptyString()); mTitle.Assign(EmptyString()); mGenre.Assign(EmptyString()); } set the timer and mousemove in Init sbGStreamerSimple::Init(nsIDOMXULElement* aVideoOutput) { ... mVideoOutputElement = aVideoOutput; mCursorIntervalTimer->InitWithFuncCallback(&Cursor_Timeout, this, 1000, nsITimer::TYPE_REPEATING_SLACK); // Get a handle to the xul element's native window ... target->AddEventListener(NS_LITERAL_STRING("resize"), this, PR_FALSE); target->AddEventListener(NS_LITERAL_STRING("unload"), this, PR_FALSE); target->AddEventListener(NS_LITERAL_STRING("mousemove"), this, PR_FALSE); ... } added timeout function: /*static*/ void sbGStreamerSimple::Cursor_Timeout(nsITimer *aTimer, void *aClosure) { if(!aTimer) return; if(!aClosure) return; aTimer->Cancel(); set_invisible_cursor(); return; } added mousemove stuff: // nsIDOMEventListener NS_IMETHODIMP sbGStreamerSimple::HandleEvent(nsIDOMEvent* aEvent) { nsAutoString eventType; aEvent->GetType(eventType); if(eventType.EqualsLiteral("unload")) { // Clean up here nsCOMPtr target(do_QueryInterface(mDomWindow)); NS_ENSURE_TRUE(target, NS_NOINTERFACE); target->RemoveEventListener(NS_LITERAL_STRING("resize"), this, PR_FALSE); target->RemoveEventListener(NS_LITERAL_STRING("unload"), this, PR_FALSE); target->RemoveEventListener(NS_LITERAL_STRING("mousemove"), this, PR_FALSE); mDomWindow = nsnull; mVideoOutputElement = nsnull; mInitialized = PR_FALSE; return NS_OK; } else if(eventType.EqualsLiteral("mousemove")) { mCursorIntervalTimer->InitWithFuncCallback(&Cursor_Timeout, this, 1000, nsITimer::TYPE_REPEATING_SLACK); handle_video_cursor(); return NS_OK; } else { return Resize(); } }