nsresult nsMenuFrame::Notify(nsITimer* aTimer) { // Our timer has fired. if (aTimer == mOpenTimer.get()) { mOpenTimer = nsnull; if (!IsOpen() && mMenuParent) { // make sure we didn't open a context menu in the meantime // (i.e. the user right-clicked while hovering over a submenu). nsXULPopupManager* pm = nsXULPopupManager::GetInstance(); if (pm) { if ((!pm->HasContextMenu(nsnull) || mMenuParent->IsContextMenu()) && mContent->AttrValueIs(kNameSpaceID_None, nsGkAtoms::menuactive, nsGkAtoms::_true, eCaseMatters)) { OpenMenu(PR_FALSE); } } } } else if (aTimer == mBlinkTimer) { switch (mBlinkState++) { case 0: NS_ASSERTION(false, "Blink timer fired while not blinking"); StopBlinking(); break; case 1: { // Turn the highlight back on and wait for a while before closing the menu. nsWeakFrame weakFrame(this); mContent->SetAttr(kNameSpaceID_None, nsGkAtoms::menuactive, NS_LITERAL_STRING("true"), PR_TRUE); if (weakFrame.IsAlive()) { aTimer->InitWithCallback(mTimerMediator, kBlinkDelay, nsITimer::TYPE_ONE_SHOT); } } break; default: if (mMenuParent) { mMenuParent->LockMenuUntilClosed(PR_FALSE); } PassMenuCommandEventToPopupManager(); StopBlinking(); break; } } return NS_OK; }
void nsMenuFrame::DestroyFrom(nsIFrame* aDestructRoot) { // Kill our timer if one is active. This is not strictly necessary as // the pointer to this frame will be cleared from the mediator, but // this is done for added safety. if (mOpenTimer) { mOpenTimer->Cancel(); } StopBlinking(); // Null out the pointer to this frame in the mediator wrapper so that it // doesn't try to interact with a deallocated frame. mTimerMediator->ClearFrame(); // if the menu content is just being hidden, it may be made visible again // later, so make sure to clear the highlighting. mContent->UnsetAttr(kNameSpaceID_None, nsGkAtoms::menuactive, PR_FALSE); // are we our menu parent's current menu item? if (mMenuParent && mMenuParent->GetCurrentMenuItem() == this) { // yes; tell it that we're going away mMenuParent->CurrentMenuIsBeingDestroyed(); } if (mPopupFrame) mPopupFrame->DestroyFrom(aDestructRoot); nsBoxFrame::DestroyFrom(aDestructRoot); }
void TGUITargetView::LightedGoal() { StopBlinking(); DrawLightedGoal(); TGUIView::InvalidateRect( viewTRect ); }
void nsMenuFrame::StartBlinking(nsGUIEvent *aEvent, PRBool aFlipChecked) { StopBlinking(); CreateMenuCommandEvent(aEvent, aFlipChecked); if (!ShouldBlink()) { PassMenuCommandEventToPopupManager(); return; } // Blink off. nsWeakFrame weakFrame(this); mContent->UnsetAttr(kNameSpaceID_None, nsGkAtoms::menuactive, PR_TRUE); if (!weakFrame.IsAlive()) return; if (mMenuParent) { // Make this menu ignore events from now on. mMenuParent->LockMenuUntilClosed(PR_TRUE); } // Set up a timer to blink back on. mBlinkTimer = do_CreateInstance("@mozilla.org/timer;1"); mBlinkTimer->InitWithCallback(mTimerMediator, kBlinkDelay, nsITimer::TYPE_ONE_SHOT); mBlinkState = 1; }
void TGUITargetView::NormalGoal() { StopBlinking(); DrawNormalGoal(); TGUIView::InvalidateRect( viewTRect ); }
//----------------------------------------------------------------------------- NS_IMETHODIMP nsCaret::NotifySelectionChanged(nsIDOMDocument *, nsISelection *aDomSel, PRInt16 aReason) { if (aReason & nsISelectionListener::MOUSEUP_REASON)//this wont do return NS_OK; nsCOMPtr<nsISelection> domSel(do_QueryReferent(mDomSelectionWeak)); // The same caret is shared amongst the document and any text widgets it // may contain. This means that the caret could get notifications from // multiple selections. // // If this notification is for a selection that is not the one the // the caret is currently interested in (mDomSelectionWeak), then there // is nothing to do! if (domSel != aDomSel) return NS_OK; if (mVisible) { // Stop the caret from blinking in its previous location. StopBlinking(); // Start the caret blinking in the new location. StartBlinking(); } return NS_OK; }
//----------------------------------------------------------------------------- void nsCaret::SetCaretVisible(PRBool inMakeVisible) { mVisible = inMakeVisible; if (mVisible) { StartBlinking(); SetIgnoreUserModify(PR_TRUE); } else { StopBlinking(); SetIgnoreUserModify(PR_FALSE); } }
//----------------------------------------------------------------------------- nsresult nsCaret::SetCaretDOMSelection(nsISelection *aDOMSel) { NS_ENSURE_ARG_POINTER(aDOMSel); mDomSelectionWeak = do_GetWeakReference(aDOMSel); // weak reference to pres shell if (mVisible) { // Stop the caret from blinking in its previous location. StopBlinking(); // Start the caret blinking in the new location. StartBlinking(); } return NS_OK; }
void nsCaret::SetIgnoreUserModify(PRBool aIgnoreUserModify) { if (!aIgnoreUserModify && mIgnoreUserModify && mDrawn) { // We're turning off mIgnoreUserModify. If the caret's drawn // in a read-only node we must erase it, else the next call // to DrawCaret() won't erase the old caret, due to the new // mIgnoreUserModify value. nsIFrame *frame = GetCaretFrame(); if (frame) { const nsStyleUserInterface* userinterface = frame->GetStyleUserInterface(); if (userinterface->mUserModify == NS_STYLE_USER_MODIFY_READ_ONLY) { StopBlinking(); } } } mIgnoreUserModify = aIgnoreUserModify; }