< prev index next >

src/java.desktop/share/classes/sun/awt/CausedFocusEvent.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 25,45 **** package sun.awt; import java.awt.event.FocusEvent; import java.awt.Component; /** ! * This class represents FocusEvents with a known "cause" - reason why this event happened. It can ! * be mouse press, traversal, activation, and so on - all causes are described as Cause enum. The ! * event with the cause can be constructed in two ways - explicitly through constructor of ! * CausedFocusEvent class or implicitly, by calling appropriate requestFocusXXX method with "cause" ! * parameter. The default cause is UNKNOWN. */ ! @SuppressWarnings("serial") ! public class CausedFocusEvent extends FocusEvent { ! public enum Cause { UNKNOWN, MOUSE_EVENT, TRAVERSAL, TRAVERSAL_UP, TRAVERSAL_DOWN, --- 25,46 ---- package sun.awt; import java.awt.event.FocusEvent; import java.awt.Component; + import java.io.ObjectStreamException; + import java.lang.reflect.Field; + import java.security.AccessController; + import java.security.PrivilegedAction; /** ! * This class exists for deserialization compatibility only. */ ! class CausedFocusEvent extends FocusEvent { ! private static final long serialVersionUID = -3647309088427840738L; ! ! private enum Cause { UNKNOWN, MOUSE_EVENT, TRAVERSAL, TRAVERSAL_UP, TRAVERSAL_DOWN,
*** 49,89 **** AUTOMATIC_TRAVERSE, ROLLBACK, NATIVE_SYSTEM, ACTIVATION, CLEAR_GLOBAL_FOCUS_OWNER, ! RETARGETED }; private final Cause cause; ! public Cause getCause() { ! return cause; } ! public String toString() { ! return "java.awt.FocusEvent[" + super.paramString() + ",cause=" + cause + "] on " + getSource(); } ! public CausedFocusEvent(Component source, int id, boolean temporary, ! Component opposite, Cause cause) { ! super(source, id, temporary, opposite); ! if (cause == null) { ! cause = Cause.UNKNOWN; } ! this.cause = cause; } ! /** ! * Retargets the original focus event to the new target. If the ! * original focus event is CausedFocusEvent, it remains such and ! * cause is copied. Otherwise, new CausedFocusEvent is created, ! * with cause as RETARGETED. ! * @return retargeted event, or null if e is null ! */ ! public static FocusEvent retarget(FocusEvent e, Component newSource) { ! if (e == null) return null; ! ! return new CausedFocusEvent(newSource, e.getID(), e.isTemporary(), e.getOppositeComponent(), ! (e instanceof CausedFocusEvent) ? ((CausedFocusEvent)e).getCause() : Cause.RETARGETED); } } --- 50,133 ---- AUTOMATIC_TRAVERSE, ROLLBACK, NATIVE_SYSTEM, ACTIVATION, CLEAR_GLOBAL_FOCUS_OWNER, ! RETARGETED; }; + @SuppressWarnings("serial") + private static final Component dummy = new Component(){}; + private final Cause cause; ! private CausedFocusEvent(Component source, int id, boolean temporary, ! Component opposite, Cause cause) { ! super(source, id, temporary, opposite); ! throw new IllegalStateException(); } ! Object readResolve() throws ObjectStreamException { ! FocusEvent.Cause newCause; ! switch (cause) { ! case UNKNOWN: ! newCause = FocusEvent.Cause.UNKNOWN; ! break; ! case MOUSE_EVENT: ! newCause = FocusEvent.Cause.MOUSE_EVENT; ! break; ! case TRAVERSAL: ! newCause = FocusEvent.Cause.TRAVERSAL; ! break; ! case TRAVERSAL_UP: ! newCause = FocusEvent.Cause.TRAVERSAL_UP; ! break; ! case TRAVERSAL_DOWN: ! newCause = FocusEvent.Cause.TRAVERSAL_DOWN; ! break; ! case TRAVERSAL_FORWARD: ! newCause = FocusEvent.Cause.TRAVERSAL_FORWARD; ! break; ! case TRAVERSAL_BACKWARD: ! newCause = FocusEvent.Cause.TRAVERSAL_BACKWARD; ! break; ! case ROLLBACK: ! newCause = FocusEvent.Cause.ROLLBACK; ! break; ! case NATIVE_SYSTEM: ! newCause = FocusEvent.Cause.UNEXPECTED; ! break; ! case ACTIVATION: ! newCause = FocusEvent.Cause.ACTIVATION; ! break; ! case CLEAR_GLOBAL_FOCUS_OWNER: ! newCause = FocusEvent.Cause.CLEAR_GLOBAL_FOCUS_OWNER; ! break; ! default: ! newCause = FocusEvent.Cause.UNKNOWN; } ! FocusEvent focusEvent = new FocusEvent(dummy, getID(), isTemporary(), ! getOppositeComponent(), newCause); ! focusEvent.setSource(null); ! try { ! final Field consumedField = FocusEvent.class.getField("consumed"); ! AccessController.doPrivileged(new PrivilegedAction<Object>() { ! @Override ! public Object run() { ! consumedField.setAccessible(true); ! try { ! consumedField.set(focusEvent, consumed); ! } catch (IllegalAccessException e) { } ! return null; ! } ! }); ! } catch (NoSuchFieldException e) { } ! AWTAccessor.AWTEventAccessor accessor = ! AWTAccessor.getAWTEventAccessor(); ! accessor.setBData(focusEvent, accessor.getBData(this)); ! return focusEvent; } }
< prev index next >