Modified: 
openoffice/trunk/main/accessibility/java/java_uno_accessbridge/src/main/java/org/openoffice/java/accessibility/Container.java
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/accessibility/java/java_uno_accessbridge/src/main/java/org/openoffice/java/accessibility/Container.java?rev=1852588&r1=1852587&r2=1852588&view=diff
==============================================================================
--- 
openoffice/trunk/main/accessibility/java/java_uno_accessbridge/src/main/java/org/openoffice/java/accessibility/Container.java
 (original)
+++ 
openoffice/trunk/main/accessibility/java/java_uno_accessbridge/src/main/java/org/openoffice/java/accessibility/Container.java
 Thu Jan 31 12:21:22 2019
@@ -1,5 +1,5 @@
 /**************************************************************
- * 
+ *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -7,16 +7,16 @@
  * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
- * 
+ *
  *************************************************************/
 
 
@@ -30,730 +30,729 @@ import com.sun.star.uno.*;
 import com.sun.star.accessibility.*;
 
 public class Container extends java.awt.Container implements 
javax.accessibility.Accessible {
-    
-    protected XAccessible unoAccessible;
-    protected XAccessibleContext unoAccessibleContext;
-    protected XAccessibleComponent unoAccessibleComponent = null;
-
-    protected javax.accessibility.AccessibleRole accessibleRole;
-    protected javax.accessibility.AccessibleText accessibleText;
-    protected boolean disposed = false;
-    
-    protected Container(javax.accessibility.AccessibleRole role,
-        XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
-        accessibleRole = role;
-        unoAccessible = xAccessible;
-        unoAccessibleContext = xAccessibleContext;
-        unoAccessibleComponent = (XAccessibleComponent) 
-            UnoRuntime.queryInterface(XAccessibleComponent.class, 
-            xAccessibleContext);
-
-        // Add the event listener right away, because the global focus 
notification doesn't
-        // work yet ..
-        XAccessibleEventBroadcaster broadcaster = (XAccessibleEventBroadcaster)
-            UnoRuntime.queryInterface(XAccessibleEventBroadcaster.class,
-            unoAccessibleContext);
-        if (broadcaster != null) {
-            broadcaster.addEventListener(createEventListener());
-        }
-    }
-    
-    /**
-    * Determines whether this <code>Container</code> is showing on screen. 
-    * This means that the component must be visible, and it must be in a 
-    * <code>container</code> that is visible and showing.
-    * @see       #addNotify
-    * @see       #removeNotify
-    * @since JDK1.0
-    */
-    public boolean isShowing() {
-        if (isVisible()) {
-            java.awt.Container parent = getParent();
-            return (parent == null) || parent.isShowing();
-        }
-        return false;
-    }
-    
-    /**
-    * Makes this <code>Container</code> displayable by connecting it to a
-    * native screen resource.  
-    * This method is called internally by the toolkit and should
-    * not be called directly by programs.
-    * @see       #isDisplayable
-    * @see       #removeNotify
-    * @since JDK1.0
-    */
-    public void addNotify() {
-    }
-    
-    /** 
-    * Makes this <code>Container</code> undisplayable by destroying it native
-    * screen resource. 
-    * This method is called by the toolkit internally and should
-    * not be called directly by programs.
-    * @see       #isDisplayable
-    * @see       #addNotify
-    * @since JDK1.0
-    */
-    public void removeNotify() {
-    }
-
-    /*
-     * Fake the java focus handling. This is necessary to keep OOo focus
-     * in sync with the java focus. See java.awt.DefaultKeyboardFocusManager
-     * for implementation details.
-     **/
-
-    /** Requests focus for this object */
-    public void requestFocus() {
-    }
-    
-    /** Requests focus for this object */
-    public boolean requestFocus(boolean temporary) {
-        // Must be a no-op to make focus handling work
-        return true;
-    }
-    
-    /** Requests the focus for this object in the containing window */
-    public boolean requestFocusInWindow() {
-        return requestFocusInWindow(false);
-    }
-    
-    /** Requests the focus for this object in the containing window */
-    protected boolean requestFocusInWindow(boolean temporary) {
-        if (isFocusable() && isVisible()) {
-            getEventQueue().postEvent(new java.awt.event.FocusEvent(this, 
java.awt.event.FocusEvent.FOCUS_GAINED, temporary)); 
-            return true;
-        }
-        return false;
-    }
-    
-    public Object[] getAccessibleComponents(Object[] targetSet) {
-        try {
-            java.util.ArrayList list = new 
java.util.ArrayList(targetSet.length);
-            for (int i=0; i < targetSet.length; i++) {
-                java.awt.Component c = 
AccessibleObjectFactory.getAccessibleComponent(
-                    (XAccessible) UnoRuntime.queryInterface(XAccessible.class, 
targetSet[i]));
-                if (c != null) {
-                    list.add(c);
-                }
-            }
-            list.trimToSize();
-            return list.toArray();
-        } catch (com.sun.star.uno.RuntimeException e) {
-            return null;
-        }
-    }
-    
-    protected java.awt.EventQueue getEventQueue() {
-        return java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue();
-    }
-    
-    protected class PropertyChangeBroadcaster implements Runnable {
-        String propertyName;
-        Object oldValue;
-        Object newValue;
-        
-        public PropertyChangeBroadcaster(String name, Object param1, Object 
param2) {
-            propertyName = name;
-            oldValue = param1;
-            newValue = param2;
-        }
-        
-        public void run() {
-            // Because this code is executed in the DispatchThread, it is 
better tocatch every
-            // exception that might occur
-            try {
-                AccessibleContext ac = Container.this.accessibleContext;
-                if (ac != null) {
-                    ac.firePropertyChange(propertyName, oldValue, newValue);
-                }
-            } catch (java.lang.Exception e) {
-                if (Build.DEBUG) {
-                    System.err.println(e.getClass().getName() + " caught 
propagating " + propertyName + " event: " + e.getMessage());
-                    e.printStackTrace();
-                }
-            }
-        }
-    }
-    
-    protected void firePropertyChange(String property, Object oldValue, Object 
newValue) {
-        getEventQueue().invokeLater(new PropertyChangeBroadcaster(property, 
oldValue, newValue));
-    }
-    
-    protected void fireStatePropertyChange(AccessibleState state, boolean set) 
{
-        PropertyChangeBroadcaster broadcaster;
-        if (set) {
-            broadcaster = new PropertyChangeBroadcaster(
-                AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
-                null, state);
-        } else {
-            broadcaster = new PropertyChangeBroadcaster(
-                AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
-                state, null);
-        }
-        getEventQueue().invokeLater(broadcaster);
-    }
-    
-    /**
-    * Update the proxy objects appropriately on property change events
-    */
-    protected class AccessibleContainerListener implements 
XAccessibleEventListener {
-        
-        protected AccessibleContainerListener() {
-        }
-        
-        protected java.awt.EventQueue getEventQueue() {
-            return java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue();
-        }
-        
-        protected void setComponentState(short state, boolean enable) {
-            switch (state) {
-                case AccessibleStateType.ACTIVE:
-                    // Only frames should be active
-                    break;
-                case AccessibleStateType.ENABLED:
-                    setEnabled(enable);
-                    // Since we can't access awt.Componet.accessibleContext, 
we need to fire
-                    // this event manually ..
-                    fireStatePropertyChange(AccessibleState.ENABLED, enable);
-                    break;
-                case AccessibleStateType.FOCUSED:
-                    getEventQueue().postEvent(new java.awt.event.FocusEvent(
-                        Container.this, enable ? 
-                        java.awt.event.FocusEvent.FOCUS_GAINED : 
-                        java.awt.event.FocusEvent.FOCUS_LOST));
-                    break;
-                case AccessibleStateType.SELECTED:
-                    fireStatePropertyChange(AccessibleState.SELECTED, enable);
-                    break;
-                case AccessibleStateType.SENSITIVE:
-                    // This state equals ENABLED in OOo (but not in Gtk+) and 
does not exist in Java 1.5
-                    break;
-                case AccessibleStateType.SHOWING:
-                case AccessibleStateType.VISIBLE:
-                    setVisible(enable);
-                    break;
-                default:
-                    if (Build.DEBUG) {
-                        System.err.println(Container.this + "unexpected state 
change " + state);
-                    }
-                    break;
-            }
-        }
-        /** Updates the accessible name and fires the appropriate 
PropertyChangedEvent */
-        protected void handleNameChangedEvent(Object any) {
-            try {
-                // This causes the property change event to be fired in the 
VCL thread
-                // context. If this causes problems, it has to be deligated to 
the java
-                // dispatch thread ..
-                if (accessibleContext != null) {
-                    
accessibleContext.setAccessibleName(AnyConverter.toString(any));
-                }
-            } catch (com.sun.star.lang.IllegalArgumentException e) {
-            }
-        }
-        
-        /** Updates the accessible description and fires the appropriate 
PropertyChangedEvent */
-        protected void handleDescriptionChangedEvent(Object any) {
-            try {
-                // This causes the property change event to be fired in the 
VCL thread
-                // context. If this causes problems, it has to be deligated to 
the java
-                // dispatch thread ..
-                if (accessibleContext != null) {
-                    
accessibleContext.setAccessibleDescription(AnyConverter.toString(any));
-                }
-            } catch (com.sun.star.lang.IllegalArgumentException e) {
-            }
-        }
-        
-        /** Updates the internal states and fires the appropriate 
PropertyChangedEvent */
-        protected void handleStateChangedEvent(Object any1, Object any2) {
-            try {
-                if (AnyConverter.isShort(any1)) {
-                    setComponentState(AnyConverter.toShort(any1), false);
-                }
-                
-                if (AnyConverter.isShort(any2)) {
-                    setComponentState(AnyConverter.toShort(any2), true);
-                }
-            } catch (com.sun.star.lang.IllegalArgumentException e) {
-            }
-        }
-        
-        /* This event is only necessary because some objects in the office 
don't know their parent
-         *  and are therefor unable to revoke and re-insert themselves.
-         */
-        protected void handleAllChildrenChangedEvent() {
-            javax.accessibility.Accessible parent = 
(javax.accessibility.Accessible) getParent();
-            if (parent != null) {
-                javax.accessibility.AccessibleContext parentAC = 
parent.getAccessibleContext();
-                if (parentAC != null) {
-                
-                    parentAC.firePropertyChange(
-                        
javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
-                        Container.this,
-                        null);
-                    
-                    AccessibleObjectFactory.clearContainer(Container.this);    
                
-                    AccessibleObjectFactory.populateContainer(Container.this, 
unoAccessibleContext);
-                        
-                    parentAC.firePropertyChange(
-                        
javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
-                        null,
-                        Container.this);
-                }
-            }
-        }
-        
-        /** Called by OpenOffice process to notify property changes */
-        public void notifyEvent(AccessibleEventObject event) {
-            
-            if ( !disposed ) {
-                
-                switch (event.EventId) {
-                    case AccessibleEventId.NAME_CHANGED:
-                        // Set the accessible name for the corresponding 
context, which will fire a property
-                        // change event itself
-                        handleNameChangedEvent(event.NewValue);
-                        break;
-                    case AccessibleEventId.DESCRIPTION_CHANGED:
-                        // Set the accessible description for the 
corresponding context, which will fire a property
-                        // change event itself - so do not set propertyName !
-                        handleDescriptionChangedEvent(event.NewValue);
-                        break;
-                    case AccessibleEventId.STATE_CHANGED:
-                        // Update the internal state set and fire the 
appropriate PropertyChangedEvent
-                        handleStateChangedEvent(event.OldValue, 
event.NewValue);
-                        break;
-                    case AccessibleEventId.TEXT_CHANGED:
-                        
firePropertyChange(AccessibleContext.ACCESSIBLE_TEXT_PROPERTY,
-                                                
AccessibleTextImpl.convertTextSegment(event.OldValue), 
-                                                
AccessibleTextImpl.convertTextSegment(event.NewValue));
-                        break;
-                    case AccessibleEventId.CHILD:
-                        if (AnyConverter.isObject(event.OldValue)) {
-                            
AccessibleObjectFactory.removeChild(Container.this, event.OldValue);
-                        } else if (AnyConverter.isObject(event.NewValue)) {
-                            AccessibleObjectFactory.addChild(Container.this, 
event.NewValue);
-                        }
-                        break;
-                    case AccessibleEventId.VISIBLE_DATA_CHANGED:
-                    case AccessibleEventId.BOUNDRECT_CHANGED:
-                        
firePropertyChange(AccessibleContext.ACCESSIBLE_VISIBLE_DATA_PROPERTY, null, 
null);
-                        break;
-                    /*
-                     * the Java AccessBridge for GNOME maps SELECTION_PROPERTY 
change events
-                     * for objects of role TEXT to 
object:text-selection-changed
-                     */
-                    case AccessibleEventId.TEXT_SELECTION_CHANGED:
-                    case AccessibleEventId.SELECTION_CHANGED:
-                        
firePropertyChange(AccessibleContext.ACCESSIBLE_SELECTION_PROPERTY, null, null);
-                        break;
-                    case AccessibleEventId.INVALIDATE_ALL_CHILDREN:
-                        handleAllChildrenChangedEvent();
-                        break;
-                    default:
-                        // Warn about unhandled events
-                        if(Build.DEBUG) {
-                            System.out.println(this + ": unhandled 
accessibility event id=" + event.EventId);
-                        }
-                }
-            }
-        }
-        
-        /** Called by OpenOffice process to notify that the UNO component is 
disposing */
-        public void disposing(com.sun.star.lang.EventObject eventObject) {
-            disposed = true;
-            AccessibleObjectFactory.disposing(Container.this);
-        }
-    }
-    
-    protected XAccessibleEventListener createEventListener() {
-        return new AccessibleContainerListener();
-    }
-    
-    protected javax.accessibility.AccessibleContext accessibleContext = null;
-    
-    /** This method actually creates the AccessibleContext object returned by
-     * getAccessibleContext().
-     */
-    protected javax.accessibility.AccessibleContext createAccessibleContext() {
-        return new AccessibleContainer();
-    }
-
-    /** Returns the AccessibleContext associated with this object */
-    public final javax.accessibility.AccessibleContext getAccessibleContext() {
-        if (accessibleContext == null) {
-            try {
-                AccessibleContext ac = createAccessibleContext();
-                if (ac != null) {
-                    // Set accessible name and description here to avoid 
-                    // unnecessary property change events later ..
-                    
ac.setAccessibleName(unoAccessibleContext.getAccessibleName());
-                    
ac.setAccessibleDescription(unoAccessibleContext.getAccessibleDescription());
-                    accessibleContext = ac;
-                }
-            } catch (com.sun.star.uno.RuntimeException e) {
-            }
-        }
-        return accessibleContext;
-    }
-    
-    protected class AccessibleContainer extends 
java.awt.Container.AccessibleAWTContainer { 
-
-        protected AccessibleContainer() {
-            /* Since getAccessibleText() is heavily used by the java access 
-             * bridge for gnome and the gnome at-tools, we do a query interface
-             * here and remember the result.
-             */
-            accessibleText = AccessibleTextImpl.get(unoAccessibleContext);
-        }
-
-        protected AccessibleContainer(boolean query) {
-            /* This constructor is explicitly for subclasses that implement
-             * AccessibleHypertext and therefor the default constructor would 
-             * bring unnecessary overhead.
-             */
-        }
-                
-        protected java.awt.event.ComponentListener accessibleComponentHandler 
= null;
-        
-        /**
-        * Fire PropertyChange listener, if one is registered,
-        * when shown/hidden..
-        */
-        protected class AccessibleComponentHandler implements 
java.awt.event.ComponentListener {
-            public void componentHidden(java.awt.event.ComponentEvent e)  {
-                AccessibleContainer.this.firePropertyChange(
-                    AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
-                    AccessibleState.VISIBLE, null);
-            }
-            
-            public void componentShown(java.awt.event.ComponentEvent e)  {
-                AccessibleContainer.this.firePropertyChange(
-                    AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
-                    null, AccessibleState.VISIBLE);
-            }
-            
-            public void componentMoved(java.awt.event.ComponentEvent e)  {
-            }
-            
-            public void componentResized(java.awt.event.ComponentEvent e)  {
-            }
-        } // inner class AccessibleContainerHandler
-        
-        protected java.awt.event.FocusListener accessibleFocusHandler = null;
-        
-        /**
-        * Fire PropertyChange listener, if one is registered,
-        * when focus events happen
-        */
-        protected class AccessibleFocusHandler implements 
java.awt.event.FocusListener {
-            public void focusGained(java.awt.event.FocusEvent event) {
-                AccessibleContainer.this.firePropertyChange(
-                    AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
-                    null, AccessibleState.FOCUSED);
-                if (Build.DEBUG) {
-                    System.err.println("[" + getAccessibleRole() + "] " + 
getAccessibleName() + " is now focused");
-                }
-            }
-            public void focusLost(java.awt.event.FocusEvent event) {
-                AccessibleContainer.this.firePropertyChange(
-                    AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
-                    AccessibleState.FOCUSED, null);
-                if (Build.DEBUG) {
-                    System.err.println("[" + getAccessibleRole() + "] " + 
getAccessibleName() + " is no longer focused");
-                }
-            }
-        } // inner class AccessibleFocusHandler
-        
-        protected java.awt.event.ContainerListener accessibleContainerHandler 
= null;
-        
-        /**
-        * Fire PropertyChange listener, if one is registered,
-        * when children added/removed.
-        */
-        
-        protected class AccessibleContainerHandler implements 
java.awt.event.ContainerListener {
-            public void componentAdded(java.awt.event.ContainerEvent e) {
-                java.awt.Component c = e.getChild();
-                if (c != null && c instanceof javax.accessibility.Accessible) {
-                    AccessibleContainer.this.firePropertyChange(
-                        AccessibleContext.ACCESSIBLE_CHILD_PROPERTY, 
-                        null, ((javax.accessibility.Accessible) 
c).getAccessibleContext());
-                }
-            }
-            public void componentRemoved(java.awt.event.ContainerEvent e) {
-                java.awt.Component c = e.getChild();
-                if (c != null && c instanceof javax.accessibility.Accessible) {
-                    AccessibleContainer.this.firePropertyChange(
-                        AccessibleContext.ACCESSIBLE_CHILD_PROPERTY, 
-                        ((javax.accessibility.Accessible) 
c).getAccessibleContext(), null); 
-                }
-            }
-        }
-        
-        protected int propertyChangeListenerCount = 0;
-        
-        /**
-        * Add a PropertyChangeListener to the listener list.
-        *
-        * @param listener  The PropertyChangeListener to be added
-        */
-        public void 
addPropertyChangeListener(java.beans.PropertyChangeListener listener) {
-            if (propertyChangeListenerCount++ == 0) {
-                accessibleFocusHandler = new AccessibleFocusHandler();
-                Container.this.addFocusListener(accessibleFocusHandler);
-                
-                accessibleContainerHandler = new AccessibleContainerHandler();
-                
Container.this.addContainerListener(accessibleContainerHandler);
-                
-                accessibleComponentHandler = new AccessibleComponentHandler();
-                
Container.this.addComponentListener(accessibleComponentHandler);
-            }
-            super.addPropertyChangeListener(listener);
-        }
-        
-        /**
-        * Remove a PropertyChangeListener from the listener list.
-        * This removes a PropertyChangeListener that was registered
-        * for all properties.
-        *
-        * @param listener  The PropertyChangeListener to be removed
-        */
-        public void 
removePropertyChangeListener(java.beans.PropertyChangeListener listener) {
-            if (--propertyChangeListenerCount == 0) {
-                
Container.this.removeComponentListener(accessibleComponentHandler);
-                accessibleComponentHandler = null;
-                
-                
Container.this.removeContainerListener(accessibleContainerHandler);
-                accessibleContainerHandler = null;
-                
-                Container.this.removeFocusListener(accessibleFocusHandler);
-                accessibleFocusHandler = null;
-            }
-            super.removePropertyChangeListener(listener);
-        }
-        
-        /** Gets the role of this object */
-        public javax.accessibility.AccessibleRole getAccessibleRole() {
-            return accessibleRole;
-        }
-        
-        /** Gets the AccessibleText associated with this object presenting 
text on the display */
-        public javax.accessibility.AccessibleText getAccessibleText() {
-            
-            if (disposed)
-                return null;
-            
-            return accessibleText;
-        }
-        
-        /**
-        * Gets the current state set of this object.
-        *
-        * @return an instance of <code>AccessibleStateSet</code>
-        *    containing the current state set of the object
-        * @see AccessibleState
-        */
-        public javax.accessibility.AccessibleStateSet getAccessibleStateSet() {
-            if (disposed)
-                return AccessibleStateAdapter.getDefunctStateSet();
-
-            try {
-                return 
AccessibleStateAdapter.getAccessibleStateSet(Container.this,
-                    unoAccessibleContext.getAccessibleStateSet());
-            } catch (com.sun.star.uno.RuntimeException e) {
-                return AccessibleStateAdapter.getDefunctStateSet();
-            }
-        }
-        
-        /** Returns the AccessibleSelection interface for this object */
-        public javax.accessibility.AccessibleSelection 
getAccessibleSelection() {
-            try {
-                XAccessibleSelection unoAccessibleSelection = 
(XAccessibleSelection) 
-                    UnoRuntime.queryInterface(XAccessibleSelection.class, 
unoAccessibleContext);
-                if (unoAccessibleSelection != null) {
-                    return new AccessibleSelectionImpl(unoAccessibleSelection);
-                }
-            } catch (com.sun.star.uno.RuntimeException e) {
-            }
-            
-            return null;
-        }
-        
-        /** Gets the locale of the component */
-        public java.util.Locale getLocale() throws 
java.awt.IllegalComponentStateException {
-            try {
-                com.sun.star.lang.Locale unoLocale = 
unoAccessible.getAccessibleContext().getLocale();
-                return new java.util.Locale(unoLocale.Language, 
unoLocale.Country);
-            } catch (IllegalAccessibleComponentStateException e) {
-                throw new 
java.awt.IllegalComponentStateException(e.getMessage());
-            } catch (com.sun.star.uno.RuntimeException e) {
-                return super.getLocale();
-            }
-        }
-        
-        /*
-        * AccessibleComponent
-        */
-        
-        /** Returns the background color of the object */
-        public java.awt.Color getBackground() {
-            try {
-                return new 
java.awt.Color(unoAccessibleComponent.getBackground());
-            } catch (com.sun.star.uno.RuntimeException e) {
-                return null;
-            }
-        }
-        
-        public void setBackground(java.awt.Color c) {
-            // Not supported by UNO accessibility API
-        }
-        
-        /** Returns the foreground color of the object */
-        public java.awt.Color getForeground() {
-            try {
-                return new 
java.awt.Color(unoAccessibleComponent.getForeground());
-            } catch (com.sun.star.uno.RuntimeException e) {
-                return null;
-            }
-        }
-        
-        public void setForeground(java.awt.Color c) {
-            // Not supported by UNO accessibility API
-        }
-        
-        public java.awt.Cursor getCursor() {
-            // Not supported by UNO accessibility API
-            return null;
-        }
-        
-        public void setCursor(java.awt.Cursor cursor) {
-            // Not supported by UNO accessibility API
-        }
-        
-        public java.awt.Font getFont() {
-            // FIXME
-            return null;
-        }
-        
-        public void setFont(java.awt.Font f) {
-            // Not supported by UNO accessibility API
-        }
-        
-        public java.awt.FontMetrics getFontMetrics(java.awt.Font f) {
-            // FIXME
-            return null;
-        }
-        
-        public boolean isEnabled() {
-            return Container.this.isEnabled();
-        }
-        
-        public void setEnabled(boolean b) {
-            // Not supported by UNO accessibility API
-        }
-        
-        public boolean isVisible() {
-            return Container.this.isVisible();
-        }
-        
-        public void setVisible(boolean b) {
-            // Not supported by UNO accessibility API
-        }
-        
-        public boolean isShowing() {
-            return Container.this.isShowing();
-        }
-        
-        public boolean contains(java.awt.Point p) {
-            try {
-                return unoAccessibleComponent.containsPoint(new 
com.sun.star.awt.Point(p.x, p.y)); 
-            } catch (com.sun.star.uno.RuntimeException e) {
-                return false;
-            }
-        }
-        
-        /** Returns the location of the object on the screen. */
-        public java.awt.Point getLocationOnScreen() {
-            try {
-                com.sun.star.awt.Point unoPoint = 
unoAccessibleComponent.getLocationOnScreen(); 
-                return new java.awt.Point(unoPoint.X, unoPoint.Y);
-            } catch (com.sun.star.uno.RuntimeException e) {
-                return null;
-            }
-        }
-        
-        /** Gets the location of this component in the form of a point 
specifying the component's top-left corner */
-        public java.awt.Point getLocation() {
-            try {
-                com.sun.star.awt.Point unoPoint = 
unoAccessibleComponent.getLocation(); 
-                return new java.awt.Point( unoPoint.X, unoPoint.Y );
-            } catch (com.sun.star.uno.RuntimeException e) {
-                return null;
-            }
-        }
-        
-        /** Moves this component to a new location */
-        public void setLocation(java.awt.Point p) {
-            // Not supported by UNO accessibility API
-        }
-        
-        /** Gets the bounds of this component in the form of a Rectangle 
object */
-        public java.awt.Rectangle getBounds() {
-            try {
-                com.sun.star.awt.Rectangle unoRect = 
unoAccessibleComponent.getBounds(); 
-                return new java.awt.Rectangle(unoRect.X, unoRect.Y, 
unoRect.Width, unoRect.Height);
-            } catch (com.sun.star.uno.RuntimeException e) {
-                return null;
-            }
-        }
-        
-        /** Moves and resizes this component to conform to the new bounding 
rectangle r */
-        public void setBounds(java.awt.Rectangle r) {
-            // Not supported by UNO accessibility API
-        }
-        
-        /** Returns the size of this component in the form of a Dimension 
object */
-        public java.awt.Dimension getSize() {
-            try {
-                com.sun.star.awt.Size unoSize = 
unoAccessibleComponent.getSize(); 
-                return new java.awt.Dimension(unoSize.Width, unoSize.Height);
-            } catch (com.sun.star.uno.RuntimeException e) {
-                return null;
-            }
-        }
-        
-        /** Resizes this component so that it has width d.width and height 
d.height */
-        public void setSize(java.awt.Dimension d) {
-            // Not supported by UNO accessibility API
-        }
-
-        /** Returns the Accessible child, if one exists, contained at the 
local coordinate Point */     
-        public javax.accessibility.Accessible getAccessibleAt(java.awt.Point 
p) {
-            try {
-                java.awt.Component c = 
AccessibleObjectFactory.getAccessibleComponent(
-                    unoAccessibleComponent.getAccessibleAtPoint(new 
com.sun.star.awt.Point(p.x, p.y)));
-                
-                return (javax.accessibility.Accessible) c;
-            } catch (com.sun.star.uno.RuntimeException e) {
-                return null;
-            }
-        }
-        
-        public boolean isFocusTraversable() {
-            return Container.this.isFocusable();
-        }
-        
-        public void requestFocus() {
-            unoAccessibleComponent.grabFocus();
-        }
-    }
-    
-    public String toString() {
-        return UnoRuntime.generateOid(unoAccessible);
-    }
-}
 
+       protected XAccessible unoAccessible;
+       protected XAccessibleContext unoAccessibleContext;
+       protected XAccessibleComponent unoAccessibleComponent = null;
+
+       protected javax.accessibility.AccessibleRole accessibleRole;
+       protected javax.accessibility.AccessibleText accessibleText;
+       protected boolean disposed = false;
+
+       protected Container(javax.accessibility.AccessibleRole role,
+               XAccessible xAccessible, XAccessibleContext xAccessibleContext) 
{
+               accessibleRole = role;
+               unoAccessible = xAccessible;
+               unoAccessibleContext = xAccessibleContext;
+               unoAccessibleComponent = (XAccessibleComponent)
+                       UnoRuntime.queryInterface(XAccessibleComponent.class,
+                       xAccessibleContext);
+
+               // Add the event listener right away, because the global focus 
notification doesn't
+               // work yet...
+               XAccessibleEventBroadcaster broadcaster = 
(XAccessibleEventBroadcaster)
+                       
UnoRuntime.queryInterface(XAccessibleEventBroadcaster.class,
+                       unoAccessibleContext);
+               if (broadcaster != null) {
+                       broadcaster.addEventListener(createEventListener());
+               }
+       }
+
+       /**
+       * Determines whether this <code>Container</code> is showing on screen.
+       * This means that the component must be visible, and it must be in a
+       * <code>container</code> that is visible and showing.
+       * @see #addNotify
+       * @see #removeNotify
+       * @since JDK1.0
+       */
+       public boolean isShowing() {
+               if (isVisible()) {
+                       java.awt.Container parent = getParent();
+                       return (parent == null) || parent.isShowing();
+               }
+               return false;
+       }
+
+       /**
+       * Makes this <code>Container</code> displayable by connecting it to a
+       * native screen resource.
+       * This method is called internally by the toolkit and should
+       * not be called directly by programs.
+       * @see #isDisplayable
+       * @see #removeNotify
+       * @since JDK1.0
+       */
+       public void addNotify() {
+       }
+
+       /**
+       * Makes this <code>Container</code> undisplayable by destroying it 
native
+       * screen resource.
+       * This method is called by the toolkit internally and should
+       * not be called directly by programs.
+       * @see #isDisplayable
+       * @see #addNotify
+       * @since JDK1.0
+       */
+       public void removeNotify() {
+       }
+
+       /*
+        * Fake the java focus handling. This is necessary to keep AOO focus
+        * in sync with the java focus. See java.awt.DefaultKeyboardFocusManager
+        * for implementation details.
+        **/
+
+       /** Requests focus for this object */
+       public void requestFocus() {
+       }
+
+       /** Requests focus for this object */
+       public boolean requestFocus(boolean temporary) {
+               // Must be a no-op to make focus handling work
+               return true;
+       }
+
+       /** Requests the focus for this object in the containing window */
+       public boolean requestFocusInWindow() {
+               return requestFocusInWindow(false);
+       }
+
+       /** Requests the focus for this object in the containing window */
+       protected boolean requestFocusInWindow(boolean temporary) {
+               if (isFocusable() && isVisible()) {
+                       getEventQueue().postEvent(new 
java.awt.event.FocusEvent(this, java.awt.event.FocusEvent.FOCUS_GAINED, 
temporary));
+                       return true;
+               }
+               return false;
+       }
+
+       public Object[] getAccessibleComponents(Object[] targetSet) {
+               try {
+                       java.util.ArrayList list = new 
java.util.ArrayList(targetSet.length);
+                       for (int i=0; i < targetSet.length; i++) {
+                               java.awt.Component c = 
AccessibleObjectFactory.getAccessibleComponent(
+                                       (XAccessible) 
UnoRuntime.queryInterface(XAccessible.class, targetSet[i]));
+                               if (c != null) {
+                                       list.add(c);
+                               }
+                       }
+                       list.trimToSize();
+                       return list.toArray();
+               } catch (com.sun.star.uno.RuntimeException e) {
+                       return null;
+               }
+       }
+
+       protected java.awt.EventQueue getEventQueue() {
+               return 
java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue();
+       }
+
+       protected class PropertyChangeBroadcaster implements Runnable {
+               String propertyName;
+               Object oldValue;
+               Object newValue;
+
+               public PropertyChangeBroadcaster(String name, Object param1, 
Object param2) {
+                       propertyName = name;
+                       oldValue = param1;
+                       newValue = param2;
+               }
+
+               public void run() {
+                       // Because this code is executed in the DispatchThread, 
it is better to catch every
+                       // exception that might occur
+                       try {
+                               AccessibleContext ac = 
Container.this.accessibleContext;
+                               if (ac != null) {
+                                       ac.firePropertyChange(propertyName, 
oldValue, newValue);
+                               }
+                       } catch (java.lang.Exception e) {
+                               if (Build.DEBUG) {
+                                       
System.err.println(e.getClass().getName() + " caught propagating " + 
propertyName + " event: " + e.getMessage());
+                                       e.printStackTrace();
+                               }
+                       }
+               }
+       }
+
+       protected void firePropertyChange(String property, Object oldValue, 
Object newValue) {
+               getEventQueue().invokeLater(new 
PropertyChangeBroadcaster(property, oldValue, newValue));
+       }
+
+       protected void fireStatePropertyChange(AccessibleState state, boolean 
set) {
+               PropertyChangeBroadcaster broadcaster;
+               if (set) {
+                       broadcaster = new PropertyChangeBroadcaster(
+                               AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
+                               null, state);
+               } else {
+                       broadcaster = new PropertyChangeBroadcaster(
+                               AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
+                               state, null);
+               }
+               getEventQueue().invokeLater(broadcaster);
+       }
+
+       /**
+       * Update the proxy objects appropriately on property change events
+       */
+       protected class AccessibleContainerListener implements 
XAccessibleEventListener {
+
+               protected AccessibleContainerListener() {
+               }
+
+               protected java.awt.EventQueue getEventQueue() {
+                       return 
java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue();
+               }
+
+               protected void setComponentState(short state, boolean enable) {
+                       switch (state) {
+                               case AccessibleStateType.ACTIVE:
+                                       // Only frames should be active
+                                       break;
+                               case AccessibleStateType.ENABLED:
+                                       setEnabled(enable);
+                                       // Since we can't access 
awt.Componet.accessibleContext, we need to fire
+                                       // this event manually...
+                                       
fireStatePropertyChange(AccessibleState.ENABLED, enable);
+                                       break;
+                               case AccessibleStateType.FOCUSED:
+                                       getEventQueue().postEvent(new 
java.awt.event.FocusEvent(
+                                               Container.this, enable ?
+                                               
java.awt.event.FocusEvent.FOCUS_GAINED :
+                                               
java.awt.event.FocusEvent.FOCUS_LOST));
+                                       break;
+                               case AccessibleStateType.SELECTED:
+                                       
fireStatePropertyChange(AccessibleState.SELECTED, enable);
+                                       break;
+                               case AccessibleStateType.SENSITIVE:
+                                       // This state equals ENABLED in AOO 
(but not in Gtk+) and does not exist in Java 1.5
+                                       break;
+                               case AccessibleStateType.SHOWING:
+                               case AccessibleStateType.VISIBLE:
+                                       setVisible(enable);
+                                       break;
+                               default:
+                                       if (Build.DEBUG) {
+                                               
System.err.println(Container.this + "unexpected state change " + state);
+                                       }
+                                       break;
+                       }
+               }
+               /** Updates the accessible name and fires the appropriate 
PropertyChangedEvent */
+               protected void handleNameChangedEvent(Object any) {
+                       try {
+                               // This causes the property change event to be 
fired in the VCL thread
+                               // context. If this causes problems, it has to 
be delegated to the java
+                               // dispatch thread...
+                               if (accessibleContext != null) {
+                                       
accessibleContext.setAccessibleName(AnyConverter.toString(any));
+                               }
+                       } catch (com.sun.star.lang.IllegalArgumentException e) {
+                       }
+               }
+
+               /** Updates the accessible description and fires the 
appropriate PropertyChangedEvent */
+               protected void handleDescriptionChangedEvent(Object any) {
+                       try {
+                               // This causes the property change event to be 
fired in the VCL thread
+                               // context. If this causes problems, it has to 
be delegated to the java
+                               // dispatch thread...
+                               if (accessibleContext != null) {
+                                       
accessibleContext.setAccessibleDescription(AnyConverter.toString(any));
+                               }
+                       } catch (com.sun.star.lang.IllegalArgumentException e) {
+                       }
+               }
+
+               /** Updates the internal states and fires the appropriate 
PropertyChangedEvent */
+               protected void handleStateChangedEvent(Object any1, Object 
any2) {
+                       try {
+                               if (AnyConverter.isShort(any1)) {
+                                       
setComponentState(AnyConverter.toShort(any1), false);
+                               }
+
+                               if (AnyConverter.isShort(any2)) {
+                                       
setComponentState(AnyConverter.toShort(any2), true);
+                               }
+                       } catch (com.sun.star.lang.IllegalArgumentException e) {
+                       }
+               }
+
+               /* This event is only necessary because some objects in the 
office don't know their parent
+                * and are therefor unable to revoke and re-insert themselves.
+                */
+               protected void handleAllChildrenChangedEvent() {
+                       javax.accessibility.Accessible parent = 
(javax.accessibility.Accessible) getParent();
+                       if (parent != null) {
+                               javax.accessibility.AccessibleContext parentAC 
= parent.getAccessibleContext();
+                               if (parentAC != null) {
+
+                                       parentAC.firePropertyChange(
+                                               
javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
+                                               Container.this,
+                                               null);
+
+                                       
AccessibleObjectFactory.clearContainer(Container.this);
+                                       
AccessibleObjectFactory.populateContainer(Container.this, unoAccessibleContext);
+
+                                       parentAC.firePropertyChange(
+                                               
javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
+                                               null,
+                                               Container.this);
+                               }
+                       }
+               }
+
+               /** Called by OpenOffice process to notify property changes */
+               public void notifyEvent(AccessibleEventObject event) {
+
+                       if ( !disposed ) {
+
+                               switch (event.EventId) {
+                                       case AccessibleEventId.NAME_CHANGED:
+                                               // Set the accessible name for 
the corresponding context, which will fire a property
+                                               // change event itself
+                                               
handleNameChangedEvent(event.NewValue);
+                                               break;
+                                       case 
AccessibleEventId.DESCRIPTION_CHANGED:
+                                               // Set the accessible 
description for the corresponding context, which will fire a property
+                                               // change event itself - so do 
not set propertyName !
+                                               
handleDescriptionChangedEvent(event.NewValue);
+                                               break;
+                                       case AccessibleEventId.STATE_CHANGED:
+                                               // Update the internal state 
set and fire the appropriate PropertyChangedEvent
+                                               
handleStateChangedEvent(event.OldValue, event.NewValue);
+                                               break;
+                                       case AccessibleEventId.TEXT_CHANGED:
+                                               
firePropertyChange(AccessibleContext.ACCESSIBLE_TEXT_PROPERTY,
+                                                                               
                AccessibleTextImpl.convertTextSegment(event.OldValue),
+                                                                               
                AccessibleTextImpl.convertTextSegment(event.NewValue));
+                                               break;
+                                       case AccessibleEventId.CHILD:
+                                               if 
(AnyConverter.isObject(event.OldValue)) {
+                                                       
AccessibleObjectFactory.removeChild(Container.this, event.OldValue);
+                                               } else if 
(AnyConverter.isObject(event.NewValue)) {
+                                                       
AccessibleObjectFactory.addChild(Container.this, event.NewValue);
+                                               }
+                                               break;
+                                       case 
AccessibleEventId.VISIBLE_DATA_CHANGED:
+                                       case 
AccessibleEventId.BOUNDRECT_CHANGED:
+                                               
firePropertyChange(AccessibleContext.ACCESSIBLE_VISIBLE_DATA_PROPERTY, null, 
null);
+                                               break;
+                                       /*
+                                        * the Java AccessBridge for GNOME maps 
SELECTION_PROPERTY change events
+                                        * for objects of role TEXT to 
object:text-selection-changed
+                                        */
+                                       case 
AccessibleEventId.TEXT_SELECTION_CHANGED:
+                                       case 
AccessibleEventId.SELECTION_CHANGED:
+                                               
firePropertyChange(AccessibleContext.ACCESSIBLE_SELECTION_PROPERTY, null, null);
+                                               break;
+                                       case 
AccessibleEventId.INVALIDATE_ALL_CHILDREN:
+                                               handleAllChildrenChangedEvent();
+                                               break;
+                                       default:
+                                               // Warn about unhandled events
+                                               if(Build.DEBUG) {
+                                                       System.out.println(this 
+ ": unhandled accessibility event id=" + event.EventId);
+                                               }
+                               }
+                       }
+               }
+
+               /** Called by OpenOffice process to notify that the UNO 
component is disposing */
+               public void disposing(com.sun.star.lang.EventObject 
eventObject) {
+                       disposed = true;
+                       AccessibleObjectFactory.disposing(Container.this);
+               }
+       }
+
+       protected XAccessibleEventListener createEventListener() {
+               return new AccessibleContainerListener();
+       }
+
+       protected javax.accessibility.AccessibleContext accessibleContext = 
null;
+
+       /** This method actually creates the AccessibleContext object returned 
by
+        * getAccessibleContext().
+        */
+       protected javax.accessibility.AccessibleContext 
createAccessibleContext() {
+               return new AccessibleContainer();
+       }
+
+       /** Returns the AccessibleContext associated with this object */
+       public final javax.accessibility.AccessibleContext 
getAccessibleContext() {
+               if (accessibleContext == null) {
+                       try {
+                               AccessibleContext ac = 
createAccessibleContext();
+                               if (ac != null) {
+                                       // Set accessible name and description 
here to avoid
+                                       // unnecessary property change events 
later...
+                                       
ac.setAccessibleName(unoAccessibleContext.getAccessibleName());
+                                       
ac.setAccessibleDescription(unoAccessibleContext.getAccessibleDescription());
+                                       accessibleContext = ac;
+                               }
+                       } catch (com.sun.star.uno.RuntimeException e) {
+                       }
+               }
+               return accessibleContext;
+       }
+
+       protected class AccessibleContainer extends 
java.awt.Container.AccessibleAWTContainer {
+
+               protected AccessibleContainer() {
+                       /* Since getAccessibleText() is heavily used by the 
java access
+                        * bridge for gnome and the gnome at-tools, we do a 
query interface
+                        * here and remember the result.
+                        */
+                       accessibleText = 
AccessibleTextImpl.get(unoAccessibleContext);
+               }
+
+               protected AccessibleContainer(boolean query) {
+                       /* This constructor is explicitly for subclasses that 
implement
+                        * AccessibleHypertext and therefor the default 
constructor would
+                        * bring unnecessary overhead.
+                        */
+               }
+
+               protected java.awt.event.ComponentListener 
accessibleComponentHandler = null;
+
+               /**
+               * Fire PropertyChange listener, if one is registered,
+               * when shown/hidden...
+               */
+               protected class AccessibleComponentHandler implements 
java.awt.event.ComponentListener {
+                       public void 
componentHidden(java.awt.event.ComponentEvent e) {
+                               AccessibleContainer.this.firePropertyChange(
+                                       
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
+                                       AccessibleState.VISIBLE, null);
+                       }
+
+                       public void 
componentShown(java.awt.event.ComponentEvent e) {
+                               AccessibleContainer.this.firePropertyChange(
+                                       
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
+                                       null, AccessibleState.VISIBLE);
+                       }
+
+                       public void 
componentMoved(java.awt.event.ComponentEvent e) {
+                       }
+
+                       public void 
componentResized(java.awt.event.ComponentEvent e) {
+                       }
+               } // inner class AccessibleContainerHandler
+
+               protected java.awt.event.FocusListener accessibleFocusHandler = 
null;
+
+               /**
+               * Fire PropertyChange listener, if one is registered,
+               * when focus events happen
+               */
+               protected class AccessibleFocusHandler implements 
java.awt.event.FocusListener {
+                       public void focusGained(java.awt.event.FocusEvent 
event) {
+                               AccessibleContainer.this.firePropertyChange(
+                                       
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
+                                       null, AccessibleState.FOCUSED);
+                               if (Build.DEBUG) {
+                                       System.err.println("[" + 
getAccessibleRole() + "] " + getAccessibleName() + " is now focused");
+                               }
+                       }
+                       public void focusLost(java.awt.event.FocusEvent event) {
+                               AccessibleContainer.this.firePropertyChange(
+                                       
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
+                                       AccessibleState.FOCUSED, null);
+                               if (Build.DEBUG) {
+                                       System.err.println("[" + 
getAccessibleRole() + "] " + getAccessibleName() + " is no longer focused");
+                               }
+                       }
+               } // inner class AccessibleFocusHandler
+
+               protected java.awt.event.ContainerListener 
accessibleContainerHandler = null;
+
+               /**
+               * Fire PropertyChange listener, if one is registered,
+               * when children added/removed.
+               */
+
+               protected class AccessibleContainerHandler implements 
java.awt.event.ContainerListener {
+                       public void 
componentAdded(java.awt.event.ContainerEvent e) {
+                               java.awt.Component c = e.getChild();
+                               if (c != null && c instanceof 
javax.accessibility.Accessible) {
+                                       
AccessibleContainer.this.firePropertyChange(
+                                               
AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
+                                               null, 
((javax.accessibility.Accessible) c).getAccessibleContext());
+                               }
+                       }
+                       public void 
componentRemoved(java.awt.event.ContainerEvent e) {
+                               java.awt.Component c = e.getChild();
+                               if (c != null && c instanceof 
javax.accessibility.Accessible) {
+                                       
AccessibleContainer.this.firePropertyChange(
+                                               
AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
+                                               
((javax.accessibility.Accessible) c).getAccessibleContext(), null);
+                               }
+                       }
+               }
+
+               protected int propertyChangeListenerCount = 0;
+
+               /**
+               * Add a PropertyChangeListener to the listener list.
+               *
+               * @param listener The PropertyChangeListener to be added
+               */
+               public void 
addPropertyChangeListener(java.beans.PropertyChangeListener listener) {
+                       if (propertyChangeListenerCount++ == 0) {
+                               accessibleFocusHandler = new 
AccessibleFocusHandler();
+                               
Container.this.addFocusListener(accessibleFocusHandler);
+
+                               accessibleContainerHandler = new 
AccessibleContainerHandler();
+                               
Container.this.addContainerListener(accessibleContainerHandler);
+
+                               accessibleComponentHandler = new 
AccessibleComponentHandler();
+                               
Container.this.addComponentListener(accessibleComponentHandler);
+                       }
+                       super.addPropertyChangeListener(listener);
+               }
+
+               /**
+               * Remove a PropertyChangeListener from the listener list.
+               * This removes a PropertyChangeListener that was registered
+               * for all properties.
+               *
+               * @param listener The PropertyChangeListener to be removed
+               */
+               public void 
removePropertyChangeListener(java.beans.PropertyChangeListener listener) {
+                       if (--propertyChangeListenerCount == 0) {
+                               
Container.this.removeComponentListener(accessibleComponentHandler);
+                               accessibleComponentHandler = null;
+
+                               
Container.this.removeContainerListener(accessibleContainerHandler);
+                               accessibleContainerHandler = null;
+
+                               
Container.this.removeFocusListener(accessibleFocusHandler);
+                               accessibleFocusHandler = null;
+                       }
+                       super.removePropertyChangeListener(listener);
+               }
+
+               /** Gets the role of this object */
+               public javax.accessibility.AccessibleRole getAccessibleRole() {
+                       return accessibleRole;
+               }
+
+               /** Gets the AccessibleText associated with this object 
presenting text on the display */
+               public javax.accessibility.AccessibleText getAccessibleText() {
+
+                       if (disposed)
+                               return null;
+
+                       return accessibleText;
+               }
+
+               /**
+               * Gets the current state set of this object.
+               *
+               * @return an instance of <code>AccessibleStateSet</code>
+               *  containing the current state set of the object
+               * @see AccessibleState
+               */
+               public javax.accessibility.AccessibleStateSet 
getAccessibleStateSet() {
+                       if (disposed)
+                               return 
AccessibleStateAdapter.getDefunctStateSet();
+
+                       try {
+                               return 
AccessibleStateAdapter.getAccessibleStateSet(Container.this,
+                                       
unoAccessibleContext.getAccessibleStateSet());
+                       } catch (com.sun.star.uno.RuntimeException e) {
+                               return 
AccessibleStateAdapter.getDefunctStateSet();
+                       }
+               }
+
+               /** Returns the AccessibleSelection interface for this object */
+               public javax.accessibility.AccessibleSelection 
getAccessibleSelection() {
+                       try {
+                               XAccessibleSelection unoAccessibleSelection = 
(XAccessibleSelection)
+                                       
UnoRuntime.queryInterface(XAccessibleSelection.class, unoAccessibleContext);
+                               if (unoAccessibleSelection != null) {
+                                       return new 
AccessibleSelectionImpl(unoAccessibleSelection);
+                               }
+                       } catch (com.sun.star.uno.RuntimeException e) {
+                       }
+
+                       return null;
+               }
+
+               /** Gets the locale of the component */
+               public java.util.Locale getLocale() throws 
java.awt.IllegalComponentStateException {
+                       try {
+                               com.sun.star.lang.Locale unoLocale = 
unoAccessible.getAccessibleContext().getLocale();
+                               return new java.util.Locale(unoLocale.Language, 
unoLocale.Country);
+                       } catch (IllegalAccessibleComponentStateException e) {
+                               throw new 
java.awt.IllegalComponentStateException(e.getMessage());
+                       } catch (com.sun.star.uno.RuntimeException e) {
+                               return super.getLocale();
+                       }
+               }
+
+               /*
+               * AccessibleComponent
+               */
+
+               /** Returns the background color of the object */
+               public java.awt.Color getBackground() {
+                       try {
+                               return new 
java.awt.Color(unoAccessibleComponent.getBackground());
+                       } catch (com.sun.star.uno.RuntimeException e) {
+                               return null;
+                       }
+               }
+
+               public void setBackground(java.awt.Color c) {
+                       // Not supported by UNO accessibility API
+               }
+
+               /** Returns the foreground color of the object */
+               public java.awt.Color getForeground() {
+                       try {
+                               return new 
java.awt.Color(unoAccessibleComponent.getForeground());
+                       } catch (com.sun.star.uno.RuntimeException e) {
+                               return null;
+                       }
+               }
+
+               public void setForeground(java.awt.Color c) {
+                       // Not supported by UNO accessibility API
+               }
+
+               public java.awt.Cursor getCursor() {
+                       // Not supported by UNO accessibility API
+                       return null;
+               }
+
+               public void setCursor(java.awt.Cursor cursor) {
+                       // Not supported by UNO accessibility API
+               }
+
+               public java.awt.Font getFont() {
+                       // FIXME
+                       return null;
+               }
+
+               public void setFont(java.awt.Font f) {
+                       // Not supported by UNO accessibility API
+               }
+
+               public java.awt.FontMetrics getFontMetrics(java.awt.Font f) {
+                       // FIXME
+                       return null;
+               }
+
+               public boolean isEnabled() {
+                       return Container.this.isEnabled();
+               }
+
+               public void setEnabled(boolean b) {
+                       // Not supported by UNO accessibility API
+               }
+
+               public boolean isVisible() {
+                       return Container.this.isVisible();
+               }
+
+               public void setVisible(boolean b) {
+                       // Not supported by UNO accessibility API
+               }
+
+               public boolean isShowing() {
+                       return Container.this.isShowing();
+               }
+
+               public boolean contains(java.awt.Point p) {
+                       try {
+                               return unoAccessibleComponent.containsPoint(new 
com.sun.star.awt.Point(p.x, p.y));
+                       } catch (com.sun.star.uno.RuntimeException e) {
+                               return false;
+                       }
+               }
+
+               /** Returns the location of the object on the screen. */
+               public java.awt.Point getLocationOnScreen() {
+                       try {
+                               com.sun.star.awt.Point unoPoint = 
unoAccessibleComponent.getLocationOnScreen();
+                               return new java.awt.Point(unoPoint.X, 
unoPoint.Y);
+                       } catch (com.sun.star.uno.RuntimeException e) {
+                               return null;
+                       }
+               }
+
+               /** Gets the location of this component in the form of a point 
specifying the component's top-left corner */
+               public java.awt.Point getLocation() {
+                       try {
+                               com.sun.star.awt.Point unoPoint = 
unoAccessibleComponent.getLocation();
+                               return new java.awt.Point( unoPoint.X, 
unoPoint.Y );
+                       } catch (com.sun.star.uno.RuntimeException e) {
+                               return null;
+                       }
+               }
+
+               /** Moves this component to a new location */
+               public void setLocation(java.awt.Point p) {
+                       // Not supported by UNO accessibility API
+               }
+
+               /** Gets the bounds of this component in the form of a 
Rectangle object */
+               public java.awt.Rectangle getBounds() {
+                       try {
+                               com.sun.star.awt.Rectangle unoRect = 
unoAccessibleComponent.getBounds();
+                               return new java.awt.Rectangle(unoRect.X, 
unoRect.Y, unoRect.Width, unoRect.Height);
+                       } catch (com.sun.star.uno.RuntimeException e) {
+                               return null;
+                       }
+               }
+
+               /** Moves and resizes this component to conform to the new 
bounding rectangle r */
+               public void setBounds(java.awt.Rectangle r) {
+                       // Not supported by UNO accessibility API
+               }
+
+               /** Returns the size of this component in the form of a 
Dimension object */
+               public java.awt.Dimension getSize() {
+                       try {
+                               com.sun.star.awt.Size unoSize = 
unoAccessibleComponent.getSize();
+                               return new java.awt.Dimension(unoSize.Width, 
unoSize.Height);
+                       } catch (com.sun.star.uno.RuntimeException e) {
+                               return null;
+                       }
+               }
+
+               /** Resizes this component so that it has width d.width and 
height d.height */
+               public void setSize(java.awt.Dimension d) {
+                       // Not supported by UNO accessibility API
+               }
+
+               /** Returns the Accessible child, if one exists, contained at 
the local coordinate Point */
+               public javax.accessibility.Accessible 
getAccessibleAt(java.awt.Point p) {
+                       try {
+                               java.awt.Component c = 
AccessibleObjectFactory.getAccessibleComponent(
+                                       
unoAccessibleComponent.getAccessibleAtPoint(new com.sun.star.awt.Point(p.x, 
p.y)));
+
+                               return (javax.accessibility.Accessible) c;
+                       } catch (com.sun.star.uno.RuntimeException e) {
+                               return null;
+                       }
+               }
+
+               public boolean isFocusTraversable() {
+                       return Container.this.isFocusable();
+               }
+
+               public void requestFocus() {
+                       unoAccessibleComponent.grabFocus();
+               }
+       }
+
+       public String toString() {
+               return UnoRuntime.generateOid(unoAccessible);
+       }
+}

Modified: 
openoffice/trunk/main/accessibility/java/java_uno_accessbridge/src/main/java/org/openoffice/java/accessibility/Paragraph.java
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/accessibility/java/java_uno_accessbridge/src/main/java/org/openoffice/java/accessibility/Paragraph.java?rev=1852588&r1=1852587&r2=1852588&view=diff
==============================================================================
--- 
openoffice/trunk/main/accessibility/java/java_uno_accessbridge/src/main/java/org/openoffice/java/accessibility/Paragraph.java
 (original)
+++ 
openoffice/trunk/main/accessibility/java/java_uno_accessbridge/src/main/java/org/openoffice/java/accessibility/Paragraph.java
 Thu Jan 31 12:21:22 2019
@@ -1,5 +1,5 @@
 /**************************************************************
- * 
+ *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -7,16 +7,16 @@
  * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
- * 
+ *
  *************************************************************/
 
 
@@ -29,190 +29,189 @@ import javax.accessibility.AccessibleTex
 import com.sun.star.uno.*;
 import com.sun.star.accessibility.*;
 
-/** 
+/**
  */
 public class Paragraph extends Container implements 
javax.accessibility.Accessible {
-    
-    protected Paragraph(XAccessible xAccessible, XAccessibleContext 
xAccessibleContext) {
-        super(javax.accessibility.AccessibleRole.TEXT, xAccessible, 
xAccessibleContext);
-    }
-    
-    protected class AccessibleParagraphListener extends 
AccessibleContainerListener {
-        
-        protected AccessibleParagraphListener() {
-            super();
-        }
-
-        protected void setComponentState(short state, boolean enable) {
-            switch (state) {
-                case AccessibleStateType.EDITABLE:
-                    
fireStatePropertyChange(javax.accessibility.AccessibleState.EDITABLE, enable);
-                    break;
-                case AccessibleStateType.MULTI_LINE:
-                    
fireStatePropertyChange(javax.accessibility.AccessibleState.MULTI_LINE, enable);
-                    break;
-                case AccessibleStateType.SINGLE_LINE:
-                    break;
-                default:
-                    super.setComponentState(state, enable);
-                    break;
-            }
-        }
-               
-
-        protected void handleVisibleDataChanged() {
-            if (Paragraph.this.isFocusOwner()) {
-                AccessibleContext ac = accessibleContext;
-                if (ac != null) {
-                    AccessibleText at = ac.getAccessibleText();
-                    if (at != null) {
-                        int pos = at.getCaretPosition();
-                        // Simulating a caret event here should help at tools
-                        // that re not aware of the paragraph approach of OOo.
-                        firePropertyChange(ac.ACCESSIBLE_CARET_PROPERTY,
-                            new Integer(-1), new Integer(pos));
-                    }
-                }
-            }
-        }
-        
-        /** Called by OpenOffice process to notify property changes */
-        public void notifyEvent(AccessibleEventObject event) {
-            switch (event.EventId) {
-                case AccessibleEventId.CARET_CHANGED:
-                    
firePropertyChange(accessibleContext.ACCESSIBLE_CARET_PROPERTY,
-                        Component.toNumber(event.OldValue), 
-                        Component.toNumber(event.NewValue));
-                    break;
-                case AccessibleEventId.VISIBLE_DATA_CHANGED:
-                case AccessibleEventId.BOUNDRECT_CHANGED:
-                    // Whenever a paragraph gets inserted above the currently
-                    // focused one, this is the only event that will occur for.
-                    handleVisibleDataChanged();
-                default:
-                    super.notifyEvent(event);
-                break;
-            }
-        }
-    }
-    
-    protected XAccessibleEventListener createEventListener() {
-        return new AccessibleParagraphListener();
-    }
-    
-    /** Creates the AccessibleContext associated with this object */
-    public javax.accessibility.AccessibleContext createAccessibleContext() {
-        return new AccessibleParagraph();
-    }
-
-    protected class AccessibleParagraph extends AccessibleContainer {
-        
-        protected AccessibleParagraph() {
-            // Don't do the queryInterface on XAccessibleText already ..
-            super(false);
-            /* Since getAccessibleText() is heavily used by the java access 
-             * bridge for gnome and the gnome at-tools, we do a query interface
-             * here and remember the result.
-             */
-            accessibleText = AccessibleHypertextImpl.get(unoAccessibleContext);
-        }
-    
-        /*
-        * AccessibleContext
-        */
-
-        /** Gets the role of this object */
-        public javax.accessibility.AccessibleRole getAccessibleRole() {
-            return javax.accessibility.AccessibleRole.TEXT;
-        }
-
-        /** Gets the AccessibleEditableText associated with this object 
presenting text on the display */
-        public javax.accessibility.AccessibleEditableText 
getAccessibleEditableText() {
-            
-            if (disposed)
-                return null;
-            
-            try {
-                XAccessibleEditableText unoAccessibleText = 
(XAccessibleEditableText) 
-                    UnoRuntime.queryInterface(XAccessibleEditableText.class,
-                    unoAccessibleComponent);
-                if (unoAccessibleText != null) {
-                    return new AccessibleEditableTextImpl(unoAccessibleText);
-                } else {
-                    return null;
-                }
-            } catch (com.sun.star.uno.RuntimeException e) {
-                return null;
-            }
-        }
-        
-        /** Gets the AccessibleAction associated with this object that has a 
graphical representation */
-        public javax.accessibility.AccessibleAction getAccessibleAction() {
-            try {
-                XAccessibleAction unoAccessibleAction = (XAccessibleAction)
-                    UnoRuntime.queryInterface(XAccessibleAction.class, 
unoAccessibleComponent);
-                return (unoAccessibleAction != null) ? 
-                    new AccessibleActionImpl(unoAccessibleAction) : null;
-            } catch (com.sun.star.uno.RuntimeException e) {
-                return null;
-            }
-        }
-        
-        /** Returns the relation set of this object */
-        public javax.accessibility.AccessibleRelationSet 
getAccessibleRelationSet() {
-            try {
-                XAccessibleRelationSet unoAccessibleRelationSet = 
-                    
unoAccessible.getAccessibleContext().getAccessibleRelationSet();
-                if (unoAccessibleRelationSet == null) {
-                    return super.getAccessibleRelationSet();
-                }
-                
-                javax.accessibility.AccessibleRelationSet relationSet = new 
javax.accessibility.AccessibleRelationSet();
-                int count = unoAccessibleRelationSet.getRelationCount();
-                for (int i = 0; i < count; i++) {
-                    AccessibleRelation unoAccessibleRelation = 
unoAccessibleRelationSet.getRelation(i);
-                    switch (unoAccessibleRelation.RelationType) {
-                        case AccessibleRelationType.CONTROLLED_BY:
-                            relationSet.add(new 
javax.accessibility.AccessibleRelation(
-                                
javax.accessibility.AccessibleRelation.CONTROLLED_BY,
-                                
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
-                            break;
-                        case AccessibleRelationType.CONTROLLER_FOR:
-                            relationSet.add(new 
javax.accessibility.AccessibleRelation(
-                                
javax.accessibility.AccessibleRelation.CONTROLLER_FOR,
-                                
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
-                            break;
-                        case AccessibleRelationType.LABELED_BY:
-                            relationSet.add(new 
javax.accessibility.AccessibleRelation(
-                                
javax.accessibility.AccessibleRelation.LABELED_BY,
-                                
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
-                            break;
-                        case AccessibleRelationType.MEMBER_OF:
-                            relationSet.add(new 
javax.accessibility.AccessibleRelation(
-                                
javax.accessibility.AccessibleRelation.MEMBER_OF,
-                                
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
-                            break;
-                        case AccessibleRelationType.CONTENT_FLOWS_TO:
-                            relationSet.add(new 
javax.accessibility.AccessibleRelation(
-                                "flowsTo",
-                                
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
-                            break;
-                        case AccessibleRelationType.CONTENT_FLOWS_FROM:
-                            relationSet.add(new 
javax.accessibility.AccessibleRelation(
-                                "flowsFrom",
-                                
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
-                            break;
-                        default:
-                            break;
-                    }
-                }
-                return relationSet;
-            } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
-                return super.getAccessibleRelationSet();
-            } catch (com.sun.star.uno.RuntimeException e) {
-                return super.getAccessibleRelationSet();
-            }
-        }
-    }
-}
 
+       protected Paragraph(XAccessible xAccessible, XAccessibleContext 
xAccessibleContext) {
+               super(javax.accessibility.AccessibleRole.TEXT, xAccessible, 
xAccessibleContext);
+       }
+
+       protected class AccessibleParagraphListener extends 
AccessibleContainerListener {
+
+               protected AccessibleParagraphListener() {
+                       super();
+               }
+
+               protected void setComponentState(short state, boolean enable) {
+                       switch (state) {
+                               case AccessibleStateType.EDITABLE:
+                                       
fireStatePropertyChange(javax.accessibility.AccessibleState.EDITABLE, enable);
+                                       break;
+                               case AccessibleStateType.MULTI_LINE:
+                                       
fireStatePropertyChange(javax.accessibility.AccessibleState.MULTI_LINE, enable);
+                                       break;
+                               case AccessibleStateType.SINGLE_LINE:
+                                       break;
+                               default:
+                                       super.setComponentState(state, enable);
+                                       break;
+                       }
+               }
+
+
+               protected void handleVisibleDataChanged() {
+                       if (Paragraph.this.isFocusOwner()) {
+                               AccessibleContext ac = accessibleContext;
+                               if (ac != null) {
+                                       AccessibleText at = 
ac.getAccessibleText();
+                                       if (at != null) {
+                                               int pos = at.getCaretPosition();
+                                               // Simulating a caret event 
here should help at tools
+                                               // that re not aware of the 
paragraph approach of AOO.
+                                               
firePropertyChange(ac.ACCESSIBLE_CARET_PROPERTY,
+                                                       new Integer(-1), new 
Integer(pos));
+                                       }
+                               }
+                       }
+               }
+
+               /** Called by OpenOffice process to notify property changes */
+               public void notifyEvent(AccessibleEventObject event) {
+                       switch (event.EventId) {
+                               case AccessibleEventId.CARET_CHANGED:
+                                       
firePropertyChange(accessibleContext.ACCESSIBLE_CARET_PROPERTY,
+                                               
Component.toNumber(event.OldValue),
+                                               
Component.toNumber(event.NewValue));
+                                       break;
+                               case AccessibleEventId.VISIBLE_DATA_CHANGED:
+                               case AccessibleEventId.BOUNDRECT_CHANGED:
+                                       // Whenever a paragraph gets inserted 
above the currently
+                                       // focused one, this is the only event 
that will occur for.
+                                       handleVisibleDataChanged();
+                               default:
+                                       super.notifyEvent(event);
+                               break;
+                       }
+               }
+       }
+
+       protected XAccessibleEventListener createEventListener() {
+               return new AccessibleParagraphListener();
+       }
+
+       /** Creates the AccessibleContext associated with this object */
+       public javax.accessibility.AccessibleContext createAccessibleContext() {
+               return new AccessibleParagraph();
+       }
+
+       protected class AccessibleParagraph extends AccessibleContainer {
+
+               protected AccessibleParagraph() {
+                       // Don't do the queryInterface on XAccessibleText 
already ..
+                       super(false);
+                       /* Since getAccessibleText() is heavily used by the 
java access
+                        * bridge for gnome and the gnome at-tools, we do a 
query interface
+                        * here and remember the result.
+                        */
+                       accessibleText = 
AccessibleHypertextImpl.get(unoAccessibleContext);
+               }
+
+               /*
+               * AccessibleContext
+               */
+
+               /** Gets the role of this object */
+               public javax.accessibility.AccessibleRole getAccessibleRole() {
+                       return javax.accessibility.AccessibleRole.TEXT;
+               }
+
+               /** Gets the AccessibleEditableText associated with this object 
presenting text on the display */
+               public javax.accessibility.AccessibleEditableText 
getAccessibleEditableText() {
+
+                       if (disposed)
+                               return null;
+
+                       try {
+                               XAccessibleEditableText unoAccessibleText = 
(XAccessibleEditableText)
+                                       
UnoRuntime.queryInterface(XAccessibleEditableText.class,
+                                       unoAccessibleComponent);
+                               if (unoAccessibleText != null) {
+                                       return new 
AccessibleEditableTextImpl(unoAccessibleText);
+                               } else {
+                                       return null;
+                               }
+                       } catch (com.sun.star.uno.RuntimeException e) {
+                               return null;
+                       }
+               }
+
+               /** Gets the AccessibleAction associated with this object that 
has a graphical representation */
+               public javax.accessibility.AccessibleAction 
getAccessibleAction() {
+                       try {
+                               XAccessibleAction unoAccessibleAction = 
(XAccessibleAction)
+                                       
UnoRuntime.queryInterface(XAccessibleAction.class, unoAccessibleComponent);
+                               return (unoAccessibleAction != null) ?
+                                       new 
AccessibleActionImpl(unoAccessibleAction) : null;
+                       } catch (com.sun.star.uno.RuntimeException e) {
+                               return null;
+                       }
+               }
+
+               /** Returns the relation set of this object */
+               public javax.accessibility.AccessibleRelationSet 
getAccessibleRelationSet() {
+                       try {
+                               XAccessibleRelationSet unoAccessibleRelationSet 
=
+                                       
unoAccessible.getAccessibleContext().getAccessibleRelationSet();
+                               if (unoAccessibleRelationSet == null) {
+                                       return super.getAccessibleRelationSet();
+                               }
+
+                               javax.accessibility.AccessibleRelationSet 
relationSet = new javax.accessibility.AccessibleRelationSet();
+                               int count = 
unoAccessibleRelationSet.getRelationCount();
+                               for (int i = 0; i < count; i++) {
+                                       AccessibleRelation 
unoAccessibleRelation = unoAccessibleRelationSet.getRelation(i);
+                                       switch 
(unoAccessibleRelation.RelationType) {
+                                               case 
AccessibleRelationType.CONTROLLED_BY:
+                                                       relationSet.add(new 
javax.accessibility.AccessibleRelation(
+                                                               
javax.accessibility.AccessibleRelation.CONTROLLED_BY,
+                                                               
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
+                                                       break;
+                                               case 
AccessibleRelationType.CONTROLLER_FOR:
+                                                       relationSet.add(new 
javax.accessibility.AccessibleRelation(
+                                                               
javax.accessibility.AccessibleRelation.CONTROLLER_FOR,
+                                                               
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
+                                                       break;
+                                               case 
AccessibleRelationType.LABELED_BY:
+                                                       relationSet.add(new 
javax.accessibility.AccessibleRelation(
+                                                               
javax.accessibility.AccessibleRelation.LABELED_BY,
+                                                               
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
+                                                       break;
+                                               case 
AccessibleRelationType.MEMBER_OF:
+                                                       relationSet.add(new 
javax.accessibility.AccessibleRelation(
+                                                               
javax.accessibility.AccessibleRelation.MEMBER_OF,
+                                                               
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
+                                                       break;
+                                               case 
AccessibleRelationType.CONTENT_FLOWS_TO:
+                                                       relationSet.add(new 
javax.accessibility.AccessibleRelation(
+                                                               "flowsTo",
+                                                               
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
+                                                       break;
+                                               case 
AccessibleRelationType.CONTENT_FLOWS_FROM:
+                                                       relationSet.add(new 
javax.accessibility.AccessibleRelation(
+                                                               "flowsFrom",
+                                                               
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
+                                                       break;
+                                               default:
+                                                       break;
+                                       }
+                               }
+                               return relationSet;
+                       } catch (com.sun.star.lang.IndexOutOfBoundsException e) 
{
+                               return super.getAccessibleRelationSet();
+                       } catch (com.sun.star.uno.RuntimeException e) {
+                               return super.getAccessibleRelationSet();
+                       }
+               }
+       }
+}


Reply via email to