зеркало из https://github.com/mozilla/pjs.git
Bug 187208 give more information for menu
r=kyle.yuan, sr=bryner
This commit is contained in:
Родитель
fefb53abae
Коммит
68ce40b1b0
|
@ -44,6 +44,7 @@ interface nsIAccessible : nsISupports
|
|||
|
||||
readonly attribute AString accDescription;
|
||||
readonly attribute AString accKeyboardShortcut;
|
||||
readonly attribute AString accKeybinding;
|
||||
|
||||
readonly attribute unsigned long accRole;
|
||||
readonly attribute unsigned long accState;
|
||||
|
|
|
@ -128,6 +128,12 @@ NS_IMETHODIMP nsGenericAccessible::GetAccKeyboardShortcut(nsAString& _retval)
|
|||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
/* DOMString getKeybinding (); */
|
||||
NS_IMETHODIMP nsGenericAccessible::GetAccKeybinding(nsAString& _retval)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
/* unsigned long getAccRole (); */
|
||||
NS_IMETHODIMP nsGenericAccessible::GetAccRole(PRUint32 *_retval)
|
||||
{
|
||||
|
|
|
@ -114,6 +114,7 @@ NS_IMETHODIMP nsXULMenuitemAccessible::GetAccName(nsAString& _retval)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
//return menu accesskey: N or Alt+F
|
||||
NS_IMETHODIMP nsXULMenuitemAccessible::GetAccKeyboardShortcut(nsAString& _retval)
|
||||
{
|
||||
static PRInt32 gMenuAccesskeyModifier = -1; // magic value of -1 indicates unitialized state
|
||||
|
@ -157,6 +158,22 @@ NS_IMETHODIMP nsXULMenuitemAccessible::GetAccKeyboardShortcut(nsAString& _retval
|
|||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
//return menu shortcut: Ctrl+F or Ctrl+Shift+L
|
||||
NS_IMETHODIMP nsXULMenuitemAccessible::GetAccKeybinding(nsAString& _retval)
|
||||
{
|
||||
nsCOMPtr<nsIDOMElement> elt(do_QueryInterface(mDOMNode));
|
||||
if (elt) {
|
||||
nsAutoString accelText;
|
||||
elt->GetAttribute(NS_LITERAL_STRING("acceltext"), accelText);
|
||||
if (accelText.IsEmpty())
|
||||
return NS_OK;
|
||||
|
||||
_retval = accelText;
|
||||
return NS_OK;
|
||||
}
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsXULMenuitemAccessible::GetAccRole(PRUint32 *_retval)
|
||||
{
|
||||
*_retval = ROLE_MENUITEM;
|
||||
|
|
|
@ -51,6 +51,7 @@ public:
|
|||
nsXULMenuitemAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell);
|
||||
NS_IMETHOD GetAccName(nsAString& _retval);
|
||||
NS_IMETHOD GetAccKeyboardShortcut(nsAString& _retval);
|
||||
NS_IMETHOD GetAccKeybinding(nsAString& _retval);
|
||||
NS_IMETHOD GetAccState(PRUint32 *_retval);
|
||||
NS_IMETHOD GetAccRole(PRUint32 *_retval);
|
||||
NS_IMETHOD GetAccFirstChild(nsIAccessible **aAccFirstChild);
|
||||
|
|
|
@ -1,239 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* vim:expandtab:shiftwidth=4:tabstop=4:
|
||||
*/
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 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 Sun Microsystems, Inc.
|
||||
* Portions created by Sun Microsystems are Copyright (C) 2002 Sun
|
||||
* Microsystems, Inc. All Rights Reserved.
|
||||
*
|
||||
* Original Author: Bolian Yin (bolian.yin@sun.com)
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* 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 NPL, 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 NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "nsMaiInterfaceAction.h"
|
||||
|
||||
/* helpers */
|
||||
static MaiInterfaceAction *getAction(AtkAction *aAction);
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
static void interfaceInitCB(AtkActionIface *aIface);
|
||||
/* action interface callbacks */
|
||||
static gboolean doActionCB(AtkAction *aAction, gint aActionIndex);
|
||||
static gint getActionCountCB(AtkAction *aAction);
|
||||
static const gchar *getDescriptionCB(AtkAction *aAction, gint aActionIndex);
|
||||
static const gchar *getNameCB(AtkAction *aAction, gint aActionIndex);
|
||||
static const gchar *getKeybindingCB(AtkAction *aAction, gint aActionIndex);
|
||||
static gboolean setDescriptionCB(AtkAction *aAction, gint aActionIndex,
|
||||
const gchar *aDesc);
|
||||
G_END_DECLS
|
||||
|
||||
MaiInterfaceAction::MaiInterfaceAction(MaiWidget *aMaiWidget):
|
||||
MaiInterface(aMaiWidget)
|
||||
{
|
||||
}
|
||||
|
||||
MaiInterfaceAction::~MaiInterfaceAction()
|
||||
{
|
||||
}
|
||||
|
||||
MaiInterfaceType
|
||||
MaiInterfaceAction::GetType()
|
||||
{
|
||||
return MAI_INTERFACE_ACTION;
|
||||
}
|
||||
|
||||
const GInterfaceInfo *
|
||||
MaiInterfaceAction::GetInterfaceInfo()
|
||||
{
|
||||
static const GInterfaceInfo atk_if_action_info = {
|
||||
(GInterfaceInitFunc)interfaceInitCB,
|
||||
(GInterfaceFinalizeFunc) NULL,
|
||||
NULL
|
||||
};
|
||||
return &atk_if_action_info;
|
||||
}
|
||||
|
||||
gboolean
|
||||
MaiInterfaceAction::DoAction(gint aActionIndex)
|
||||
{
|
||||
nsIAccessible *accessible = GetNSAccessible();
|
||||
g_return_val_if_fail(accessible != NULL, FALSE);
|
||||
|
||||
nsresult rv = accessible->AccDoAction(aActionIndex);
|
||||
return (NS_FAILED(rv)) ? FALSE : TRUE;
|
||||
}
|
||||
|
||||
gint
|
||||
MaiInterfaceAction::GetActionCount()
|
||||
{
|
||||
nsIAccessible *accessible = GetNSAccessible();
|
||||
g_return_val_if_fail(accessible != NULL, 0);
|
||||
|
||||
PRUint8 num = 0;
|
||||
nsresult rv = accessible->GetAccNumActions(&num);
|
||||
return (NS_FAILED(rv)) ? 0 : NS_STATIC_CAST(gint, num);
|
||||
}
|
||||
|
||||
const gchar *
|
||||
MaiInterfaceAction::GetDescription(gint aActionIndex)
|
||||
{
|
||||
// the interface in nsIAccessibleAction is empty
|
||||
// use getName as default description
|
||||
return GetName(aActionIndex);
|
||||
}
|
||||
|
||||
const gchar *
|
||||
MaiInterfaceAction::GetName(gint aActionIndex)
|
||||
{
|
||||
nsIAccessible *accessible = GetNSAccessible();
|
||||
g_return_val_if_fail(accessible != NULL, NULL);
|
||||
|
||||
if (!mName.IsEmpty())
|
||||
return mName.get();
|
||||
|
||||
nsAutoString autoStr;
|
||||
nsresult rv = accessible->GetAccActionName(aActionIndex, autoStr);
|
||||
if (NS_FAILED(rv))
|
||||
return NULL;
|
||||
|
||||
mName = NS_ConvertUCS2toUTF8(autoStr);
|
||||
return mName.get();
|
||||
}
|
||||
|
||||
const gchar *
|
||||
MaiInterfaceAction::GetKeybinding(gint aActionIndex)
|
||||
{
|
||||
nsIAccessible *accessible = GetNSAccessible();
|
||||
g_return_val_if_fail(accessible != NULL, NULL);
|
||||
|
||||
/* this is not supported in nsIAccessible yet */
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gboolean
|
||||
MaiInterfaceAction::SetDescription(gint aActionIndex, const gchar *aDesc)
|
||||
{
|
||||
nsIAccessible *accessible = GetNSAccessible();
|
||||
g_return_val_if_fail(accessible != NULL, FALSE);
|
||||
|
||||
/* this is not supported in nsIAccessible yet */
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* static functions */
|
||||
|
||||
/* do general checking for callbacks functions
|
||||
* return the MaiInterfaceAction extracted from atk action
|
||||
*/
|
||||
MaiInterfaceAction *
|
||||
getAction(AtkAction *aAction)
|
||||
{
|
||||
g_return_val_if_fail(MAI_IS_ATK_WIDGET(aAction), NULL);
|
||||
MaiWidget *maiWidget = (MaiWidget*)(MAI_ATK_OBJECT(aAction)->maiObject);
|
||||
g_return_val_if_fail(maiWidget != NULL, NULL);
|
||||
g_return_val_if_fail(maiWidget->GetAtkObject() == (AtkObject*)aAction,
|
||||
NULL);
|
||||
MaiInterfaceAction *maiInterfaceAction = (MaiInterfaceAction*)
|
||||
maiWidget->GetMaiInterface(MAI_INTERFACE_ACTION);
|
||||
return maiInterfaceAction;
|
||||
}
|
||||
|
||||
void
|
||||
interfaceInitCB(AtkActionIface *aIface)
|
||||
{
|
||||
g_return_if_fail(aIface != NULL);
|
||||
|
||||
aIface->do_action = doActionCB;
|
||||
aIface->get_n_actions = getActionCountCB;
|
||||
aIface->get_description = getDescriptionCB;
|
||||
aIface->get_keybinding = getKeybindingCB;
|
||||
aIface->get_name = getNameCB;
|
||||
aIface->set_description = setDescriptionCB;
|
||||
}
|
||||
|
||||
gboolean
|
||||
doActionCB(AtkAction *aAction, gint aActionIndex)
|
||||
{
|
||||
MaiInterfaceAction *maiInterfaceAction = getAction(aAction);
|
||||
if (!maiInterfaceAction)
|
||||
return FALSE;
|
||||
return maiInterfaceAction->DoAction(aActionIndex);
|
||||
}
|
||||
|
||||
gint
|
||||
getActionCountCB(AtkAction *aAction)
|
||||
{
|
||||
MaiInterfaceAction *maiInterfaceAction = getAction(aAction);
|
||||
if (!maiInterfaceAction)
|
||||
return 0;
|
||||
return maiInterfaceAction->GetActionCount();
|
||||
}
|
||||
|
||||
const gchar *
|
||||
getDescriptionCB(AtkAction *aAction, gint aActionIndex)
|
||||
{
|
||||
MaiInterfaceAction *maiInterfaceAction = getAction(aAction);
|
||||
if (!maiInterfaceAction)
|
||||
return NULL;
|
||||
return maiInterfaceAction->GetDescription(aActionIndex);
|
||||
}
|
||||
|
||||
const gchar *
|
||||
getNameCB(AtkAction *aAction, gint aActionIndex)
|
||||
{
|
||||
MaiInterfaceAction *maiInterfaceAction = getAction(aAction);
|
||||
if (!maiInterfaceAction)
|
||||
return NULL;
|
||||
return maiInterfaceAction->GetName(aActionIndex);
|
||||
}
|
||||
|
||||
const gchar *
|
||||
getKeybindingCB(AtkAction *aAction, gint aActionIndex)
|
||||
{
|
||||
MaiInterfaceAction *maiInterfaceAction = getAction(aAction);
|
||||
if (!maiInterfaceAction)
|
||||
return NULL;
|
||||
return maiInterfaceAction->GetKeybinding(aActionIndex);
|
||||
}
|
||||
|
||||
gboolean
|
||||
setDescriptionCB(AtkAction *aAction, gint aActionIndex,
|
||||
const gchar *aDesc)
|
||||
{
|
||||
MaiInterfaceAction *maiInterfaceAction = getAction(aAction);
|
||||
if (!maiInterfaceAction)
|
||||
return FALSE;
|
||||
return maiInterfaceAction->SetDescription(aActionIndex, aDesc);
|
||||
}
|
|
@ -1,69 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* vim:expandtab:shiftwidth=4:tabstop=4:
|
||||
*/
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 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 Sun Microsystems, Inc.
|
||||
* Portions created by Sun Microsystems are Copyright (C) 2002 Sun
|
||||
* Microsystems, Inc. All Rights Reserved.
|
||||
*
|
||||
* Original Author: Bolian Yin (bolian.yin@sun.com)
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* 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 NPL, 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 NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef __MAI_INTERFACE_ACTION_H__
|
||||
#define __MAI_INTERFACE_ACTION_H__
|
||||
|
||||
#include "nsString.h"
|
||||
#include "nsMaiWidget.h"
|
||||
|
||||
class MaiInterfaceAction: public MaiInterface
|
||||
{
|
||||
public:
|
||||
MaiInterfaceAction(MaiWidget*);
|
||||
virtual ~MaiInterfaceAction();
|
||||
|
||||
virtual MaiInterfaceType GetType();
|
||||
virtual const GInterfaceInfo *GetInterfaceInfo();
|
||||
|
||||
public:
|
||||
gboolean DoAction(gint aActionIndex);
|
||||
gint GetActionCount();
|
||||
const gchar *GetDescription(gint aActionIndex);
|
||||
const gchar *GetName(gint aActionIndex);
|
||||
const gchar *GetKeybinding(gint aActionIndex);
|
||||
gboolean SetDescription(gint aActionIndex, const gchar *aDesc);
|
||||
|
||||
private:
|
||||
nsCString mName;
|
||||
};
|
||||
|
||||
#endif /* __MAI_INTERFACE_ACTION_H__ */
|
Загрузка…
Ссылка в новой задаче