/*--------------------------------------------------------------------------- SetEditorOnControllers Set the editor on the controller(s) for this window ----------------------------------------------------------------------------*/ NS_IMETHODIMP nsEditingSession::SetEditorOnControllers(nsIDOMWindow *aWindow, nsIEditor* aEditor) { NS_ENSURE_TRUE(aWindow, NS_ERROR_NULL_POINTER); nsCOMPtr<nsIControllers> controllers; nsresult rv = aWindow->GetControllers(getter_AddRefs(controllers)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsISupports> editorAsISupports = do_QueryInterface(aEditor); if (mBaseCommandControllerId) { rv = SetContextOnControllerById(controllers, editorAsISupports, mBaseCommandControllerId); NS_ENSURE_SUCCESS(rv, rv); } if (mDocStateControllerId) { rv = SetContextOnControllerById(controllers, editorAsISupports, mDocStateControllerId); NS_ENSURE_SUCCESS(rv, rv); } if (mHTMLCommandControllerId) rv = SetContextOnControllerById(controllers, editorAsISupports, mHTMLCommandControllerId); return rv; }
/*--------------------------------------------------------------------------- SetEditorOnControllers Set the editor on the controller(s) for this window ----------------------------------------------------------------------------*/ NS_IMETHODIMP nsEditingSession::SetEditorOnControllers(nsIDOMWindow *aWindow, nsIEditor* aEditor) { nsresult rv; // set the editor on the controller nsCOMPtr<nsIDOMWindowInternal> domWindowInt = do_QueryInterface(aWindow, &rv); if (NS_FAILED(rv)) return rv; nsCOMPtr<nsIControllers> controllers; rv = domWindowInt->GetControllers(getter_AddRefs(controllers)); if (NS_FAILED(rv)) return rv; nsCOMPtr<nsISupports> editorAsISupports = do_QueryInterface(aEditor); if (mBaseCommandControllerId) { rv = SetContextOnControllerById(controllers, editorAsISupports, mBaseCommandControllerId); if (NS_FAILED(rv)) return rv; } if (mDocStateControllerId) { rv = SetContextOnControllerById(controllers, editorAsISupports, mDocStateControllerId); if (NS_FAILED(rv)) return rv; } if (mHTMLCommandControllerId) rv = SetContextOnControllerById(controllers, editorAsISupports, mHTMLCommandControllerId); return rv; }
/*--------------------------------------------------------------------------- SetupEditorCommandController Create a command controller, append to controllers, get and return the controller ID, and set the context ----------------------------------------------------------------------------*/ nsresult nsEditingSession::SetupEditorCommandController( const char *aControllerClassName, nsIDOMWindow *aWindow, nsISupports *aContext, PRUint32 *aControllerId) { NS_ENSURE_ARG_POINTER(aControllerClassName); NS_ENSURE_ARG_POINTER(aWindow); NS_ENSURE_ARG_POINTER(aContext); NS_ENSURE_ARG_POINTER(aControllerId); nsresult rv; nsCOMPtr<nsIDOMWindowInternal> domWindowInt = do_QueryInterface(aWindow, &rv); if (NS_FAILED(rv)) return rv; nsCOMPtr<nsIControllers> controllers; rv = domWindowInt->GetControllers(getter_AddRefs(controllers)); if (NS_FAILED(rv)) return rv; // We only have to create each singleton controller once // We know this has happened once we have a controllerId value if (!*aControllerId) { nsresult rv; nsCOMPtr<nsIController> controller; controller = do_CreateInstance(aControllerClassName, &rv); if (NS_FAILED(rv)) return rv; // We must insert at head of the list to be sure our // controller is found before other implementations // (e.g., not-implemented versions by browser) rv = controllers->InsertControllerAt(0, controller); if (NS_FAILED(rv)) return rv; // Remember the ID for the controller rv = controllers->GetControllerId(controller, aControllerId); if (NS_FAILED(rv)) return rv; } // Set the context return SetContextOnControllerById(controllers, aContext, *aControllerId); }