提交 675ef914 编写于 作者: P ptbrunet

8076182: Open Source Java Access Bridge - Create Patch for JEP C127 8055831

Summary: move files from open to closed
Reviewed-by: erikj, serb, azvegint
Contributed-by: peter.brunet@oracle.com
上级 67c0d3ff
#
# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2015, 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
......@@ -64,7 +64,10 @@ ifndef OPENJDK
# This gets built on unix platforms implicitly in the old build even though
# it's excluded in the closed build.
EXCLUDES += sun/java2d/pisces
endif
endif
ifeq ($(OPENJDK_TARGET_OS), windows)
# AccessBridge is compiled separately below.
EXFILES += AccessBridge.java \
AccessBridgeLoader.java \
......@@ -73,8 +76,6 @@ ifndef OPENJDK
EXCLUDES += com/sun/java/accessibility/extensions
endif
endif
ifneq ($(OPENJDK_TARGET_OS), solaris)
# Exclude Solaris nio and two security related files in src/share/classes
EXFILES += SolarisAclFileAttributeView.java \
......@@ -272,7 +273,7 @@ include CopyIntoClasses.gmk
ifndef OPENJDK
CLOSED_SRC_DIRS := $(JDK_TOPDIR)/src/closed/share/classes \
$(JDK_TOPDIR)/src/closed/$(OPENJDK_TARGET_OS_API_DIR)/classes
$(wildcard $(JDK_TOPDIR)/src/closed/$(OPENJDK_TARGET_OS_API_DIR)/classes)
endif
MACOSX_SRC_DIRS :=
......@@ -379,7 +380,6 @@ $(JDK_OUTPUTDIR)/classes/META-INF/services/com.sun.tools.xjc.Plugin:
##########################################################################################
ifndef OPENJDK
ifeq ($(OPENJDK_TARGET_OS), windows)
ifeq ($(OPENJDK_TARGET_CPU_BITS), 32)
$(eval $(call SetupJavaCompilation,BUILD_ACCESSBRIDGE_32, \
......@@ -413,7 +413,6 @@ ifndef OPENJDK
endif
endif
endif
##########################################################################################
......
#
# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2015, 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
......@@ -659,11 +659,10 @@ endif
##########################################################################################
# jabswitch
ifndef OPENJDK
ifeq ($(OPENJDK_TARGET_OS), windows)
$(eval $(call SetupNativeCompilation,BUILD_JABSWITCH, \
SRC := $(JDK_TOPDIR)/src/closed/windows/native/sun/bridge, \
SRC := $(JDK_TOPDIR)/src/windows/native/sun/bridge, \
INCLUDE_FILES := jabswitch.cpp, \
LANG := C++, \
CFLAGS := $(filter-out -Zc:wchar_t-, $(CFLAGS_JDKEXE)) -Zc:wchar_t \
......@@ -675,17 +674,16 @@ ifndef OPENJDK
OUTPUT_DIR := $(JDK_OUTPUTDIR)/bin, \
PROGRAM := jabswitch, \
DEBUG_SYMBOLS := true, \
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/closed/windows/native/sun/bridge/AccessBridgeStatusWindow.rc, \
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/native/sun/bridge/AccessBridgeStatusWindow.rc, \
RC_FLAGS := $(RC_FLAGS) \
-D "JDK_FNAME=jabswitch.exe" \
-D "JDK_INTERNAL_NAME=jabswitch" \
-D "JDK_FTYPE=0x01L", \
MANIFEST := $(JDK_TOPDIR)/src/closed/windows/native/sun/bridge/jabswitch.manifest))
MANIFEST := $(JDK_TOPDIR)/src/windows/native/sun/bridge/jabswitch.manifest))
BUILD_LAUNCHERS += $(BUILD_JABSWITCH)
endif
endif
##########################################################################################
......
#
# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2015, 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
......@@ -55,7 +55,6 @@ COPY_FILES = $(H_TARGET_FILES)
##########################################################################################
ifndef OPENJDK
ifeq ($(OPENJDK_TARGET_OS), windows)
COPY_FILES += $(OPENJDK_TARGET_OS_INCLUDE)/bridge/AccessBridgeCallbacks.h \
$(OPENJDK_TARGET_OS_INCLUDE)/bridge/AccessBridgeCalls.h \
......@@ -64,14 +63,12 @@ ifndef OPENJDK
$(JDK_OUTPUTDIR)/lib/accessibility.properties
$(OPENJDK_TARGET_OS_INCLUDE)/bridge/%: \
$(JDK_TOPDIR)/src/closed/windows/native/sun/bridge/%
$(JDK_TOPDIR)/src/windows/native/sun/bridge/%
$(install-file)
$(JDK_OUTPUTDIR)/lib/accessibility.properties: \
$(JDK_TOPDIR)/src/closed/windows/native/sun/bridge/accessibility.properties
$(JDK_TOPDIR)/src/windows/native/sun/bridge/accessibility.properties
$(install-file)
endif
endif
##########################################################################################
......
#
# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2015, 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
......@@ -650,7 +650,6 @@ $(eval $(call SetupZipArchive,BUILD_SRC_ZIP, \
##########################################################################################
ifndef OPENJDK
ifeq ($(OPENJDK_TARGET_OS), windows)
$(eval $(call SetupArchive,BUILD_JACCESS_JAR, , \
......@@ -686,7 +685,6 @@ ifndef OPENJDK
JARS += $(IMAGES_OUTPUTDIR)/lib/ext/access-bridge-64.jar
endif
endif
endif
##########################################################################################
......
#
# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2015, 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
......@@ -174,11 +174,10 @@ endif
##########################################################################################
ifndef OPENJDK
ifeq ($(OPENJDK_TARGET_OS), windows)
AB_GENSRC_DIR := $(JDK_OUTPUTDIR)/gensrc_ab
AB_SRC_DIR := $(JDK_TOPDIR)/src/closed/windows/classes/com/sun/java/accessibility
AB_SRC_DIR := $(JDK_TOPDIR)/src/windows/classes/com/sun/java/accessibility
ifeq ($(OPENJDK_TARGET_CPU_BITS), 32)
$(AB_GENSRC_DIR)/32bit/com/sun/java/accessibility/AccessBridgeLoader.java: \
......@@ -216,6 +215,5 @@ ifndef OPENJDK
endif
endif
endif
##########################################################################################
#
# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2011, 2015, 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
......@@ -127,10 +127,9 @@ endif
##########################################################################################
ifndef OPENJDK
ifeq ($(OPENJDK_TARGET_OS), windows)
ACCESSBRIDGE_SRCDIR := $(JDK_TOPDIR)/src/closed/windows/native/sun/bridge
ACCESSBRIDGE_SRCDIR := $(JDK_TOPDIR)/src/windows/native/sun/bridge
define SetupAccessBridge
# Parameter 1 Suffix
......@@ -149,8 +148,7 @@ ifndef OPENJDK
LDFLAGS := $(LDFLAGS_JDKLIB) kernel32.lib user32.lib gdi32.lib \
winspool.lib jawt.lib comdlg32.lib advapi32.lib shell32.lib \
ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib \
-subsystem:windows -machine:$2 \
-def:$(ACCESSBRIDGE_SRCDIR)/JAWTAccessBridge.DEF, \
-subsystem:windows -machine:$2, \
VERSIONINFO_RESOURCE := $(ACCESSBRIDGE_SRCDIR)/AccessBridgeStatusWindow.rc, \
RC_FLAGS := $(RC_FLAGS) \
-D "JDK_FNAME=JAWTAccessBridge$1.dll" \
......@@ -159,7 +157,8 @@ ifndef OPENJDK
OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libjawtaccessbridge$1, \
DEBUG_SYMBOLS := true)
$$(BUILD_JAWTACCESSBRIDGE$1): $(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX)
$$(BUILD_JAWTACCESSBRIDGE$1): \
$(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX)
$(call SetupNativeCompilation,BUILD_JAVAACCESSBRIDGE$1, \
LIBRARY = JavaAccessBridge$1, \
......@@ -175,8 +174,7 @@ ifndef OPENJDK
LDFLAGS := $(LDFLAGS_JDKLIB) kernel32.lib user32.lib gdi32.lib \
winspool.lib comdlg32.lib advapi32.lib shell32.lib \
ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib \
-subsystem:windows -machine:$2 \
-def:$(ACCESSBRIDGE_SRCDIR)/JavaAccessBridge.DEF, \
-subsystem:windows -machine:$2, \
VERSIONINFO_RESOURCE := $(ACCESSBRIDGE_SRCDIR)/AccessBridgeStatusWindow.rc, \
RC_FLAGS := $(RC_FLAGS) \
-D "JDK_FNAME=JavaAccessBridge$1.dll" \
......@@ -221,5 +219,5 @@ ifndef OPENJDK
else
$(eval $(call SetupAccessBridge,-64,X64,64))
endif
endif
endif
/*
* Copyright (c) 2002, 2014, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility;
@jdk.Exported(false)
abstract class AccessBridgeLoader {
/**
* Load JavaAccessBridge.DLL (our native half)
*/
static {
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<Object>() {
public Object run() {
System.loadLibrary("JavaAccessBridge-32");
return null;
}
}, null, new java.lang.RuntimePermission("loadLibrary.JavaAccessBridge-32")
);
}
boolean useJAWT_DLL = false;
/**
* AccessBridgeLoader constructor
*/
AccessBridgeLoader() {
// load JAWTAccessBridge.DLL on JDK 1.4.1 or later
// determine which version of the JDK is running
String version = System.getProperty("java.version");
if (version != null)
useJAWT_DLL = (version.compareTo("1.4.1") >= 0);
if (useJAWT_DLL) {
// Note that we have to explicitly load JAWT.DLL
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<Object>() {
public Object run() {
System.loadLibrary("JAWT");
System.loadLibrary("JAWTAccessBridge-32");
return null;
}
}, null, new RuntimePermission("loadLibrary.JAWT"),
new RuntimePermission("loadLibrary.JAWTAccessBridge-32")
);
}
}
}
/*
* Copyright (c) 2002, 2014, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility;
@jdk.Exported(false)
abstract class AccessBridgeLoader {
/**
* Load JavaAccessBridge.DLL (our native half)
*/
static {
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<Object>() {
public Object run() {
System.loadLibrary("JavaAccessBridge-64");
return null;
}
}, null, new RuntimePermission("loadLibrary.JavaAccessBridge-64")
);
}
boolean useJAWT_DLL = false;
/**
* AccessBridgLoader constructor
*/
AccessBridgeLoader() {
// load JAWTAccessBridge.DLL on JDK 1.4.1 or later
String version = System.getProperty("java.version");
if (version != null)
useJAWT_DLL = (version.compareTo("1.4.1") >= 0);
if (useJAWT_DLL) {
// Note that we have to explicitly load JAWT.DLL
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<Object>() {
public Object run() {
System.loadLibrary("JAWT");
System.loadLibrary("JAWTAccessBridge-64");
return null;
}
}, null, new RuntimePermission("loadLibrary.JAWT"),
new RuntimePermission("loadLibrary.JAWTAccessBridge-64")
);
}
}
}
/*
* Copyright (c) 2002, 2010, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility.extensions;
import javax.accessibility.*;
/**
* <P>Class AccessibleExtendedRelation contains extensions to the class
* AccessibleRelation that are currently not in a public API.
*
* <P>Class AccessibleRelation describes a relation between the
* object that implements the AccessibleRelation and one or more other
* objects. The actual relations that an object has with other
* objects are defined as an AccessibleRelationSet, which is a composed
* set of AccessibleRelations.
* <p>The toDisplayString method allows you to obtain the localized string
* for a locale independent key from a predefined ResourceBundle for the
* keys defined in this class.
* <p>The constants in this class present a strongly typed enumeration
* of common object roles. If the constants in this class are not sufficient
* to describe the role of an object, a subclass should be generated
* from this class and it should provide constants in a similar manner.
*
*/
public class AccessibleExtendedRelation
extends AccessibleExtendedRelationConstants {
public AccessibleExtendedRelation(String s) {
super(s);
}
public AccessibleExtendedRelation(String key, Object target) {
super(key, target);
}
}
/*
* Copyright (c) 2002, 2010, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility.extensions;
import javax.accessibility.*;
/**
* <P>Class AccessibleExtendedRelation contains extensions to the class
* AccessibleRelation that are currently not in a public API.
*
* <P>Class AccessibleRelation describes a relation between the
* object that implements the AccessibleRelation and one or more other
* objects. The actual relations that an object has with other
* objects are defined as an AccessibleRelationSet, which is a composed
* set of AccessibleRelations.
* <p>The toDisplayString method allows you to obtain the localized string
* for a locale independent key from a predefined ResourceBundle for the
* keys defined in this class.
* <p>The constants in this class present a strongly typed enumeration
* of common object roles. If the constants in this class are not sufficient
* to describe the role of an object, a subclass should be generated
* from this class and it should provide constants in a similar manner.
*
*/
public abstract class AccessibleExtendedRelationConstants
extends AccessibleRelation {
/**
* Indicates that one AccessibleText object is linked to the
* target AccessibleText object(s). <p> A good example is a StarOffice
* text window with the bottom of one page, a footer, a header,
* and the top of another page all visible in the window. There
* should be a FLOWS_TO relation from the last chunk of AccessibleText
* in the bottom of one page to the first AccessibleText object at the
* top of the next page, skipping over the AccessibleText object(s)
* that make up the header and footer. A corresponding FLOWS_FROM
* relation would link the AccessibleText object in the next page to
* the last one in the previous page.
* @see AccessibleExtendedRole.FLOWS_FROM
*/
public static final String FLOWS_TO = "flowsTo";
/**
* Indicates that one AccessibleText object is linked to the
* target AccessibleText object(s).
* @see AccessibleExtendedRole.FLOWS_TO
*/
public static final String FLOWS_FROM = "flowsFrom";
/**
* Indicates a component is a subwindow of a target component
*/
public static final String SUBWINDOW_OF = "subwindowOf";
/**
* Identifies that the linkage between one AccessibleText
* object and the target AccessibleText object(s) has changed.
* @see AccessibleExtendedRole.FLOWS_TO
* @see AccessibleExtendedRole.FLOWS_FROM
*/
public static final String FLOWS_TO_PROPERTY = "flowsToProperty";
/**
* Identifies that the linkage between one AccessibleText
* object and the target AccessibleText object(s) has changed.
* @see AccessibleExtendedRole.FLOWS_TO
* @see AccessibleExtendedRole.FLOWS_FROM
*/
public static final String FLOWS_FROM_PROPERTY = "flowsFromProperty";
/**
* Identifies the subwindow relationship between two components
* has changed
*/
public static final String SUBWINDOW_OF_PROPERTY = "subwindowOfProperty";
public AccessibleExtendedRelationConstants(String s) {
super(s);
}
public AccessibleExtendedRelationConstants(String key, Object target) {
super(key, target);
}
}
/*
* Copyright (c) 2002, 2010, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility.extensions;
import javax.accessibility.*;
/**
* <P>Class AccessibleExtendedRole contains extensions to the class
* AccessibleRole that are currently not in a public API.
*
* <P>Class AccessibleRole determines the role of a component. The role
* of a component describes its generic function. (E.G.,
* "push button," "table," or "list.")
* <p>The constants in this class present a strongly typed enumeration
* of common object roles. A public constructor for this class has been
* purposely omitted and applications should use one of the constants
* from this class. If the constants in this class are not sufficient
* to describe the role of an object, a subclass should be generated
* from this class and it should provide constants in a similar manner.
*
*/
public class AccessibleExtendedRole extends AccessibleExtendedRoleConstants {
public AccessibleExtendedRole(String s) {
super(s);
}
}
/*
* Copyright (c) 2002, 2012, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility.extensions;
import javax.accessibility.*;
/**
* <P>Class AccessibleExtendedRole contains extensions to the class
* AccessibleRole that are currently not in a public API.
*
* <P>Class AccessibleRole determines the role of a component. The role
* of a component describes its generic function. (E.G.,
* "push button," "table," or "list.")
* <p>The constants in this class present a strongly typed enumeration
* of common object roles. A public constructor for this class has been
* purposely omitted and applications should use one of the constants
* from this class. If the constants in this class are not sufficient
* to describe the role of an object, a subclass should be generated
* from this class and it should provide constants in a similar manner.
*
*/
public abstract class AccessibleExtendedRoleConstants extends AccessibleRole {
/**
* Indicates this component is a text header.
*/
public static final AccessibleExtendedRole HEADER
= new AccessibleExtendedRole("Header");
/**
* Indicates this component is a text footer.
*/
public static final AccessibleExtendedRole FOOTER
= new AccessibleExtendedRole("Footer");
/**
* Indicates this component is a text paragraph.
*/
public static final AccessibleExtendedRole PARAGRAPH
= new AccessibleExtendedRole("Paragraph");
/**
* Indicates this component is a ruler.
*/
public static final AccessibleExtendedRole RULER
= new AccessibleExtendedRole("RULER");
public AccessibleExtendedRoleConstants(String s) {
super(s);
}
}
/*
* Copyright (c) 2002, 2012, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility.extensions;
import javax.accessibility.*;
/**
* <P>Class AccessibleState describes a component's particular state. The actual
* state of the component is defined as an AccessibleStateSet, which is a
* composed set of AccessibleStates.
* <p>The toDisplayString method allows you to obtain the localized string
* for a locale independent key from a predefined ResourceBundle for the
* keys defined in this class.
* <p>The constants in this class present a strongly typed enumeration
* of common object roles. A public constructor for this class has been
* purposely omitted and applications should use one of the constants
* from this class. If the constants in this class are not sufficient
* to describe the role of an object, a subclass should be generated
* from this class and it should provide constants in a similar manner.
*
*/
public abstract class AccessibleExtendedState
extends AccessibleExtendedStateConstants {
public AccessibleExtendedState(String s) {
super(s);
}
}
/*
* Copyright (c) 2002, 2012, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility.extensions;
import javax.accessibility.*;
/**
* <P>Class AccessibleState describes a component's particular state. The actual
* state of the component is defined as an AccessibleStateSet, which is a
* composed set of AccessibleStates.
* <p>The toDisplayString method allows you to obtain the localized string
* for a locale independent key from a predefined ResourceBundle for the
* keys defined in this class.
* <p>The constants in this class present a strongly typed enumeration
* of common object roles. A public constructor for this class has been
* purposely omitted and applications should use one of the constants
* from this class. If the constants in this class are not sufficient
* to describe the role of an object, a subclass should be generated
* from this class and it should provide constants in a similar manner.
*
*/
public abstract class AccessibleExtendedStateConstants extends AccessibleState {
/**
* Indicates a component is responsible for managing
* its subcomponents.
*/
public static final AccessibleExtendedState MANAGES_DESCENDENTS
= new AccessibleExtendedState("managesDescendents");
public AccessibleExtendedStateConstants(String s) {
super(s);
}
}
/*
* Copyright (c) 2002, 2014, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility;
@jdk.Exported(false)
abstract class AccessBridgeLoader {
/**
* Load JavaAccessBridge.DLL (our native half)
*/
static {
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<Object>() {
public Object run() {
System.loadLibrary("JavaAccessBridge");
return null;
}
}, null, new RuntimePermission("loadLibrary.JavaAccessBridge")
);
}
boolean useJAWT_DLL = false;
/**
* AccessBridgeLoader constructor
*/
AccessBridgeLoader() {
String version = System.getProperty("java.version");
if (version != null)
useJAWT_DLL = (version.compareTo("1.4.1") >= 0);
// load JAWTAccessBridge.DLL on JDK 1.4.1 or later
if (useJAWT_DLL) {
// Note that we have to explicitly load JAWT.DLL
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<Object>() {
public Object run() {
System.loadLibrary("JAWT");
System.loadLibrary("JAWTAccessBridge");
return null;
}
}, null, new RuntimePermission("loadLibrary.JAWT"),
new RuntimePermission("loadLibrary.JAWTAccessBridge")
);
}
}
}
/*
* Copyright (c) 2002, 2015, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility.util;
import java.util.*;
import java.beans.*;
import java.awt.*;
import java.awt.event.*;
import javax.accessibility.*;
/**
* <P>{@code AccessibilityEventMonitor} implements a PropertyChange listener
* on every UI object that implements interface {@code Accessible} in the Java
* Virtual Machine. The events captured by these listeners are made available
* through listeners supported by {@code AccessibilityEventMonitor}.
* With this, all the individual events on each of the UI object
* instances are funneled into one set of PropertyChange listeners.
* <p>This class depends upon {@link EventQueueMonitor}, which provides the base
* level support for capturing the top-level containers as they are created.
*
*/
@jdk.Exported
public class AccessibilityEventMonitor {
// listeners
/**
* The current list of registered {@link java.beans.PropertyChangeListener
* PropertyChangeListener} classes.
*
* @see #addPropertyChangeListener
* @see #removePropertyChangeListener
*/
static protected final AccessibilityListenerList listenerList =
new AccessibilityListenerList();
/**
* The actual listener that is installed on the component instances.
* This listener calls the other registered listeners when an event
* occurs. By doing things this way, the actual number of listeners
* installed on a component instance is drastically reduced.
*/
static protected final AccessibilityEventListener accessibilityListener =
new AccessibilityEventListener();
/**
* Adds the specified listener to receive all PropertyChange events on
* each UI object instance in the Java Virtual Machine as they occur.
* <P>Note: This listener is automatically added to all component
* instances created after this method is called. In addition, it
* is only added to UI object instances that support this listener type.
*
* @param l the listener to add
*
* @see #removePropertyChangeListener
*/
static public void addPropertyChangeListener(PropertyChangeListener l) {
if (listenerList.getListenerCount(PropertyChangeListener.class) == 0) {
accessibilityListener.installListeners();
}
listenerList.add(PropertyChangeListener.class, l);
}
/**
* Removes the specified listener so it no longer receives PropertyChange
* events when they occur.
* @see #addPropertyChangeListener
* @param l the listener to remove
*/
static public void removePropertyChangeListener(PropertyChangeListener l) {
listenerList.remove(PropertyChangeListener.class, l);
if (listenerList.getListenerCount(PropertyChangeListener.class) == 0) {
accessibilityListener.removeListeners();
}
}
/**
* AccessibilityEventListener is the class that does all the work for
* AccessibilityEventMonitor. It is not intended for use by any other
* class except AccessibilityEventMonitor.
*
*/
static class AccessibilityEventListener implements TopLevelWindowListener,
PropertyChangeListener {
/**
* Create a new instance of this class and install it on each component
* instance in the virtual machine that supports any of the currently
* registered listeners in AccessibilityEventMonitor. Also registers
* itself as a TopLevelWindowListener with EventQueueMonitor so it can
* automatically add new listeners to new components.
* @see EventQueueMonitor
* @see AccessibilityEventMonitor
*/
public AccessibilityEventListener() {
EventQueueMonitor.addTopLevelWindowListener(this);
}
/**
* Installs PropertyChange listeners on all Accessible objects based
* upon the current topLevelWindows cached by EventQueueMonitor.
* @see EventQueueMonitor
* @see AWTEventMonitor
*/
protected void installListeners() {
Window topLevelWindows[] = EventQueueMonitor.getTopLevelWindows();
if (topLevelWindows != null) {
for (int i = 0; i < topLevelWindows.length; i++) {
if (topLevelWindows[i] instanceof Accessible) {
installListeners((Accessible) topLevelWindows[i]);
}
}
}
}
/**
* Installs PropertyChange listeners to the Accessible object, and it's
* children (so long as the object isn't of TRANSIENT state).
* @param a the Accessible object to add listeners to
*/
protected void installListeners(Accessible a) {
installListeners(a.getAccessibleContext());
}
/**
* Installs PropertyChange listeners to the AccessibleContext object,
* and it's * children (so long as the object isn't of TRANSIENT state).
* @param a the Accessible object to add listeners to
*/
private void installListeners(AccessibleContext ac) {
if (ac != null) {
AccessibleStateSet states = ac.getAccessibleStateSet();
if (!states.contains(AccessibleState.TRANSIENT)) {
ac.addPropertyChangeListener(this);
/*
* Don't add listeners to transient children. Components
* with transient children should return an AccessibleStateSet
* containing AccessibleState.MANAGES_DESCENDANTS. Components
* may not explicitly return the MANAGES_DESCENDANTS state.
* In this case, don't add listeners to the children of
* lists, tables and trees.
*/
AccessibleStateSet set = ac.getAccessibleStateSet();
if (set.contains(_AccessibleState.MANAGES_DESCENDANTS)) {
return;
}
AccessibleRole role = ac.getAccessibleRole();
if (role == AccessibleRole.LIST ||
role == AccessibleRole.TREE) {
return;
}
if (role == AccessibleRole.TABLE) {
// handle Oracle tables containing tables
Accessible child = ac.getAccessibleChild(0);
if (child != null) {
AccessibleContext ac2 = child.getAccessibleContext();
if (ac2 != null) {
role = ac2.getAccessibleRole();
if (role != null && role != AccessibleRole.TABLE) {
return;
}
}
}
}
int count = ac.getAccessibleChildrenCount();
for (int i = 0; i < count; i++) {
Accessible child = ac.getAccessibleChild(i);
if (child != null) {
installListeners(child);
}
}
}
}
}
/**
* Removes PropertyChange listeners on all Accessible objects based
* upon the topLevelWindows cached by EventQueueMonitor.
* @param eventID the event ID
* @see EventID
*/
protected void removeListeners() {
Window topLevelWindows[] = EventQueueMonitor.getTopLevelWindows();
if (topLevelWindows != null) {
for (int i = 0; i < topLevelWindows.length; i++) {
if (topLevelWindows[i] instanceof Accessible) {
removeListeners((Accessible) topLevelWindows[i]);
}
}
}
}
/**
* Removes PropertyChange listeners for the given Accessible object,
* it's children (so long as the object isn't of TRANSIENT state).
* @param a the Accessible object to remove listeners from
*/
protected void removeListeners(Accessible a) {
removeListeners(a.getAccessibleContext());
}
/**
* Removes PropertyChange listeners for the given AccessibleContext
* object, it's children (so long as the object isn't of TRANSIENT
* state).
* @param a the Accessible object to remove listeners from
*/
private void removeListeners(AccessibleContext ac) {
if (ac != null) {
// Listeners are not added to transient components.
AccessibleStateSet states = ac.getAccessibleStateSet();
if (!states.contains(AccessibleState.TRANSIENT)) {
ac.removePropertyChangeListener(this);
/*
* Listeners are not added to transient children. Components
* with transient children should return an AccessibleStateSet
* containing AccessibleState.MANAGES_DESCENDANTS. Components
* may not explicitly return the MANAGES_DESCENDANTS state.
* In this case, don't remove listeners from the children of
* lists, tables and trees.
*/
if (states.contains(_AccessibleState.MANAGES_DESCENDANTS)) {
return;
}
AccessibleRole role = ac.getAccessibleRole();
if (role == AccessibleRole.LIST ||
role == AccessibleRole.TABLE ||
role == AccessibleRole.TREE) {
return;
}
int count = ac.getAccessibleChildrenCount();
for (int i = 0; i < count; i++) {
Accessible child = ac.getAccessibleChild(i);
if (child != null) {
removeListeners(child);
}
}
}
}
}
/********************************************************************/
/* */
/* Listener Interface Methods */
/* */
/********************************************************************/
/* TopLevelWindow Methods ***************************************/
/**
* Called when top level window is created.
* @see EventQueueMonitor
* @see EventQueueMonitor#addTopLevelWindowListener
*/
public void topLevelWindowCreated(Window w) {
if (w instanceof Accessible) {
installListeners((Accessible) w);
}
}
/**
* Called when top level window is destroyed.
* @see EventQueueMonitor
* @see EventQueueMonitor#addTopLevelWindowListener
*/
public void topLevelWindowDestroyed(Window w) {
if (w instanceof Accessible) {
removeListeners((Accessible) w);
}
}
/* PropertyChangeListener Methods **************************************/
public void propertyChange(PropertyChangeEvent e) {
// propogate the event
Object[] listeners =
AccessibilityEventMonitor.listenerList.getListenerList();
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i]==PropertyChangeListener.class) {
((PropertyChangeListener)listeners[i+1]).propertyChange(e);
}
}
// handle childbirth/death
String name = e.getPropertyName();
if (name.compareTo(AccessibleContext.ACCESSIBLE_CHILD_PROPERTY) == 0) {
Object oldValue = e.getOldValue();
Object newValue = e.getNewValue();
if ((oldValue == null) ^ (newValue == null)) { // one null, not both
if (oldValue != null) {
// this Accessible is a child that's going away
if (oldValue instanceof Accessible) {
Accessible a = (Accessible) oldValue;
removeListeners(a.getAccessibleContext());
} else if (oldValue instanceof AccessibleContext) {
removeListeners((AccessibleContext) oldValue);
}
} else if (newValue != null) {
// this Accessible is a child was just born
if (newValue instanceof Accessible) {
Accessible a = (Accessible) newValue;
installListeners(a.getAccessibleContext());
} else if (newValue instanceof AccessibleContext) {
installListeners((AccessibleContext) newValue);
}
}
} else {
System.out.println("ERROR in usage of PropertyChangeEvents for: " + e.toString());
}
}
}
}
}
/*
* workaround for no public AccessibleState constructor
*/
class _AccessibleState extends AccessibleState {
/**
* Indicates this object is responsible for managing its
* subcomponents. This is typically used for trees and tables
* that have a large number of subcomponents and where the
* objects are created only when needed and otherwise remain virtual.
* The application should not manage the subcomponents directly.
*/
public static final _AccessibleState MANAGES_DESCENDANTS
= new _AccessibleState ("managesDescendants");
/**
* Creates a new AccessibleState using the given locale independent key.
* This should not be a public method. Instead, it is used to create
* the constants in this file to make it a strongly typed enumeration.
* Subclasses of this class should enforce similar policy.
* <p>
* The key String should be a locale independent key for the state.
* It is not intended to be used as the actual String to display
* to the user. To get the localized string, use toDisplayString.
*
* @param key the locale independent name of the state.
* @see AccessibleBundle#toDisplayString
*/
protected _AccessibleState(String key) {
super(key);
}
}
/*
* Copyright (c) 2005, 2015, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility.util;
import java.util.*;
import java.beans.*;
import java.awt.*;
import java.awt.event.*;
import javax.accessibility.*;
/**
* <P>The {@code AccessibilityListenerList} is a copy of the Swing
* {@link javax.swing.event.EventListenerList EventListerList} class.
*
*/
@jdk.Exported
public class AccessibilityListenerList {
/* A null array to be shared by all empty listener lists */
private final static Object[] NULL_ARRAY = new Object[0];
/**
* The list of listener type, listener pairs
*/
protected transient Object[] listenerList = NULL_ARRAY;
/**
* Passes back the event listener list as an array of listener type, listener pairs.
* Note that for performance reasons, this implementation passes back the actual
* data structure in which the listener data is stored internally. This method
* is guaranteed to pass back a non-null array, so that no null-checking
* is required in fire methods. A zero-length array of Object is returned if
* there are currently no listeners.
* <p>
* Absolutely no modification of the data contained in this array should be
* made. If any such manipulation is necessary, it should be done on a copy
* of the array returned rather than the array itself.
*
* @return an array of listener type, listener pairs.
*/
public Object[] getListenerList() {
return listenerList;
}
/**
* Returns the total number of listeners for this listener list.
*
* @return the total number of listeners for this listener list.
*/
public int getListenerCount() {
return listenerList.length/2;
}
/**
* Return the total number of listeners of the supplied type
* for this listener list.
*
* @param t the type of the listener to be counted
* @return the number of listeners found
*/
public int getListenerCount(Class t) {
int count = 0;
Object[] lList = listenerList;
for (int i = 0; i < lList.length; i+=2) {
if (t == (Class)lList[i])
count++;
}
return count;
}
/**
* Add the listener as a listener of the specified type.
*
* @param t the type of the listener to be added
* @param l the listener to be added
*/
public synchronized void add(Class t, EventListener l) {
if (!t.isInstance(l)) {
throw new IllegalArgumentException("Listener " + l +
" is not of type " + t);
}
if (l ==null) {
throw new IllegalArgumentException("Listener " + l +
" is null");
}
if (listenerList == NULL_ARRAY) {
// if this is the first listener added,
// initialize the lists
listenerList = new Object[] { t, l };
} else {
// Otherwise copy the array and add the new listener
int i = listenerList.length;
Object[] tmp = new Object[i+2];
System.arraycopy(listenerList, 0, tmp, 0, i);
tmp[i] = t;
tmp[i+1] = l;
listenerList = tmp;
}
}
/**
* Remove the listener as a listener of the specified type.
*
* @param t the type of the listener to be removed
* @param l the listener to be removed
*/
public synchronized void remove(Class t, EventListener l) {
if (!t.isInstance(l)) {
throw new IllegalArgumentException("Listener " + l +
" is not of type " + t);
}
if (l ==null) {
throw new IllegalArgumentException("Listener " + l +
" is null");
}
// Is l on the list?
int index = -1;
for (int i = listenerList.length-2; i>=0; i-=2) {
if ((listenerList[i]==t) && (listenerList[i+1] == l)) {
index = i;
break;
}
}
// If so, remove it
if (index != -1) {
Object[] tmp = new Object[listenerList.length-2];
// Copy the list up to index
System.arraycopy(listenerList, 0, tmp, 0, index);
// Copy from two past the index, up to
// the end of tmp (which is two elements
// shorter than the old list)
if (index < tmp.length)
System.arraycopy(listenerList, index+2, tmp, index,
tmp.length - index);
// set the listener array to the new array or null
listenerList = (tmp.length == 0) ? NULL_ARRAY : tmp;
}
}
/**
* Return a string representation of the {@code AccessibilityListenerList}.
*
* @return a string representation of the {@code AccessibilityListenerList}.
*/
public String toString() {
Object[] lList = listenerList;
String s = "EventListenerList: ";
s += lList.length/2 + " listeners: ";
for (int i = 0 ; i <= lList.length-2 ; i+=2) {
s += " type " + ((Class)lList[i]).getName();
s += " listener " + lList[i+1];
}
return s;
}
}
/*
* Copyright (c) 2002, 2015, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility.util;
/**
* EventID contains integer constants that map to event support in
* AWT and Swing. They are used by primarily by AWTEventMonitor,
* AWTEventsListener, SwingEventMonitor, and SwingEventListener, but
* can be freely used by any other class.
*
* @see AWTEventMonitor
* @see SwingEventMonitor
*
*/
@jdk.Exported
public class EventID {
/**
* Maps to AWT Action support (i.e., ActionListener and ActionEvent)
*/
static public final int ACTION = 0;
/**
* Maps to AWT Adjustment support (i.e., AdjustmentListener
* and AdjustmentEvent)
*/
static public final int ADJUSTMENT = 1;
/**
* Maps to AWT Component support (i.e., ComponentListener
* and ComponentEvent)
*/
static public final int COMPONENT = 2;
/**
* Maps to AWT Container support (i.e., ContainerListener
* and ContainerEvent)
*/
static public final int CONTAINER = 3;
/**
* Maps to AWT Focus support (i.e., FocusListener and FocusEvent)
*/
static public final int FOCUS = 4;
/**
* Maps to AWT Item support (i.e., ItemListener and ItemEvent)
*/
static public final int ITEM = 5;
/**
* Maps to AWT Key support (i.e., KeyListener and KeyEvent)
*/
static public final int KEY = 6;
/**
* Maps to AWT Mouse support (i.e., MouseListener and MouseEvent)
*/
static public final int MOUSE = 7;
/**
* Maps to AWT MouseMotion support (i.e., MouseMotionListener
* and MouseMotionEvent)
*/
static public final int MOTION = 8;
/**
* Maps to AWT Text support (i.e., TextListener and TextEvent)
*/
static public final int TEXT = 10;
/**
* Maps to AWT Window support (i.e., WindowListener and WindowEvent)
*/
static public final int WINDOW = 11;
/**
* Maps to Swing Ancestor support (i.e., AncestorListener and
* AncestorEvent)
*/
static public final int ANCESTOR = 12;
/**
* Maps to Swing Text Caret support (i.e., CaretListener and
* CaretEvent)
*/
static public final int CARET = 13;
/**
* Maps to Swing CellEditor support (i.e., CellEditorListener and
* CellEditorEvent)
*/
static public final int CELLEDITOR = 14;
/**
* Maps to Swing Change support (i.e., ChangeListener and
* ChangeEvent)
*/
static public final int CHANGE = 15;
/**
* Maps to Swing TableColumnModel support (i.e.,
* TableColumnModelListener and TableColumnModelEvent)
*/
static public final int COLUMNMODEL = 16;
/**
* Maps to Swing Document support (i.e., DocumentListener and
* DocumentEvent)
*/
static public final int DOCUMENT = 17;
/**
* Maps to Swing ListData support (i.e., ListDataListener and
* ListDataEvent)
*/
static public final int LISTDATA = 18;
/**
* Maps to Swing ListSelection support (i.e., ListSelectionListener and
* ListSelectionEvent)
*/
static public final int LISTSELECTION = 19;
/**
* Maps to Swing Menu support (i.e., MenuListener and
* MenuEvent)
*/
static public final int MENU = 20;
/**
* Maps to Swing PopupMenu support (i.e., PopupMenuListener and
* PopupMenuEvent)
*/
static public final int POPUPMENU = 21;
/**
* Maps to Swing TableModel support (i.e., TableModelListener and
* TableModelEvent)
*/
static public final int TABLEMODEL = 22;
/**
* Maps to Swing TreeExpansion support (i.e., TreeExpansionListener and
* TreeExpansionEvent)
*/
static public final int TREEEXPANSION = 23;
/**
* Maps to Swing TreeModel support (i.e., TreeModelListener and
* TreeModelEvent)
*/
static public final int TREEMODEL = 24;
/**
* Maps to Swing TreeSelection support (i.e., TreeSelectionListener and
* TreeSelectionEvent)
*/
static public final int TREESELECTION = 25;
/**
* Maps to Swing UndoableEdit support (i.e., UndoableEditListener and
* UndoableEditEvent)
*/
static public final int UNDOABLEEDIT = 26;
/**
* Maps to Beans PropertyChange support (i.e., PropertyChangeListener
* and PropertyChangeEvent)
*/
static public final int PROPERTYCHANGE = 27;
/**
* Maps to Beans VetoableChange support (i.e., VetoableChangeListener
* and VetoableChangeEvent)
*/
static public final int VETOABLECHANGE = 28;
/**
* Maps to Swing InternalFrame support (i.e., InternalFrameListener)
*/
static public final int INTERNALFRAME = 29;
}
/*
* Copyright (c) 2002, 2015, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility.util;
import java.awt.*;
import java.util.*;
import javax.accessibility.*;
/**
* The {@code GUIInitializedListener} interface is used by the {@link EventQueueMonitor}
* class to notify an interested party when the GUI subsystem has been
* initialized. This is necessary because assistive technologies can
* be loaded before the GUI subsystem is initialized. As a result,
* assistive technologies should check the
* {@link EventQueueMonitor#isGUIInitialized isGUIInitialized} method
* of {@code EventQueueMonitor} before creating any GUI components. If the
* return value is true, assistive technologies can create GUI components
* following the same thread restrictions as any other application. If
* the return value is false, the assistive technology should register
* a {@code GUIInitializedListener} with the {@code EventQueueMonitor} to be notified
* when the GUI subsystem is initialized.
*
* @see EventQueueMonitor
* @see EventQueueMonitor#isGUIInitialized
* @see EventQueueMonitor#addGUIInitializedListener
* @see EventQueueMonitor#removeGUIInitializedListener
*
*/
@jdk.Exported
public interface GUIInitializedListener extends EventListener {
/**
* Invoked when the GUI subsystem is initialized and it's OK for
* the assisitive technology to create instances of GUI objects.
*/
public void guiInitialized();
}
/*
* Copyright (c) 2005, 2015, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility.util;
import java.awt.*;
import java.util.EventListener;
import javax.accessibility.*;
/**
* The GUIInitializedMulticaster class is used to maintain a list of
* GUIInitializedListener classes. It is intended to be used primarily
* for internal support in the EventQueueMonitor class, and is not intended
* to be used by classes outside the Java Accessibility Utility package.
*
* @see EventQueueMonitor
* @see EventQueueMonitor#addGUIInitializedListener
* @see EventQueueMonitor#removeGUIInitializedListener
*
*/
@jdk.Exported(false)
public class GUIInitializedMulticaster
extends AWTEventMulticaster implements GUIInitializedListener
{
protected GUIInitializedMulticaster(EventListener a, EventListener b) {
super(a, b);
}
public void guiInitialized() {
((GUIInitializedListener)a).guiInitialized();
((GUIInitializedListener)b).guiInitialized();
}
public static GUIInitializedListener add(GUIInitializedListener a, GUIInitializedListener b) {
return (GUIInitializedListener)addInternal(a, b);
}
public static GUIInitializedListener remove(GUIInitializedListener l, GUIInitializedListener oldl) {
return (GUIInitializedListener)removeInternal(l, oldl);
}
protected static EventListener addInternal(EventListener a, EventListener b) {
if (a == null) return b;
if (b == null) return a;
return new GUIInitializedMulticaster(a, b);
}
protected static EventListener removeInternal(EventListener l, EventListener oldl) {
if (l == oldl || l == null) {
return null;
} else if (l instanceof GUIInitializedMulticaster) {
return ((GUIInitializedMulticaster)l).remove(oldl);
} else {
return l; // it's not here
}
}
}
/*
* Copyright (c) 2002, 2015, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility.util;
import java.awt.*;
import java.util.*;
import javax.accessibility.*;
/**
* The {@code TopLevelWindowListener} interface is used by the {@link EventQueueMonitor}
* class to notify an interested party when a top level window is created
* or destroyed in the Java Virtual Machine. Classes wishing to express
* an interest in top level window events should implement this interface
* and register themselves with the {@code EventQueueMonitor} by calling the
* {@link EventQueueMonitor#addTopLevelWindowListener EventQueueMonitor.addTopLevelWindowListener}
* class method.
*
* @see EventQueueMonitor
* @see EventQueueMonitor#addTopLevelWindowListener
* @see EventQueueMonitor#removeTopLevelWindowListener
*
*/
@jdk.Exported
public interface TopLevelWindowListener extends EventListener {
/**
* Invoked when a new top level window has been created.
*
* @param w the Window that was created
*/
public void topLevelWindowCreated(Window w);
/**
* Invoked when a top level window has been destroyed.
*
* @param w the Window that was destroyed
*/
public void topLevelWindowDestroyed(Window w);
}
/*
* Copyright (c) 2005, 2015, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility.util;
import java.awt.*;
import java.util.EventListener;
import javax.accessibility.*;
/**
* The TopLevelWindowMulticaster class is used to maintain a list of
* TopLevelWindowListener classes. It is intended to be used primarily
* for internal support in the EventQueueMonitor class, and is not intended
* to be used by classes outside the Java Accessibility Utility package.
*
* @see EventQueueMonitor
* @see EventQueueMonitor#addTopLevelWindowListener
* @see EventQueueMonitor#removeTopLevelWindowListener
*
*/
@jdk.Exported(false)
public class TopLevelWindowMulticaster
extends AWTEventMulticaster implements TopLevelWindowListener
{
protected TopLevelWindowMulticaster(EventListener a, EventListener b) {
super(a, b);
}
public void topLevelWindowCreated(Window w) {
((TopLevelWindowListener)a).topLevelWindowCreated(w);
((TopLevelWindowListener)b).topLevelWindowCreated(w);
}
public void topLevelWindowDestroyed(Window w) {
((TopLevelWindowListener)a).topLevelWindowDestroyed(w);
((TopLevelWindowListener)b).topLevelWindowDestroyed(w);
}
public static TopLevelWindowListener add(TopLevelWindowListener a, TopLevelWindowListener b) {
return (TopLevelWindowListener)addInternal(a, b);
}
public static TopLevelWindowListener remove(TopLevelWindowListener l, TopLevelWindowListener oldl) {
return (TopLevelWindowListener)removeInternal(l, oldl);
}
protected static EventListener addInternal(EventListener a, EventListener b) {
if (a == null) return b;
if (b == null) return a;
return new TopLevelWindowMulticaster(a, b);
}
protected static EventListener removeInternal(EventListener l, EventListener oldl) {
if (l == oldl || l == null) {
return null;
} else if (l instanceof TopLevelWindowMulticaster) {
return ((TopLevelWindowMulticaster)l).remove(oldl);
} else {
return l; // it's not here
}
}
}
/*
* Copyright (c) 2002, 2012, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility.util.java.awt;
import java.lang.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import javax.accessibility.*;
import com.sun.java.accessibility.util.*;
/**
* <p>The Translator class provides a translation to interface Accessible
* for objects that do not implement interface Accessible. Assistive
* technologies can use the 'getAccessible' class method of Translator to
* obtain an object that implements interface Accessible. If the object
* passed in already implements interface Accessible, getAccessible merely
* returns the object.
*
* <p>An example of how an assistive technology might use the Translator
* class is as follows:
*
* <PRE>
* Accessible accessible = Translator.getAccessible(someObj);
* // obtain information from the 'accessible' object.
* </PRE>
*
* <P>This class extends the Translator class to provide specific support
* for the Button class. Translator.getAccessible() will automatically
* load this class when an assistive technology asks for an accessible
* translator for Button.
*
*/
public class ButtonTranslator extends Translator {
/**
* Get the name of this object.
* @return the name of the object -- can be null if this object does
* not have a name
*/
public String getAccessibleName() {
return ((Button) source).getLabel();
}
/**
* Set the name of this object.
*/
public void setAccessibleName(String s) {
((Button) source).setLabel(s);
}
public AccessibleRole getAccessibleRole() {
return AccessibleRole.PUSH_BUTTON;
}
}
/*
* Copyright (c) 2002, 2012, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility.util.java.awt;
import java.lang.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import javax.accessibility.*;
import com.sun.java.accessibility.util.*;
/**
* <p>The Translator class provides a translation to interface Accessible
* for objects that do not implement interface Accessible. Assistive
* technologies can use the 'getAccessible' class method of Translator to
* obtain an object that implements interface Accessible. If the object
* passed in already implements interface Accessible, getAccessible merely
* returns the object.
*
* <p>An example of how an assistive technology might use the Translator
* class is as follows:
*
* <PRE>
* Accessible accessible = Translator.getAccessible(someObj);
* // obtain information from the 'accessible' object.
* </PRE>
*
* <P>This class extends the Translator class to provide specific support
* for the Checkbox class. Translator.getAccessible() will automatically
* load this class when an assistive technology asks for an accessible
* translator for Checkbox.
*
*/
public class CheckboxTranslator extends Translator {
/**
* Get the state of this object.
* @return an instance of AccessibleState containing the current state of the object
* @see AccessibleState
*/
public AccessibleStateSet getAccessibleStateSet() {
AccessibleStateSet states = super.getAccessibleStateSet();
if (((Checkbox) source).getState()) {
states.add(AccessibleState.CHECKED);
}
return states;
}
/**
* Get the name of this object.
* @return the name of the object -- can be null if this object does
* not have a name
*/
public String getAccessibleName() {
return ((Checkbox) source).getLabel();
}
/**
* Set the name of this object.
*/
public void setAccessibleName(String s) {
((Checkbox) source).setLabel(s);
}
public AccessibleRole getAccessibleRole() {
return AccessibleRole.CHECK_BOX;
}
}
/*
* Copyright (c) 2002, 2012, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.java.accessibility.util.java.awt;
import java.lang.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import javax.accessibility.*;
import com.sun.java.accessibility.util.*;
/**
* <p>The Translator class provides a translation to interface Accessible
* for objects that do not implement interface Accessible. Assistive
* technologies can use the 'getAccessible' class method of Translator to
* obtain an object that implements interface Accessible. If the object
* passed in already implements interface Accessible, getAccessible merely
* returns the object.
*
* <p>An example of how an assistive technology might use the Translator
* class is as follows:
*
* <PRE>
* Accessible accessible = Translator.getAccessible(someObj);
* // obtain information from the 'accessible' object.
* </PRE>
*
* <P>This class extends the Translator class to provide specific support
* for the Choice class. Translator.getAccessible() will automatically
* load this class when an assistive technology asks for an accessible
* translator for Choice.
*
*/
public class ChoiceTranslator extends Translator {
/**
* Get the state of this object.
* @return an instance of AccessibleState containing the current state of the object
* @see AccessibleState
*/
public AccessibleStateSet getAccessibleStateSet() {
AccessibleStateSet states = super.getAccessibleStateSet();
states.add(AccessibleState.SELECTED);
return states;
}
public AccessibleRole getAccessibleRole() {
return AccessibleRole.CHOICE;
}
}
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
#
# Load the Java Access Bridge class into the JVM
#
#assistive_technologies=com.sun.java.accessibility.AccessBridge
#screen_magnifier_present=true
此差异已折叠。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
#define XSTR(x) STR(x)
#define STR(x) #x
1 /* CREATEPROCESS_MANIFEST_RESOURCE_ID */ 24 /* RT_MANIFEST */ XSTR(JAB_MANIFEST_EMBED)
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册