001    /*
002     * Copyright 2006 Google Inc.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005     * use this file except in compliance with the License. You may obtain a copy of
006     * the License at
007     * 
008     * http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013     * License for the specific language governing permissions and limitations under
014     * the License.
015     */
016    package com.google.gwt.user.client.ui.impl;
017    
018    import com.google.gwt.user.client.Element;
019    
020    /**
021     * Crazy implementation of {@link com.google.gwt.user.client.ui.impl.FocusImpl}
022     * that uses a hidden anchor to serve as a 'proxy' for focus.
023     */
024    public class FocusImplSafari extends FocusImpl {
025    
026      public native void blur(Element elem) /*-{
027        elem.__anchor.blur();
028      }-*/;
029    
030      public native Element createFocusable() /*-{
031        var div = document.createElement('div');
032        var input = document.createElement('input');
033        input.type = 'text';
034        input.style.zIndex = -1;
035        input.style.position = 'absolute';
036    
037        div.addEventListener(
038          'click',
039          function() { input.focus(); },
040          false);
041    
042        div.appendChild(input);
043        div.__anchor = input;
044        return div;
045      }-*/;
046    
047      public native void focus(Element elem) /*-{
048        elem.__anchor.focus();
049      }-*/;
050    
051      public native int getTabIndex(Element elem) /*-{
052        return elem.__anchor.tabIndex;
053      }-*/;
054    
055      public native void setAccessKey(Element elem, char key) /*-{
056        elem.__anchor.accessKey = key;
057      }-*/;
058    
059      public native void setTabIndex(Element elem, int index) /*-{
060        elem.__anchor.tabIndex = index;
061      }-*/;
062    }