2007-03-22 10:30:00 -07:00
|
|
|
/* ***** BEGIN LICENSE BLOCK *****
|
|
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
|
|
*
|
|
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
|
|
* the License. You may obtain a copy of the License at
|
|
|
|
* http://www.mozilla.org/MPL/
|
|
|
|
*
|
|
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
|
|
* for the specific language governing rights and limitations under the
|
|
|
|
* License.
|
|
|
|
*
|
|
|
|
* The Original Code is mozilla.org code.
|
|
|
|
*
|
|
|
|
* The Initial Developer of the Original Code is
|
|
|
|
* Netscape Communications, Inc.
|
|
|
|
* Portions created by the Initial Developer are Copyright (C) 2003
|
|
|
|
* the Initial Developer. All Rights Reserved.
|
|
|
|
*
|
|
|
|
* Contributor(s):
|
|
|
|
* Kathleen Brade <brade@netscape.com>
|
|
|
|
* Simon Fraser <sfraser@netscape.com>
|
|
|
|
*
|
|
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
|
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
|
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
|
|
* the provisions above, a recipient may use your version of this file under
|
|
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
|
|
*
|
|
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
|
|
|
|
|
|
|
|
#include "nsGlobalWindowCommands.h"
|
|
|
|
|
|
|
|
#include "nsIComponentManager.h"
|
|
|
|
#include "nsIInterfaceRequestor.h"
|
|
|
|
#include "nsIInterfaceRequestorUtils.h"
|
|
|
|
#include "nsCRT.h"
|
|
|
|
#include "nsString.h"
|
2011-05-24 23:31:59 -07:00
|
|
|
#include "mozilla/Preferences.h"
|
2007-03-22 10:30:00 -07:00
|
|
|
|
|
|
|
#include "nsIControllerCommandTable.h"
|
|
|
|
#include "nsICommandParams.h"
|
|
|
|
|
|
|
|
#include "nsPIDOMWindow.h"
|
|
|
|
#include "nsIPresShell.h"
|
|
|
|
#include "nsIDocShell.h"
|
2009-09-03 12:30:06 -07:00
|
|
|
#include "nsIDocShellTreeItem.h"
|
2007-03-22 10:30:00 -07:00
|
|
|
#include "nsISelectionController.h"
|
|
|
|
#include "nsIWebNavigation.h"
|
|
|
|
#include "nsIContentViewerEdit.h"
|
|
|
|
#include "nsIContentViewer.h"
|
Bug 178324, refactor focus by moving all focus handling into one place and simplifying it, add many tests, fixes many other bugs too numerous to mention in this small checkin comment, r=josh,smichaud,ere,dbaron,marco,neil,gavin,smaug,sr=smaug (CLOSED TREE)
2009-06-10 11:00:39 -07:00
|
|
|
#include "nsFocusManager.h"
|
2010-03-19 11:32:13 -07:00
|
|
|
#include "nsCopySupport.h"
|
|
|
|
#include "nsGUIEvent.h"
|
2007-03-22 10:30:00 -07:00
|
|
|
|
|
|
|
#include "nsIClipboardDragDropHooks.h"
|
|
|
|
#include "nsIClipboardDragDropHookList.h"
|
|
|
|
|
2011-05-24 23:31:59 -07:00
|
|
|
using namespace mozilla;
|
|
|
|
|
2007-03-22 10:30:00 -07:00
|
|
|
const char * const sSelectAllString = "cmd_selectAll";
|
|
|
|
const char * const sSelectNoneString = "cmd_selectNone";
|
|
|
|
const char * const sCopyImageLocationString = "cmd_copyImageLocation";
|
|
|
|
const char * const sCopyImageContentsString = "cmd_copyImageContents";
|
|
|
|
const char * const sCopyImageString = "cmd_copyImage";
|
|
|
|
|
|
|
|
const char * const sScrollTopString = "cmd_scrollTop";
|
|
|
|
const char * const sScrollBottomString = "cmd_scrollBottom";
|
|
|
|
const char * const sScrollPageUpString = "cmd_scrollPageUp";
|
|
|
|
const char * const sScrollPageDownString = "cmd_scrollPageDown";
|
2011-12-23 16:11:30 -08:00
|
|
|
const char * const sMoveTopString = "cmd_moveTop";
|
|
|
|
const char * const sMoveBottomString = "cmd_moveBottom";
|
2007-03-22 10:30:00 -07:00
|
|
|
const char * const sMovePageUpString = "cmd_movePageUp";
|
|
|
|
const char * const sMovePageDownString = "cmd_movePageDown";
|
2011-12-23 16:11:30 -08:00
|
|
|
const char * const sLinePreviousString = "cmd_linePrevious";
|
|
|
|
const char * const sLineNextString = "cmd_lineNext";
|
|
|
|
const char * const sCharPreviousString = "cmd_charPrevious";
|
|
|
|
const char * const sCharNextString = "cmd_charNext";
|
2007-03-22 10:30:00 -07:00
|
|
|
|
|
|
|
// These are so the browser can use editor navigation key bindings
|
|
|
|
// helps with accessibility (boolean pref accessibility.browsewithcaret)
|
|
|
|
|
|
|
|
const char * const sSelectCharPreviousString = "cmd_selectCharPrevious";
|
|
|
|
const char * const sSelectCharNextString = "cmd_selectCharNext";
|
|
|
|
|
|
|
|
const char * const sWordPreviousString = "cmd_wordPrevious";
|
|
|
|
const char * const sWordNextString = "cmd_wordNext";
|
|
|
|
const char * const sSelectWordPreviousString = "cmd_selectWordPrevious";
|
|
|
|
const char * const sSelectWordNextString = "cmd_selectWordNext";
|
|
|
|
|
|
|
|
const char * const sBeginLineString = "cmd_beginLine";
|
|
|
|
const char * const sEndLineString = "cmd_endLine";
|
|
|
|
const char * const sSelectBeginLineString = "cmd_selectBeginLine";
|
|
|
|
const char * const sSelectEndLineString = "cmd_selectEndLine";
|
|
|
|
|
|
|
|
const char * const sSelectLinePreviousString = "cmd_selectLinePrevious";
|
|
|
|
const char * const sSelectLineNextString = "cmd_selectLineNext";
|
|
|
|
|
2011-12-23 16:11:30 -08:00
|
|
|
const char * const sSelectPageUpString = "cmd_selectPageUp";
|
|
|
|
const char * const sSelectPageDownString = "cmd_selectPageDown";
|
2007-03-22 10:30:00 -07:00
|
|
|
|
|
|
|
const char * const sSelectTopString = "cmd_selectTop";
|
|
|
|
const char * const sSelectBottomString = "cmd_selectBottom";
|
|
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
#pragma mark -
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// a base class for selection-related commands, for code sharing
|
|
|
|
class nsSelectionCommandsBase : public nsIControllerCommand
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
NS_DECL_ISUPPORTS
|
|
|
|
NS_DECL_NSICONTROLLERCOMMAND
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
// subclasses override DoSelectCommand
|
|
|
|
virtual nsresult DoSelectCommand(const char *aCommandName, nsIDOMWindow *aWindow) = 0;
|
|
|
|
|
|
|
|
static nsresult GetPresShellFromWindow(nsIDOMWindow *aWindow, nsIPresShell **aPresShell);
|
|
|
|
static nsresult GetSelectionControllerFromWindow(nsIDOMWindow *aWindow, nsISelectionController **aSelCon);
|
|
|
|
|
|
|
|
// no member variables, please, we're stateless!
|
|
|
|
};
|
|
|
|
|
|
|
|
// this class implements commands whose behavior depends on the 'browse with caret' setting
|
|
|
|
class nsSelectMoveScrollCommand : public nsSelectionCommandsBase
|
|
|
|
{
|
|
|
|
protected:
|
|
|
|
|
|
|
|
virtual nsresult DoSelectCommand(const char *aCommandName, nsIDOMWindow *aWindow);
|
|
|
|
|
Bug 178324, refactor focus by moving all focus handling into one place and simplifying it, add many tests, fixes many other bugs too numerous to mention in this small checkin comment, r=josh,smichaud,ere,dbaron,marco,neil,gavin,smaug,sr=smaug (CLOSED TREE)
2009-06-10 11:00:39 -07:00
|
|
|
nsresult DoCommandBrowseWithCaretOn(const char *aCommandName,
|
|
|
|
nsIDOMWindow *aWindow,
|
|
|
|
nsISelectionController *aSelectionController);
|
2007-03-22 10:30:00 -07:00
|
|
|
nsresult DoCommandBrowseWithCaretOff(const char *aCommandName, nsISelectionController *aSelectionController);
|
|
|
|
|
|
|
|
// no member variables, please, we're stateless!
|
|
|
|
};
|
|
|
|
|
|
|
|
// this class implements other selection commands
|
|
|
|
class nsSelectCommand : public nsSelectionCommandsBase
|
|
|
|
{
|
|
|
|
protected:
|
|
|
|
|
|
|
|
virtual nsresult DoSelectCommand(const char *aCommandName, nsIDOMWindow *aWindow);
|
|
|
|
|
|
|
|
// no member variables, please, we're stateless!
|
|
|
|
};
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
#pragma mark -
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
NS_IMPL_ISUPPORTS1(nsSelectionCommandsBase, nsIControllerCommand)
|
|
|
|
|
|
|
|
/* boolean isCommandEnabled (in string aCommandName, in nsISupports aCommandContext); */
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsSelectionCommandsBase::IsCommandEnabled(const char * aCommandName,
|
|
|
|
nsISupports *aCommandContext,
|
2011-09-28 23:19:26 -07:00
|
|
|
bool *outCmdEnabled)
|
2007-03-22 10:30:00 -07:00
|
|
|
{
|
|
|
|
// XXX this needs fixing. e.g. you can't scroll up if you're already at the top of
|
|
|
|
// the document.
|
2011-10-17 07:59:28 -07:00
|
|
|
*outCmdEnabled = true;
|
2007-03-22 10:30:00 -07:00
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* void getCommandStateParams (in string aCommandName, in nsICommandParams aParams, in nsISupports aCommandContext); */
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsSelectionCommandsBase::GetCommandStateParams(const char *aCommandName,
|
|
|
|
nsICommandParams *aParams, nsISupports *aCommandContext)
|
|
|
|
{
|
|
|
|
// XXX we should probably return the enabled state
|
|
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsSelectionCommandsBase::DoCommand(const char *aCommandName, nsISupports *aCommandContext)
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsIDOMWindow> window = do_QueryInterface(aCommandContext);
|
|
|
|
NS_ENSURE_TRUE(window, NS_ERROR_INVALID_ARG);
|
|
|
|
|
|
|
|
return DoSelectCommand(aCommandName, window);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* void doCommandParams (in string aCommandName, in nsICommandParams aParams, in nsISupports aCommandContext); */
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsSelectionCommandsBase::DoCommandParams(const char *aCommandName,
|
|
|
|
nsICommandParams *aParams, nsISupports *aCommandContext)
|
|
|
|
{
|
|
|
|
return DoCommand(aCommandName, aCommandContext);
|
|
|
|
}
|
|
|
|
|
|
|
|
// protected methods
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsSelectionCommandsBase::GetPresShellFromWindow(nsIDOMWindow *aWindow, nsIPresShell **aPresShell)
|
|
|
|
{
|
|
|
|
*aPresShell = nsnull;
|
|
|
|
|
|
|
|
nsCOMPtr<nsPIDOMWindow> win(do_QueryInterface(aWindow));
|
|
|
|
NS_ENSURE_TRUE(win, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
nsIDocShell *docShell = win->GetDocShell();
|
|
|
|
NS_ENSURE_TRUE(docShell, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
return docShell->GetPresShell(aPresShell);
|
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsSelectionCommandsBase::GetSelectionControllerFromWindow(nsIDOMWindow *aWindow, nsISelectionController **aSelCon)
|
|
|
|
{
|
|
|
|
*aSelCon = nsnull;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIPresShell> presShell;
|
|
|
|
GetPresShellFromWindow(aWindow, getter_AddRefs(presShell));
|
|
|
|
if (presShell)
|
|
|
|
return CallQueryInterface(presShell, aSelCon);
|
|
|
|
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
}
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
#pragma mark -
|
|
|
|
#endif
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsSelectMoveScrollCommand::DoSelectCommand(const char *aCommandName, nsIDOMWindow *aWindow)
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsISelectionController> selCont;
|
|
|
|
GetSelectionControllerFromWindow(aWindow, getter_AddRefs(selCont));
|
|
|
|
NS_ENSURE_TRUE(selCont, NS_ERROR_NOT_INITIALIZED);
|
|
|
|
|
2009-09-03 12:30:06 -07:00
|
|
|
// We allow the caret to be moved with arrow keys on any window for which
|
|
|
|
// the caret is enabled. In particular, this includes caret-browsing mode
|
|
|
|
// in non-chrome documents.
|
2011-09-28 23:19:26 -07:00
|
|
|
bool caretOn = false;
|
2007-03-22 10:30:00 -07:00
|
|
|
selCont->GetCaretEnabled(&caretOn);
|
2009-09-03 12:30:06 -07:00
|
|
|
if (!caretOn) {
|
2011-05-24 23:31:59 -07:00
|
|
|
caretOn = Preferences::GetBool("accessibility.browsewithcaret");
|
2009-09-03 12:30:06 -07:00
|
|
|
if (caretOn) {
|
|
|
|
nsCOMPtr<nsPIDOMWindow> piWindow = do_QueryInterface(aWindow);
|
|
|
|
if (piWindow) {
|
|
|
|
nsCOMPtr<nsIDocShellTreeItem> dsti = do_QueryInterface(piWindow->GetDocShell());
|
|
|
|
if (dsti) {
|
|
|
|
PRInt32 itemType;
|
|
|
|
dsti->GetItemType(&itemType);
|
|
|
|
if (itemType == nsIDocShellTreeItem::typeChrome) {
|
2011-10-17 07:59:28 -07:00
|
|
|
caretOn = false;
|
2009-09-03 12:30:06 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2007-03-22 10:30:00 -07:00
|
|
|
|
2009-09-03 12:30:06 -07:00
|
|
|
if (caretOn) {
|
2009-07-13 04:55:56 -07:00
|
|
|
return DoCommandBrowseWithCaretOn(aCommandName, aWindow, selCont);
|
Bug 178324, refactor focus by moving all focus handling into one place and simplifying it, add many tests, fixes many other bugs too numerous to mention in this small checkin comment, r=josh,smichaud,ere,dbaron,marco,neil,gavin,smaug,sr=smaug (CLOSED TREE)
2009-06-10 11:00:39 -07:00
|
|
|
}
|
2007-03-22 10:30:00 -07:00
|
|
|
|
Bug 178324, refactor focus by moving all focus handling into one place and simplifying it, add many tests, fixes many other bugs too numerous to mention in this small checkin comment, r=josh,smichaud,ere,dbaron,marco,neil,gavin,smaug,sr=smaug (CLOSED TREE)
2009-06-10 11:00:39 -07:00
|
|
|
return DoCommandBrowseWithCaretOff(aCommandName, selCont);
|
2007-03-22 10:30:00 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsSelectMoveScrollCommand::DoCommandBrowseWithCaretOn(const char *aCommandName,
|
Bug 178324, refactor focus by moving all focus handling into one place and simplifying it, add many tests, fixes many other bugs too numerous to mention in this small checkin comment, r=josh,smichaud,ere,dbaron,marco,neil,gavin,smaug,sr=smaug (CLOSED TREE)
2009-06-10 11:00:39 -07:00
|
|
|
nsIDOMWindow *aWindow, nsISelectionController *aSelectionController)
|
2007-03-22 10:30:00 -07:00
|
|
|
{
|
|
|
|
nsresult rv = NS_ERROR_NOT_IMPLEMENTED;
|
|
|
|
|
2011-12-23 16:11:30 -08:00
|
|
|
// cmd_MoveTop/Bottom are used on Window/Unix. They move the caret
|
|
|
|
// in caret browsing mode.
|
|
|
|
if (!nsCRT::strcmp(aCommandName, sMoveTopString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->CompleteMove(false, false);
|
2011-12-23 16:11:30 -08:00
|
|
|
else if (!nsCRT::strcmp(aCommandName,sMoveBottomString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->CompleteMove(true, false);
|
2011-12-23 16:11:30 -08:00
|
|
|
// cmd_ScrollTop/Bottom are used on Mac. They do not move the
|
|
|
|
// caret in caret browsing mode.
|
|
|
|
else if (!nsCRT::strcmp(aCommandName, sScrollTopString))
|
|
|
|
rv = aSelectionController->CompleteScroll(false);
|
|
|
|
else if (!nsCRT::strcmp(aCommandName,sScrollBottomString))
|
|
|
|
rv = aSelectionController->CompleteScroll(true);
|
2007-03-22 10:30:00 -07:00
|
|
|
// cmd_MovePageUp/Down are used on Window/Unix. They move the caret
|
|
|
|
// in caret browsing mode.
|
|
|
|
else if (!nsCRT::strcmp(aCommandName, sMovePageUpString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->PageMove(false, false);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sMovePageDownString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->PageMove(true, false);
|
2007-03-22 10:30:00 -07:00
|
|
|
// cmd_ScrollPageUp/Down are used on Mac, and for the spacebar on all platforms.
|
|
|
|
// They do not move the caret in caret browsing mode.
|
|
|
|
else if (!nsCRT::strcmp(aCommandName, sScrollPageUpString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->ScrollPage(false);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sScrollPageDownString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->ScrollPage(true);
|
2011-12-23 16:11:30 -08:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sLinePreviousString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->LineMove(false, false);
|
2011-12-23 16:11:30 -08:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sLineNextString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->LineMove(true, false);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sWordPreviousString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->WordMove(false, false);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sWordNextString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->WordMove(true, false);
|
2011-12-23 16:11:30 -08:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sCharPreviousString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->CharacterMove(false, false);
|
2011-12-23 16:11:30 -08:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sCharNextString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->CharacterMove(true, false);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sBeginLineString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->IntraLineMove(false, false);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sEndLineString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->IntraLineMove(true, false);
|
2007-03-22 10:30:00 -07:00
|
|
|
|
Bug 178324, refactor focus by moving all focus handling into one place and simplifying it, add many tests, fixes many other bugs too numerous to mention in this small checkin comment, r=josh,smichaud,ere,dbaron,marco,neil,gavin,smaug,sr=smaug (CLOSED TREE)
2009-06-10 11:00:39 -07:00
|
|
|
if (NS_SUCCEEDED(rv))
|
2007-03-22 10:30:00 -07:00
|
|
|
{
|
Bug 178324, refactor focus by moving all focus handling into one place and simplifying it, add many tests, fixes many other bugs too numerous to mention in this small checkin comment, r=josh,smichaud,ere,dbaron,marco,neil,gavin,smaug,sr=smaug (CLOSED TREE)
2009-06-10 11:00:39 -07:00
|
|
|
// adjust the focus to the new caret position
|
|
|
|
nsIFocusManager* fm = nsFocusManager::GetFocusManager();
|
|
|
|
if (fm) {
|
|
|
|
nsCOMPtr<nsIDOMElement> result;
|
|
|
|
fm->MoveFocus(aWindow, nsnull, nsIFocusManager::MOVEFOCUS_CARET,
|
|
|
|
nsIFocusManager::FLAG_NOSCROLL,
|
|
|
|
getter_AddRefs(result));
|
|
|
|
}
|
2007-03-22 10:30:00 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsSelectMoveScrollCommand::DoCommandBrowseWithCaretOff(const char *aCommandName, nsISelectionController *aSelectionController)
|
|
|
|
{
|
|
|
|
nsresult rv = NS_ERROR_NOT_IMPLEMENTED;
|
|
|
|
|
2011-12-23 16:11:30 -08:00
|
|
|
// cmd_MoveTop/Bottom are used on Window/Unix. They move the caret
|
|
|
|
// in caret browsing mode.
|
|
|
|
if (!nsCRT::strcmp(aCommandName, sMoveTopString))
|
|
|
|
rv = aSelectionController->CompleteScroll(false);
|
|
|
|
else if (!nsCRT::strcmp(aCommandName,sMoveBottomString))
|
|
|
|
rv = aSelectionController->CompleteScroll(true);
|
|
|
|
// cmd_ScrollTop/Bottom are used on Mac. They do not move the
|
|
|
|
// caret in caret browsing mode.
|
|
|
|
else if (!nsCRT::strcmp(aCommandName, sScrollTopString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->CompleteScroll(false);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName,sScrollBottomString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->CompleteScroll(true);
|
2007-03-22 10:30:00 -07:00
|
|
|
|
|
|
|
// cmd_MovePageUp/Down are used on Window/Unix. They move the caret
|
|
|
|
// in caret browsing mode.
|
|
|
|
else if (!nsCRT::strcmp(aCommandName, sMovePageUpString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->ScrollPage(false);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sMovePageDownString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->ScrollPage(true);
|
2007-03-22 10:30:00 -07:00
|
|
|
// cmd_ScrollPageUp/Down are used on Mac. They do not move the
|
|
|
|
// caret in caret browsing mode.
|
|
|
|
else if (!nsCRT::strcmp(aCommandName, sScrollPageUpString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->ScrollPage(false);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sScrollPageDownString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->ScrollPage(true);
|
2007-03-22 10:30:00 -07:00
|
|
|
|
2011-12-23 16:11:30 -08:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sLinePreviousString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->ScrollLine(false);
|
2011-12-23 16:11:30 -08:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sLineNextString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->ScrollLine(true);
|
2011-12-23 16:11:30 -08:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sCharPreviousString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->ScrollHorizontal(true);
|
2011-12-23 16:11:30 -08:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sCharNextString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->ScrollHorizontal(false);
|
2007-03-22 10:30:00 -07:00
|
|
|
// cmd_beginLine/endLine with caret browsing off
|
2011-12-23 16:11:30 -08:00
|
|
|
// will act as cmd_moveTop/Bottom
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sBeginLineString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->CompleteScroll(false);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sEndLineString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = aSelectionController->CompleteScroll(true);
|
2007-03-22 10:30:00 -07:00
|
|
|
|
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
#pragma mark -
|
|
|
|
#endif
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsSelectCommand::DoSelectCommand(const char *aCommandName, nsIDOMWindow *aWindow)
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsISelectionController> selCont;
|
|
|
|
GetSelectionControllerFromWindow(aWindow, getter_AddRefs(selCont));
|
|
|
|
NS_ENSURE_TRUE(selCont, NS_ERROR_NOT_INITIALIZED);
|
|
|
|
|
|
|
|
nsresult rv = NS_ERROR_NOT_IMPLEMENTED;
|
|
|
|
|
|
|
|
// These commands are so the browser can use caret navigation key bindings -
|
|
|
|
// Helps with accessibility - aaronl@netscape.com
|
|
|
|
if (!nsCRT::strcmp(aCommandName, sSelectCharPreviousString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = selCont->CharacterMove(false, true);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sSelectCharNextString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = selCont->CharacterMove(true, true);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sSelectWordPreviousString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = selCont->WordMove(false, true);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sSelectWordNextString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = selCont->WordMove(true, true);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sSelectBeginLineString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = selCont->IntraLineMove(false, true);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sSelectEndLineString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = selCont->IntraLineMove(true, true);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sSelectLinePreviousString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = selCont->LineMove(false, true);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sSelectLineNextString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = selCont->LineMove(true, true);
|
2011-12-23 16:11:30 -08:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sSelectPageUpString))
|
|
|
|
rv = selCont->PageMove(false, true);
|
|
|
|
else if (!nsCRT::strcmp(aCommandName, sSelectPageDownString))
|
|
|
|
rv = selCont->PageMove(true, true);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sSelectTopString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = selCont->CompleteMove(false, true);
|
2007-03-22 10:30:00 -07:00
|
|
|
else if (!nsCRT::strcmp(aCommandName, sSelectBottomString))
|
2011-10-17 07:59:28 -07:00
|
|
|
rv = selCont->CompleteMove(true, true);
|
2007-03-22 10:30:00 -07:00
|
|
|
|
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
#pragma mark -
|
|
|
|
#endif
|
|
|
|
|
2010-03-19 11:32:13 -07:00
|
|
|
class nsClipboardCommand : public nsIControllerCommand
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
NS_DECL_ISUPPORTS
|
|
|
|
NS_DECL_NSICONTROLLERCOMMAND
|
|
|
|
};
|
|
|
|
|
|
|
|
NS_IMPL_ISUPPORTS1(nsClipboardCommand, nsIControllerCommand)
|
|
|
|
|
|
|
|
nsresult
|
2011-09-28 23:19:26 -07:00
|
|
|
nsClipboardCommand::IsCommandEnabled(const char* aCommandName, nsISupports *aContext, bool *outCmdEnabled)
|
2010-03-19 11:32:13 -07:00
|
|
|
{
|
|
|
|
NS_ENSURE_ARG_POINTER(outCmdEnabled);
|
2011-10-17 07:59:28 -07:00
|
|
|
*outCmdEnabled = false;
|
2010-03-19 11:32:13 -07:00
|
|
|
|
|
|
|
if (strcmp(aCommandName, "cmd_copy"))
|
|
|
|
return NS_OK;
|
|
|
|
|
|
|
|
nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(aContext);
|
|
|
|
NS_ENSURE_TRUE(window, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
nsCOMPtr<nsIDocument> doc = do_QueryInterface(window->GetExtantDocument());
|
|
|
|
*outCmdEnabled = nsCopySupport::CanCopy(doc);
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsClipboardCommand::DoCommand(const char *aCommandName, nsISupports *aContext)
|
|
|
|
{
|
|
|
|
if (strcmp(aCommandName, "cmd_copy"))
|
|
|
|
return NS_OK;
|
|
|
|
|
|
|
|
nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(aContext);
|
|
|
|
NS_ENSURE_TRUE(window, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
nsIDocShell *docShell = window->GetDocShell();
|
|
|
|
NS_ENSURE_TRUE(docShell, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
nsCOMPtr<nsIPresShell> presShell;
|
|
|
|
docShell->GetPresShell(getter_AddRefs(presShell));
|
|
|
|
NS_ENSURE_TRUE(presShell, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
nsCopySupport::FireClipboardEvent(NS_COPY, presShell, nsnull);
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsClipboardCommand::GetCommandStateParams(const char *aCommandName,
|
|
|
|
nsICommandParams *aParams, nsISupports *aCommandContext)
|
|
|
|
{
|
|
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsClipboardCommand::DoCommandParams(const char *aCommandName, nsICommandParams* aParams, nsISupports *aContext)
|
|
|
|
{
|
|
|
|
return DoCommand(aCommandName, aContext);
|
|
|
|
}
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
#pragma mark -
|
|
|
|
#endif
|
|
|
|
|
|
|
|
class nsSelectionCommand : public nsIControllerCommand
|
2007-03-22 10:30:00 -07:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
NS_DECL_ISUPPORTS
|
|
|
|
NS_DECL_NSICONTROLLERCOMMAND
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
2011-09-28 23:19:26 -07:00
|
|
|
virtual nsresult IsClipboardCommandEnabled(const char * aCommandName, nsIContentViewerEdit* aEdit, bool *outCmdEnabled) = 0;
|
2007-03-22 10:30:00 -07:00
|
|
|
virtual nsresult DoClipboardCommand(const char *aCommandName, nsIContentViewerEdit* aEdit, nsICommandParams* aParams) = 0;
|
|
|
|
|
|
|
|
static nsresult GetContentViewerEditFromContext(nsISupports *aContext, nsIContentViewerEdit **aEditInterface);
|
|
|
|
|
|
|
|
// no member variables, please, we're stateless!
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2010-03-19 11:32:13 -07:00
|
|
|
NS_IMPL_ISUPPORTS1(nsSelectionCommand, nsIControllerCommand)
|
2007-03-22 10:30:00 -07:00
|
|
|
|
|
|
|
|
|
|
|
/*---------------------------------------------------------------------------
|
|
|
|
|
2010-03-19 11:32:13 -07:00
|
|
|
nsSelectionCommand
|
2007-03-22 10:30:00 -07:00
|
|
|
|
|
|
|
----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2010-03-19 11:32:13 -07:00
|
|
|
nsSelectionCommand::IsCommandEnabled(const char * aCommandName,
|
|
|
|
nsISupports *aCommandContext,
|
2011-09-28 23:19:26 -07:00
|
|
|
bool *outCmdEnabled)
|
2007-03-22 10:30:00 -07:00
|
|
|
{
|
|
|
|
NS_ENSURE_ARG_POINTER(outCmdEnabled);
|
2011-10-17 07:59:28 -07:00
|
|
|
*outCmdEnabled = false;
|
2007-03-22 10:30:00 -07:00
|
|
|
|
|
|
|
nsCOMPtr<nsIContentViewerEdit> contentEdit;
|
|
|
|
GetContentViewerEditFromContext(aCommandContext, getter_AddRefs(contentEdit));
|
|
|
|
NS_ENSURE_TRUE(contentEdit, NS_ERROR_NOT_INITIALIZED);
|
|
|
|
|
|
|
|
return IsClipboardCommandEnabled(aCommandName, contentEdit, outCmdEnabled);
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2010-03-19 11:32:13 -07:00
|
|
|
nsSelectionCommand::DoCommand(const char *aCommandName,
|
|
|
|
nsISupports *aCommandContext)
|
2007-03-22 10:30:00 -07:00
|
|
|
{
|
|
|
|
nsCOMPtr<nsIContentViewerEdit> contentEdit;
|
|
|
|
GetContentViewerEditFromContext(aCommandContext, getter_AddRefs(contentEdit));
|
|
|
|
NS_ENSURE_TRUE(contentEdit, NS_ERROR_NOT_INITIALIZED);
|
|
|
|
|
|
|
|
return DoClipboardCommand(aCommandName, contentEdit, nsnull);
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2010-03-19 11:32:13 -07:00
|
|
|
nsSelectionCommand::GetCommandStateParams(const char *aCommandName,
|
|
|
|
nsICommandParams *aParams,
|
|
|
|
nsISupports *aCommandContext)
|
2007-03-22 10:30:00 -07:00
|
|
|
{
|
|
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
2010-03-19 11:32:13 -07:00
|
|
|
nsSelectionCommand::DoCommandParams(const char *aCommandName,
|
|
|
|
nsICommandParams *aParams,
|
|
|
|
nsISupports *aCommandContext)
|
2007-03-22 10:30:00 -07:00
|
|
|
{
|
|
|
|
nsCOMPtr<nsIContentViewerEdit> contentEdit;
|
|
|
|
GetContentViewerEditFromContext(aCommandContext, getter_AddRefs(contentEdit));
|
|
|
|
NS_ENSURE_TRUE(contentEdit, NS_ERROR_NOT_INITIALIZED);
|
|
|
|
|
|
|
|
return DoClipboardCommand(aCommandName, contentEdit, aParams);
|
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
2010-03-19 11:32:13 -07:00
|
|
|
nsSelectionCommand::GetContentViewerEditFromContext(nsISupports *aContext,
|
|
|
|
nsIContentViewerEdit **aEditInterface)
|
2007-03-22 10:30:00 -07:00
|
|
|
{
|
|
|
|
NS_ENSURE_ARG(aEditInterface);
|
|
|
|
*aEditInterface = nsnull;
|
|
|
|
|
|
|
|
nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(aContext);
|
|
|
|
NS_ENSURE_TRUE(window, NS_ERROR_INVALID_ARG);
|
|
|
|
|
|
|
|
nsIDocShell *docShell = window->GetDocShell();
|
|
|
|
NS_ENSURE_TRUE(docShell, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
nsCOMPtr<nsIContentViewer> viewer;
|
|
|
|
docShell->GetContentViewer(getter_AddRefs(viewer));
|
|
|
|
nsCOMPtr<nsIContentViewerEdit> edit(do_QueryInterface(viewer));
|
|
|
|
NS_ENSURE_TRUE(edit, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
*aEditInterface = edit;
|
|
|
|
NS_ADDREF(*aEditInterface);
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
#pragma mark -
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define NS_DECL_CLIPBOARD_COMMAND(_cmd) \
|
2010-03-19 11:32:13 -07:00
|
|
|
class _cmd : public nsSelectionCommand \
|
2007-03-22 10:30:00 -07:00
|
|
|
{ \
|
|
|
|
protected: \
|
|
|
|
\
|
|
|
|
virtual nsresult IsClipboardCommandEnabled(const char* aCommandName, \
|
2011-09-28 23:19:26 -07:00
|
|
|
nsIContentViewerEdit* aEdit, bool *outCmdEnabled); \
|
2007-03-22 10:30:00 -07:00
|
|
|
virtual nsresult DoClipboardCommand(const char* aCommandName, \
|
|
|
|
nsIContentViewerEdit* aEdit, nsICommandParams* aParams); \
|
|
|
|
/* no member variables, please, we're stateless! */ \
|
|
|
|
};
|
|
|
|
|
|
|
|
NS_DECL_CLIPBOARD_COMMAND(nsClipboardCopyLinkCommand)
|
|
|
|
NS_DECL_CLIPBOARD_COMMAND(nsClipboardImageCommands)
|
|
|
|
NS_DECL_CLIPBOARD_COMMAND(nsClipboardSelectAllNoneCommands)
|
|
|
|
NS_DECL_CLIPBOARD_COMMAND(nsClipboardGetContentsCommand)
|
|
|
|
|
|
|
|
nsresult
|
2011-09-28 23:19:26 -07:00
|
|
|
nsClipboardCopyLinkCommand::IsClipboardCommandEnabled(const char* aCommandName, nsIContentViewerEdit* aEdit, bool *outCmdEnabled)
|
2007-03-22 10:30:00 -07:00
|
|
|
{
|
|
|
|
return aEdit->GetInLink(outCmdEnabled);
|
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsClipboardCopyLinkCommand::DoClipboardCommand(const char *aCommandName, nsIContentViewerEdit* aEdit, nsICommandParams* aParams)
|
|
|
|
{
|
|
|
|
return aEdit->CopyLinkLocation();
|
|
|
|
}
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
#pragma mark -
|
|
|
|
#endif
|
|
|
|
|
|
|
|
nsresult
|
2011-09-28 23:19:26 -07:00
|
|
|
nsClipboardImageCommands::IsClipboardCommandEnabled(const char* aCommandName, nsIContentViewerEdit* aEdit, bool *outCmdEnabled)
|
2007-03-22 10:30:00 -07:00
|
|
|
{
|
|
|
|
return aEdit->GetInImage(outCmdEnabled);
|
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsClipboardImageCommands::DoClipboardCommand(const char *aCommandName, nsIContentViewerEdit* aEdit, nsICommandParams* aParams)
|
|
|
|
{
|
|
|
|
if (!nsCRT::strcmp(sCopyImageLocationString, aCommandName))
|
|
|
|
return aEdit->CopyImage(nsIContentViewerEdit::COPY_IMAGE_TEXT);
|
|
|
|
if (!nsCRT::strcmp(sCopyImageContentsString, aCommandName))
|
|
|
|
return aEdit->CopyImage(nsIContentViewerEdit::COPY_IMAGE_DATA);
|
|
|
|
|
|
|
|
PRInt32 copyFlags = nsIContentViewerEdit::COPY_IMAGE_ALL;
|
|
|
|
if (aParams)
|
|
|
|
aParams->GetLongValue("imageCopy", ©Flags);
|
|
|
|
return aEdit->CopyImage(copyFlags);
|
|
|
|
}
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
#pragma mark -
|
|
|
|
#endif
|
|
|
|
|
|
|
|
nsresult
|
2011-09-28 23:19:26 -07:00
|
|
|
nsClipboardSelectAllNoneCommands::IsClipboardCommandEnabled(const char* aCommandName, nsIContentViewerEdit* aEdit, bool *outCmdEnabled)
|
2007-03-22 10:30:00 -07:00
|
|
|
{
|
2011-10-17 07:59:28 -07:00
|
|
|
*outCmdEnabled = true;
|
2007-03-22 10:30:00 -07:00
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsClipboardSelectAllNoneCommands::DoClipboardCommand(const char *aCommandName, nsIContentViewerEdit* aEdit, nsICommandParams* aParams)
|
|
|
|
{
|
|
|
|
if (!nsCRT::strcmp(sSelectAllString, aCommandName))
|
|
|
|
return aEdit->SelectAll();
|
|
|
|
|
|
|
|
return aEdit->ClearSelection();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
#pragma mark -
|
|
|
|
#endif
|
|
|
|
|
|
|
|
nsresult
|
2011-09-28 23:19:26 -07:00
|
|
|
nsClipboardGetContentsCommand::IsClipboardCommandEnabled(const char* aCommandName, nsIContentViewerEdit* aEdit, bool *outCmdEnabled)
|
2007-03-22 10:30:00 -07:00
|
|
|
{
|
|
|
|
return aEdit->GetCanGetContents(outCmdEnabled);
|
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsClipboardGetContentsCommand::DoClipboardCommand(const char *aCommandName, nsIContentViewerEdit* aEdit, nsICommandParams* aParams)
|
|
|
|
{
|
|
|
|
NS_ENSURE_ARG(aParams);
|
|
|
|
|
|
|
|
nsCAutoString mimeType("text/plain");
|
|
|
|
|
|
|
|
nsXPIDLCString format; // nsICommandParams needs to use nsACString
|
|
|
|
if (NS_SUCCEEDED(aParams->GetCStringValue("format", getter_Copies(format))))
|
|
|
|
mimeType.Assign(format);
|
|
|
|
|
2011-09-28 23:19:26 -07:00
|
|
|
bool selectionOnly = false;
|
2007-03-22 10:30:00 -07:00
|
|
|
aParams->GetBooleanValue("selection_only", &selectionOnly);
|
|
|
|
|
|
|
|
nsAutoString contents;
|
|
|
|
nsresult rv = aEdit->GetContents(mimeType.get(), selectionOnly, contents);
|
|
|
|
if (NS_FAILED(rv))
|
|
|
|
return rv;
|
|
|
|
|
|
|
|
return aParams->SetStringValue("result", contents);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
#pragma mark -
|
|
|
|
#endif
|
|
|
|
|
|
|
|
class nsWebNavigationBaseCommand : public nsIControllerCommand
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
NS_DECL_ISUPPORTS
|
|
|
|
NS_DECL_NSICONTROLLERCOMMAND
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
2011-09-28 23:19:26 -07:00
|
|
|
virtual nsresult IsWebNavCommandEnabled(const char * aCommandName, nsIWebNavigation* aWebNavigation, bool *outCmdEnabled) = 0;
|
2007-03-22 10:30:00 -07:00
|
|
|
virtual nsresult DoWebNavCommand(const char *aCommandName, nsIWebNavigation* aWebNavigation) = 0;
|
|
|
|
|
|
|
|
static nsresult GetWebNavigationFromContext(nsISupports *aContext, nsIWebNavigation **aWebNavigation);
|
|
|
|
|
|
|
|
// no member variables, please, we're stateless!
|
|
|
|
};
|
|
|
|
|
|
|
|
#if 0 // Remove unless needed again, bug 204777
|
|
|
|
class nsGoForwardCommand : public nsWebNavigationBaseCommand
|
|
|
|
{
|
|
|
|
protected:
|
|
|
|
|
2011-09-28 23:19:26 -07:00
|
|
|
virtual nsresult IsWebNavCommandEnabled(const char * aCommandName, nsIWebNavigation* aWebNavigation, bool *outCmdEnabled);
|
2007-03-22 10:30:00 -07:00
|
|
|
virtual nsresult DoWebNavCommand(const char *aCommandName, nsIWebNavigation* aWebNavigation);
|
|
|
|
// no member variables, please, we're stateless!
|
|
|
|
};
|
|
|
|
|
|
|
|
class nsGoBackCommand : public nsWebNavigationBaseCommand
|
|
|
|
{
|
|
|
|
protected:
|
|
|
|
|
2011-09-28 23:19:26 -07:00
|
|
|
virtual nsresult IsWebNavCommandEnabled(const char * aCommandName, nsIWebNavigation* aWebNavigation, bool *outCmdEnabled);
|
2007-03-22 10:30:00 -07:00
|
|
|
virtual nsresult DoWebNavCommand(const char *aCommandName, nsIWebNavigation* aWebNavigation);
|
|
|
|
// no member variables, please, we're stateless!
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/*---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
nsWebNavigationCommands
|
|
|
|
no params
|
|
|
|
----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
NS_IMPL_ISUPPORTS1(nsWebNavigationBaseCommand, nsIControllerCommand)
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsWebNavigationBaseCommand::IsCommandEnabled(const char * aCommandName,
|
|
|
|
nsISupports *aCommandContext,
|
2011-09-28 23:19:26 -07:00
|
|
|
bool *outCmdEnabled)
|
2007-03-22 10:30:00 -07:00
|
|
|
{
|
|
|
|
NS_ENSURE_ARG_POINTER(outCmdEnabled);
|
2011-10-17 07:59:28 -07:00
|
|
|
*outCmdEnabled = false;
|
2007-03-22 10:30:00 -07:00
|
|
|
|
|
|
|
nsCOMPtr<nsIWebNavigation> webNav;
|
|
|
|
GetWebNavigationFromContext(aCommandContext, getter_AddRefs(webNav));
|
|
|
|
NS_ENSURE_TRUE(webNav, NS_ERROR_INVALID_ARG);
|
|
|
|
|
|
|
|
return IsCommandEnabled(aCommandName, webNav, outCmdEnabled);
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsWebNavigationBaseCommand::GetCommandStateParams(const char *aCommandName,
|
|
|
|
nsICommandParams *aParams, nsISupports *aCommandContext)
|
|
|
|
{
|
|
|
|
// XXX we should probably return the enabled state
|
|
|
|
return NS_ERROR_NOT_IMPLEMENTED;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsWebNavigationBaseCommand::DoCommand(const char *aCommandName,
|
|
|
|
nsISupports *aCommandContext)
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsIWebNavigation> webNav;
|
|
|
|
GetWebNavigationFromContext(aCommandContext, getter_AddRefs(webNav));
|
|
|
|
NS_ENSURE_TRUE(webNav, NS_ERROR_INVALID_ARG);
|
|
|
|
|
|
|
|
return DoWebNavCommand(aCommandName, webNav);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* void doCommandParams (in string aCommandName, in nsICommandParams aParams, in nsISupports aCommandContext); */
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsWebNavigationBaseCommand::DoCommandParams(const char *aCommandName,
|
|
|
|
nsICommandParams *aParams, nsISupports *aCommandContext)
|
|
|
|
{
|
|
|
|
return DoCommand(aCommandName, aCommandContext);
|
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsWebNavigationBaseCommand::GetWebNavigationFromContext(nsISupports *aContext, nsIWebNavigation **aWebNavigation)
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsIInterfaceRequestor> windowReq = do_QueryInterface(aContext);
|
|
|
|
CallGetInterface(windowReq.get(), aWebNavigation);
|
|
|
|
return (*aWebNavigation) ? NS_OK : NS_ERROR_FAILURE;
|
|
|
|
}
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
#pragma mark -
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if 0 // Remove unless needed again, bug 204777
|
|
|
|
nsresult
|
2011-09-28 23:19:26 -07:00
|
|
|
nsGoForwardCommand::IsWebNavCommandEnabled(const char * aCommandName, nsIWebNavigation* aWebNavigation, bool *outCmdEnabled)
|
2007-03-22 10:30:00 -07:00
|
|
|
{
|
|
|
|
return aWebNavigation->GetCanGoForward(outCmdEnabled);
|
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsGoForwardCommand::DoWebNavCommand(const char *aCommandName, nsIWebNavigation* aWebNavigation)
|
|
|
|
{
|
|
|
|
return aWebNavigation->GoForward();
|
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
2011-09-28 23:19:26 -07:00
|
|
|
nsGoBackCommand::IsWebNavCommandEnabled(const char * aCommandName, nsIWebNavigation* aWebNavigation, bool *outCmdEnabled)
|
2007-03-22 10:30:00 -07:00
|
|
|
{
|
|
|
|
return aWebNavigation->GetCanGoBack(outCmdEnabled);
|
|
|
|
}
|
|
|
|
|
|
|
|
nsresult
|
|
|
|
nsGoBackCommand::DoWebNavCommand(const char *aCommandName, nsIWebNavigation* aWebNavigation)
|
|
|
|
{
|
|
|
|
return aWebNavigation->GoBack();
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/*---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
nsClipboardDragDropHookCommand
|
|
|
|
params value type possible values
|
|
|
|
"addhook" isupports nsIClipboardDragDropHooks as nsISupports
|
|
|
|
"removehook" isupports nsIClipboardDragDropHooks as nsISupports
|
|
|
|
|
|
|
|
----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
class nsClipboardDragDropHookCommand : public nsIControllerCommand
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
NS_DECL_ISUPPORTS
|
|
|
|
NS_DECL_NSICONTROLLERCOMMAND
|
|
|
|
|
|
|
|
protected:
|
|
|
|
// no member variables, please, we're stateless!
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
NS_IMPL_ISUPPORTS1(nsClipboardDragDropHookCommand, nsIControllerCommand)
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsClipboardDragDropHookCommand::IsCommandEnabled(const char * aCommandName,
|
|
|
|
nsISupports *aCommandContext,
|
2011-09-28 23:19:26 -07:00
|
|
|
bool *outCmdEnabled)
|
2007-03-22 10:30:00 -07:00
|
|
|
{
|
2011-10-17 07:59:28 -07:00
|
|
|
*outCmdEnabled = true;
|
2007-03-22 10:30:00 -07:00
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsClipboardDragDropHookCommand::DoCommand(const char *aCommandName,
|
|
|
|
nsISupports *aCommandContext)
|
|
|
|
{
|
|
|
|
return NS_ERROR_FAILURE;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsClipboardDragDropHookCommand::DoCommandParams(const char *aCommandName,
|
|
|
|
nsICommandParams *aParams,
|
|
|
|
nsISupports *aCommandContext)
|
|
|
|
{
|
|
|
|
NS_ENSURE_ARG(aParams);
|
|
|
|
|
|
|
|
nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(aCommandContext);
|
|
|
|
NS_ENSURE_TRUE(window, NS_ERROR_FAILURE);
|
|
|
|
|
|
|
|
nsIDocShell *docShell = window->GetDocShell();
|
|
|
|
|
|
|
|
nsCOMPtr<nsIClipboardDragDropHookList> obj = do_GetInterface(docShell);
|
|
|
|
if (!obj) return NS_ERROR_INVALID_ARG;
|
|
|
|
|
|
|
|
nsCOMPtr<nsISupports> isuppHook;
|
|
|
|
|
|
|
|
nsresult returnValue = NS_OK;
|
|
|
|
nsresult rv = aParams->GetISupportsValue("addhook", getter_AddRefs(isuppHook));
|
|
|
|
if (NS_SUCCEEDED(rv))
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsIClipboardDragDropHooks> hook = do_QueryInterface(isuppHook);
|
|
|
|
if (hook)
|
|
|
|
returnValue = obj->AddClipboardDragDropHooks(hook);
|
|
|
|
else
|
|
|
|
returnValue = NS_ERROR_INVALID_ARG;
|
|
|
|
}
|
|
|
|
|
|
|
|
rv = aParams->GetISupportsValue("removehook", getter_AddRefs(isuppHook));
|
|
|
|
if (NS_SUCCEEDED(rv))
|
|
|
|
{
|
|
|
|
nsCOMPtr<nsIClipboardDragDropHooks> hook = do_QueryInterface(isuppHook);
|
|
|
|
if (hook)
|
|
|
|
{
|
|
|
|
rv = obj->RemoveClipboardDragDropHooks(hook);
|
|
|
|
if (NS_FAILED(rv) && NS_SUCCEEDED(returnValue))
|
|
|
|
returnValue = rv;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
returnValue = NS_ERROR_INVALID_ARG;
|
|
|
|
}
|
|
|
|
|
|
|
|
return returnValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
NS_IMETHODIMP
|
|
|
|
nsClipboardDragDropHookCommand::GetCommandStateParams(const char *aCommandName,
|
|
|
|
nsICommandParams *aParams,
|
|
|
|
nsISupports *aCommandContext)
|
|
|
|
{
|
|
|
|
NS_ENSURE_ARG_POINTER(aParams);
|
2011-10-17 07:59:28 -07:00
|
|
|
return aParams->SetBooleanValue("state_enabled", true);
|
2007-03-22 10:30:00 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
/*---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
RegisterWindowCommands
|
|
|
|
|
|
|
|
----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
#define NS_REGISTER_ONE_COMMAND(_cmdClass, _cmdName) \
|
|
|
|
{ \
|
2010-07-05 02:42:18 -07:00
|
|
|
_cmdClass* theCmd = new _cmdClass(); \
|
2007-03-22 10:30:00 -07:00
|
|
|
if (!theCmd) return NS_ERROR_OUT_OF_MEMORY; \
|
|
|
|
rv = inCommandTable->RegisterCommand(_cmdName, \
|
2007-07-11 01:46:44 -07:00
|
|
|
static_cast<nsIControllerCommand *>(theCmd)); \
|
2007-03-22 10:30:00 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
#define NS_REGISTER_FIRST_COMMAND(_cmdClass, _cmdName) \
|
|
|
|
{ \
|
2010-07-05 02:42:18 -07:00
|
|
|
_cmdClass* theCmd = new _cmdClass(); \
|
2007-03-22 10:30:00 -07:00
|
|
|
if (!theCmd) return NS_ERROR_OUT_OF_MEMORY; \
|
|
|
|
rv = inCommandTable->RegisterCommand(_cmdName, \
|
2007-07-08 00:08:04 -07:00
|
|
|
static_cast<nsIControllerCommand *>(theCmd));
|
2007-03-22 10:30:00 -07:00
|
|
|
|
|
|
|
#define NS_REGISTER_NEXT_COMMAND(_cmdClass, _cmdName) \
|
|
|
|
rv = inCommandTable->RegisterCommand(_cmdName, \
|
2007-07-08 00:08:04 -07:00
|
|
|
static_cast<nsIControllerCommand *>(theCmd));
|
2007-03-22 10:30:00 -07:00
|
|
|
|
|
|
|
#define NS_REGISTER_LAST_COMMAND(_cmdClass, _cmdName) \
|
|
|
|
rv = inCommandTable->RegisterCommand(_cmdName, \
|
2007-07-11 01:46:44 -07:00
|
|
|
static_cast<nsIControllerCommand *>(theCmd)); \
|
2007-03-22 10:30:00 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// static
|
|
|
|
nsresult
|
|
|
|
nsWindowCommandRegistration::RegisterWindowCommands(
|
|
|
|
nsIControllerCommandTable *inCommandTable)
|
|
|
|
{
|
|
|
|
nsresult rv;
|
|
|
|
|
|
|
|
// XXX rework the macros to use a loop is possible, reducing code size
|
|
|
|
|
|
|
|
// this set of commands is affected by the 'browse with caret' setting
|
|
|
|
NS_REGISTER_FIRST_COMMAND(nsSelectMoveScrollCommand, sScrollTopString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectMoveScrollCommand, sScrollBottomString);
|
2011-12-23 16:11:30 -08:00
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectMoveScrollCommand, sMoveTopString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectMoveScrollCommand, sMoveBottomString);
|
2007-03-22 10:30:00 -07:00
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectMoveScrollCommand, sWordPreviousString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectMoveScrollCommand, sWordNextString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectMoveScrollCommand, sBeginLineString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectMoveScrollCommand, sEndLineString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectMoveScrollCommand, sMovePageUpString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectMoveScrollCommand, sMovePageDownString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectMoveScrollCommand, sScrollPageUpString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectMoveScrollCommand, sScrollPageDownString);
|
2011-12-23 16:11:30 -08:00
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectMoveScrollCommand, sLinePreviousString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectMoveScrollCommand, sLineNextString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectMoveScrollCommand, sCharPreviousString);
|
|
|
|
NS_REGISTER_LAST_COMMAND(nsSelectMoveScrollCommand, sCharNextString);
|
2007-03-22 10:30:00 -07:00
|
|
|
|
|
|
|
NS_REGISTER_FIRST_COMMAND(nsSelectCommand, sSelectCharPreviousString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectCommand, sSelectCharNextString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectCommand, sSelectWordPreviousString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectCommand, sSelectWordNextString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectCommand, sSelectBeginLineString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectCommand, sSelectEndLineString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectCommand, sSelectLinePreviousString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectCommand, sSelectLineNextString);
|
2011-12-23 16:11:30 -08:00
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectCommand, sSelectPageUpString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectCommand, sSelectPageDownString);
|
2007-03-22 10:30:00 -07:00
|
|
|
NS_REGISTER_NEXT_COMMAND(nsSelectCommand, sSelectTopString);
|
|
|
|
NS_REGISTER_LAST_COMMAND(nsSelectCommand, sSelectBottomString);
|
|
|
|
|
2010-03-19 11:32:13 -07:00
|
|
|
NS_REGISTER_ONE_COMMAND(nsClipboardCommand, "cmd_cut");
|
|
|
|
NS_REGISTER_ONE_COMMAND(nsClipboardCommand, "cmd_copy");
|
|
|
|
NS_REGISTER_ONE_COMMAND(nsClipboardCommand, "cmd_paste");
|
2007-03-22 10:30:00 -07:00
|
|
|
NS_REGISTER_ONE_COMMAND(nsClipboardCopyLinkCommand, "cmd_copyLink");
|
|
|
|
NS_REGISTER_FIRST_COMMAND(nsClipboardImageCommands, sCopyImageLocationString);
|
|
|
|
NS_REGISTER_NEXT_COMMAND(nsClipboardImageCommands, sCopyImageContentsString);
|
|
|
|
NS_REGISTER_LAST_COMMAND(nsClipboardImageCommands, sCopyImageString);
|
|
|
|
NS_REGISTER_FIRST_COMMAND(nsClipboardSelectAllNoneCommands, sSelectAllString);
|
|
|
|
NS_REGISTER_LAST_COMMAND(nsClipboardSelectAllNoneCommands, sSelectNoneString);
|
|
|
|
|
|
|
|
NS_REGISTER_ONE_COMMAND(nsClipboardGetContentsCommand, "cmd_getContents");
|
|
|
|
|
|
|
|
#if 0 // Remove unless needed again, bug 204777
|
|
|
|
NS_REGISTER_ONE_COMMAND(nsGoBackCommand, "cmd_browserBack");
|
|
|
|
NS_REGISTER_ONE_COMMAND(nsGoForwardCommand, "cmd_browserForward");
|
|
|
|
#endif
|
|
|
|
|
|
|
|
NS_REGISTER_ONE_COMMAND(nsClipboardDragDropHookCommand, "cmd_clipboardDragDropHook");
|
|
|
|
|
|
|
|
return rv;
|
|
|
|
}
|