1 /* 2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package sun.lwawt; 27 28 import java.awt.Component; 29 import java.awt.KeyboardFocusManager; 30 import java.awt.Window; 31 32 import java.util.Map; 33 import java.util.HashMap; 34 35 import sun.awt.AWTAccessor; 36 import sun.awt.AppContext; 37 import sun.awt.KeyboardFocusManagerPeerImpl; 38 39 public class LWKeyboardFocusManagerPeer extends KeyboardFocusManagerPeerImpl { 40 41 private Object lock = new Object(); 42 private LWWindowPeer focusedWindow; 43 private LWComponentPeer focusOwner; 44 45 private static Map<KeyboardFocusManager, LWKeyboardFocusManagerPeer> instances = 46 new HashMap<KeyboardFocusManager, LWKeyboardFocusManagerPeer>(); 47 48 public static synchronized LWKeyboardFocusManagerPeer getInstance(AppContext ctx) { 49 return getInstance(AWTAccessor.getKeyboardFocusManagerAccessor(). 50 getCurrentKeyboardFocusManager(ctx)); 51 } 52 53 public static synchronized LWKeyboardFocusManagerPeer getInstance(KeyboardFocusManager manager) { 54 LWKeyboardFocusManagerPeer instance = instances.get(manager); 55 if (instance == null) { 56 instance = new LWKeyboardFocusManagerPeer(manager); 57 instances.put(manager, instance); 58 } 59 return instance; 60 } 61 62 public LWKeyboardFocusManagerPeer(KeyboardFocusManager manager) { 63 super(manager); 64 } 65 66 @Override 67 public Window getCurrentFocusedWindow() { 68 synchronized (lock) { 69 return (focusedWindow != null) ? (Window)focusedWindow.getTarget() : null; 70 } 71 } 72 73 @Override 74 public Component getCurrentFocusOwner() { 75 synchronized (lock) { 76 return (focusOwner != null) ? focusOwner.getTarget() : null; 77 } 78 } 79 80 @Override 81 public void setCurrentFocusOwner(Component comp) { 82 synchronized (lock) { 83 focusOwner = (comp != null) ? (LWComponentPeer)comp.getPeer() : null; 84 } 85 } 86 87 void setFocusedWindow(LWWindowPeer peer) { 88 synchronized (lock) { 89 focusedWindow = peer; 90 } 91 } 92 93 LWWindowPeer getFocusedWindow() { 94 synchronized (lock) { 95 return focusedWindow; 96 } 97 } 98 99 void setFocusOwner(LWComponentPeer peer) { 100 synchronized (lock) { 101 focusOwner = peer; 102 } 103 } 104 105 LWComponentPeer getFocusOwner() { 106 synchronized (lock) { 107 return focusOwner; 108 } 109 } 110 }