All pastes #242768 Raw Edit

Mine

public text v1 · immutable
·published 2006-11-07 17:47 UTC
rendered paste body
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<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();
  }
}