Back to index

lightning-sunbird  0.9+nobinonly
nsRootAccessibleWrap.cpp
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
00002 /* vim:expandtab:shiftwidth=4:tabstop=4:
00003  */
00004 /* ***** BEGIN LICENSE BLOCK *****
00005  * Version: NPL 1.1/GPL 2.0/LGPL 2.1
00006  *
00007  *
00008  * The contents of this file are subject to the Mozilla Public
00009  * License Version 1.1 (the "License"); you may not use this file
00010  * except in compliance with the License. You may obtain a copy of
00011  * the License at http://www.mozilla.org/MPL/
00012  *
00013  * Software distributed under the License is distributed on an "AS
00014  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
00015  * implied. See the License for the specific language governing
00016  * rights and limitations under the License.
00017  *
00018  * The Original Code is mozilla.org code.
00019  *
00020  * The Initial Developer of the Original Code is Sun Microsystems, Inc.
00021  * Portions created by Sun Microsystems are Copyright (C) 2002 Sun
00022  * Microsystems, Inc. All Rights Reserved.
00023  *
00024  * Original Author: Bolian Yin (bolian.yin@sun.com)
00025  *
00026  * Alternatively, the contents of this file may be used under the terms of
00027  * either the GNU General Public License Version 2 or later (the "GPL"), or
00028  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00029  * in which case the provisions of the GPL or the LGPL are applicable instead
00030  * of those above. If you wish to allow use of your version of this file only
00031  * under the terms of either the GPL or the LGPL, and not to allow others to
00032  * use your version of this file under the terms of the NPL, indicate your
00033  * decision by deleting the provisions above and replace them with the notice
00034  * and other provisions required by the GPL or the LGPL. If you do not delete
00035  * the provisions above, a recipient may use your version of this file under
00036  * the terms of any one of the NPL, the GPL or the LGPL.
00037  *
00038  * ***** END LICENSE BLOCK ***** */
00039 
00040 #include "nsMai.h"
00041 #include "nsRootAccessibleWrap.h"
00042 #include "nsAppRootAccessible.h"
00043 #include "nsIDOMWindow.h"
00044 #include "nsPIDOMWindow.h"
00045 #include "nsIFocusController.h"
00046 
00047 nsRootAccessibleWrap::nsRootAccessibleWrap(nsIDOMNode *aDOMNode,
00048                                            nsIWeakReference* aShell):
00049     nsRootAccessible(aDOMNode, aShell)
00050 {
00051     MAI_LOG_DEBUG(("New Root Acc=%p\n", (void*)this));
00052 }
00053 
00054 NS_IMETHODIMP nsRootAccessibleWrap::Init()
00055 {
00056     nsresult rv = nsRootAccessible::Init();
00057     nsAppRootAccessible *root = nsAppRootAccessible::Create();
00058     if (root) {
00059         root->AddRootAccessible(this);
00060     }
00061     return rv;
00062 }
00063 
00064 nsRootAccessibleWrap::~nsRootAccessibleWrap()
00065 {
00066     MAI_LOG_DEBUG(("Delete Root Acc=%p\n", (void*)this));
00067 }
00068 
00069 NS_IMETHODIMP nsRootAccessibleWrap::Shutdown()
00070 {
00071     nsAppRootAccessible *root = nsAppRootAccessible::Create();
00072     if (root) {
00073         root->RemoveRootAccessible(this);
00074     }
00075     return nsRootAccessible::Shutdown();
00076 }
00077 
00078 NS_IMETHODIMP nsRootAccessibleWrap::GetParent(nsIAccessible **  aParent)
00079 {
00080     nsAppRootAccessible *root = nsAppRootAccessible::Create();
00081     nsresult rv = NS_OK;
00082     if (root) {
00083         NS_IF_ADDREF(*aParent = root);
00084     }
00085     else {
00086         *aParent = nsnull;
00087         rv = NS_ERROR_FAILURE;
00088     }
00089     return rv;
00090 }
00091 
00092 NS_IMETHODIMP nsRootAccessibleWrap::GetRole(PRUint32 *_retval)
00093 {
00094     *_retval = ROLE_FRAME;
00095     return NS_OK;
00096 }
00097 
00098 NS_IMETHODIMP nsRootAccessibleWrap::GetExtState(PRUint32 *aState)
00099 {
00100     nsAccessibleWrap::GetExtState(aState);
00101     
00102     nsCOMPtr<nsIDOMWindow> domWin;
00103     GetWindow(getter_AddRefs(domWin));
00104     nsCOMPtr<nsPIDOMWindow> privateDOMWindow(do_QueryInterface(domWin));
00105     if (privateDOMWindow) {
00106         nsIFocusController *focusController =
00107             privateDOMWindow->GetRootFocusController();
00108         PRBool isActive = PR_FALSE;
00109         focusController->GetActive(&isActive);
00110         if (isActive) {
00111             *aState |= EXT_STATE_ACTIVE;
00112         }
00113     }
00114     return NS_OK;
00115 }