BUG115229 files not in build yet. checking in new files to make tree landing of editor embedded work go more smoothely
git-svn-id: svn://10.0.0.236/trunk@113197 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -40,7 +40,6 @@
|
||||
|
||||
#include "nsIController.h"
|
||||
#include "nsIObserver.h"
|
||||
#include "nsIObserverList.h"
|
||||
|
||||
#include "nsIComponentManager.h"
|
||||
|
||||
@@ -48,6 +47,8 @@
|
||||
#include "nsPIDOMWindow.h"
|
||||
#include "nsIFocusController.h"
|
||||
|
||||
#include "nsSupportsArray.h"
|
||||
|
||||
#include "nsCommandManager.h"
|
||||
|
||||
|
||||
@@ -83,38 +84,32 @@ nsCommandManager::Init(nsIDOMWindow *aWindow)
|
||||
|
||||
/* void commandStatusChanged (in DOMString aCommandName, in long aChangeFlags); */
|
||||
NS_IMETHODIMP
|
||||
nsCommandManager::CommandStatusChanged(const nsAReadableString & aCommandName, PRInt32 aChangeFlags)
|
||||
nsCommandManager::CommandStatusChanged(const nsAString & aCommandName)
|
||||
{
|
||||
nsStringKey hashKey(aCommandName);
|
||||
|
||||
nsPromiseFlatString flatCommand = PromiseFlatString(aCommandName);
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
nsCOMPtr<nsISupports> commandSupports = getter_AddRefs(mCommandObserversTable.Get(&hashKey));
|
||||
nsCOMPtr<nsIObserverList> commandObservers = do_QueryInterface(commandSupports);
|
||||
nsCOMPtr<nsISupports> commandSupports = getter_AddRefs(mCommandObserversTable.Get(&hashKey));
|
||||
nsCOMPtr<nsISupportsArray> commandObservers = do_QueryInterface(commandSupports);
|
||||
if (commandObservers)
|
||||
{
|
||||
nsCOMPtr<nsIEnumerator> observers;
|
||||
rv = commandObservers->EnumerateObserverList(getter_AddRefs(observers));
|
||||
if (observers)
|
||||
{
|
||||
PRUint32 numItems;
|
||||
rv = commandObservers->Count(&numItems);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
for (PRUint32 i = 0; i < numItems; i ++)
|
||||
{
|
||||
rv = observers->First();
|
||||
|
||||
// Continue until error or end of list.
|
||||
while (observers->IsDone() != NS_OK && NS_SUCCEEDED(rv))
|
||||
nsCOMPtr<nsISupports> itemSupports;
|
||||
rv = commandObservers->GetElementAt(i, getter_AddRefs(itemSupports));
|
||||
if (NS_FAILED(rv)) break;
|
||||
nsCOMPtr<nsIObserver> itemObserver = do_QueryInterface(itemSupports);
|
||||
if (itemObserver)
|
||||
{
|
||||
nsCOMPtr<nsISupports> itemSupports;
|
||||
rv = observers->CurrentItem(getter_AddRefs(itemSupports));
|
||||
nsCOMPtr<nsIObserver> itemObserver = do_QueryInterface(itemSupports);
|
||||
if (itemObserver)
|
||||
{
|
||||
// should we get the command state to pass here? This might be expensive.
|
||||
itemObserver->Observe((nsICommandManager *)this, flatCommand.get(), NS_LITERAL_STRING("").get());
|
||||
}
|
||||
|
||||
rv = observers->Next();
|
||||
// should we get the command state to pass here? This might be expensive.
|
||||
itemObserver->Observe((nsICommandManager *)this, "command_status_changed", flatCommand.get());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,7 +122,7 @@ nsCommandManager::CommandStatusChanged(const nsAReadableString & aCommandName, P
|
||||
|
||||
/* void addCommandObserver (in nsIObserver aCommandObserver, in wstring aCommandToObserve); */
|
||||
NS_IMETHODIMP
|
||||
nsCommandManager::AddCommandObserver(nsIObserver *aCommandObserver, const nsAReadableString & aCommandToObserve)
|
||||
nsCommandManager::AddCommandObserver(nsIObserver *aCommandObserver, const nsAString & aCommandToObserve)
|
||||
{
|
||||
NS_ENSURE_ARG(aCommandObserver);
|
||||
|
||||
@@ -138,40 +133,50 @@ nsCommandManager::AddCommandObserver(nsIObserver *aCommandObserver, const nsARea
|
||||
// for each command in the table, we make a list of observers for that command
|
||||
nsStringKey hashKey(aCommandToObserve);
|
||||
|
||||
nsCOMPtr<nsISupports> commandSupports = getter_AddRefs(mCommandObserversTable.Get(&hashKey));
|
||||
nsCOMPtr<nsIObserverList> commandObservers = do_QueryInterface(commandSupports);
|
||||
nsCOMPtr<nsISupports> commandSupports = getter_AddRefs(mCommandObserversTable.Get(&hashKey));
|
||||
nsCOMPtr<nsISupportsArray> commandObservers = do_QueryInterface(commandSupports);
|
||||
if (!commandObservers)
|
||||
{
|
||||
commandObservers = do_CreateInstance("@mozilla.org/xpcom/observer-list;1", &rv);
|
||||
rv = NS_NewISupportsArray(getter_AddRefs(commandObservers));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = mCommandObserversTable.Put(&hashKey, commandObservers);
|
||||
commandSupports = do_QueryInterface(commandObservers);
|
||||
rv = mCommandObserversTable.Put(&hashKey, commandSupports);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
}
|
||||
|
||||
return commandObservers->AddObserver(aCommandObserver);
|
||||
// need to check that this command observer hasn't already been registered
|
||||
nsCOMPtr<nsISupports> observerAsSupports = do_QueryInterface(aCommandObserver);
|
||||
PRInt32 existingIndex = commandObservers->IndexOf(observerAsSupports);
|
||||
if (existingIndex == -1)
|
||||
rv = commandObservers->AppendElement(observerAsSupports);
|
||||
else
|
||||
NS_WARNING("Registering command observer twice on the same command");
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
/* void removeCommandObserver (in nsIObserver aCommandObserver, in wstring aCommandObserved); */
|
||||
NS_IMETHODIMP
|
||||
nsCommandManager::RemoveCommandObserver(nsIObserver *aCommandObserver, const nsAReadableString & aCommandObserved)
|
||||
nsCommandManager::RemoveCommandObserver(nsIObserver *aCommandObserver, const nsAString & aCommandObserved)
|
||||
{
|
||||
NS_ENSURE_ARG(aCommandObserver);
|
||||
|
||||
// XXX todo: handle special cases of aCommandToObserve being null, or empty
|
||||
nsStringKey hashKey(aCommandObserved);
|
||||
|
||||
nsCOMPtr<nsISupports> commandSupports = getter_AddRefs(mCommandObserversTable.Get(&hashKey));
|
||||
nsCOMPtr<nsIObserverList> commandObservers = do_QueryInterface(commandSupports);
|
||||
nsCOMPtr<nsISupports> commandSupports = getter_AddRefs(mCommandObserversTable.Get(&hashKey));
|
||||
nsCOMPtr<nsISupportsArray> commandObservers = do_QueryInterface(commandSupports);
|
||||
if (!commandObservers)
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
|
||||
return commandObservers->RemoveObserver(aCommandObserver);
|
||||
nsresult removed = commandObservers->RemoveElement(aCommandObserver);
|
||||
return (removed) ? NS_OK : NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
/* boolean isCommandSupported (in wstring aCommandName); */
|
||||
NS_IMETHODIMP
|
||||
nsCommandManager::IsCommandSupported(const nsAReadableString & aCommandName, PRBool *outCommandSupported)
|
||||
nsCommandManager::IsCommandSupported(const nsAString & aCommandName, PRBool *outCommandSupported)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(outCommandSupported);
|
||||
|
||||
@@ -183,7 +188,7 @@ nsCommandManager::IsCommandSupported(const nsAReadableString & aCommandName, PRB
|
||||
|
||||
/* boolean isCommandEnabled (in wstring aCommandName); */
|
||||
NS_IMETHODIMP
|
||||
nsCommandManager::IsCommandEnabled(const nsAReadableString & aCommandName, PRBool *outCommandEnabled)
|
||||
nsCommandManager::IsCommandEnabled(const nsAString & aCommandName, PRBool *outCommandEnabled)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(outCommandEnabled);
|
||||
|
||||
@@ -199,24 +204,60 @@ nsCommandManager::IsCommandEnabled(const nsAReadableString & aCommandName, PRBoo
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/* void doCommand (in wstring aCommandName, in wstring aCommandParams); */
|
||||
#define COMMAND_NAME NS_ConvertASCIItoUCS2("cmd_name")
|
||||
|
||||
/* void getCommandState (in DOMString aCommandName, inout nsICommandParams aCommandParams); */
|
||||
NS_IMETHODIMP
|
||||
nsCommandManager::DoCommand(const nsAReadableString & aCommandName)
|
||||
nsCommandManager::GetCommandState(nsICommandParams *aCommandParams)
|
||||
{
|
||||
nsCOMPtr<nsIController> controller;
|
||||
nsresult rv = GetControllerForCommand(aCommandName, getter_AddRefs(controller));
|
||||
if (!controller)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
return controller->DoCommand(aCommandName);
|
||||
nsAutoString tValue;
|
||||
nsresult rv;
|
||||
if (NS_SUCCEEDED(rv = aCommandParams->GetStringValue(COMMAND_NAME,tValue)))
|
||||
{
|
||||
nsresult rv = GetControllerForCommand(tValue, getter_AddRefs(controller));
|
||||
if (!controller)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsICommandController> commandController = do_QueryInterface(controller);
|
||||
if (commandController)
|
||||
rv = commandController->GetCommandState(aCommandParams);
|
||||
else
|
||||
rv = NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
/* void doCommand (nsICommandParams aCommandParams); */
|
||||
#define COMMAND_NAME NS_ConvertASCIItoUCS2("cmd_name")
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsCommandManager::DoCommand(nsICommandParams *aCommandParams)
|
||||
{
|
||||
nsCOMPtr<nsIController> controller;
|
||||
nsAutoString tValue;
|
||||
nsresult rv;
|
||||
if (NS_SUCCEEDED(rv = aCommandParams->GetStringValue(COMMAND_NAME,tValue)))
|
||||
{
|
||||
nsresult rv = GetControllerForCommand(tValue, getter_AddRefs(controller));
|
||||
if (!controller)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsCOMPtr<nsICommandController> commandController = do_QueryInterface(controller);
|
||||
if (commandController)
|
||||
rv = commandController->DoCommand(aCommandParams);
|
||||
else
|
||||
rv = controller->DoCommand(tValue);
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
#ifdef XP_MAC
|
||||
#pragma mark -
|
||||
#endif
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsCommandManager::GetControllerForCommand(const nsAReadableString& aCommand, nsIController** outController)
|
||||
nsresult
|
||||
nsCommandManager::GetControllerForCommand(const nsAString& aCommand, nsIController** outController)
|
||||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
|
||||
@@ -229,6 +270,6 @@ nsCommandManager::GetControllerForCommand(const nsAReadableString& aCommand, nsI
|
||||
if (!focusController)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
return focusController->GetControllerForCommand(aCommand, getter_AddRefs(outController));
|
||||
return focusController->GetControllerForCommand(aCommand, outController);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user