rendered paste bodyadded 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<nsIDOMEventTarget> 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();
}
}