Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java
38827 views
1
/*
2
* Copyright (c) 2003, 2013, 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
package sun.awt;
26
27
import java.awt.Component;
28
import java.awt.KeyboardFocusManager;
29
import java.awt.Window;
30
import java.awt.Canvas;
31
import java.awt.Scrollbar;
32
import java.awt.Panel;
33
34
import java.awt.event.FocusEvent;
35
36
import java.awt.peer.KeyboardFocusManagerPeer;
37
import java.awt.peer.ComponentPeer;
38
39
import java.lang.reflect.InvocationTargetException;
40
import java.lang.reflect.Method;
41
42
import sun.util.logging.PlatformLogger;
43
44
public abstract class KeyboardFocusManagerPeerImpl implements KeyboardFocusManagerPeer {
45
46
private static final PlatformLogger focusLog = PlatformLogger.getLogger("sun.awt.focus.KeyboardFocusManagerPeerImpl");
47
48
private static AWTAccessor.KeyboardFocusManagerAccessor kfmAccessor =
49
AWTAccessor.getKeyboardFocusManagerAccessor();
50
51
// The constants are copied from java.awt.KeyboardFocusManager
52
public static final int SNFH_FAILURE = 0;
53
public static final int SNFH_SUCCESS_HANDLED = 1;
54
public static final int SNFH_SUCCESS_PROCEED = 2;
55
56
@Override
57
public void clearGlobalFocusOwner(Window activeWindow) {
58
if (activeWindow != null) {
59
Component focusOwner = activeWindow.getFocusOwner();
60
if (focusLog.isLoggable(PlatformLogger.Level.FINE)) {
61
focusLog.fine("Clearing global focus owner " + focusOwner);
62
}
63
if (focusOwner != null) {
64
FocusEvent fl = new CausedFocusEvent(focusOwner, FocusEvent.FOCUS_LOST, false, null,
65
CausedFocusEvent.Cause.CLEAR_GLOBAL_FOCUS_OWNER);
66
SunToolkit.postPriorityEvent(fl);
67
}
68
}
69
}
70
71
/*
72
* WARNING: Don't call it on the Toolkit thread.
73
*
74
* Checks if the component:
75
* 1) accepts focus on click (in general)
76
* 2) may be a focus owner (in particular)
77
*/
78
@SuppressWarnings("deprecation")
79
public static boolean shouldFocusOnClick(Component component) {
80
boolean acceptFocusOnClick = false;
81
82
// A component is generally allowed to accept focus on click
83
// if its peer is focusable. There're some exceptions though.
84
85
86
// CANVAS & SCROLLBAR accept focus on click
87
if (component instanceof Canvas ||
88
component instanceof Scrollbar)
89
{
90
acceptFocusOnClick = true;
91
92
// PANEL, empty only, accepts focus on click
93
} else if (component instanceof Panel) {
94
acceptFocusOnClick = (((Panel)component).getComponentCount() == 0);
95
96
97
// Other components
98
} else {
99
ComponentPeer peer = (component != null ? component.getPeer() : null);
100
acceptFocusOnClick = (peer != null ? peer.isFocusable() : false);
101
}
102
return acceptFocusOnClick &&
103
AWTAccessor.getComponentAccessor().canBeFocusOwner(component);
104
}
105
106
/*
107
* Posts proper lost/gain focus events to the event queue.
108
*/
109
@SuppressWarnings("deprecation")
110
public static boolean deliverFocus(Component lightweightChild,
111
Component target,
112
boolean temporary,
113
boolean focusedWindowChangeAllowed,
114
long time,
115
CausedFocusEvent.Cause cause,
116
Component currentFocusOwner) // provided by the descendant peers
117
{
118
if (lightweightChild == null) {
119
lightweightChild = target;
120
}
121
122
Component currentOwner = currentFocusOwner;
123
if (currentOwner != null && currentOwner.getPeer() == null) {
124
currentOwner = null;
125
}
126
if (currentOwner != null) {
127
FocusEvent fl = new CausedFocusEvent(currentOwner, FocusEvent.FOCUS_LOST,
128
false, lightweightChild, cause);
129
130
if (focusLog.isLoggable(PlatformLogger.Level.FINER)) {
131
focusLog.finer("Posting focus event: " + fl);
132
}
133
SunToolkit.postEvent(SunToolkit.targetToAppContext(currentOwner), fl);
134
}
135
136
FocusEvent fg = new CausedFocusEvent(lightweightChild, FocusEvent.FOCUS_GAINED,
137
false, currentOwner, cause);
138
139
if (focusLog.isLoggable(PlatformLogger.Level.FINER)) {
140
focusLog.finer("Posting focus event: " + fg);
141
}
142
SunToolkit.postEvent(SunToolkit.targetToAppContext(lightweightChild), fg);
143
return true;
144
}
145
146
// WARNING: Don't call it on the Toolkit thread.
147
public static boolean requestFocusFor(Component target, CausedFocusEvent.Cause cause) {
148
return AWTAccessor.getComponentAccessor().requestFocus(target, cause);
149
}
150
151
// WARNING: Don't call it on the Toolkit thread.
152
public static int shouldNativelyFocusHeavyweight(Component heavyweight,
153
Component descendant,
154
boolean temporary,
155
boolean focusedWindowChangeAllowed,
156
long time,
157
CausedFocusEvent.Cause cause)
158
{
159
return kfmAccessor.shouldNativelyFocusHeavyweight(
160
heavyweight, descendant, temporary, focusedWindowChangeAllowed, time, cause);
161
}
162
163
public static void removeLastFocusRequest(Component heavyweight) {
164
kfmAccessor.removeLastFocusRequest(heavyweight);
165
}
166
167
// WARNING: Don't call it on the Toolkit thread.
168
public static boolean processSynchronousLightweightTransfer(Component heavyweight,
169
Component descendant,
170
boolean temporary,
171
boolean focusedWindowChangeAllowed,
172
long time)
173
{
174
return kfmAccessor.processSynchronousLightweightTransfer(
175
heavyweight, descendant, temporary, focusedWindowChangeAllowed, time);
176
}
177
}
178
179